Skip to content

Commit

Permalink
v2.6.3.3 Alpha Merge pull request #691 from Die4Ever/develop
Browse files Browse the repository at this point in the history
* tweak ChooseRandomStartMap to avoid similar start locations back to back

* aug can names not needed in VMD

* title screen more classes to replace logos

* GetRandomActorClass() log error when empty string

* Randomly spawned Security Computers are now owned by Page Industries
( #682 )

* Make sure ALL_SHIFTS account on Nervous Workers computer in Versalife
has the same password as the rest of the computers

* Selecting an aug that can't be installed because the slots are full (in
a medbot) will now show what slot it takes, along with the full aug
description.  #657

* Combat Strength no longer activates when throwing grenades #657

* Energy level is shown in inventory description for biocells #681

* Crowd Control effects to add augs now actually check to see if the slot
is full or not #660

* New Crowd Control effect to drop a bunch of marbles on the ground #407

* Add a bingo goal to bring Paul's carcass to 06_HONGKONG_TONGBASE (#685)

* add bingo goal to bring paul's carcass to tong

* change "body" to "corpse" to make it more obvious that Paul needs to be dead

* fix PaulToTong BingoGoalImpossible check

* fix autosave dropping CarriedDecoration, and random start locations (even though we don't see that issue in practice currently)

* simplify Barrel1 travel

* github actions workflow, rename file to DXRVanillaFixer-Linux

* randomized names based on memes enabled instead of reduced rando, since now we have the memes setting for According to Game Mode

* experimental AugSpeed nerf lower levels (#657)

* don't check for inventory overlaps in other mods

* simplify some DXRBalance stuff
the pistol skill change is for Zero Rando mode, Advanced is now 145% instead of 146%

* auto weapon mods enabled for Zero Rando, DXRFashion based on memes setting, and some cleanup

* Sub bay doors now have a (0,0,0) prepivot so they can be destroyed more
consistently #686

* Add a nanokey for Apartment 12 in the Paris streets #683

* paris apartment key only if goals rando enabled

* move paris apartment key to DXRMissionsParis, because it requires goals rando

* DXRMissions properly handle HXMovers, which don't use PrecessorName

* Public terminals in the lobby of the Paris hostel are now Guest
Registries and show if Jaime or Nicolette are inside the room.

* enable rando bot weapons by default (#680)
and some increased consistency for enemy rando

* OpenAugTree by WCCC

* added special thanks in the credits

* remove unnecessary invis command alias for invisible

* compiler option to md5 check source file

* debug test failure

* fix doors mode in credits for Zero Rando

* small cleanup in hostel bulletin and DXRFlags comment

* fix NG+ bot_weapons and enemyrespawn

---------

Co-authored-by: theastropath@gmail.com <theastropath@gmail.com>
Co-authored-by: Jeffrey Thomas Piercy <mqduck@mqduck.net>
  • Loading branch information
3 people authored Apr 6, 2024
2 parents 33f7938 + 7f091bb commit 686efcf
Show file tree
Hide file tree
Showing 68 changed files with 1,415 additions and 137 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/release-installer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ jobs:
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: installer/dist/DXRandoInstaller
asset_name: DXRVanillaFixer
asset_name: DXRVanillaFixer-Linux
tag: ${{ env.RELEASE_TAG }}
overwrite: true

Expand Down
2 changes: 1 addition & 1 deletion DXRBalance/DeusEx/Classes/AugCombat.uc
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ simulated function TickUse()
local DeusExMover mover;

weapon = DeusExWeapon(Player.inHand);
if(weapon == None || !weapon.bHandToHand)
if(weapon == None || !weapon.bHandToHand || weapon.ProjectileClass!=None)
return;
if(weapon.GetStateName() != 'NormalFire')
return;
Expand Down
15 changes: 8 additions & 7 deletions DXRBalance/DeusEx/Classes/BalanceAugSpeed.uc
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ class BalanceAugSpeed injects AugSpeed;
state Active
{
Begin:
// DXRando: instantly use 1 energy to prevent abuse
Player.Energy -= 1;
if(Player.Energy <= 0) {
Player.Energy = 0;
Expand All @@ -18,14 +19,14 @@ Begin:
}
}

//original went from 1.200000 up to 1.800000, I've thought about nerfing the max speed so you can't just run past all enemies, but I think that would require a large nerf and that would slow down the speedrun too much to be worth it
//original went from 1.2 up to 1.8, I've thought about nerfing the max speed so you can't just run past all enemies, but I think that would require an unreasonably large nerf
//original EnergyRate is 40, might nerf it if people use it too much?
defaultproperties
{
EnergyRate=40.000000
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.4
LevelValues(1)=1.5
LevelValues(2)=1.6
LevelValues(3)=1.7
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
LevelValues(3)=1.7
}
7 changes: 0 additions & 7 deletions DXRBalance/DeusEx/Classes/BalanceDTS.uc
Original file line number Diff line number Diff line change
@@ -1,13 +1,6 @@
class BalanceDTS injects WeaponNanoSword;
// original HitDamage was 20, AOE_Cone causes it to be treated as a shotgun with 3 (or 5?) projectiles multiplying the damage, see DeusExWeapon and search for AOE_Cone
// interesting side effect of increasing HitDamage from 20 to 24 is that the door strength threshold is measured per hit, so now this can break more doors than it could before, with the combat strength aug it should be able to break even more than the sniper rifle can
simulated function PreBeginPlay()
{
HitDamage=default.HitDamage;
AreaOfEffect=default.AreaOfEffect;
Super.PreBeginPlay();
}

defaultproperties
{
HitDamage=24
Expand Down
6 changes: 0 additions & 6 deletions DXRBalance/DeusEx/Classes/BalanceFireExtinguisher.uc
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,6 @@ function Timer()
UseOnce();
}

simulated function PreBeginPlay()
{
Super.PreBeginPlay();
maxCopies=default.maxCopies;
}

defaultproperties
{
maxCopies=5
Expand Down
4 changes: 3 additions & 1 deletion DXRBalance/DeusEx/Classes/BalancePlayer.uc
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,9 @@ function bool DXReduceDamage(int Damage, name damageType, vector hitLocation, ou
adjustedDamage = Int(newDamage);// adjustedDamage is our out param

if(damageType == 'TearGas' && adjustedDamage*2 >= HealthTorso) {
adjustedDamage = (HealthTorso - 1)/2; // TearGas can't kill you, torso takes *2 damage
// TearGas can't kill you
adjustedDamage = 0;
HealthTorso = 1;
}

return bReduced;
Expand Down
7 changes: 4 additions & 3 deletions DXRBalance/DeusEx/Classes/NerfPistolSkill.uc
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ simulated function PreBeginPlay()
CurrentLevel = oldlevel;
}

// vanilla is -0.1, -0.25, -0.5 (100%, 120%, 150%, 200% like the other weapon skills), this is 100%, 120%, 145%, 180%
defaultproperties
{
LevelValues(1)=-0.100000
LevelValues(2)=-0.230000
LevelValues(3)=-0.400000
LevelValues(1)=-0.1
LevelValues(2)=-0.225
LevelValues(3)=-0.4
}
11 changes: 9 additions & 2 deletions DXRCore/DeusEx/Classes/DXRActorsBase.uc
Original file line number Diff line number Diff line change
Expand Up @@ -643,12 +643,20 @@ function Actor ReplaceActor(Actor oldactor, string newclassstring)
local float largestDim;

loc = oldactor.Location;
oldactor.bHidden = true;
newclass = class<Actor>(DynamicLoadObject(newclassstring, class'class'));
if( newclass.default.bStatic ) warning(newclassstring $ " defaults to bStatic, Spawn probably won't work");
if( newclass == None) {
err("ReplaceActor(" $ newclassstring $ ") can't find class");
oldactor.bHidden = false;
return None;
}
if( newclass.default.bStatic ) warning("ReplaceActor: " $ newclassstring $ " defaults to bStatic, Spawn probably won't work");

a = Spawn(newclass,,,loc);

if( a == None ) {
warning("ReplaceActor("$oldactor$", "$newclassstring$"), failed to spawn in location "$oldactor.Location);
oldactor.bHidden = false;
return None;
}
Expand All @@ -673,7 +681,6 @@ function Actor ReplaceActor(Actor oldactor, string newclassstring)
//Get it at the right height
a.move(a.PrePivot);
oldactor.bHidden = true;
oldactor.Destroy();
return a;
Expand Down
5 changes: 2 additions & 3 deletions DXRCore/DeusEx/Classes/DXRMenuSetupRando.uc
Original file line number Diff line number Diff line change
Expand Up @@ -244,9 +244,8 @@ function BindControls(optional string action)
NewMenuItem("Add Turrets", "Randomly adds turrets, cameras, and security computers for them.");
Slider(f.settings.turrets_add, 0, 10000);

NewMenuItem("", "Allow robots to get randomized weapons.");
EnumOption("Unchanged Robot Weapons", 0, f.settings.bot_weapons);
EnumOption("Random Robot Weapons", 4, f.settings.bot_weapons);
NewMenuItem("Robot Weapons Rando %", "Allow robots to get randomized weapons.");
Slider(f.settings.bot_weapons, 0, 100);

NewMenuItem("", "Allow non-humans to get randomized stats.");
EnumOption("Unchanged Non-human Stats", 0, f.settings.bot_stats);
Expand Down
2 changes: 1 addition & 1 deletion DXRCore/DeusEx/Classes/DXRVersion.uc
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ simulated static function CurrentVersion(optional out int major, optional out in
major=2;
minor=6;
patch=3;
build=1;//build can't be higher than 99
build=3;//build can't be higher than 99
}

simulated static function bool VersionIsStable()
Expand Down
2 changes: 1 addition & 1 deletion DXRMapFixups/DeusEx/Classes/DXRFixupM01.uc
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ function PostFirstEntryMapFixes()
foreach AllActors(class'DeusExMover', m, 'UN_maindoor') {
m.bBreakable = false;
m.bPickable = false;
m.bIsDoor = false;// this prevents Floyd from opening the door
m.bIsDoor = false;// this prevents Lloyd from opening the door
}
foreach AllActors(class'BlockPlayer', bp) {
if(bp.Group == 'waterblock') {
Expand Down
10 changes: 10 additions & 0 deletions DXRMapFixups/DeusEx/Classes/DXRFixupM06.uc
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ function PreFirstEntryMapFixes()
local DeusExMover d;
local DataLinkTrigger dt;
local ComputerSecurity cs;
local #var(prefix)ComputerPersonal cp;
local #var(prefix)Keypad pad;
local ProjectileGenerator pg;
local #var(prefix)WeaponNanoSword dts;
Expand All @@ -50,6 +51,7 @@ function PreFirstEntryMapFixes()
local #var(prefix)LaserTrigger lt;
local DXRButtonHoverHint buttonHint;
local DXRHoverHint hoverHint;
local int i;

local bool VanillaMaps;

Expand Down Expand Up @@ -472,6 +474,14 @@ function PreFirstEntryMapFixes()
}
}

foreach AllActors(class'#var(prefix)ComputerPersonal',cp){
for(i=0;i<ArrayCount(cp.UserList);i++){
if (cp.UserList[i].UserName=="ALL_SHIFTS"){
cp.UserList[i].Password="DATA_ENTRY"; //Make sure all the ALL_SHIFTS accounts have the same password
}
}
}

//Elevator to Market
foreach AllActors(class'#var(prefix)MapExit',exit,'change_floors01'){break;}
foreach AllActors(class'#var(prefix)Button1',button){
Expand Down
1 change: 0 additions & 1 deletion DXRMapFixups/DeusEx/Classes/DXRFixupParis.uc
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,6 @@ function PreFirstEntryMapFixes()
foreach AllActors(class'#var(prefix)BlackHelicopter',jock,'BlackHelicopter'){break;}
hoverHint = class'DXRTeleporterHoverHint'.static.Create(self, "", jock.Location, jock.CollisionRadius+5, jock.CollisionHeight+5, exit);
hoverHint.SetBaseActor(jock);

}
break;

Expand Down
6 changes: 6 additions & 0 deletions DXRMapFixups/DeusEx/Classes/DXRFixupVandenberg.uc
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,12 @@ function PreFirstEntryMapFixes()
door.bHighlight = true;
door.bFrobbable = true;
door.bPickable = false;// make sure DXRDoors sees this as an undefeatable door, also in vanilla this door is obviously not pickable due to not being frobbable

//Fix prepivot, since the upper door was set way off to the side. Just adjust both in the same way
//so that they are centered roughly in the middle of the door
door.BasePos = door.BasePos - vectm(door.PrePivot.X,door.PrePivot.Y,door.PrePivot.Z);
door.PrePivot=vect(0,0,0);
door.SetLocation(door.BasePos);
}
}
AddSwitch( vect(654.545,3889.5397,-367.262), rot(0, 16384, 0), 'ShedDoor');
Expand Down
51 changes: 50 additions & 1 deletion DXRMissions/DeusEx/Classes/DXRMissionsParis.uc
Original file line number Diff line number Diff line change
Expand Up @@ -230,21 +230,57 @@ function PreFirstEntryMapFixes()
{
local #var(prefix)WIB hela;
local #var(prefix)NanoKey key;
local #var(DeusExPrefix)Mover m;
local #var(prefix)ComputerPublic cp;
local bool VanillaMaps;

if( dxr.localURL == "10_PARIS_CATACOMBS_TUNNELS" ) {
VanillaMaps = class'DXRMapVariants'.static.IsVanillaMaps(player());

switch(dxr.localURL) {
case "10_PARIS_CATACOMBS_TUNNELS":
foreach AllActors(class'#var(prefix)WIB', hela) {
key = #var(prefix)NanoKey(GiveItem(hela,class'#var(prefix)NanoKey'));
key.Description="Catacombs Sewer Entry Key";
key.keyId='catacombs_blastdoor02';
break;
}
break;

case "10_PARIS_METRO":
if(VanillaMaps) {
key = Spawn(class'#var(prefix)NanoKey',,, vectm(-1733,-2480,168));
key.KeyID = 'apartment12';
key.Description = "Key to Apartment #12";
if(dxr.flags.settings.keysrando > 0)
GlowUp(key);

foreach AllActors(class'#var(DeusExPrefix)Mover', m){
if (m.Name=='DeusExMover10') {
m.KeyIDNeeded='apartment12';
break;
}
}

foreach AllActors(class'#var(prefix)ComputerPublic',cp){
//The two public computers in the lobby of the hostel become guest registries
if (cp.Name=='ComputerPublic2' || cp.Name=='ComputerPublic3'){
cp.TextPackage = "#var(package)";
cp.bulletinTag='10_HostelBulletinMenu';
cp.FamiliarName="Guest Registry";
cp.UnfamiliarName=cp.FamiliarName;
}
}
}
break;
}
}

function AfterMoveGoalToLocation(Goal g, GoalLocation Loc)
{
local DXREnemiesPatrols patrol;
local DXRPasswords passwords;
local #var(prefix)NanoKey key;
local string guestName;

if (g.name=="Agent Hela"){
if (Loc.Name=="Back of Bunker" || //Vanilla
Expand All @@ -267,4 +303,17 @@ function AfterMoveGoalToLocation(Goal g, GoalLocation Loc)
GlowUp(key);

}

if (Loc.name=="Hostel"){
if (g.name=="Jaime" && dxr.flagbase.GetBool('JaimeLeftBehind')){
guestName="Jaime Reyes";
} else if (g.name=="Nicolette"){
guestName="Nicolette DuClare";
}

passwords = DXRPasswords(dxr.FindModule(class'DXRPasswords'));
if(passwords != None && guestName != "") {
passwords.ReplacePassword(" Room 1 is currently unoccupied", " Guest: "$guestName);
}
}
}
14 changes: 8 additions & 6 deletions DXRModules/DeusEx/Classes/DXRAugmentations.uc
Original file line number Diff line number Diff line change
Expand Up @@ -273,12 +273,14 @@ function static RandomizeAugCannister(DXRando dxr, #var(prefix)AugmentationCanni
a.AddAugs[0] = augs[0].Name;
a.AddAugs[1] = augs[1].Name;

if(augs[0] != None && augs[1] != None)
a.ItemName = a.ItemName $": "$ augs[0].default.AugmentationName $ " / " $ augs[1].default.AugmentationName;
else if(augs[0] != None)
a.ItemName = a.ItemName $": "$ augs[0].default.AugmentationName;
else if(augs[1] != None)
a.ItemName = a.ItemName $": "$ augs[1].default.AugmentationName;
if(!#defined(vmd)) {
if(augs[0] != None && augs[1] != None)
a.ItemName = a.ItemName $": "$ augs[0].default.AugmentationName $ " / " $ augs[1].default.AugmentationName;
else if(augs[0] != None)
a.ItemName = a.ItemName $": "$ augs[0].default.AugmentationName;
else if(augs[1] != None)
a.ItemName = a.ItemName $": "$ augs[1].default.AugmentationName;
}
if( (a.AddAugs[0] == '#var(prefix)AugSpeed' || a.AddAugs[1] == '#var(prefix)AugSpeed') && !dxr.flags.IsReducedRando() ) {
dxr.flags.player().ClientMessage("Speed Enhancement is in this area.",, true);
Expand Down
5 changes: 4 additions & 1 deletion DXRModules/DeusEx/Classes/DXRAutosave.uc
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,10 @@ function FixPlayer(optional bool pos)

if(set_player_pos) {
p=player();
if(pos) p.SetLocation(player_pos - vect(0,0,16));// a foot lower so you don't raise up
if(pos) {
p.SetLocation(player_pos - vect(0,0,16));// a foot lower so you don't raise up
p.PutCarriedDecorationInHand();
}
p.ViewRotation = player_rot;
p.Velocity = vect(0,0,0);
p.Acceleration = vect(0,0,0);
Expand Down
6 changes: 5 additions & 1 deletion DXRModules/DeusEx/Classes/DXREnemies.uc
Original file line number Diff line number Diff line change
Expand Up @@ -218,17 +218,21 @@ function RandoEnemies(int percent, int hidden_percent)
_perc = percent;
if(p.bHidden) _perc = hidden_percent;

SetSeed("RandomizeSP " $ p.name);
if( _perc>=100 || chance_single(_perc) ) RandomizeSP(p, _perc);
SetSeed("CheckHelmet " $ p.name);
CheckHelmet(p);

if(p.bImportant && p.Tag != 'RaidingCommando') continue;
if(p.bInvincible) continue;
if( p.Region.Zone.bWaterZone || p.Region.Zone.bPainZone ) continue;

SetSeed("RandomEnemy " $ p.name);
if( _perc < 100 && chance_single(_perc) == false ) continue;

r = rng(enemy_multiplier*100+_perc);
for(i = r/100; i >= 0; i--) {
SetSeed("RandomEnemy " $ p.name @ i);
if(RandomEnemy(p, _perc) != None) new_enemies++;
}
}
Expand Down Expand Up @@ -298,7 +302,7 @@ function RandomizeSP(ScriptedPawn p, int percent)
GiveRandomWeapon(p, false, 2);
GiveRandomMeleeWeapon(p);
p.SetupWeapon(false);
} else if (IsRobot(p.Class) && dxr.flags.settings.bot_weapons!=0) {
} else if (IsRobot(p.Class) && chance_single(dxr.flags.settings.bot_weapons)) {
numWeapons = GetWeaponCount(p);
//Maybe it would be better if the bots *didn't* get their baseline weapons removed?
Expand Down
7 changes: 6 additions & 1 deletion DXRModules/DeusEx/Classes/DXREvents.uc
Original file line number Diff line number Diff line change
Expand Up @@ -818,6 +818,8 @@ function SetWatchFlags() {
bt = class'BingoTrigger'.static.Create(self,'TongTargets',vectm(-337.2,1826,40),40,100);
bt.MakeShootingTarget();

WatchFlag('PaulToTong');

break;
case "06_HONGKONG_HELIBASE":
bt = class'BingoTrigger'.static.Create(self,'purge',vectm(0,0,0));
Expand Down Expand Up @@ -2789,7 +2791,9 @@ static simulated function string GetBingoGoalHelpText(string event,int mission,
case "MeetRenault_Played":
return "Talk to Renault, in the Paris hostel. He is the man who asks you to steal zyme and will buy it from you.";
case "WarehouseSewerTunnel":
return "Swim through the underwater tunnel in the Warehouse District";
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.";
default:
return "Unable to find help text for event '"$event$"'|nReport this to the developers!";
}
Expand Down Expand Up @@ -3156,6 +3160,7 @@ defaultproperties
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)



Expand Down
Loading

0 comments on commit 686efcf

Please sign in to comment.