Skip to content

Commit

Permalink
Merge pull request #114 from cyb3rpsych0s1s/fix/chemicals
Browse files Browse the repository at this point in the history
Fix additional issues with cyberware
  • Loading branch information
Roms1383 authored Apr 11, 2024
2 parents 6e0f970 + e344fbc commit cb8fecb
Show file tree
Hide file tree
Showing 11 changed files with 118 additions and 67 deletions.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
48 changes: 27 additions & 21 deletions scripts/Addicted/Definitions.reds
Original file line number Diff line number Diff line change
Expand Up @@ -254,42 +254,41 @@ public class Consumptions {
}
/// symptoms for biomonitor
public func Symptoms() -> array<ref<Symptom>> {
let consumables: array<Consumable> = Consumables();
let symptoms: array<ref<Symptom>> = [];
let symptom: ref<Symptom>;
let consumption: ref<Consumption>;
let threshold: Threshold;
let keys = this.Items();
for key in keys {
consumption = this.Get(key);
if IsDefined(consumption) {
threshold = consumption.Threshold();
if Helper.IsSerious(threshold) {
symptom = new Symptom();
symptom.Title = Translations.Appellation(ItemID.GetTDBID(key));
symptom.Status = Translations.BiomonitorStatus(threshold);
ArrayPush(symptoms, symptom);
}
for consumable in consumables {
threshold = this.Threshold(consumable);
if Helper.IsSerious(threshold) {
symptom = new Symptom();
symptom.Title = Translations.Appellation(consumable);
symptom.Status = Translations.BiomonitorStatus(threshold);
ArrayPush(symptoms, symptom);
}
}
return symptoms;
}
/// chemicals for biomonitor
public func Chemicals() -> array<ref<Chemical>> {
let consumables = Consumables();
let chemicals: array<ref<Chemical>> = [];
let chemical: ref<Chemical>;
let consumption: ref<Consumption>;
let keys = this.Items();
let translations: array<CName>;
let threshold: Threshold;
let max: Int32 = 7;
let found: Int32 = 0;
for key in keys {
consumption = this.Get(key);
if IsDefined(consumption) {
threshold = consumption.Threshold();
if Helper.IsSerious(threshold) {
translations = Translations.ChemicalKey(Generic.Consumable(ItemID.GetTDBID(key)));
for translation in translations {
let duplicate: Bool;
// here logic is not accurate since you could end up with not the highest threshold
// for consumables which share the same chemicals composition
// but it's not really important in terms of gameplay
for consumable in consumables {
threshold = this.Threshold(consumable);
if Helper.IsSerious(threshold) {
translations = Translations.ChemicalKey(consumable);
for translation in translations {
duplicate = Contains(chemicals, translation);
if !duplicate {
chemical = new Chemical();
chemical.Key = translation;
chemical.From = (Cast<Float>(EnumInt(threshold)) / 2.0) + RandRangeF(-10.0, 10.0);
Expand All @@ -305,6 +304,13 @@ public class Consumptions {
}
}

public func Contains(chemicals: array<ref<Chemical>>, translation: CName) -> Bool {
for chemical in chemicals {
if Equals(chemical.Key, translation) { return true; }
}
return false;
}

public class Consumption {
public persistent let current: Int32;
public persistent let doses: array<Float>;
Expand Down
15 changes: 10 additions & 5 deletions scripts/Addicted/System.reds
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ public class AddictedSystem extends ScriptableSystem {
public let restingSince: Float;
private persistent let lastEnergized: Float;
private persistent let hasBiomonitorEquipped: Bool;
private persistent let hasDetoxifierEquipped: Bool;
private persistent let hasMetabolicEditorEquipped: Bool;
Expand All @@ -52,6 +51,15 @@ public class AddictedSystem extends ScriptableSystem {
private let updateSymtomsID: DelayID;
private let healingRechargeDurationModifier: ref<gameStatModifierData>;
private func RefreshStats(player: ref<PlayerPuppet>) -> Void {
let stats = GameInstance.GetStatsSystem(player.GetGame());
let soi = Cast<StatsObjectID>(player.GetEntityID());
this.hasDetoxifierEquipped = stats
.GetStatValue(soi, gamedataStatType.HasToxicCleanser) >= 1.0;
this.hasMetabolicEditorEquipped = stats
.GetStatValue(soi, gamedataStatType.HasMetabolicEnhancer) >= 1.0;
}
private func RegisterListeners(player: ref<PlayerPuppet>) -> Void {
this.stimulantManager = new StimulantManager();
this.stimulantManager.Register(player);
Expand Down Expand Up @@ -99,6 +107,7 @@ public class AddictedSystem extends ScriptableSystem {
callback.system = this;
this.updateSymtomsID = this.delaySystem.DelayCallback(callback, 600., true);
this.RefreshStats(this.player);
this.RegisterListeners(this.player);
this.RefreshConfig();
Expand Down Expand Up @@ -343,10 +352,6 @@ public class AddictedSystem extends ScriptableSystem {
}
}
public func OnBiomonitorChanged(hasBiomonitor: Bool) -> Void {
this.hasBiomonitorEquipped = hasBiomonitor;
}
public func OnDetoxifierChanged(hasDetoxifier: Bool) -> Void {
this.hasDetoxifierEquipped = hasDetoxifier;
}
Expand Down
14 changes: 0 additions & 14 deletions scripts/Addicted/Tweaks.reds
Original file line number Diff line number Diff line change
Expand Up @@ -297,11 +297,6 @@ private final func UnequipItem(itemID: ItemID) -> Void {
E(s"uninstalled by item id \(TDBID.ToStringDEBUG(ItemID.GetTDBID(itemID)))");
let id = ItemID.GetTDBID(itemID);
let player = this.m_owner as PlayerPuppet;
if IsDefined(player) && Generic.IsBiomonitor(id) {
let system = AddictedSystem.GetInstance(player.GetGame());
system.OnBiomonitorChanged(false);
return;
}
if IsDefined(player) && Items.IsDetoxifier(id) {
let system = AddictedSystem.GetInstance(player.GetGame());
system.OnDetoxifierChanged(false);
Expand All @@ -325,11 +320,6 @@ private final func UnequipItem(equipAreaIndex: Int32, opt slotIndex: Int32, opt
E(s"uninstalled by index(es) \(TDBID.ToStringDEBUG(ItemID.GetTDBID(itemID)))");
let id = ItemID.GetTDBID(itemID);
let player = this.m_owner as PlayerPuppet;
if IsDefined(player) && Generic.IsBiomonitor(id) {
let system = AddictedSystem.GetInstance(player.GetGame());
system.OnBiomonitorChanged(false);
return;
}
if IsDefined(player) && Items.IsDetoxifier(id) {
let system = AddictedSystem.GetInstance(player.GetGame());
system.OnDetoxifierChanged(false);
Expand All @@ -353,10 +343,6 @@ private final func EquipCyberware(itemData: wref<gameItemData>) -> Bool {
if cyberware && equipped {
E(s"installed \(TDBID.ToStringDEBUG(ItemID.GetTDBID(itemID)))");
let id = ItemID.GetTDBID(itemID);
if Generic.IsBiomonitor(id) {
let system = AddictedSystem.GetInstance(this.m_player.GetGame());
system.OnBiomonitorChanged(true);
}
if Items.IsDetoxifier(id) {
let system = AddictedSystem.GetInstance(this.m_player.GetGame());
system.OnDetoxifierChanged(true);
Expand Down
56 changes: 32 additions & 24 deletions scripts/Addicted/helpers/Translations.reds
Original file line number Diff line number Diff line change
Expand Up @@ -30,27 +30,30 @@ public class Translations {
return GetLocalizedTextByKey(n"Mod-Addicted-Biomonitor-Status-Threshold-Notably");
}
public static func Appellation(id: TweakDBID) -> String {
if Generic.IsMaxDOC(id) {
return GetLocalizedTextByKey(n"Mod-Addicted-Consumable-MaxDOC");
}
if Generic.IsBounceBack(id) {
return GetLocalizedTextByKey(n"Mod-Addicted-Consumable-BounceBack");
}
if Generic.IsHealthBooster(id) {
return GetLocalizedTextByKey(n"Mod-Addicted-Consumable-HealthBooster");
}
if Generic.IsBlackLace(id) {
return GetLocalizedTextByKey(n"Mod-Addicted-Consumable-BlackLace");
}
if Generic.IsStaminaBooster(id) {
return GetLocalizedTextByKey(n"Mod-Addicted-Consumable-StaminaBooster");
}
if Generic.IsCapacityBooster(id) {
return GetLocalizedTextByKey(n"Mod-Addicted-Consumable-CarryCapacityBooster");
}
if Generic.IsMemoryBooster(id) {
return GetLocalizedTextByKey(n"Mod-Addicted-Consumable-MemoryBooster");
public static func Appellation(consumable: Consumable) -> String {
switch consumable {
case Consumable.Alcohol:
return GetLocalizedTextByKey(n"Mod-Addicted-Consumable-Alcohol");
case Consumable.MaxDOC:
return GetLocalizedTextByKey(n"Mod-Addicted-Consumable-MaxDOC");
case Consumable.BounceBack:
return GetLocalizedTextByKey(n"Mod-Addicted-Consumable-BounceBack");
case Consumable.HealthBooster:
return GetLocalizedTextByKey(n"Mod-Addicted-Consumable-HealthBooster");
case Consumable.MemoryBooster:
return GetLocalizedTextByKey(n"Mod-Addicted-Consumable-MemoryBooster");
case Consumable.StaminaBooster:
return GetLocalizedTextByKey(n"Mod-Addicted-Consumable-StaminaBooster");
case Consumable.CarryCapacityBooster:
return GetLocalizedTextByKey(n"Mod-Addicted-Consumable-CarryCapacityBooster");
case Consumable.BlackLace:
return GetLocalizedTextByKey(n"Mod-Addicted-Consumable-BlackLace");
case Consumable.NeuroBlocker:
return GetLocalizedTextByKey(n"Mod-Addicted-Consumable-NeuroBlocker");
case Consumable.Tobacco:
return GetLocalizedTextByKey(n"Mod-Addicted-Consumable-Tobacco");
default:
break;
}
return GetLocalizedTextByKey(n"Mod-Addicted-Consumable-Unknown");
}
Expand All @@ -61,11 +64,11 @@ public class Translations {
case Consumable.Alcohol:
return [n"Mod-Addicted-Chemical-Ethanol"];
case Consumable.MaxDOC:
return [];
return [n"Mod-Addicted-Chemical-Epinephrine", n"Mod-Addicted-Chemical-Paracetamol", n"Mod-Addicted-Chemical-Nanites"];
case Consumable.BounceBack:
return [];
return [n"Mod-Addicted-Chemical-Epinephrine", n"Mod-Addicted-Chemical-Paracetamol", n"Mod-Addicted-Chemical-Nanites"];
case Consumable.HealthBooster:
return [];
return [n"Mod-Addicted-Chemical-Epinephrine", n"Mod-Addicted-Chemical-Paracetamol", n"Mod-Addicted-Chemical-Nanites"];
case Consumable.MemoryBooster:
return [n"Mod-Addicted-Chemical-Benzedrine", n"Mod-Addicted-Chemical-Modafinil"];
case Consumable.OxyBooster:
Expand All @@ -78,6 +81,11 @@ public class Translations {
return [n"Mod-Addicted-Chemical-Testosterone", n"Mod-Addicted-Chemical-Oxandrin"];
case Consumable.Tobacco:
return [n"Mod-Addicted-Chemical-Nicotine"];
case Consumable.NeuroBlocker:
return [n"Mod-Addicted-Chemical-Prazosin", n"Mod-Addicted-Chemical-Brevibloc", n"Mod-Addicted-Chemical-Lopressor"];
default:
break;
}
return [];
}
}
52 changes: 49 additions & 3 deletions scripts/Addicted/ui/BiomonitorController.reds
Original file line number Diff line number Diff line change
Expand Up @@ -113,21 +113,36 @@ public class BiomonitorController extends inkGameController {
private let insurance: ref<inkText>;
private let chemicals: array<ref<inkText>>;
private let vitals: array<array<ref<inkWidget>>>;
private let parentheses: array<array<ref<inkText>>>;
private let hydroxyzine: ref<inkText>;
private let hydroxyzineValue: ref<inkText>;
private let hydroxyzineLeftParen: ref<inkText>;
private let hydroxyzineRightParen: ref<inkText>;
private let tramadol: ref<inkText>;
private let tramadolValue: ref<inkText>;
private let tramadolLeftParen: ref<inkText>;
private let tramadolRightParen: ref<inkText>;
private let desvenlafaxine: ref<inkText>;
private let desvenlafaxineValue: ref<inkText>;
private let desvenlafaxineLeftParen: ref<inkText>;
private let desvenlafaxineRightParen: ref<inkText>;
private let amoxapine: ref<inkText>;
private let amoxapineValue: ref<inkText>;
private let amoxapineLeftParen: ref<inkText>;
private let amoxapineRightParen: ref<inkText>;
private let lactobacillius: ref<inkText>;
private let lactobacilliusValue: ref<inkText>;
private let lactobacilliusLeftParen: ref<inkText>;
private let lactobacilliusRightParen: ref<inkText>;
private let acetaminofen: ref<inkText>;
private let acetaminofenValue: ref<inkText>;
private let acetaminofenLeftParen: ref<inkText>;
private let acetaminofenRightParen: ref<inkText>;
private let bupropion: ref<inkText>;
private let bupropionValue: ref<inkText>;
private let bupropionLeftParen: ref<inkText>;
private let bupropionRightParen: ref<inkText>;
private let postpone: DelayID;
private let beep: DelayID;
Expand Down Expand Up @@ -172,18 +187,32 @@ public class BiomonitorController extends inkGameController {
// defined individually because widgets path are kind of a mess
this.hydroxyzine = topLine.GetWidget(n"Info_N_HYDROXYZINE_text") as inkText;
this.hydroxyzineValue = topLine.GetWidget(n"inkHorizontalPanelWidget2/170/Info_170_text") as inkText;
this.hydroxyzineLeftParen = topLine.GetWidget(n"inkHorizontalPanelWidget2/170/Info_(_text") as inkText;
this.hydroxyzineRightParen = topLine.GetWidget(n"inkHorizontalPanelWidget2/170/Info_)_text") as inkText;
this.tramadol = topLine.GetWidget(n"Info_TR2_TRAMADOL_Text") as inkText;
this.tramadolValue = topLine.GetWidget(n"inkHorizontalPanelWidget3/720/Info_TR2_TRAMADOL_Text") as inkText;
this.tramadolLeftParen = topLine.GetWidget(n"inkHorizontalPanelWidget3/720/Info_(_text") as inkText;
this.tramadolRightParen = topLine.GetWidget(n"inkHorizontalPanelWidget3/720/Info_)_text") as inkText;
this.desvenlafaxine = topLine.GetWidget(n"Info_DESVENLAFAXINE_Text") as inkText;
this.desvenlafaxineValue = topLine.GetWidget(n"inkHorizontalPanelWidget4/300/Info_DESVENLAFAXINE_Text") as inkText;
this.desvenlafaxineLeftParen = topLine.GetWidget(n"inkHorizontalPanelWidget4/300/Info_(_text") as inkText;
this.desvenlafaxineRightParen = topLine.GetWidget(n"inkHorizontalPanelWidget4/300/Info_)_text") as inkText;
this.amoxapine = middleLine.GetWidget(n"Info_AMOXAPINE_Text") as inkText;
this.amoxapineValue = middleLine.GetWidget(n"inkHorizontalPanelWidget5/220/Info_AMOXAPINE_Text") as inkText;
this.amoxapineLeftParen = middleLine.GetWidget(n"inkHorizontalPanelWidget5/220/Info_(_text") as inkText;
this.amoxapineRightParen = middleLine.GetWidget(n"inkHorizontalPanelWidget5/220/Info_)_text") as inkText;
this.lactobacillius = middleLine.GetWidget(n"Info_R7_LACTOBACILLIUS_Text") as inkText;
this.lactobacilliusValue = middleLine.GetWidget(n"inkHorizontalPanelWidget6/400/Info_R7_LACTOBACILLIUS_Text") as inkText;
this.lactobacilliusLeftParen = middleLine.GetWidget(n"inkHorizontalPanelWidget6/400/Info_(_text") as inkText;
this.lactobacilliusRightParen = middleLine.GetWidget(n"inkHorizontalPanelWidget6/400/Info_)_text") as inkText;
this.acetaminofen = middleLine.GetWidget(n"Info_ACETAMINOFEN_Text") as inkText;
this.acetaminofenValue = middleLine.GetWidget(n"inkHorizontalPanelWidget7/250/Info_ACETAMINOFEN_Text") as inkText;
this.acetaminofenLeftParen = middleLine.GetWidget(n"inkHorizontalPanelWidget7/250/Info_(_text") as inkText;
this.acetaminofenRightParen = middleLine.GetWidget(n"inkHorizontalPanelWidget7/250/Info_)_text") as inkText;
this.bupropion = bottomLine.GetWidget(n"Info_BUPROPION_Text") as inkText;
this.bupropionValue = bottomLine.GetWidget(n"inkHorizontalPanelWidget5/Info_BUPROPION_Text") as inkText;
this.bupropionLeftParen = bottomLine.GetWidget(n"inkHorizontalPanelWidget5/Info_(_text") as inkText;
this.bupropionRightParen = bottomLine.GetWidget(n"inkHorizontalPanelWidget5/Info_)_text") as inkText;
this.chemicals = [];
ArrayPush(this.chemicals, this.hydroxyzine);
Expand All @@ -201,6 +230,15 @@ public class BiomonitorController extends inkGameController {
ArrayPush(this.chemicals, this.bupropion);
ArrayPush(this.chemicals, this.bupropionValue);
this.parentheses = [];
ArrayPush(this.parentheses, [this.hydroxyzineLeftParen, this.hydroxyzineRightParen]);
ArrayPush(this.parentheses, [this.tramadolLeftParen, this.tramadolRightParen]);
ArrayPush(this.parentheses, [this.desvenlafaxineLeftParen, this.desvenlafaxineRightParen]);
ArrayPush(this.parentheses, [this.amoxapineLeftParen, this.amoxapineRightParen]);
ArrayPush(this.parentheses, [this.lactobacilliusLeftParen, this.lactobacilliusRightParen]);
ArrayPush(this.parentheses, [this.acetaminofenLeftParen, this.acetaminofenRightParen]);
ArrayPush(this.parentheses, [this.bupropionLeftParen, this.bupropionRightParen]);
let row: array<ref<inkWidget>>;
let summary = infos.GetWidget(n"Critical_Screen_Text_Canvas/inkVerticalPanelWidget7/inkHorizontalPanelWidget2") as inkHorizontalPanel;
Expand Down Expand Up @@ -410,6 +448,7 @@ public class BiomonitorController extends inkGameController {
let substance: ref<inkText>;
let value: ref<inkText>;
let controller: ref<inkTextValueProgressController>;
let pair: array<ref<inkText>>;
while current < 7 {
substance = this.chemicals[current*2];
Expand All @@ -418,13 +457,20 @@ public class BiomonitorController extends inkGameController {
if current < found {
chemical = chemicals[current];
substance.SetVisible(true);
value.SetVisible(true);
pair = this.parentheses[current];
pair[0].SetVisible(true);
pair[1].SetVisible(true);
substance.SetLocalizationKey(chemical.Key);
controller.SetBaseValue(chemical.From);
controller.SetTargetValue(chemical.To);
} else {
substance.SetLocalizationKey(n"Mod-Addicted-Chemical-Irrelevant");
controller.SetBaseValue(0.0);
controller.SetTargetValue(0.0);
substance.SetVisible(false);
value.SetVisible(false);
pair = this.parentheses[current];
pair[0].SetVisible(false);
pair[1].SetVisible(false);
}
current += 1;
Expand Down

0 comments on commit cb8fecb

Please sign in to comment.