diff --git a/DXRBalance/DeusEx/Classes/AugBallistic.uc b/DXRBalance/DeusEx/Classes/AugBallistic.uc index 950ee04e4..6b0fc41c9 100644 --- a/DXRBalance/DeusEx/Classes/AugBallistic.uc +++ b/DXRBalance/DeusEx/Classes/AugBallistic.uc @@ -1,6 +1,8 @@ class DXRAugBallistic injects AugBallistic; +// vanilla level 1 is 0.80 (20%) but rounding causes it to show as 19% defaultproperties { bAutomatic=true + LevelValues(0)=0.799999 } diff --git a/DXRBalance/DeusEx/Classes/AugShield.uc b/DXRBalance/DeusEx/Classes/AugShield.uc index f3245b6c1..8dd9d68ee 100644 --- a/DXRBalance/DeusEx/Classes/AugShield.uc +++ b/DXRBalance/DeusEx/Classes/AugShield.uc @@ -1,6 +1,8 @@ class DXRAugShield injects AugShield; +// vanilla level 1 is 0.80 (20%) but rounding causes it to show as 19% defaultproperties { bAutomatic=true + LevelValues(0)=0.799999 } diff --git a/DXRCore/DeusEx/Classes/DXRVersion.uc b/DXRCore/DeusEx/Classes/DXRVersion.uc index 15882ae52..9fe13c5bb 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=7;//build can't be higher than 99 + build=9;//build can't be higher than 99 } simulated static function bool VersionIsStable() diff --git a/DXRModules/DeusEx/Classes/DXREnemiesPatrols.uc b/DXRModules/DeusEx/Classes/DXREnemiesPatrols.uc index 2fe4a9cbf..fd83b78b0 100644 --- a/DXRModules/DeusEx/Classes/DXREnemiesPatrols.uc +++ b/DXRModules/DeusEx/Classes/DXREnemiesPatrols.uc @@ -184,6 +184,8 @@ function bool _GivePatrol(ScriptedPawn pawn) function LinkPoints(DynamicPatrolPoint prev, DynamicPatrolPoint next) { local rotator lookAngle; + if(prev==None || next==None) return; + prev.Nextpatrol = next.Tag; prev.NextPatrolPoint = next; diff --git a/DXRModules/DeusEx/Classes/DXRFlags.uc b/DXRModules/DeusEx/Classes/DXRFlags.uc index 8dcb0ca19..0afabd6c9 100644 --- a/DXRModules/DeusEx/Classes/DXRFlags.uc +++ b/DXRModules/DeusEx/Classes/DXRFlags.uc @@ -539,9 +539,6 @@ function FlagsSettings SetDifficulty(int new_difficulty) settings.health = 100; settings.energy = 100; if(IsZeroRando()) { - seed = 0; - dxr.seed = seed; - bSetSeed = 1; settings.passwordsrandomized = 0; settings.enemystats = 0; settings.bot_stats = 0; diff --git a/DXRModules/DeusEx/Classes/DXRGrenades.uc b/DXRModules/DeusEx/Classes/DXRGrenades.uc index 66409ae06..f1091a7d5 100644 --- a/DXRModules/DeusEx/Classes/DXRGrenades.uc +++ b/DXRModules/DeusEx/Classes/DXRGrenades.uc @@ -74,6 +74,7 @@ function #var(prefix)ThrownProjectile SpawnNewPlantedGrenade(class<#var(prefix)T local #var(prefix)ThrownProjectile gren; gren = Spawn(type,owner,tag,loc,rot); + if(gren == None) return gren; gren.PlayAnim('Open'); gren.SetPhysics(PHYS_None); @@ -114,6 +115,7 @@ function FirstEntry() oldTag = grens[i].tag; oldEvent=grens[i].event; oldOwner=grens[i].owner; + grens[i].SetCollision(false,false,false); grens[i].Destroy(); gren = SpawnNewPlantedGrenade(PickRandomGrenade(),loc,rot,oldTag,oldEvent,oldOwner); diff --git a/DXRModules/DeusEx/Classes/DXRMemes.uc b/DXRModules/DeusEx/Classes/DXRMemes.uc index 3da61daca..39e9c621e 100644 --- a/DXRModules/DeusEx/Classes/DXRMemes.uc +++ b/DXRModules/DeusEx/Classes/DXRMemes.uc @@ -261,12 +261,12 @@ function AnyEntry() local #var(prefix)IonStormLogo islogo; local #var(prefix)EidosLogo elogo; local #var(prefix)ElectricityEmitter elec; - local #var(prefix)DXText text; local Actor a; local Rotator r; local Vector v; Super.AnyEntry(); + TitleScreenRandoLogo();// do this even when memes disabled if(!class'MenuChoice_ToggleMemes'.static.IsEnabled(dxr.flags)) return; switch(dxr.localURL) @@ -341,39 +341,6 @@ function AnyEntry() elec.move(v); } - - //Add me back in once we have "Randomizer" name textures! Just change the textures below - foreach AllActors(class'#var(prefix)DXText',text) - { - text.bHidden=True; //Hide all the original text - } - if (dxr.localURL=="DX"){ - text = Spawn(class'DXRText',,,vectm(-60.979568,57.046417,-137.022430),rotm(0,32768,0,0)); - text.Skin = None; - text = Spawn(class'DXRText',,,vectm(138.886353,57.125278,-137.022430),rotm(0,32768,0,0)); - text.Skin = Texture'DeusExDeco.Skins.DXTextTex2'; - - // Randomizer logo - v = vect(10, 57.15, -177.66);// midpoint - text = Spawn(class'DXRText',,,vectm(v.X - 100, v.Y, v.Z),rotm(0,32768,0,0)); - text.Skin = Texture'RandomizerTextTex1'; //Left half of "Randomizer" text texture - text = Spawn(class'DXRText',,,vectm(v.X + 100, v.Y, v.Z),rotm(0,32768,0,0)); - text.Skin = Texture'RandomizerTextTex2'; //Right half of "Randomizer" text texture - } else if (dxr.localURL=="DXONLY"){ - text = Spawn(class'DXRText',,,vectm(-62.015648,-55.260841,-139.022430),rotm(0,49136,0,0)); - text.Skin = None; - text = Spawn(class'DXRText',,,vectm(-61.787956,144.605042,-139.022430),rotm(0,49136,0,0)); - text.Skin = Texture'DeusExDeco.Skins.DXTextTex2'; - - // Randomizer logo - v = vect(-62, 10, -178.990417);// midpoint - text = Spawn(class'DXRText',,,vectm(v.X, v.Y - 100, v.Z),rotm(0,49136,0,0)); - text.Skin = Texture'RandomizerTextTex1'; //Left half of "Randomizer" text texture - text = Spawn(class'DXRText',,,vectm(v.X, v.Y + 100, v.Z),rotm(0,49136,0,0)); - text.Skin = Texture'RandomizerTextTex2'; //Right half of "Randomizer" text texture - } - - break; case "INTRO": @@ -391,6 +358,44 @@ function AnyEntry() } } +function TitleScreenRandoLogo() +{ + local #var(prefix)DXText text; + local vector v; + + if(dxr.localURL == "DXONLY" || dxr.localURL == "DX") { + foreach AllActors(class'#var(prefix)DXText',text) + { + text.bHidden=True; //Hide all the original text + } + } + if (dxr.localURL=="DX"){ + text = Spawn(class'DXRText',,,vectm(-60.979568,57.046417,-137.022430),rotm(0,32768,0,0)); + text.Skin = None; + text = Spawn(class'DXRText',,,vectm(138.886353,57.125278,-137.022430),rotm(0,32768,0,0)); + text.Skin = Texture'DeusExDeco.Skins.DXTextTex2'; + + // Randomizer logo + v = vect(10, 57.15, -177.66);// midpoint + text = Spawn(class'DXRText',,,vectm(v.X - 100, v.Y, v.Z),rotm(0,32768,0,0)); + text.Skin = Texture'RandomizerTextTex1'; //Left half of "Randomizer" text texture + text = Spawn(class'DXRText',,,vectm(v.X + 100, v.Y, v.Z),rotm(0,32768,0,0)); + text.Skin = Texture'RandomizerTextTex2'; //Right half of "Randomizer" text texture + } else if (dxr.localURL=="DXONLY"){ + text = Spawn(class'DXRText',,,vectm(-62.015648,-55.260841,-139.022430),rotm(0,49136,0,0)); + text.Skin = None; + text = Spawn(class'DXRText',,,vectm(-61.787956,144.605042,-139.022430),rotm(0,49136,0,0)); + text.Skin = Texture'DeusExDeco.Skins.DXTextTex2'; + + // Randomizer logo + v = vect(-62, 10, -178.990417);// midpoint + text = Spawn(class'DXRText',,,vectm(v.X, v.Y - 100, v.Z),rotm(0,49136,0,0)); + text.Skin = Texture'RandomizerTextTex1'; //Left half of "Randomizer" text texture + text = Spawn(class'DXRText',,,vectm(v.X, v.Y + 100, v.Z),rotm(0,49136,0,0)); + text.Skin = Texture'RandomizerTextTex2'; //Right half of "Randomizer" text texture + } +} + function FixEndgameEndCamera() { local CameraPoint cp; diff --git a/DXRModules/DeusEx/Classes/DXRMusic.uc b/DXRModules/DeusEx/Classes/DXRMusic.uc index 6727bb4dd..09fea315f 100644 --- a/DXRModules/DeusEx/Classes/DXRMusic.uc +++ b/DXRModules/DeusEx/Classes/DXRMusic.uc @@ -14,7 +14,7 @@ struct SongChoice { var config bool allowCombat; var config SongChoice choices[300];// keep size in sync with _GetLevelSong tchoices[] -var string skipped_songs[10];// copied back to defaults, so they get remembered across loading screens but not when you close the program, otherwise use the disable button instead of the change song button +var string skipped_songs[20];// copied back to defaults, so they get remembered across loading screens but not when you close the program, otherwise use the disable button instead of the change song button var int last_skipped_song; function CheckConfig() @@ -22,7 +22,7 @@ function CheckConfig() local int i, g; local string gamesongs[100]; - if( ConfigOlderThan(2,6,2,2) ) { + if( ConfigOlderThan(2,6,3,8) ) { allowCombat = default.allowCombat; for(i=0; i 0 ) { diff --git a/DeusEx.u b/DeusEx.u index 43edfea1d..f0c58c521 100644 Binary files a/DeusEx.u and b/DeusEx.u differ diff --git a/GMDXRandomizer.u b/GMDXRandomizer.u index 977867754..6befd45cf 100644 Binary files a/GMDXRandomizer.u and b/GMDXRandomizer.u differ diff --git a/GUI/DeusEx/Classes/MenuChoice_ChangeSong.uc b/GUI/DeusEx/Classes/MenuChoice_ChangeSong.uc index c34eb14e8..f9d9c07ba 100644 --- a/GUI/DeusEx/Classes/MenuChoice_ChangeSong.uc +++ b/GUI/DeusEx/Classes/MenuChoice_ChangeSong.uc @@ -13,7 +13,7 @@ function bool ButtonActivated( Window buttonPressed ) { local DXRMusicPlayer music; foreach player.AllActors(class'DXRMusicPlayer', music) { - music.PlayRandomSong(false); + music.SkipSong(); } return True; } diff --git a/GUI/DeusEx/Classes/MenuScreenCustomizeKeys.uc b/GUI/DeusEx/Classes/MenuScreenCustomizeKeys.uc index 920daea19..6058cac9a 100644 --- a/GUI/DeusEx/Classes/MenuScreenCustomizeKeys.uc +++ b/GUI/DeusEx/Classes/MenuScreenCustomizeKeys.uc @@ -18,14 +18,14 @@ struct S_KeyDisplayItem }; //Make sure to update all four of these when you add a new binding -var localized string FunctionText[65]; -var string MenuValues1[65]; -var string MenuValues2[65]; -var string AliasNames[65]; +var localized string FunctionText[67]; +var string MenuValues1[67]; +var string MenuValues2[67]; +var string AliasNames[67]; var string PendingCommands[100]; -var localized S_KeyDisplayItem keyDisplayNames[71]; +var localized S_KeyDisplayItem keyDisplayNames[73]; var localized string NoneText; var int Pending; var int selection; @@ -631,6 +631,8 @@ defaultproperties FunctionText(62)="Activate All Auto Augs" FunctionText(63)="Aug Tree By WCCC" FunctionText(64)="Toggle Autorun" + FunctionText(65)="Pause" + FunctionText(66)="Remove Item From Belt" AliasNames(0)="ParseLeftClick|Fire" AliasNames(1)="ParseRightClick" AliasNames(2)="DropItem" @@ -696,6 +698,8 @@ defaultproperties AliasNames(62)="ActivateAllAutoAugs" AliasNames(63)="OpenControllerAugWindow" AliasNames(64)="ToggleAutorun" + AliasNames(65)="Pause" + AliasNames(66)="RemoveBeltItem" keyDisplayNames(0)=(inputKey=IK_LeftMouse,displayName="Left Mouse Button") keyDisplayNames(1)=(inputKey=IK_RightMouse,displayName="Right Mouse Button") keyDisplayNames(2)=(inputKey=IK_MiddleMouse,displayName="Middle Mouse Button") @@ -767,6 +771,8 @@ defaultproperties keyDisplayNames(68)=(inputKey=IK_Backspace,displayName="Backspace") keyDisplayNames(69)=(inputKey=IK_Shift,displayName="Shift") keyDisplayNames(70)=(inputKey=IK_Space,displayName="Space") + keyDisplayNames(71)=(inputKey=IK_Pause,displayName="Pause") + keyDisplayNames(72)=(inputKey=IK_Tilde,displayName="Tilde") NoneText="[None]" strHeaderActionLabel="Action" strHeaderAssignedLabel="Assigned Key/Button" diff --git a/HXRandomizer.u b/HXRandomizer.u index 8ce876648..daa16cd67 100644 Binary files a/HXRandomizer.u and b/HXRandomizer.u differ diff --git a/README.md b/README.md index 6bd8e7c4a..4c04bceb3 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ If you don't know what Deus Ex Randomizer is, then here's our old trailer which * WaltonWare mode - A quick option to get into the game without the time commitment of the full game! You start in a random mission and win by completing one bingo. As New Game+ keeps making it harder, see how fast you can complete them or how many you can complete! * WaltonWare Entrance Rando - both modes combined! * Zero Rando - great for first-time Deus Ex players to benefit from the bug fixes, QoL improvements, and balance changes we've made, without any randomization. - * Zero Changes mode: This one is for the purists. Use our new installer program and it will do compatibility fixes for the vanilla game (Kentie's Launcher, D3D10, DXVK, Engine.dll fix, and more), then just run DeusEx.exe as normal and the gameplay will be unchanged but with high frame rates and resolutions! + * DXRVanillaFixer: This one is for the purists. Use our new installer program and it will do compatibility fixes for the vanilla game (Kentie's Launcher, D3D10, DXVK, Engine.dll fix, and more), then just run DeusEx.exe as normal and the gameplay will be unchanged but with high frame rates and resolutions! * Randomizer Lite - randomizes some things without interfering with the immersion and mood of the game. Great for players who haven't played Deus Ex in a long time, or if you're intimidated by the full Randomizer. * Randomizer Medium - similar to Randomizer Lite but with more randomization features enabled by default. Remember you can tweak the settings in the Advanced menu to play with any randomization level you want. * Serious Sam mode - same as the normal game but with 10x as many enemies. The player has increased health and takes reduced damage to compensate. diff --git a/RevRandomizer.u b/RevRandomizer.u index 8fb70292e..fd3590d22 100644 Binary files a/RevRandomizer.u and b/RevRandomizer.u differ diff --git a/VMDRandomizer.u b/VMDRandomizer.u index 4e4b72d40..61e304f53 100644 Binary files a/VMDRandomizer.u and b/VMDRandomizer.u differ diff --git a/installer/GUI/InstallerWindow.py b/installer/GUI/InstallerWindow.py index 7cea16b14..df6c9bc1a 100644 --- a/installer/GUI/InstallerWindow.py +++ b/installer/GUI/InstallerWindow.py @@ -196,7 +196,7 @@ def ExeTypeRadios(self, padx, pad): def ZeroChangesCheckbox(self, padx, pady): # "Zero Changes" mode fixes v = BooleanVar(master=self.frame, value=True) - c = Checkbutton(self.frame, text=" Apply compatibility fixes for DeusEx.exe\n(Zero Changes mode)", variable=v) + c = Checkbutton(self.frame, text="DXRVanillaFixer\n Apply compatibility fixes for DeusEx.exe", variable=v) Hovertip(c, "Apply all the fixes for DeusEx.exe, so you can play without Randomizer's changes.\nThis is like a \"Zero Changes\" mode as opposed to DXRando's \"Zero Rando\" mode.\nOnly has an effect when using a separate DXRando.exe for the Randomized modes\nor when not installing DXRando.") c.grid(column=1,row=self.row, sticky='SW', padx=padx, pady=pady) self.row += 1