diff --git a/DXRBalance/DeusEx/Classes/AugAqualung.uc b/DXRBalance/DeusEx/Classes/AugAqualung.uc index b5cc4260b..c700f39ca 100644 --- a/DXRBalance/DeusEx/Classes/AugAqualung.uc +++ b/DXRBalance/DeusEx/Classes/AugAqualung.uc @@ -3,7 +3,10 @@ class DXRAugAqualung injects AugAqualung; function PostPostBeginPlay() { Super.PostPostBeginPlay(); - // description gets overwritten by language file + // description gets overwritten by language file, also DXRAugmentations reads from the default.Description + // use the vanilla Level 3 description for our max level even though we're using level 4 strength, because the level 4 description makes no sense + default.Description = "Soda lime exostructures imbedded in the alveoli of the lungs convert CO2 to O2, extending the time an agent can remain underwater." + $ "|n|nTECH ONE: Lung capacity is extended moderately.|n|nTECH TWO: Lung capacity is extended significantly."; Description = default.Description; } @@ -24,7 +27,6 @@ defaultproperties AutoLength=0 AutoEnergyMult=1// no penalty, it's a gift MaxLevel=1 - Description="Soda lime exostructures imbedded in the alveoli of the lungs convert CO2 to O2, extending the time an agent can remain underwater.|n|nTECH ONE: Lung capacity is extended moderately.|n|nTECH TWO: An agent can stay underwater indefinitely." LevelValues(0)=60.000000 LevelValues(1)=240.000000 } diff --git a/DXRBalance/DeusEx/Classes/AugMuscle.uc b/DXRBalance/DeusEx/Classes/AugMuscle.uc index d93f366d1..8accd3fd6 100644 --- a/DXRBalance/DeusEx/Classes/AugMuscle.uc +++ b/DXRBalance/DeusEx/Classes/AugMuscle.uc @@ -3,14 +3,15 @@ class DXRAugMuscle injects AugMuscle; function PostPostBeginPlay() { Super.PostPostBeginPlay(); - // description gets overwritten by language file + // description gets overwritten by language file, also DXRAugmentations reads from the default.Description + default.Description = "Muscle strength is amplified with ionic polymeric gel myofibrils that allow the agent to push and lift extraordinarily heavy objects." + $ "|n|nTECH ONE: Strength is increased slightly.|n|nTECH TWO: An agent is inhumanly strong."; Description = default.Description; } defaultproperties { MaxLevel=1 - Description="Muscle strength is amplified with ionic polymeric gel myofibrils that allow the agent to push and lift extraordinarily heavy objects.|n|nTECH ONE: Strength is increased slightly.|n|nTECH TWO: An agent is inhumanly strong." LevelValues(0)=1.25 LevelValues(1)=2.0 } diff --git a/DXRBalance/DeusEx/Classes/AugTarget.uc b/DXRBalance/DeusEx/Classes/AugTarget.uc index b09a6d773..9e19690ba 100644 --- a/DXRBalance/DeusEx/Classes/AugTarget.uc +++ b/DXRBalance/DeusEx/Classes/AugTarget.uc @@ -4,8 +4,8 @@ simulated function TickUse() { if(DeusExRootWindow(Player.rootWindow).winCount > 0) return; // don't tick while reading item descriptions - if (Player.inHand!=None && DeusExWeapon(Player.inHand)!=None && DeusExWeapon(Player.inHand).bHandToHand && (DeusExWeapon(Player.inHand).ProjectileClass == None)){ - return; // don't tick for melee + if (Player.inHand!=None && DeusExWeapon(Player.inHand)!=None){ + return; // don't tick unless you're holding a weapon } Super.TickUse(); SetTargetingAugStatus(CurrentLevel, bIsActive);// we're enabled diff --git a/DXRBalance/DeusEx/Classes/BalanceAugHealing.uc b/DXRBalance/DeusEx/Classes/BalanceAugHealing.uc index f79e4cd32..4dd3192c3 100644 --- a/DXRBalance/DeusEx/Classes/BalanceAugHealing.uc +++ b/DXRBalance/DeusEx/Classes/BalanceAugHealing.uc @@ -1,6 +1,18 @@ class BalanceAugHealing injects AugHealing; -//DXR: put a cap on the health that regen gives you +function PostPostBeginPlay() +{ + Super.PostPostBeginPlay(); + // description gets overwritten by language file, also DXRAugmentations reads from the default.Description + default.Description = "Programmable polymerase automatically directs construction of proteins in injured cells, restoring an agent's health over time." + $ "|n|nTECH ONE: Healing only fixes serious injuries." + $ "|n|nTECH TWO: Healing fixes moderate injuries." + $ "|n|nTECH THREE: Healing fixes most injuries." + $ "|n|nTECH FOUR: Healing restores the agent to nearly full health."; + Description = default.Description; +} + +//DXRando: put a cap on the health that regen gives you state Active { Begin: diff --git a/DXRBalance/DeusEx/Classes/BalanceAugSpeed.uc b/DXRBalance/DeusEx/Classes/BalanceAugSpeed.uc index 65727db33..f9beae523 100644 --- a/DXRBalance/DeusEx/Classes/BalanceAugSpeed.uc +++ b/DXRBalance/DeusEx/Classes/BalanceAugSpeed.uc @@ -24,7 +24,6 @@ Begin: defaultproperties { EnergyRate=40 - Description="Ionic polymeric gel myofibrils are woven into the leg muscles, increasing the speed at which an agent can run and climb, the height they can jump, and reducing the damage they receive from falls.|n|nTECH ONE: Speed and jumping are increased slightly, while falling damage is reduced.|n|nTECH TWO: Speed and jumping are increased moderately, while falling damage is further reduced.|n|nTECH THREE: Speed and jumping are increased significantly, while falling damage is substantially reduced.|n|nTECH FOUR: An agent can run like the wind and leap from the tallest building." LevelValues(0)=1.2 LevelValues(1)=1.35 LevelValues(2)=1.5 diff --git a/DXRBalance/DeusEx/Classes/SkillComputer.uc b/DXRBalance/DeusEx/Classes/SkillComputer.uc index 42c03b5f9..0ec1fa68b 100644 --- a/DXRBalance/DeusEx/Classes/SkillComputer.uc +++ b/DXRBalance/DeusEx/Classes/SkillComputer.uc @@ -1,5 +1,6 @@ class SkillComputer injects SkillComputer; +// vanilla is 1, 1, 2, 4 defaultproperties { LevelValues(0)=0.8 diff --git a/DXRCore/DeusEx/Classes/DXRActorsBase.uc b/DXRCore/DeusEx/Classes/DXRActorsBase.uc index d76478a02..1249b81b9 100644 --- a/DXRCore/DeusEx/Classes/DXRActorsBase.uc +++ b/DXRCore/DeusEx/Classes/DXRActorsBase.uc @@ -356,6 +356,7 @@ static function ThrowItem(Inventory item, float VelocityMult) // kinda copied from DeusExPlayer DropItem function item.Velocity = rot * 300 + vect(0,0,220) + VRand()*32; item.Velocity *= VelocityMult; + item.SetCollision(true, false, false); // prevent this from blocking NPCs } function Inventory MoveNextItemTo(Inventory item, vector Location, name Tag) diff --git a/DXRCore/DeusEx/Classes/DXRVersion.uc b/DXRCore/DeusEx/Classes/DXRVersion.uc index 29305a2d4..0de683620 100644 --- a/DXRCore/DeusEx/Classes/DXRVersion.uc +++ b/DXRCore/DeusEx/Classes/DXRVersion.uc @@ -5,7 +5,7 @@ simulated static function CurrentVersion(optional out int major, optional out in major=2; minor=6; patch=3; - build=3;//build can't be higher than 99 + build=4;//build can't be higher than 99 } simulated static function bool VersionIsStable() diff --git a/DXRFixes/DeusEx/Classes/HUDHitDisplay.uc b/DXRFixes/DeusEx/Classes/HUDHitDisplay.uc index 100c9c459..d0dc78926 100644 --- a/DXRFixes/DeusEx/Classes/HUDHitDisplay.uc +++ b/DXRFixes/DeusEx/Classes/HUDHitDisplay.uc @@ -3,5 +3,10 @@ class DXRHUDHitDisplay merges HUDHitDisplay; function SetHitColor(out BodyPart part, float deltaSeconds, bool bHide, int hitValue) { deltaSeconds = FClamp(deltaSeconds, 0, 0.05); // limit delta, so numbers don't go crazy + + // if going from dead to alive, immediately put the body part at 1 health so it draws red right away, great for drinking alcohol when it would take multiple seconds to fade from 0 health to 1 health + if(hitValue > 0 && part.displayedHealth <= 0) { + part.displayedHealth = 1; + } _SetHitColor(part, deltaSeconds, bHide, hitValue); } diff --git a/DXRMapFixups/DeusEx/Classes/DXRFixupM00.uc b/DXRMapFixups/DeusEx/Classes/DXRFixupM00.uc index 27d0c8b77..f501beb78 100644 --- a/DXRMapFixups/DeusEx/Classes/DXRFixupM00.uc +++ b/DXRMapFixups/DeusEx/Classes/DXRFixupM00.uc @@ -108,6 +108,8 @@ function PostFirstEntryMapFixes() { local Actor a; + if(dxr.flags.IsZeroRando()) return; + switch(dxr.localURL) { case "00_TrainingFinal": Spawn(class'#var(prefix)BallisticArmor',,, GetRandomPositionFine()); diff --git a/DXRMapFixups/DeusEx/Classes/DXRFixupM02.uc b/DXRMapFixups/DeusEx/Classes/DXRFixupM02.uc index eec4fba53..c24faadf4 100644 --- a/DXRMapFixups/DeusEx/Classes/DXRFixupM02.uc +++ b/DXRMapFixups/DeusEx/Classes/DXRFixupM02.uc @@ -63,11 +63,13 @@ function PreFirstEntryMapFixes() foreach AllActors(class'Terrorist',nsf,'ShantyTerrorist'){ nsf.Tag = 'ShantyTerrorists'; //Restores voice lines when NSF still alive (still hard to have happen though) } - k = Spawn(class'#var(prefix)NanoKey',,, vectm(1574.209839, -238.380142, 339.215179)); - k.KeyID = 'ControlRoomDoor'; - k.Description = "Control Room Door Key"; - if(dxr.flags.settings.keysrando > 0) - GlowUp(k); + if(!dxr.flags.IsZeroRando()) { + k = Spawn(class'#var(prefix)NanoKey',,, vectm(1574.209839, -238.380142, 339.215179)); + k.KeyID = 'ControlRoomDoor'; + k.Description = "Control Room Door Key"; + if(dxr.flags.settings.keysrando > 0) + GlowUp(k); + } fg=Spawn(class'#var(prefix)FishGenerator',,, vectm(-1274,-3892,177));//Near Boat dock fg.ActiveArea=2000; @@ -289,13 +291,15 @@ function PostFirstEntryMapFixes() AddBox(class'#var(prefix)CrateUnbreakableSmall', vectm(-328.287048, 767.875000, 1072.113770)); } - // this map is too hard - Spawn(class'#var(prefix)AdaptiveArmor',,, GetRandomPositionFine()); - Spawn(class'#var(prefix)AdaptiveArmor',,, GetRandomPositionFine()); - Spawn(class'#var(prefix)BallisticArmor',,, GetRandomPositionFine()); - Spawn(class'#var(prefix)BallisticArmor',,, GetRandomPositionFine()); - Spawn(class'#var(prefix)FireExtinguisher',,, GetRandomPositionFine()); - Spawn(class'#var(prefix)FireExtinguisher',,, GetRandomPositionFine()); + if(!dxr.flags.IsZeroRando()) { + // this map is too hard + Spawn(class'#var(prefix)AdaptiveArmor',,, GetRandomPositionFine()); + Spawn(class'#var(prefix)AdaptiveArmor',,, GetRandomPositionFine()); + Spawn(class'#var(prefix)BallisticArmor',,, GetRandomPositionFine()); + Spawn(class'#var(prefix)BallisticArmor',,, GetRandomPositionFine()); + Spawn(class'#var(prefix)FireExtinguisher',,, GetRandomPositionFine()); + Spawn(class'#var(prefix)FireExtinguisher',,, GetRandomPositionFine()); + } break; } diff --git a/DXRMapFixups/DeusEx/Classes/DXRFixupM03.uc b/DXRMapFixups/DeusEx/Classes/DXRFixupM03.uc index bfe395e14..1c762c481 100644 --- a/DXRMapFixups/DeusEx/Classes/DXRFixupM03.uc +++ b/DXRMapFixups/DeusEx/Classes/DXRFixupM03.uc @@ -159,8 +159,10 @@ function PreFirstEntryMapFixes() a = AddActor(class'DynamicBlockPlayer', vect(-3065,-405,-130)); SetActorScale(a, 1.3); - //rebreather because of #TOOCEAN connection - Spawn(class'Rebreather',,, vectm(1411.798950, 546.628845, 247.708572)); + if(!dxr.flags.IsZeroRando()) { + //rebreather because of #TOOCEAN connection + Spawn(class'Rebreather',,, vectm(1411.798950, 546.628845, 247.708572)); + } //Button to extend sewer platform from the other side AddSwitch( vect(-5233.946289,3601.383545,161.851822), rot(0, 16384, 0), 'MoveableBridge'); @@ -180,8 +182,11 @@ function PreFirstEntryMapFixes() break; case "03_NYC_AIRFIELD": - //rebreather because of #TOOCEAN connection - Spawn(class'Rebreather',,, vectm(-2031.959473, 995.781067, 75.709816)); + if(!dxr.flags.IsZeroRando()) { + //rebreather because of #TOOCEAN connection + Spawn(class'Rebreather',,, vectm(-2031.959473, 995.781067, 75.709816)); + } + // extra spots for datacube Spawn(class'PlaceholderItem',,, vectm(5113,3615,1.3)); //In front of guard tower Spawn(class'PlaceholderItem',,, vectm(3111,3218,275)); //Bathroom counter @@ -299,11 +304,13 @@ function PreFirstEntryMapFixes() } } - k = Spawn(class'#var(prefix)NanoKey',,, vectm(965,900,-28)); - k.KeyID = 'JaimeClosetKey'; - k.Description = "MedLab Closet Key Code"; - if(dxr.flags.settings.keysrando > 0) - GlowUp(k); + if(!dxr.flags.IsZeroRando()) { + k = Spawn(class'#var(prefix)NanoKey',,, vectm(965,900,-28)); + k.KeyID = 'JaimeClosetKey'; + k.Description = "MedLab Closet Key Code"; + if(dxr.flags.settings.keysrando > 0) + GlowUp(k); + } //Spawn some placeholders for new item locations Spawn(class'PlaceholderItem',,, vectm(363.284149, 344.847, 50.32)); //Womens bathroom counter @@ -381,6 +388,8 @@ function FixAnnaAmbush() local #var(prefix)AnnaNavarre anna; local #var(prefix)ThrownProjectile p; + if(dxr.flags.IsZeroRando()) return; + foreach AllActors(class'#var(prefix)AnnaNavarre', anna) {break;} // if she's angry then let her blow up diff --git a/DXRMapFixups/DeusEx/Classes/DXRFixupM04.uc b/DXRMapFixups/DeusEx/Classes/DXRFixupM04.uc index b6c8663a6..a39a74a0a 100644 --- a/DXRMapFixups/DeusEx/Classes/DXRFixupM04.uc +++ b/DXRMapFixups/DeusEx/Classes/DXRFixupM04.uc @@ -82,19 +82,22 @@ function PreFirstEntryMapFixes() if (VanillaMaps){ Spawn(class'#var(prefix)Binoculars',,, vectm(-610.374573,-3221.998779,94.160065)); //Paul's bedside table - key = Spawn(class'#var(prefix)NanoKey',,, vectm(-967,-1240,-74)); - key.KeyID = 'CrackRoom'; - key.Description = "'Ton Hotel, North Room Key"; - if(dxr.flags.settings.keysrando > 0) - GlowUp(key); - - key = Spawn(class'#var(prefix)NanoKey',,, vectm(-845,-2920,180)); - key.KeyID = 'Apartment'; - key.Description = "Apartment key"; - if(dxr.flags.settings.keysrando > 0) - GlowUp(key); + if(!dxr.flags.IsZeroRando()) { + key = Spawn(class'#var(prefix)NanoKey',,, vectm(-967,-1240,-74)); + key.KeyID = 'CrackRoom'; + key.Description = "'Ton Hotel, North Room Key"; + if(dxr.flags.settings.keysrando > 0) + GlowUp(key); + + key = Spawn(class'#var(prefix)NanoKey',,, vectm(-845,-2920,180)); + key.KeyID = 'Apartment'; + key.Description = "Apartment key"; + if(dxr.flags.settings.keysrando > 0) + GlowUp(key); + + SpawnDatacubeTextTag(vectm(-840,-2920,85), rotm(0,0,0), '02_Datacube07',False); //Paul's stash code, in closet + } - SpawnDatacubeTextTag(vectm(-840,-2920,85), rotm(0,0,0), '02_Datacube07',False); //Paul's stash code, in closet Spawn(class'PlaceholderItem',,, vectm(-732,-2628,75)); //Actual closet Spawn(class'PlaceholderItem',,, vectm(-732,-2712,75)); //Actual closet Spawn(class'PlaceholderItem',,, vectm(-129,-3038,127)); //Bathroom counter @@ -222,11 +225,13 @@ function PreFirstEntryMapFixes() FixUNATCOCarterCloset(); FixAlexsEmail(); - key = Spawn(class'#var(prefix)NanoKey',,, vectm(965,900,-28)); - key.KeyID = 'JaimeClosetKey'; - key.Description = "MedLab Closet Key Code"; - if(dxr.flags.settings.keysrando > 0) - GlowUp(key); + if(!dxr.flags.IsZeroRando()) { + key = Spawn(class'#var(prefix)NanoKey',,, vectm(965,900,-28)); + key.KeyID = 'JaimeClosetKey'; + key.Description = "MedLab Closet Key Code"; + if(dxr.flags.settings.keysrando > 0) + GlowUp(key); + } //Spawn some placeholders for new item locations Spawn(class'PlaceholderItem',,, vectm(363.284149, 344.847, 50.32)); //Womens bathroom counter diff --git a/DXRMapFixups/DeusEx/Classes/DXRFixupM05.uc b/DXRMapFixups/DeusEx/Classes/DXRFixupM05.uc index 5cecfcf7d..a2d5eb45a 100644 --- a/DXRMapFixups/DeusEx/Classes/DXRFixupM05.uc +++ b/DXRMapFixups/DeusEx/Classes/DXRFixupM05.uc @@ -17,8 +17,7 @@ function CheckConfig() function PartialHeal(out int health, int d) { - health = Max(d/2, health);// half default health, or keep current health - health = Min(health, d);// cap at the default + health = Clamp(health, d/2, d); } function PreFirstEntryMapFixes() @@ -128,17 +127,19 @@ function PreFirstEntryMapFixes() RemoveFears(j); } - k = Spawn(class'#var(prefix)NanoKey',,, vectm(420,195,333)); - k.KeyID = 'UNOfficeDoorKey'; - k.Description = "UNATCO Office Door Key"; - if(dxr.flags.settings.keysrando > 0) - GlowUp(k); - - k = Spawn(class'#var(prefix)NanoKey',,, vectm(965,900,-28)); - k.KeyID = 'JaimeClosetKey'; - k.Description = "MedLab Closet Key Code"; - if(dxr.flags.settings.keysrando > 0) - GlowUp(k); + if(!dxr.flags.IsZeroRando()) { + k = Spawn(class'#var(prefix)NanoKey',,, vectm(420,195,333)); + k.KeyID = 'UNOfficeDoorKey'; + k.Description = "UNATCO Office Door Key"; + if(dxr.flags.settings.keysrando > 0) + GlowUp(k); + + k = Spawn(class'#var(prefix)NanoKey',,, vectm(965,900,-28)); + k.KeyID = 'JaimeClosetKey'; + k.Description = "MedLab Closet Key Code"; + if(dxr.flags.settings.keysrando > 0) + GlowUp(k); + } //Spawn some placeholders for new item locations Spawn(class'PlaceholderItem',,, vectm(363.284149, 344.847, 50.32)); //Womens bathroom counter diff --git a/DXRMapFixups/DeusEx/Classes/DXRFixupM06.uc b/DXRMapFixups/DeusEx/Classes/DXRFixupM06.uc index 4ff5b1a96..4a4ccebb2 100644 --- a/DXRMapFixups/DeusEx/Classes/DXRFixupM06.uc +++ b/DXRMapFixups/DeusEx/Classes/DXRFixupM06.uc @@ -296,8 +296,10 @@ function PreFirstEntryMapFixes() //The other ones are tagged as Dogs if (Tag=='Greasel'){ g.BindName="JerryTheVentGreasel"; - g.FamiliarName = "Jerry the Vent Greasel"; - g.UnfamiliarName = "Jerry the Vent Greasel"; + if(!dxr.flags.IsReducedRando()) { + g.FamiliarName = "Jerry the Vent Greasel"; + g.UnfamiliarName = "Jerry the Vent Greasel"; + } } } diff --git a/DXRMapFixups/DeusEx/Classes/DXRFixupM08.uc b/DXRMapFixups/DeusEx/Classes/DXRFixupM08.uc index e11034245..16560c518 100644 --- a/DXRMapFixups/DeusEx/Classes/DXRFixupM08.uc +++ b/DXRMapFixups/DeusEx/Classes/DXRFixupM08.uc @@ -196,20 +196,22 @@ function PreFirstEntryMapFixes() case "08_NYC_HOTEL": if (VanillaMaps){ Spawn(class'#var(prefix)Binoculars',,, vectm(-610.374573,-3221.998779,94.160065)); //Paul's bedside table - SpawnDatacubeTextTag(vectm(-840,-2920,85), rotm(0,0,0), '02_Datacube07',False); //Paul's stash code, in closet - k = Spawn(class'#var(prefix)NanoKey',,, vectm(-967,-1240,-74)); - k.KeyID = 'CrackRoom'; - k.Description = "'Ton Hotel, North Room Key"; - if(dxr.flags.settings.keysrando > 0) - GlowUp(k); + if(!dxr.flags.IsZeroRando()) { + SpawnDatacubeTextTag(vectm(-840,-2920,85), rotm(0,0,0), '02_Datacube07',False); //Paul's stash code, in closet - k = Spawn(class'#var(prefix)NanoKey',,, vectm(-845,-2920,180)); - k.KeyID = 'Apartment'; - k.Description = "Apartment key"; - if(dxr.flags.settings.keysrando > 0) - GlowUp(k); + k = Spawn(class'#var(prefix)NanoKey',,, vectm(-967,-1240,-74)); + k.KeyID = 'CrackRoom'; + k.Description = "'Ton Hotel, North Room Key"; + if(dxr.flags.settings.keysrando > 0) + GlowUp(k); + k = Spawn(class'#var(prefix)NanoKey',,, vectm(-845,-2920,180)); + k.KeyID = 'Apartment'; + k.Description = "Apartment key"; + if(dxr.flags.settings.keysrando > 0) + GlowUp(k); + } Spawn(class'PlaceholderItem',,, vectm(-732,-2628,75)); //Actual closet Spawn(class'PlaceholderItem',,, vectm(-732,-2712,75)); //Actual closet diff --git a/DXRMapFixups/DeusEx/Classes/DXRFixupM09.uc b/DXRMapFixups/DeusEx/Classes/DXRFixupM09.uc index bd4aff432..fdab7a0e1 100644 --- a/DXRMapFixups/DeusEx/Classes/DXRFixupM09.uc +++ b/DXRMapFixups/DeusEx/Classes/DXRFixupM09.uc @@ -342,8 +342,10 @@ function PostFirstEntryMapFixes() case "09_NYC_SHIPBELOW": if (!RevisionMaps){ - // add a tnt crate on top of the pipe, visible from the ground floor - AddActor(class'#var(prefix)CrateExplosiveSmall', vect(141.944641, -877.442627, -175.899567)); + if(!dxr.flags.IsZeroRando()) { + // add a tnt crate on top of the pipe, visible from the ground floor + AddActor(class'#var(prefix)CrateExplosiveSmall', vect(141.944641, -877.442627, -175.899567)); + } // add a tnt crate in the locked storage closet overlooking the helipad AddActor(class'#var(prefix)CrateExplosiveSmall', vect(-4185.878906, -357.704376, -239.899658)); // remove big crates blocking the window to the pipe, 16 units == 1 foot diff --git a/DXRMapFixups/DeusEx/Classes/DXRFixupM15.uc b/DXRMapFixups/DeusEx/Classes/DXRFixupM15.uc index 81d741071..ddc1ba757 100644 --- a/DXRMapFixups/DeusEx/Classes/DXRFixupM15.uc +++ b/DXRMapFixups/DeusEx/Classes/DXRFixupM15.uc @@ -354,17 +354,19 @@ function PreFirstEntryMapFixes_Page() } } - //Rather than duplicating the existing cubes, add new clone text so there are more possibilities - cloneCubeLoc[0]=vectm(6197.620117,-8455.201172,-5117.649902); //Weird little window near broken door (on Page side) - cloneCubeLoc[1]=vectm(5663.339355,-7955.502441,-5557.624512); //On boxes outside middle level UC door - cloneCubeLoc[2]=vectm(6333.112305,-7241.149414,-5557.636719); //On boxes right near middle level blue fusion reactor - cloneCubeLoc[3]=vectm(7687.463867,-8845.201172,-5940.627441); //On control panel that has flame button in coolant area - cloneCubeText[0]="SUBJECT MJID-5493OP2702|nINCEPT DATE: 3/19/65|nASSIGNED BIRTH DATE: 7/20/41|nASSIGNED BIRTH NAME: Stan Carnegie|nBASE GENETIC SAMPLE: SIMONSWALTON32A|nPROFILE: AABCAAB|nVITALS: 45/80/0.89/33/1.2|n|n [[[[[PENDING]]]]]"; - cloneCubeText[1]="SUBJECT MJID-2938BU3209|nINCEPT DATE: 7/30/66|nASSIGNED BIRTH DATE: 9/07/40|nASSIGNED BIRTH NAME: Greg Pequod|nBASE GENETIC SAMPLE: |nPAGEBOB86G|nPROFILE: BAABACA|nVITALS: 51/72/1.02/20/2.1|n|n [[[[[PENDING]]]]]"; - cloneCubeText[2]="SUBJECT MJID-3209FG2938|nINCEPT DATE: 7/30/66|nASSIGNED BIRTH DATE: 9/07/40|nASSIGNED BIRTH NAME: Jacob Queequeg|nBASE GENETIC SAMPLE: STRONGHOWARD52L|nPROFILE: CAAGATA|nVITALS: 52/73/1.01/20/2.2|n|n [[[[[PENDING]]]]]"; - cloneCubeText[3]="SUBJECT MJID-3209FG2938|nINCEPT DATE: 6/17/54|nASSIGNED BIRTH DATE: 11/30/35|nASSIGNED BIRTH NAME: Jason Frudnick|nBASE GENETIC SAMPLE: GARDNERKANE88J|nPROFILE: BABTAGA|nVITALS: 51/81/1.13/20/2.0|n|n [[[[[PENDING]]]]]"; - for(i=0;i<4;i++){ - SpawnDatacubePlaintext(cloneCubeLoc[i],rotm(0,0,0),cloneCubeText[i]); + if(!dxr.flags.IsZeroRando()) { + //Rather than duplicating the existing cubes, add new clone text so there are more possibilities + cloneCubeLoc[0]=vectm(6197.620117,-8455.201172,-5117.649902); //Weird little window near broken door (on Page side) + cloneCubeLoc[1]=vectm(5663.339355,-7955.502441,-5557.624512); //On boxes outside middle level UC door + cloneCubeLoc[2]=vectm(6333.112305,-7241.149414,-5557.636719); //On boxes right near middle level blue fusion reactor + cloneCubeLoc[3]=vectm(7687.463867,-8845.201172,-5940.627441); //On control panel that has flame button in coolant area + cloneCubeText[0]="SUBJECT MJID-5493OP2702|nINCEPT DATE: 3/19/65|nASSIGNED BIRTH DATE: 7/20/41|nASSIGNED BIRTH NAME: Stan Carnegie|nBASE GENETIC SAMPLE: SIMONSWALTON32A|nPROFILE: AABCAAB|nVITALS: 45/80/0.89/33/1.2|n|n [[[[[PENDING]]]]]"; + cloneCubeText[1]="SUBJECT MJID-2938BU3209|nINCEPT DATE: 7/30/66|nASSIGNED BIRTH DATE: 9/07/40|nASSIGNED BIRTH NAME: Greg Pequod|nBASE GENETIC SAMPLE: |nPAGEBOB86G|nPROFILE: BAABACA|nVITALS: 51/72/1.02/20/2.1|n|n [[[[[PENDING]]]]]"; + cloneCubeText[2]="SUBJECT MJID-3209FG2938|nINCEPT DATE: 7/30/66|nASSIGNED BIRTH DATE: 9/07/40|nASSIGNED BIRTH NAME: Jacob Queequeg|nBASE GENETIC SAMPLE: STRONGHOWARD52L|nPROFILE: CAAGATA|nVITALS: 52/73/1.01/20/2.2|n|n [[[[[PENDING]]]]]"; + cloneCubeText[3]="SUBJECT MJID-3209FG2938|nINCEPT DATE: 6/17/54|nASSIGNED BIRTH DATE: 11/30/35|nASSIGNED BIRTH NAME: Jason Frudnick|nBASE GENETIC SAMPLE: GARDNERKANE88J|nPROFILE: BABTAGA|nVITALS: 51/81/1.13/20/2.0|n|n [[[[[PENDING]]]]]"; + for(i=0;i<4;i++){ + SpawnDatacubePlaintext(cloneCubeLoc[i],rotm(0,0,0),cloneCubeText[i]); + } } //Add a switch to manually trigger the infolink that gives you the Helios computer password diff --git a/DXRMapFixups/DeusEx/Classes/DXRFixupParis.uc b/DXRMapFixups/DeusEx/Classes/DXRFixupParis.uc index a6e531aa2..d49685194 100644 --- a/DXRMapFixups/DeusEx/Classes/DXRFixupParis.uc +++ b/DXRMapFixups/DeusEx/Classes/DXRFixupParis.uc @@ -40,12 +40,14 @@ function PreFirstEntryMapFixes() AddSwitch( vect(897.238892, -120.852928, -9.965580), rot(0,0,0), 'catacombs_blastdoor02' ); AddSwitch( vect(-2190.893799, 1203.199097, -6.663990), rot(0,0,0), 'catacombs_blastdoorB' ); - foreach AllActors(class'ScriptedPawn',sp){ - if(sp.BindName=="bums"){ - sp.bImportant=True; - sp.UnfamiliarName="Dr. Kit"; - sp.FamiliarName="Dr. Mehdi Kit"; - break; + if(!dxr.flags.IsReducedRando()) { + foreach AllActors(class'ScriptedPawn',sp){ + if(sp.BindName=="bums"){ + sp.bImportant=True; + sp.UnfamiliarName="Dr. Kit"; + sp.FamiliarName="Dr. Mehdi Kit"; + break; + } } } diff --git a/DXRMapFixups/DeusEx/Classes/DXRFixupVandenberg.uc b/DXRMapFixups/DeusEx/Classes/DXRFixupVandenberg.uc index b8cd9e484..86ebe493a 100644 --- a/DXRMapFixups/DeusEx/Classes/DXRFixupVandenberg.uc +++ b/DXRMapFixups/DeusEx/Classes/DXRFixupVandenberg.uc @@ -89,20 +89,22 @@ function PreFirstEntryMapFixes() pg.MaxCount=3; if (VanillaMaps){ - //Add a key to Tim's closet - foreach AllActors(class'#var(DeusExPrefix)Mover',door){ - if (door.Name=='DeusExMover28'){ - door.KeyIDNeeded='TimsClosetKey'; - door.Tag = 'TimsDoor'; - AddSwitch( vect(-1782.48,1597.85,-1969), rot(0, 0, 0), 'TimsDoor'); + if(!dxr.flags.IsZeroRando()) { + //Add a key to Tim's closet + foreach AllActors(class'#var(DeusExPrefix)Mover',door){ + if (door.Name=='DeusExMover28'){ + door.KeyIDNeeded='TimsClosetKey'; + door.Tag = 'TimsDoor'; + AddSwitch( vect(-1782.48,1597.85,-1969), rot(0, 0, 0), 'TimsDoor'); + } } - } - key = Spawn(class'#var(prefix)NanoKey',,,vectm(-1502.665771,2130.560791,-1996.783691)); //Windowsill in Hazard Lab - key.KeyID='TimsClosetKey'; - key.Description="Tim's Closet Key"; - key.SkinColor=SC_Level3; - key.MultiSkins[0] = Texture'NanoKeyTex3'; + key = Spawn(class'#var(prefix)NanoKey',,,vectm(-1502.665771,2130.560791,-1996.783691)); //Windowsill in Hazard Lab + key.KeyID='TimsClosetKey'; + key.Description="Tim's Closet Key"; + key.SkinColor=SC_Level3; + key.MultiSkins[0] = Texture'NanoKeyTex3'; + } foreach AllActors(class'#var(DeusExPrefix)Mover',door){ if(door.name=='DeusExMover15'){ diff --git a/DXRMissions/DeusEx/Classes/DXRMissionsM06.uc b/DXRMissions/DeusEx/Classes/DXRMissionsM06.uc index cd2824772..6a9a8486e 100644 --- a/DXRMissions/DeusEx/Classes/DXRMissionsM06.uc +++ b/DXRMissions/DeusEx/Classes/DXRMissionsM06.uc @@ -227,6 +227,12 @@ function DeleteGoal(Goal g, GoalLocation Loc) function GenerateDTSHintCube(Goal g, GoalLocation Loc) { + local #var(prefix)DataLinkTrigger dt; + foreach AllActors(class'#var(prefix)DataLinkTrigger', dt) { + if(dt.datalinkTag=='DL_Tong_00B') { // Greetings, JC Denton; this adds the goal for retrieving the sword, and if that happens after completing the goal then the goal is stuck + dt.Destroy(); + } + } SpawnDatacubePlaintext(vectm(-1857.841064, -158.911865, 2051.345459), rotm(0,0,0), "I borrowed the sword but forgot it somewhere... Maybe "$Loc.name$"?", true); } diff --git a/DXRModules/DeusEx/Classes/DXREvents.uc b/DXRModules/DeusEx/Classes/DXREvents.uc index ad740bc7a..f4ff2dcbd 100644 --- a/DXRModules/DeusEx/Classes/DXREvents.uc +++ b/DXRModules/DeusEx/Classes/DXREvents.uc @@ -501,6 +501,7 @@ function SetWatchFlags() { case "03_NYC_AIRFIELDHELIBASE": WatchFlag('HelicopterBaseAmbrosia'); WatchFlag('PlayPool'); + WatchFlag('OverhearLebedev_Played'); InitPoolBalls(); break; case "03_NYC_HANGAR": @@ -519,6 +520,9 @@ function SetWatchFlags() { break; case "03_NYC_BROOKLYNBRIDGESTATION": WatchFlag('FreshWaterOpened'); + WatchFlag('ThugGang_AllianceDead'); + WatchFlag('DonDone'); + WatchFlag('LennyDone'); if(RevisionMaps){ WatchFlag('PlayPool'); InitPoolBalls(); @@ -540,6 +544,7 @@ function SetWatchFlags() { case "04_NYC_HOTEL": WatchFlag('GaveRentonGun'); WatchFlag('FamilySquabbleWrapUpGilbertDead_Played'); + WatchFlag('M04PlayerLikesUNATCO_Played'); bt = class'BingoTrigger'.static.Create(self,'TonThirdFloor',vectm(-630,-1955,424),150,40); break; case "04_NYC_UNDERGROUND": @@ -611,6 +616,9 @@ function SetWatchFlags() { break; case "04_NYC_UNATCOISLAND": bt = class'BingoTrigger'.static.Create(self,'CommsPit',vectm(-6385.640625,1441.881470,-247.901276),40,40); + if (dxr.flagbase.GetBool('M03PlayerKilledAnna')) { + class'DXREventsBase'.static.MarkBingo(dxr, "LebedevLived"); + } break; case "05_NYC_UNATCOMJ12LAB": CheckPaul(); @@ -636,6 +644,7 @@ function SetWatchFlags() { WatchFlag('Shannon_Dead'); WatchFlag('M05WaltonAlone_Played'); WatchFlag('M05MeetManderley_Played'); + WatchFlag('M05MeetJaime_Played'); foreach AllActors(class'#var(prefix)ComputerPersonal',cp){ if (cp.Name=='ComputerPersonal7'){ //JC's computer @@ -680,6 +689,7 @@ function SetWatchFlags() { case "06_HONGKONG_WANCHAI_CANAL": WatchFlag('FoundScientistBody'); WatchFlag('M06BoughtVersaLife'); + WatchFlag('Canal_Bartender_Question4'); foreach AllActors(class'#var(prefix)FlagTrigger',fTrigger,'FoundScientist') { // so you don't have to go right into the corner, default is 96, and 40 height @@ -715,6 +725,7 @@ function SetWatchFlags() { WatchFlag('LeoToTheBar'); WatchFlag('PlayPool'); WatchFlag('M06JCHasDate'); + WatchFlag('M06BartenderQuestion3'); foreach AllActors(class'#var(prefix)Hooker1', h) { if(h.BindName == "ClubMercedes") @@ -860,6 +871,7 @@ function SetWatchFlags() { bt.bingoEvent="MadeBasket"; WatchFlag('StantonAmbushDefeated'); WatchFlag('GreenKnowsAboutDowd'); + class'DXREventsBase'.static.MarkBingo(dxr, "MaggieLived"); break; case "08_NYC_SMUG": WatchFlag('M08WarnedSmuggler'); @@ -1020,12 +1032,14 @@ function SetWatchFlags() { wib.bImportant = true; } WatchFlag('SilhouetteHostagesAllRescued'); + class'DXREventsBase'.static.MarkBingo(dxr, "AimeeLeMerchantLived"); break; case "10_PARIS_METRO": WatchFlag('M10EnteredBakery'); WatchFlag('AlleyCopSeesPlayer_Played'); WatchFlag('assassinapartment'); WatchFlag('MeetRenault_Played'); + WatchFlag('JoshuaInterrupted_Played'); RewatchFlag('KnowsGuntherKillphrase'); foreach AllActors(class'#var(prefix)Mutt', starr) { @@ -1892,6 +1906,9 @@ function string RemapBingoEvent(string eventname) case "Doberman_peeptime": case "Mutt_peeptime": return "WatchDogs"; + case "DonDone": + case "LennyDone": + return "GiveZyme"; default: return eventname; } @@ -2273,7 +2290,7 @@ static simulated function string GetBingoGoalHelpText(string event,int mission, case "RepairBot_ClassDead": return "Destroy enough repair bots. Disabling them with EMP does not count."; case "DrugDealer_Dead": - return "Kill Rock, the drug dealer who lives in Brooklyn Bridge station."; + return "Kill Rock, the drug dealer who lives in Brooklyn Bridge Station."; case "botordertrigger": return "Set off the laser tripwires in Smuggler's hideout."; case "IgnitedPawn": @@ -2794,6 +2811,32 @@ static simulated function string GetBingoGoalHelpText(string event,int mission, return "Swim through the underwater tunnel in the Warehouse District."; case "PaulToTong": return "Take Paul's corpse from the MJ12 facility under UNATCO to Tracer Tong."; + case "M04PlayerLikesUNATCO_Played": + return "Tell Paul you won't send the distress signal after going to the NSF base."; + case "Canal_Bartender_Question4": + return "Learn about Olaf Stapledon's \"Last and First Men\" from the Old China Hand bartender."; + case "M06BartenderQuestion3": + return "Hear the Lucky Money bartender's ideas about good government."; + case "M05MeetJaime_Played": + return "Talk to Jaime while escaping UNATCO and tell him to stay or to join you in Hong Kong."; + case "jughead_Dead": + return "Kill El Rey, the leader of the Rooks in the Brooklyn Bridge Station."; + case "JoshuaInterrupted_Played": + return "Learn the login for the computer in the MJ12 guard shack from a trooper's father in a Paris cafe."; + case "LebedevLived": + return "Leave the airfield for UNATCO with Juan Lebedev still alive and Anna Navarre dead."; + case "AimeeLeMerchantLived": + return "Leave Denfert-Rochereau with Aimee and Le Merchant still alive and conscious. This is a very difficult goal."; + case "OverhearLebedev_Played": + return "Listen to a phone conversation in the airfield helibase between Juan Lebedev and Tracer Tong. It can be heard in one of the offices."; + case "ThugGang_AllianceDead": + return "Slaughter most of the Rooks in the Brooklyn Bridge Station."; + case "GiveZyme": + return "Give zyme to the two junkies in the Brooklyn Bridge Station."; + case "MarketKid_BindNameUnconscious": + return "Knock out Louis Pan, the kid running a protection racket for the Luminous Path in the Wan Chai Market. Crime (sometimes) doesn't pay."; + case "MaggieLived": + return "Leave Hong Kong for New York with Maggie Chow still alive and conscious."; default: return "Unable to find help text for event '"$event$"'|nReport this to the developers!"; } @@ -3157,10 +3200,23 @@ defaultproperties bingo_options(310)=(event="WatchDogs",desc="Watch Dogs (%s seconds)",max=15,missions=21604) bingo_options(311)=(event="Cat_peeptime",desc="Look at that kitty! (%s seconds)",max=15,missions=7256) bingo_options(312)=(event="Binoculars_peeptime",desc="Who Watches the Watchers? (%s seconds)",max=15) - bingo_options(313)=(event="roof_elevator",desc="Use the roof elevator in Denfert - Rochereau",max=1,missions=1024) + bingo_options(313)=(event="roof_elevator",desc="Use the roof elevator in Denfert-Rochereau",max=1,missions=1024) bingo_options(314)=(event="MeetRenault_Played",desc="Ever tried rat piss?",max=1,missions=1024) bingo_options(315)=(event="WarehouseSewerTunnel",desc="Take the sewers to the Warehouse",max=3,missions=4) bingo_options(316)=(event="PaulToTong",desc="Help Tong get a closer inspection",max=1,missions=96) + bingo_options(317)=(event="M04PlayerLikesUNATCO_Played",desc="You're not a terrorist",max=1,missions=16) + bingo_options(318)=(event="Canal_Bartender_Question4",desc="Not big into books",max=1,missions=64) + bingo_options(319)=(event="M06BartenderQuestion3",desc="The mark of the educated man",max=1,missions=64) + bingo_options(320)=(event="M05MeetJaime_Played",desc="Talk to Jaime during the escape",max=1,missions=32) + bingo_options(321)=(event="jughead_Dead",desc="Kill El Rey",max=1,missions=8) + bingo_options(322)=(event="JoshuaInterrupted_Played",desc="He was the one who wanted to be a soldier",max=1,missions=1024) + bingo_options(323)=(event="LebedevLived",desc="Keep Lebedev alive",max=1,missions=8) + bingo_options(324)=(event="AimeeLeMerchantLived",desc="Let Aimee and Le Merchant live",max=1,missions=1536) + bingo_options(325)=(event="OverhearLebedev_Played",desc="This socket is being monitored",max=1,missions=8) + bingo_options(326)=(event="ThugGang_AllianceDead",desc="Slaughter the Rooks",max=10,missions=8) // there are ordinarily 11 Rooks + bingo_options(327)=(event="GiveZyme",desc="Who needs Rock?",max=2,missions=8) // Huh? Not me. He could just die. Take his fifty-cut zyme and blow. + // bingo_options()=(event="MarketKid_BindNameUnconscious",desc="Crime doesn't pay",max=1,missions=64) + bingo_options(328)=(event="MaggieLived",desc="Let Maggie Live",max=1,missions=64) @@ -3214,4 +3270,10 @@ defaultproperties mutually_exclusive(45)=(e1="FamilySquabbleWrapUpGilbertDead_Played",e2="JoJoFine_Dead") mutually_exclusive(46)=(e1="Cremation",e2="Chef_ClassDead") mutually_exclusive(47)=(e1="nsfwander",e2="MiguelLeaving") + mutually_exclusive(48)=(e1="PaulToTong",e2="SavedPaul") + mutually_exclusive(49)=(e1="LebedevLived",e2="AnnaKilledLebedev") + mutually_exclusive(50)=(e1="LebedevLived",e2="PlayerKilledLebedev") + mutually_exclusive(51)=(e1="AimeeLeMerchantLived",e2="lemerchant_Dead") + mutually_exclusive(52)=(e1="AimeeLeMerchantLived",e2="aimee_Dead") + mutually_exclusive(52)=(e1="MaggieLived",e2="MaggieCanFly") } diff --git a/DXRModules/DeusEx/Classes/DXREventsBase.uc b/DXRModules/DeusEx/Classes/DXREventsBase.uc index 7f8dd48ec..39ea8b49b 100644 --- a/DXRModules/DeusEx/Classes/DXREventsBase.uc +++ b/DXRModules/DeusEx/Classes/DXREventsBase.uc @@ -54,8 +54,7 @@ function CheckWatchedActors() { _MarkBingo(actor_watch[i].BingoEvent); num_watched_actors--; - actor_watch[i].BingoEvent = actor_watch[num_watched_actors].BingoEvent; - actor_watch[i].a = actor_watch[num_watched_actors].a; + actor_watch[i] = actor_watch[num_watched_actors]; i--;// recheck this slot on the next iteration } } @@ -299,21 +298,25 @@ simulated function Timer() continue; } - FlagTriggered=False; - if( watchflags[i] == 'LeoToTheBar' ) { - if (ClassInLevel(class'#var(prefix)TerroristCommanderCarcass')){ - FlagTriggered=True; - } - } else if ( watchflags[i] == 'PaulToTong' ) { - if (ClassInLevel(class'PaulDentonCarcass')){ - FlagTriggered=True; - } - } else if( watchflags[i] == 'GuntherKillswitch' ) { + FlagTriggered = False; + switch(watchflags[i]) { + case 'LeoToTheBar': + FlagTriggered = ClassInLevel(class'#var(prefix)TerroristCommanderCarcass'); + break; + + case 'PaulToTong': + FlagTriggered = ClassInLevel(class'PaulDentonCarcass'); + break; + + case 'GuntherKillswitch': if (WatchGuntherKillSwitch()){ FlagTriggered=True; _MarkBingo("GuntherHermann_Dead"); } - } else if( watchflags[i] == 'PlayPool' ) { + break; + + case 'PlayPool': + // we don't set FlagTriggered=true, just handle it all here to know when to delete this watcher num = PoolBallsSunk(); if (num>0){ for (j=0;j c; i=0; - DecorationsOverwrites[i].type = "CrateUnbreakableLarge"; - DecorationsOverwrites[i].bInvincible = false; - DecorationsOverwrites[i].HitPoints = 500; - DecorationsOverwrites[i].minDamageThreshold = 0; - c = class(GetClassFromString(DecorationsOverwrites[i].type, class'DeusExDecoration')); - DecorationsOverwrites[i].bFlammable = c.default.bFlammable; - DecorationsOverwrites[i].Flammability = c.default.Flammability; - DecorationsOverwrites[i].bExplosive = c.default.bExplosive; - DecorationsOverwrites[i].explosionDamage = c.default.explosionDamage; - DecorationsOverwrites[i].explosionRadius = c.default.explosionRadius; - DecorationsOverwrites[i].bPushable = c.default.bPushable; + if(!dxr.flags.IsZeroRando()) { + DecorationsOverwrites[i].type = "CrateUnbreakableLarge"; + DecorationsOverwrites[i].bInvincible = false; + DecorationsOverwrites[i].HitPoints = 500; + DecorationsOverwrites[i].minDamageThreshold = 0; + c = class(GetClassFromString(DecorationsOverwrites[i].type, class'DeusExDecoration')); + DecorationsOverwrites[i].bFlammable = c.default.bFlammable; + DecorationsOverwrites[i].Flammability = c.default.Flammability; + DecorationsOverwrites[i].bExplosive = c.default.bExplosive; + DecorationsOverwrites[i].explosionDamage = c.default.explosionDamage; + DecorationsOverwrites[i].explosionRadius = c.default.explosionRadius; + DecorationsOverwrites[i].bPushable = c.default.bPushable; + i++; + + DecorationsOverwrites[i].type = "CrateUnbreakableMed"; + DecorationsOverwrites[i].bInvincible = false; + DecorationsOverwrites[i].HitPoints = 500; + DecorationsOverwrites[i].minDamageThreshold = 0; + c = class(GetClassFromString(DecorationsOverwrites[i].type, class'DeusExDecoration')); + DecorationsOverwrites[i].bFlammable = c.default.bFlammable; + DecorationsOverwrites[i].Flammability = c.default.Flammability; + DecorationsOverwrites[i].bExplosive = c.default.bExplosive; + DecorationsOverwrites[i].explosionDamage = c.default.explosionDamage; + DecorationsOverwrites[i].explosionRadius = c.default.explosionRadius; + DecorationsOverwrites[i].bPushable = c.default.bPushable; + i++; + + DecorationsOverwrites[i].type = "BarrelVirus"; + DecorationsOverwrites[i].bInvincible = false; + DecorationsOverwrites[i].HitPoints = 100; + DecorationsOverwrites[i].minDamageThreshold = 0; + c = class(GetClassFromString(DecorationsOverwrites[i].type, class'DeusExDecoration')); + DecorationsOverwrites[i].bFlammable = c.default.bFlammable; + DecorationsOverwrites[i].Flammability = c.default.Flammability; + DecorationsOverwrites[i].bExplosive = c.default.bExplosive; + DecorationsOverwrites[i].explosionDamage = c.default.explosionDamage; + DecorationsOverwrites[i].explosionRadius = c.default.explosionRadius; + DecorationsOverwrites[i].bPushable = c.default.bPushable; + i++; + } - i++; DecorationsOverwrites[i].type = "BarrelFire"; DecorationsOverwrites[i].bInvincible = false; DecorationsOverwrites[i].HitPoints = 50; @@ -87,22 +115,9 @@ function CheckConfig() DecorationsOverwrites[i].explosionDamage = c.default.explosionDamage; DecorationsOverwrites[i].explosionRadius = c.default.explosionRadius; DecorationsOverwrites[i].bPushable = c.default.bPushable; - i++; - DecorationsOverwrites[i].type = "Van"; - DecorationsOverwrites[i].bInvincible = false; - DecorationsOverwrites[i].HitPoints = 500; - DecorationsOverwrites[i].minDamageThreshold = 0; - c = class(GetClassFromString(DecorationsOverwrites[i].type, class'DeusExDecoration')); - DecorationsOverwrites[i].bFlammable = c.default.bFlammable; - DecorationsOverwrites[i].Flammability = c.default.Flammability; - DecorationsOverwrites[i].bExplosive = c.default.bExplosive; - DecorationsOverwrites[i].explosionDamage = c.default.explosionDamage; - DecorationsOverwrites[i].explosionRadius = c.default.explosionRadius; - DecorationsOverwrites[i].bPushable = c.default.bPushable; - i++; - DecorationsOverwrites[i].type = "CrateUnbreakableMed"; + DecorationsOverwrites[i].type = "Van"; DecorationsOverwrites[i].bInvincible = false; DecorationsOverwrites[i].HitPoints = 500; DecorationsOverwrites[i].minDamageThreshold = 0; @@ -113,21 +128,8 @@ function CheckConfig() DecorationsOverwrites[i].explosionDamage = c.default.explosionDamage; DecorationsOverwrites[i].explosionRadius = c.default.explosionRadius; DecorationsOverwrites[i].bPushable = c.default.bPushable; - i++; - DecorationsOverwrites[i].type = "BarrelVirus"; - DecorationsOverwrites[i].bInvincible = false; - DecorationsOverwrites[i].HitPoints = 100; - DecorationsOverwrites[i].minDamageThreshold = 0; - c = class(GetClassFromString(DecorationsOverwrites[i].type, class'DeusExDecoration')); - DecorationsOverwrites[i].bFlammable = c.default.bFlammable; - DecorationsOverwrites[i].Flammability = c.default.Flammability; - DecorationsOverwrites[i].bExplosive = c.default.bExplosive; - DecorationsOverwrites[i].explosionDamage = c.default.explosionDamage; - DecorationsOverwrites[i].explosionRadius = c.default.explosionRadius; - DecorationsOverwrites[i].bPushable = c.default.bPushable; - i++; DecorationsOverwrites[i].type = "CigaretteMachine"; DecorationsOverwrites[i].bInvincible = false; DecorationsOverwrites[i].HitPoints = 100; @@ -139,8 +141,8 @@ function CheckConfig() DecorationsOverwrites[i].explosionDamage = c.default.explosionDamage; DecorationsOverwrites[i].explosionRadius = c.default.explosionRadius; DecorationsOverwrites[i].bPushable = c.default.bPushable; - i++; + DecorationsOverwrites[i].type = "ShopLight"; DecorationsOverwrites[i].bInvincible = false; c = class(GetClassFromString(DecorationsOverwrites[i].type, class'DeusExDecoration')); @@ -152,8 +154,8 @@ function CheckConfig() DecorationsOverwrites[i].explosionDamage = c.default.explosionDamage; DecorationsOverwrites[i].explosionRadius = c.default.explosionRadius; DecorationsOverwrites[i].bPushable = c.default.bPushable; - i++; + DecorationsOverwrites[i].type = "HangingShopLight"; DecorationsOverwrites[i].bInvincible = false; c = class(GetClassFromString(DecorationsOverwrites[i].type, class'DeusExDecoration')); @@ -165,8 +167,8 @@ function CheckConfig() DecorationsOverwrites[i].explosionDamage = c.default.explosionDamage; DecorationsOverwrites[i].explosionRadius = c.default.explosionRadius; DecorationsOverwrites[i].bPushable = c.default.bPushable; - i++; + DecorationsOverwrites[i].type = "HKMarketLight"; DecorationsOverwrites[i].bInvincible = false; c = class(GetClassFromString(DecorationsOverwrites[i].type, class'DeusExDecoration')); @@ -178,6 +180,7 @@ function CheckConfig() DecorationsOverwrites[i].explosionDamage = c.default.explosionDamage; DecorationsOverwrites[i].explosionRadius = c.default.explosionRadius; DecorationsOverwrites[i].bPushable = c.default.bPushable; + i++; Super.CheckConfig(); @@ -457,7 +460,7 @@ function FixRevisionDecorativeInventory() foreach AllActors(class'Inventory',i){ if (i.CollisionRadius==0 && i.CollisionHeight==0){ - log("Making "$i$" grabbable by restoring it's original collision size"); + l("Making "$i$" grabbable by restoring it's original collision size"); i.SetCollisionSize(i.default.CollisionRadius,i.default.CollisionHeight); } } diff --git a/DXRModules/DeusEx/Classes/DXRFlags.uc b/DXRModules/DeusEx/Classes/DXRFlags.uc index 5ee3cdeae..5978b2fc9 100644 --- a/DXRModules/DeusEx/Classes/DXRFlags.uc +++ b/DXRModules/DeusEx/Classes/DXRFlags.uc @@ -544,7 +544,7 @@ function FlagsSettings SetDifficulty(int new_difficulty) settings.passwordsrandomized = 0; settings.enemystats = 0; settings.bot_stats = 0; - settings.minskill = (settings.minskill*3 + settings.maxskill + 125) / 5;// Hard mode == 100% skill costs + settings.minskill = 100; settings.maxskill = settings.minskill; settings.ammo = 100; settings.medkits = 100; @@ -563,6 +563,8 @@ function FlagsSettings SetDifficulty(int new_difficulty) settings.repairbotcooldowns = 0; settings.medbotamount = 0; settings.repairbotamount = 0; + settings.medbotuses = 0; + settings.repairbotuses = 0; moresettings.grenadeswap = 0; } else { settings.enemystats /= 2; diff --git a/DXRModules/DeusEx/Classes/DXRSkills.uc b/DXRModules/DeusEx/Classes/DXRSkills.uc index fd16d85e2..0a3a3570c 100644 --- a/DXRModules/DeusEx/Classes/DXRSkills.uc +++ b/DXRModules/DeusEx/Classes/DXRSkills.uc @@ -7,10 +7,10 @@ struct SkillCostMultiplier { var int maxLevel;//the highest skill level this adjustment will apply to }; -var config SkillCostMultiplier SkillCostMultipliers[16]; +var SkillCostMultiplier SkillCostMultipliers[12]; -var config float min_skill_weaken, max_skill_str; -var config float skill_cost_curve; +var float min_skill_weaken, max_skill_str; +var float skill_cost_curve; replication { @@ -21,7 +21,7 @@ replication function CheckConfig() { local int i; - if( ConfigOlderThan(2,5,2,3) ) { + for(i=0; i < ArrayCount(SkillCostMultipliers); i++) { SkillCostMultipliers[i].type = ""; SkillCostMultipliers[i].percent = 100; @@ -32,8 +32,9 @@ function CheckConfig() max_skill_str = 1.0; skill_cost_curve = 2; - i=0; #ifdef balance + i=0; + if(!dxr.flags.IsZeroRando()) { SkillCostMultipliers[i].type = "SkillDemolition"; SkillCostMultipliers[i].percent = 80; SkillCostMultipliers[i].minLevel = 1; @@ -55,10 +56,11 @@ function CheckConfig() SkillCostMultipliers[i].type = "SkillComputer"; SkillCostMultipliers[i].percent = 140; SkillCostMultipliers[i].minLevel = 1; - SkillCostMultipliers[i].maxLevel = ArrayCount(class'Skill'.default.Cost); + SkillCostMultipliers[i].maxLevel = 1; i++; -#endif } +#endif + Super.CheckConfig(); } diff --git a/DXRModules/DeusEx/Classes/DXRStartMap.uc b/DXRModules/DeusEx/Classes/DXRStartMap.uc index 9143bdaa0..d1b960489 100644 --- a/DXRModules/DeusEx/Classes/DXRStartMap.uc +++ b/DXRModules/DeusEx/Classes/DXRStartMap.uc @@ -628,6 +628,8 @@ static function bool BingoGoalImpossible(string bingo_event, int start_map, int case 10: // Paris switch(bingo_event) { + case "AimeeLeMerchantLived": + return start_map < 99 || start_map > 100; } case 11: // fallthrough to the rest of Paris switch(bingo_event) @@ -681,6 +683,8 @@ static function bool BingoGoalImpossible(string bingo_event, int start_map, int return True; } return start_map>=60; //TODO: Have to have told Jaime to meet you in Hong Kong in mission 5 + case "MaggieLived":// not actually impossible, just really far + return start_map < 70 && end_mission < 8; case "Terrorist_ClassDead": case "Terrorist_ClassUnconscious": case "Terrorist_peeptime": diff --git a/DXRando/DeusEx/Classes/PlayerDataItem.uc b/DXRando/DeusEx/Classes/PlayerDataItem.uc index b56cf4f56..24b79b143 100644 --- a/DXRando/DeusEx/Classes/PlayerDataItem.uc +++ b/DXRando/DeusEx/Classes/PlayerDataItem.uc @@ -1,5 +1,7 @@ class PlayerDataItem extends Inventory config(DXRBingo); +const FAILED_MISSION_MASK = 1; + var travel bool local_inited; var travel int version, initial_version; #ifdef multiplayer @@ -124,6 +126,10 @@ simulated function bool IncrementBingoProgress(string event) local int i; for(i=0; i0); } else { diff --git a/Pawns/DeusEx/Classes/RepairBot.uc b/Pawns/DeusEx/Classes/RepairBot.uc index 1b4a4c10b..099e44b28 100644 --- a/Pawns/DeusEx/Classes/RepairBot.uc +++ b/Pawns/DeusEx/Classes/RepairBot.uc @@ -79,7 +79,10 @@ simulated function string GetRemainingUsesStr() uses = GetRemainingUses(); - if (uses == 0) { + if(!HasLimitedUses()) { + return msg; + } + else if (uses == 0) { msg = " (No Charges Left)"; } else if (uses == 1) { msg = " (1 Charge Left)"; diff --git a/RevRandomizer.u b/RevRandomizer.u index c6cd8c3bb..19954b714 100644 Binary files a/RevRandomizer.u and b/RevRandomizer.u differ diff --git a/VMDRandomizer.u b/VMDRandomizer.u index a3e2958b9..4942d03b4 100644 Binary files a/VMDRandomizer.u and b/VMDRandomizer.u differ diff --git a/compiler_settings.default.json b/compiler_settings.default.json index 0b4eb35cc..2806e6b84 100644 --- a/compiler_settings.default.json +++ b/compiler_settings.default.json @@ -12,7 +12,10 @@ "copy_if_changed": "DXRVersion.uc", "run_tests": true, "blacklist": [ "DXRNonVanilla", "HXRandomizer", "DXRReplaceActors.uc" ], - "hash_check": { "class": "DeusEx.DeusExPlayer", "expected": "337315d4745deb673207594181265393" } + "hash_checks": [ + { "class": "DeusEx.DeusExPlayer", "expected": "337315d4745deb673207594181265393" }, + { "class": "DeusEx.PersonaScreenAugmentations", "expected": "f02620fc2ef9265f95c9a27b46dad1ba" } + ] }, "hx": { "source_path": "C:/Program Files (x86)/Steam/steamapps/common/Deus Ex HX Backup/",