Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v2.5.2 #506

Merged
merged 25 commits into from
Aug 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
257f3b7
Fix Cremation, CathedralUnderwater, and WanChaiStores bingo goals for
theastropath Aug 24, 2023
7c451d6
Merge branch 'develop' of https://github.com/Die4Ever/deus-ex-randomizer
theastropath Aug 24, 2023
fd1039a
Make "decorative" inventory items in Revision grabbable
theastropath Aug 25, 2023
cc8d542
CrateUnbreakableLarge 500hp instead of 2000
Die4Ever Aug 25, 2023
27e312b
fix inventory stacking from ParseLeftClick() (#426)
Die4Ever Aug 25, 2023
547ef79
fix inventory stacking from ParseLeftClick() (#426)
Die4Ever Aug 25, 2023
a76e907
autosave tweaks
Die4Ever Aug 26, 2023
bd9ba54
autosave cleanup
Die4Ever Aug 26, 2023
aa95ad9
v2.5.2.7 Beta builds
Die4Ever Aug 26, 2023
8797d03
menu option for show teleporter icons (#483)
Die4Ever Aug 26, 2023
40dd579
option for autosave during combat
Die4Ever Aug 26, 2023
72555a9
v2.5.2.8 Beta builds
Die4Ever Aug 26, 2023
87701a3
fix datalinkplay overwriting dataLinkTrigger early
Die4Ever Aug 27, 2023
931e83a
autosaves tweak timing
Die4Ever Aug 27, 2023
cc9af6c
v2.5.2.9 Beta builds
Die4Ever Aug 28, 2023
4a4426c
maybe fix invisible carcasses in water?
Die4Ever Aug 28, 2023
7b9958b
Update help text for Party with the Triads bingo goal
theastropath Aug 29, 2023
5d25ddc
reduce visor chances
Die4Ever Aug 30, 2023
89c0074
aug vision level 1 can see items, now the only distinction between le…
Die4Ever Aug 30, 2023
8f10874
remove Le Merchant from Zero Rando
Die4Ever Aug 30, 2023
09f4d76
fix reset skills to defaults exploit in Impossible difficulty
Die4Ever Aug 30, 2023
1dfadb7
slight tweak to Impossible score due to reduced enemystats flag
Die4Ever Aug 30, 2023
c5bf083
v2.5.2.10 Beta builds
Die4Ever Aug 30, 2023
e19dd65
fix ElectricityEmitter 0 damage
Die4Ever Aug 31, 2023
aa5266b
v2.5.2.11 release candidates
Die4Ever Aug 31, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/release_template.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Download `DXRandoInstaller.zip` in the Assets section under the changelog.
Download `DXRandoInstaller.exe` in the Assets section under the changelog.

If you're having an issue with the installer program: [Manual Installation Instructions for Vanilla, Lay D Denton, GMDX, Revision, HX co-op, and Vanilla? Madder.](https://github.com/Die4Ever/deus-ex-randomizer/wiki/Installation-Instructions-and-performance-tweaks)

Expand Down Expand Up @@ -27,4 +27,4 @@ If you don't know what Deus Ex Randomizer is, then here's our old trailer which
*
</details>

Download `DXRandoInstaller.zip` in the Assets section right below this line:
Download `DXRandoInstaller.exe` in the Assets section right below this line:
8 changes: 6 additions & 2 deletions DXRBalance/DeusEx/Classes/AugDisplayWindow.uc
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ function bool ShouldDrawActor(Actor A)
if(A.bHidden)
return false;

if( visionLevel >= 2 && (Inventory(A) != None || InformationDevices(A) != None || ElectronicDevices(A) != None || Containers(A) != None || Vehicles(A) != None) )
if( Inventory(A) != None || InformationDevices(A) != None || ElectronicDevices(A) != None || Containers(A) != None || Vehicles(A) != None )
return true;

if(!A.bVisionImportant)
Expand Down Expand Up @@ -287,6 +287,7 @@ function DrawTargetAugmentation(GC gc)
local string str,teleDest;
local float x,y,h,w, boxCX,boxCY;
local DynamicTeleporter dynTele;
local int show_teleporters;

gc.SetFont(Font'FontMenuSmall_DS'); //This font is so much better for everything

Expand All @@ -297,7 +298,10 @@ function DrawTargetAugmentation(GC gc)
Player.Weapon = oldWeapon;

// check 500 feet in front of the player
tgtTeleporter = TraceTeleporter(8000,AimLocation);
show_teleporters = int(Player.ConsoleCommand("get #var(package).MenuChoice_ShowTeleporters show_teleporters"));
if(show_teleporters > 1) {
tgtTeleporter = TraceTeleporter(8000,AimLocation);
}

// display teleporter destinations
if (tgtTeleporter!=None && tgtTeleporter.URL!="")
Expand Down
4 changes: 2 additions & 2 deletions DXRCore/DeusEx/Classes/DXRVersion.uc
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ simulated static function CurrentVersion(optional out int major, optional out in
major=2;
minor=5;
patch=2;
build=6;//build can't be higher than 99
build=11;//build can't be higher than 99
}

simulated static function string VersionString(optional bool full)
{
local int major,minor,patch,build;
local string status;

status = "Beta";
status = "";

if(status!="") {
status = " " $ status;
Expand Down
7 changes: 5 additions & 2 deletions DXRFixes/DeusEx/Classes/Carcass2.uc
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ var(Display) mesh Mesh3; // mesh for floating carcass

simulated function PreBeginPlay()
{
SetMesh2(Mesh2);
SetMesh3(Mesh3);
Super.PreBeginPlay();
if(Mesh2 != None)
SetMesh2(Mesh2);
if(Mesh3 != None)
SetMesh3(Mesh3);
}
2 changes: 1 addition & 1 deletion DXRFixes/DeusEx/Classes/ElectricityEmitter.uc
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ function CalcTrace(float deltaTime)
//Scale damage for the player, since they get a combat difficulty multiplier
//This helps with the Vandenberg computer room, the electricity in the Aquinas Substation
//and the Hong Kong Helibase (and many more)
if (HitActor.IsA('#var(PlayerPawn)')){
if (HitActor.IsA('#var(PlayerPawn)') && damageAmt > 0){
damageAmt = Clamp(damageAmount / (#var(PlayerPawn)(HitActor).CombatDifficulty),1,damageAmount);
}

Expand Down
42 changes: 22 additions & 20 deletions DXRMapFixups/DeusEx/Classes/DXRFixupParis.uc
Original file line number Diff line number Diff line change
Expand Up @@ -167,27 +167,29 @@ function AnyEntryMapFixes()
switch(dxr.localURL)
{
case "10_PARIS_CATACOMBS":
// spawn Le Merchant with a hazmat suit because there's no guarantee of one before the highly radioactive area
// we need to do this in AnyEntry because we need to recreate the conversation objects since they're transient
npcs = DXRNPCs(dxr.FindModule(class'DXRNPCs'));
if(npcs != None) {
sp = npcs.CreateForcedMerchant("Le Merchant", 'lemerchant', vectm(-3209.483154, 5190.826172,1199.610352), rotm(0, -10000, 0, 16384), class'#var(prefix)HazMatSuit');
m = Merchant(sp);
if (m!=None){ // CreateForcedMerchant returns None if he already existed, but we still need to call it to recreate the conversation since those are transient
m.MakeFrench();
if(!dxr.flags.IsReducedRando()) {
// spawn Le Merchant with a hazmat suit because there's no guarantee of one before the highly radioactive area
// we need to do this in AnyEntry because we need to recreate the conversation objects since they're transient
npcs = DXRNPCs(dxr.FindModule(class'DXRNPCs'));
if(npcs != None) {
sp = npcs.CreateForcedMerchant("Le Merchant", 'lemerchant', vectm(-3209.483154, 5190.826172,1199.610352), rotm(0, -10000, 0, 16384), class'#var(prefix)HazMatSuit');
m = Merchant(sp);
if (m!=None){ // CreateForcedMerchant returns None if he already existed, but we still need to call it to recreate the conversation since those are transient
m.MakeFrench();
}
}
// give him weapons to defend himself
dxre = DXREnemies(dxr.FindModule(class'DXREnemies'));
if(dxre != None && sp != None) {
sp.bKeepWeaponDrawn = true;
GiveItem(sp, class'#var(prefix)WineBottle');
dxre.RandomizeSP(sp, 100);
RemoveFears(sp);
sp.ChangeAlly('Player', 0.0, false);
sp.MaxProvocations = 0;
sp.AgitationSustainTime = 3600;
sp.AgitationDecayRate = 0;
}
}
// give him weapons to defend himself
dxre = DXREnemies(dxr.FindModule(class'DXREnemies'));
if(dxre != None && sp != None) {
sp.bKeepWeaponDrawn = true;
GiveItem(sp, class'#var(prefix)WineBottle');
dxre.RandomizeSP(sp, 100);
RemoveFears(sp);
sp.ChangeAlly('Player', 0.0, false);
sp.MaxProvocations = 0;
sp.AgitationSustainTime = 3600;
sp.AgitationDecayRate = 0;
}
break;
case "10_PARIS_CATACOMBS_TUNNELS":
Expand Down
16 changes: 8 additions & 8 deletions DXRMapFixups/DeusEx/Classes/DXRFixupVandenberg.uc
Original file line number Diff line number Diff line change
Expand Up @@ -155,16 +155,16 @@ function PreFirstEntryMapFixes()
RemoveFears(hs);
hs.MinHealth = 0;
hs.BaseAccuracy *= 0.1;

GiveItem(hs, class'#var(prefix)BallisticArmor');
if(!dxr.flags.IsReducedRando()) {
dxre = DXREnemies(dxr.FindModule(class'DXREnemies'));
if(dxre != None) {
dxre.GiveRandomWeapon(hs, false, 2);
dxre.GiveRandomMeleeWeapon(hs);
}
hs.FamiliarName = "Howard Stronger";
hs.UnfamiliarName = "Howard Stronger";
dxre = DXREnemies(dxr.FindModule(class'DXREnemies'));
if(dxre != None) {
dxre.GiveRandomWeapon(hs, false, 2);
dxre.GiveRandomMeleeWeapon(hs);
}
hs.FamiliarName = "Howard Stronger";
hs.UnfamiliarName = "Howard Stronger";

if(!#defined(vmd)) {// vmd allows AI to equip armor, so maybe he doesn't need the health boost?
SetPawnHealth(hs, 200);
}
Expand Down
2 changes: 1 addition & 1 deletion DXRModules/DeusEx/Classes/DXRAugmentations.uc
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ simulated function RandoAug(Augmentation a)
add_desc = "DXRando: Activating this aug instantly burns 1 energy in order to prevent abuse. ";
}
else if( #var(prefix)AugVision(a) != None ) {
add_desc = "DXRando: At level 1 you can see characters and goals. At level 2 you can also see items, datacubes, vehicles, crates, and electronic devices. ";
add_desc = "DXRando: You can see characters, goals, items, datacubes, vehicles, crates, and electronic devices through walls. ";
}
else if( #var(prefix)AugLight(a) != None ) {
add_desc = "DXRando: The light is much brighter and doesn't use any energy. ";
Expand Down
81 changes: 67 additions & 14 deletions DXRModules/DeusEx/Classes/DXRAutosave.uc
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ class DXRAutosave extends DXRActorsBase transient;

var transient bool bNeedSave;
var config float save_delay;
var transient float save_timer;
var transient int autosave_combat;

const Disabled = 0;
const FirstEntry = 1;
Expand All @@ -11,18 +13,25 @@ const ExtraSafe = 4;

function CheckConfig()
{
if( ConfigOlderThan(2,5,0,9) ) {
save_delay = 0.7;
if( ConfigOlderThan(2,5,2,9) ) {
save_delay = 0.1;
}
Super.CheckConfig();
autosave_combat = int(ConsoleCommand("get #var(package).MenuChoice_AutosaveCombat autosave_combat"));
}

function PostFirstEntry()
function BeginPlay()
{
Super.PostFirstEntry();
l("PostFirstEntry() " $ dxr.dxInfo.MissionNumber);
Super.BeginPlay();
Disable('Tick');
}

function PreFirstEntry()
{
Super.PreFirstEntry();
l("PreFirstEntry() " $ dxr.dxInfo.MissionNumber);
if( dxr.dxInfo != None && dxr.dxInfo.MissionNumber > 0 && dxr.dxInfo.MissionNumber < 98 && dxr.flags.autosave > 0 ) {
bNeedSave=true;
NeedSave();
}
}

Expand All @@ -31,20 +40,60 @@ function ReEntry(bool IsTravel)
Super.ReEntry(IsTravel);
l("ReEntry() " $ dxr.dxInfo.MissionNumber);
if( dxr.dxInfo != None && dxr.dxInfo.MissionNumber > 0 && dxr.dxInfo.MissionNumber < 98 && dxr.flags.autosave>=EveryEntry && dxr.flags.autosave != Hardcore && IsTravel ) {
bNeedSave=true;
NeedSave();
}
}

function PostAnyEntry()
{
if( bNeedSave )
SetTimer(save_delay, True);
if(bNeedSave)
NeedSave();
}

function NeedSave()
{
bNeedSave = true;
save_timer = save_delay;
Enable('Tick');
if(autosave_combat>0 || !PawnIsInCombat(player()))
SetGameSpeed(0);
}

function SetGameSpeed(float s)
{
local MissionScript mission;

s = FMax(s, 0.01);// ServerSetSloMo only goes down to 0.1
if(s == Level.Game.GameSpeed) return;
Level.Game.GameSpeed = s;
Level.TimeDilation = s;
Level.Game.SetTimer(s, true);
Level.Game.SaveConfig();
Level.Game.GameReplicationInfo.SaveConfig();

// we need the mission script to clear PlayerTraveling
if(s <= 0.1) s /= 2;// might as well run the timer faster?
foreach AllActors(class'MissionScript', mission) {
mission.SetTimer(mission.checkTime * s, true);
}
}

function Timer()
function Tick(float delta)
{
if( bNeedSave )
doAutosave();
delta /= Level.Game.GameSpeed;
delta = FClamp(delta, 0.01, 0.05);// a single slow frame should not expire the timer by itself
save_timer -= delta;
if(bNeedSave) {
if(save_timer <= 0) {
doAutosave();
}
}
else if(save_timer <= 0) {
SetGameSpeed(1);
Disable('Tick');
} else {
SetGameSpeed(0);
}
}

static function bool AllowManualSaves(DeusExPlayer player)
Expand All @@ -66,6 +115,8 @@ function doAutosave()
local int lastMission;
local bool isDifferentMission;

save_timer = save_delay;

if( dxr == None ) {
info("dxr == None, doAutosave() not saving yet");
return;
Expand All @@ -82,8 +133,9 @@ function doAutosave()

p = player();

if(PawnIsInCombat(p)) {
if(autosave_combat<=0 && PawnIsInCombat(p)) {
info("waiting for Player to be out of combat, not saving yet");
SetGameSpeed(1);
return;
}

Expand Down Expand Up @@ -115,10 +167,11 @@ function doAutosave()
dxr.flags.f.SetInt('Rando_lastmission', dxr.dxInfo.MissionNumber,, 999);

info("doAutosave() " $ lastMission @ dxr.dxInfo.MissionNumber @ saveSlot @ saveName @ p.GetStateName() @ save_delay);
SetTimer(0, False);
bNeedSave = false;
SetGameSpeed(1);
class'DXRStats'.static.IncDataStorageStat(p, "DXRStats_autosaves");
p.SaveGame(saveSlot, saveName);
SetGameSpeed(0);

if( interruptedDL != None ) {
p.dataLinkPlay = interruptedDL;
Expand Down
2 changes: 1 addition & 1 deletion DXRModules/DeusEx/Classes/DXREnemies.uc
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ function CheckHelmet(ScriptedPawn p)
// that way the game gets harder as you progress to enemies that typically have helmets

if(#defined(injections)) // visors only work in vanilla due to our change in ScriptedPawn, so leave the chance to 0 for other mods
visor_chance = dxr.flags.settings.enemystats / 2;
visor_chance = dxr.flags.settings.enemystats / 3;

// augs shouldn't get visors that cover their face
if(NSFCloneAugStealth1(p) != None || NSFCloneAugTough1(p) != None || NSFCloneAugShield1(p) != None
Expand Down
Loading