diff --git a/DXRBalance/DeusEx/Classes/AugEMP.uc b/DXRBalance/DeusEx/Classes/AugEMP.uc index 3b7376cea..802a6db75 100644 --- a/DXRBalance/DeusEx/Classes/AugEMP.uc +++ b/DXRBalance/DeusEx/Classes/AugEMP.uc @@ -4,7 +4,7 @@ function PostPostBeginPlay() { Super.PostPostBeginPlay(); // DXRando: AugEMP makes you immune to Scramble Grenades - default.Description = "Nanoscale EMP generators partially protect individual nanites and reduce bioelectrical drain by canceling incoming pulses." + default.Description = "Nanoscale EMP generators partially protect individual nanites and reduce bioelectrical drain by canceling incoming pulses. " $ "All levels make you immune to Scramble Grenades." $ "|n|nTECH ONE: Damage from EMP attacks is reduced slightly." $ "|n|nTECH TWO: Damage from EMP attacks is reduced moderately." diff --git a/DXRBalance/DeusEx/Classes/BalanceAugHealing.uc b/DXRBalance/DeusEx/Classes/BalanceAugHealing.uc index fbeeabc52..1e8833baf 100644 --- a/DXRBalance/DeusEx/Classes/BalanceAugHealing.uc +++ b/DXRBalance/DeusEx/Classes/BalanceAugHealing.uc @@ -57,7 +57,7 @@ function HealPart(out int points, out int amt) { local int max; - max = Int(LevelValues[CurrentLevel]); + max = Int(GetAugLevelValue()); HealPartMax(points, amt, max); } @@ -71,7 +71,7 @@ function HealPartMax(out int points, out int amt, int max) local int spill; max = Min(max, Player.default.HealthTorso); - max = Min(max, LevelValues[CurrentLevel]); + max = Min(max, GetAugLevelValue()); if(points >= max) return; if(amt <= 0) return; @@ -89,7 +89,7 @@ function HealPartMax(out int points, out int amt, int max) function bool NeedsHeal() { local int i; - i = Int(LevelValues[CurrentLevel]); + i = Int(GetAugLevelValue()); return Player.HealthHead < Min(i, Player.default.HealthHead) || Player.HealthTorso < Min(i, Player.default.HealthTorso) || Player.HealthLegRight < Min(i, Player.default.HealthLegRight) diff --git a/DXRCore/DeusEx/Classes/DXRVersion.uc b/DXRCore/DeusEx/Classes/DXRVersion.uc index 5ac7941ad..5621acd79 100644 --- a/DXRCore/DeusEx/Classes/DXRVersion.uc +++ b/DXRCore/DeusEx/Classes/DXRVersion.uc @@ -5,12 +5,12 @@ simulated static function CurrentVersion(optional out int major, optional out in major=3; minor=2; patch=2; - build=1;//build can't be higher than 99 + build=2;//build can't be higher than 99 } simulated static function bool VersionIsStable() { - return false; + return true; } simulated static function string VersionString(optional bool full) @@ -18,7 +18,7 @@ simulated static function string VersionString(optional bool full) local int major,minor,patch,build; local string status; - status = "Alpha"; + status = ""; if(status!="") { status = " " $ status; diff --git a/DXRCore/DeusEx/Classes/Telemetry.uc b/DXRCore/DeusEx/Classes/Telemetry.uc index 50a5687dd..7af8116d4 100644 --- a/DXRCore/DeusEx/Classes/Telemetry.uc +++ b/DXRCore/DeusEx/Classes/Telemetry.uc @@ -61,6 +61,7 @@ function int SendText( coerce string Str ) function HTTPError(int Code) { log(Self$": HTTPError: " $ Code); + module.HTTPError(Code); Super.HTTPError(Code); } @@ -116,7 +117,10 @@ function Done() ServerIpAddr.Addr = module.GetAddrFromCache(); } running = false; - if( ServerIpAddr.Addr == 0 ) return; + if( ServerIpAddr.Addr == 0 ) { + module.HTTPError(0); + return; + } i = Len(content[start]); if( i > 0 ) { log(Self$": coming back for "$i$" more!"); diff --git a/DXRMapFixups/DeusEx/Classes/DXRFixupM02.uc b/DXRMapFixups/DeusEx/Classes/DXRFixupM02.uc index 7b02bbae2..bff7c77fd 100644 --- a/DXRMapFixups/DeusEx/Classes/DXRFixupM02.uc +++ b/DXRMapFixups/DeusEx/Classes/DXRFixupM02.uc @@ -359,6 +359,7 @@ function CreateAnsweringMachineConversation(Actor tad) function PostFirstEntryMapFixes() { local bool RevisionMaps; + local Female2 female; RevisionMaps = class'DXRMapVariants'.static.IsRevisionMaps(player()); @@ -380,6 +381,14 @@ function PostFirstEntryMapFixes() Spawn(class'#var(prefix)FireExtinguisher',,, GetRandomPositionFine()); } + break; + case "02_NYC_BAR": + foreach AllActors(class'Female2', female, 'Female2') { + if (female.bindName == "BarWoman1") { + female.FamiliarName = "Meg"; + break; + } + } break; } } diff --git a/DXRMapFixups/DeusEx/Classes/DXRFixupM04.uc b/DXRMapFixups/DeusEx/Classes/DXRFixupM04.uc index 3b2b367bf..35ace6bfa 100644 --- a/DXRMapFixups/DeusEx/Classes/DXRFixupM04.uc +++ b/DXRMapFixups/DeusEx/Classes/DXRFixupM04.uc @@ -56,6 +56,8 @@ function PreFirstEntryMapFixes() local #var(prefix)HumanCivilian hc; local Teleporter tel; local DynamicTeleporter dtel; + local #var(prefix)LaserTrigger lt; + local #var(prefix)Datacube dc; VanillaMaps = class'DXRMapVariants'.static.IsVanillaMaps(player()); @@ -364,6 +366,13 @@ function PreFirstEntryMapFixes() } } + foreach AllActors(class'#var(prefix)Datacube', dc) { + if (dc.textTag == '04_Datacube03') { + dc.TextPackage = "#var(package)"; + break; + } + } + break; case "04_NYC_SMUG": @@ -378,6 +387,14 @@ function PreFirstEntryMapFixes() class'MoverToggleTrigger'.static.CreateMTT(self, 'DXRSmugglerElevatorUsed', 'elevatorbutton', 1, 0, 0.0, 5); break; + + case "04_NYC_UNDERGROUND": + foreach AllActors(class'#var(prefix)LaserTrigger',lt){ + if (lt.Location.Z < -574 && lt.Location.Z > -575){ + lt.SetLocation(lt.Location+vect(0,0,11)); //Move them slightly higher up to match their location in mission 2, so you can crouch under + } + } + break; } } diff --git a/DXRMapFixups/DeusEx/Classes/DXRFixupM08.uc b/DXRMapFixups/DeusEx/Classes/DXRFixupM08.uc index 74c71b280..fddb7f732 100644 --- a/DXRMapFixups/DeusEx/Classes/DXRFixupM08.uc +++ b/DXRMapFixups/DeusEx/Classes/DXRFixupM08.uc @@ -296,7 +296,7 @@ function PreFirstEntryMapFixes() case "08_NYC_UNDERGROUND": foreach AllActors(class'#var(prefix)LaserTrigger',lt){ if (lt.Location.Z < -574 && lt.Location.Z > -575){ - lt.SetLocation(lt.Location+vect(0,0,11)); //Move them slightly higher up to match their location in missions 2 and 4, so you can crouch under + lt.SetLocation(lt.Location+vect(0,0,11)); //Move them slightly higher up to match their location in mission 2, so you can crouch under } } } diff --git a/DXRMissions/DeusEx/Classes/DXRMissionsM02.uc b/DXRMissions/DeusEx/Classes/DXRMissionsM02.uc index 5006f963b..5d4f529c1 100644 --- a/DXRMissions/DeusEx/Classes/DXRMissionsM02.uc +++ b/DXRMissions/DeusEx/Classes/DXRMissionsM02.uc @@ -50,31 +50,17 @@ function int InitGoals(int mission, string map) AddGoalActor(goal, 3, 'AmbientSoundTriggered0', PHYS_None); AddGoalActor(goal, 4, 'AmbientSoundTriggered1', PHYS_None); - if (FeatureFlag(3,3,0, "M02GeneratorRework")){ - AddGoalLocation("02_NYC_WAREHOUSE", "Warehouse", GOAL_TYPE1 | VANILLA_GOAL, vect(575,-608,122), rot(32768, -16384, 0)); - generator_alley = AddGoalLocation("02_NYC_WAREHOUSE", "Alley", GOAL_TYPE1, vect(-550, 1700, 110), rot(0,32768,-16384)); - AddMutualExclusion(generator_alley, jock_sewer);// too easy - AddGoalLocation("02_NYC_WAREHOUSE", "Apartment", GOAL_TYPE1, vect(460,1130,1000), rot(0,32768,-16384)); - AddGoalLocation("02_NYC_WAREHOUSE", "Basement", GOAL_TYPE1, vect(300,-480,-125), rot(0,-16384,-16384)); - generator_sewer = AddGoalLocation("02_NYC_WAREHOUSE", "Sewer", GOAL_TYPE1, vect(-1695,784,-210), rot(32768,-32768,0)); - AddMutualExclusion(generator_sewer, jock_sewer);// can't put Jock and the generator both in the sewers - //This location works now (with the rework), but we can wait on enabling it until we feel like we want to ruin runs - //AddGoalLocation("02_NYC_WAREHOUSE", "3rd Floor", GOAL_TYPE1, vect(1340, -700, 575), rot(32768, 0, 32768)); //Near the ramp - //AddGoalLocation("02_NYC_WAREHOUSE", "4th Floor", GOAL_TYPE1, vect(390,-660,832), rot(32768,0,0)); //Among the boxes - - } else { - AddGoalLocation("02_NYC_WAREHOUSE", "Warehouse", GOAL_TYPE1 | VANILLA_GOAL, vect(576.000000, -512.000000, 71.999939), rot(32768, -16384, 0)); - generator_alley = AddGoalLocation("02_NYC_WAREHOUSE", "Alley", GOAL_TYPE1, vect(-640.000000, 1760.000000, 128.000000), rot(0,32768,-16384)); - AddMutualExclusion(generator_alley, jock_sewer);// too easy - AddGoalLocation("02_NYC_WAREHOUSE", "Apartment", GOAL_TYPE1, vect(368.000000, 1248.000000, 992.000000), rot(0,32768,-16384)); - AddGoalLocation("02_NYC_WAREHOUSE", "Basement", GOAL_TYPE1, vect(224, -512, -192), rot(0,-16384,-16384)); - generator_sewer = AddGoalLocation("02_NYC_WAREHOUSE", "Sewer", GOAL_TYPE1, vect(-1600.000000, 784.000000, -256.000000), rot(32768,-32768,0)); - - // pawns run into these and break them - //AddGoalLocation("02_NYC_WAREHOUSE", "3rd Floor", GOAL_TYPE1, vect(1360.000000, -512.000000, 528.000000), rot(32768, -16384, 0)); - //AddGoalLocation("02_NYC_WAREHOUSE", "3rd Floor Corner", GOAL_TYPE1, vect(1600, -1136.000000, 540), rot(32768, 16384, 0)); + AddGoalLocation("02_NYC_WAREHOUSE", "Warehouse", GOAL_TYPE1 | VANILLA_GOAL, vect(575,-608,122), rot(32768, -16384, 0)); + generator_alley = AddGoalLocation("02_NYC_WAREHOUSE", "Alley", GOAL_TYPE1, vect(-550, 1700, 110), rot(0,32768,-16384)); + AddMutualExclusion(generator_alley, jock_sewer);// too easy + AddGoalLocation("02_NYC_WAREHOUSE", "Apartment", GOAL_TYPE1, vect(460,1130,1000), rot(0,32768,-16384)); + AddGoalLocation("02_NYC_WAREHOUSE", "Basement", GOAL_TYPE1, vect(300,-480,-125), rot(0,-16384,-16384)); + generator_sewer = AddGoalLocation("02_NYC_WAREHOUSE", "Sewer", GOAL_TYPE1, vect(-1695,784,-210), rot(32768,-32768,0)); + AddMutualExclusion(generator_sewer, jock_sewer);// can't put Jock and the generator both in the sewers + //This location works now (with the rework), but we can wait on enabling it until we feel like we want to ruin runs + //AddGoalLocation("02_NYC_WAREHOUSE", "3rd Floor", GOAL_TYPE1, vect(1340, -700, 575), rot(32768, 0, 32768)); //Near the ramp + //AddGoalLocation("02_NYC_WAREHOUSE", "4th Floor", GOAL_TYPE1, vect(390,-660,832), rot(32768,0,0)); //Among the boxes - } AddMutualExclusion(generator_sewer, jock_sewer);// can't put Jock and the generator both in the sewers @@ -254,7 +240,7 @@ function PreFirstEntryMapFixes() if(dxr.localURL=="02_NYC_WAREHOUSE") { ConsoleCommand("set #var(prefix)AmbientSoundTriggered bstatic false");// HACK? maybe better than creating a new subclass for DynamicSoundTriggered and then doing replacements - if (!RevisionMaps && FeatureFlag(3,3,0, "M02GeneratorRework")){ + if (!RevisionMaps){ foreach AllActors(class'#var(DeusExPrefix)Mover',dxm,'Generator'){ dxm.SetCollision(false,false,false); RemoveMoverPrePivot(dxm); @@ -293,7 +279,7 @@ function AfterMoveGoalToLocation(Goal g, GoalLocation Loc) RevisionMaps = class'DXRMapVariants'.static.IsRevisionMaps(player()); if (g.name=="Generator"){ - if (!RevisionMaps && FeatureFlag(3,3,0, "M02GeneratorRework")){ + if (!RevisionMaps){ if (Loc.Name=="Warehouse" || Loc.Name=="Sewer" || Loc.Name=="3rd Floor" || Loc.Name=="4th Floor"){ //These ones lie horizontal rad=175; height=100; diff --git a/DXRModules/DeusEx/Classes/DXRHalloween.uc b/DXRModules/DeusEx/Classes/DXRHalloween.uc index d0220577c..58eb3d40f 100644 --- a/DXRModules/DeusEx/Classes/DXRHalloween.uc +++ b/DXRModules/DeusEx/Classes/DXRHalloween.uc @@ -535,7 +535,7 @@ function SpawnSpiderweb(vector loc) EndTrace = loc + vector(rot) * -32; foreach TraceTexture(class'Actor', target, texName, texGroup, texFlags, HitLocation, HitNormal, EndTrace, loc) { - if ((texFlags & 1) !=0) { // 1 = PF_Invisible + if ((texFlags & 0x81) !=0) { // 1 = PF_Invisible, 0x80 == PF_FakeBackdrop return; } break; diff --git a/DXRModules/DeusEx/Classes/DXRTelemetry.uc b/DXRModules/DeusEx/Classes/DXRTelemetry.uc index 5a50b44be..88549919b 100644 --- a/DXRModules/DeusEx/Classes/DXRTelemetry.uc +++ b/DXRModules/DeusEx/Classes/DXRTelemetry.uc @@ -43,7 +43,7 @@ function AnyEntry() info("health: "$p.health$", HealthLegLeft: "$p.HealthLegLeft$", HealthLegRight: "$p.HealthLegRight$", HealthTorso: "$p.HealthTorso$", HealthHead: "$p.HealthHead$", HealthArmLeft: "$p.HealthArmLeft$", HealthArmRight: "$p.HealthArmRight); info("renderer: " $ GetConfig("Engine.Engine", "GameRenderDevice")); - CheckOfflineUpdates(); + if(!enabled) CheckOfflineUpdates(); } function CheckOfflineUpdates() @@ -51,15 +51,28 @@ function CheckOfflineUpdates() local DXRNews news; local DXRNewsWindow newswindow; local DeusExRootWindow r; + local string s; - if(enabled) return;// telemetry enabled, get real updates + if(newsdates[0]!="") return; if(!CanShowNotification()) return; - if(!DateAtLeast(2025, 6, 23)) return;// day after Deus Ex anniversary, especially with timezones, TODO: make this dynamic from the compiler - newsdates[0] = "2025-06-22"; - newsheaders[0] = "Anniversary Update!"; - newstexts[0] = "You have Online Features disabled, so we can't know for sure, but there's a good chance that you are behind many updates!|n|nAlso happy anniversary to Deus Ex and Randomizer!"; + if(DateAtLeast(2052, 1, 1)) { + newsdates[0] = "2052-01-01"; + newsheaders[0] = "Is Deus Ex Real Life Yet?"; + newstexts[0] = "Thank you for still playing this mod in the year " $ Level.Year $ ", but you're probably extremely behind on updates. The project is open source, so even if we have moved on, maybe someone else has taken over?"; + } + else if(DateAtLeast(2025, 6, 23)) {// day after Deus Ex anniversary, especially with timezones, TODO: make this dynamic from the compiler + newsdates[0] = "2025-06-22"; + newsheaders[0] = "Anniversary Update!"; + newstexts[0] = "You have Online Features disabled or the server is down, so we can't know for sure, but there's a good chance that you are behind many updates!|n|nAlso happy anniversary to Deus Ex and Randomizer!"; + } else { + return; + } + s = "offline " $ Level.Year @ Level.Month @ (Level.Day/7); + if(s == last_notification) return; + last_notification = s; + SaveConfig(); notification_url = "https://github.com/Die4Ever/deus-ex-randomizer/releases/latest"; foreach AllObjects(class'DXRNews', news) { @@ -166,6 +179,12 @@ function int GetAddrFromCache() return cache_addr; } +function HTTPError(int Code) +{ + if(newsdates[0]=="") + CheckOfflineUpdates(); +} + function ReceivedData(string data) { local string status; diff --git a/DXRando/DeusEx/Classes/DXRandoText.uc b/DXRando/DeusEx/Classes/DXRandoText.uc index 8b61ebb10..a519f2e64 100644 --- a/DXRando/DeusEx/Classes/DXRandoText.uc +++ b/DXRando/DeusEx/Classes/DXRandoText.uc @@ -22,3 +22,5 @@ class DXRandoText extends object abstract; #exec DEUSEXTEXT IMPORT FILE=Text\10_HostelBulletinMenu.txt #exec DEUSEXTEXT IMPORT FILE=Text\10_HostelBulletin01.txt #exec DEUSEXTEXT IMPORT FILE=Text\10_HostelBulletin02.txt + +#exec DEUSEXTEXT IMPORT FILE=Text\04_Datacube03.txt diff --git a/DXRando/DeusEx/Text/04_Datacube03.txt b/DXRando/DeusEx/Text/04_Datacube03.txt new file mode 100644 index 000000000..a1ebc1f0f --- /dev/null +++ b/DXRando/DeusEx/Text/04_Datacube03.txt @@ -0,0 +1,13 @@ + +

ONE WORLD BANKING +

3 Plaza One, New York +

"The future of banking is One World." +

+

Mr. Renton, +

+

As requested, we've provided you with a copy of your bank account and PIN number. We appreciate your business and look forward to answering any other questions you might have. +

+

Account #: 487659 +

Pin #: 259087 +

+

Please keep this record in a secure location to prevent unauthorized use of your account. diff --git a/DeusEx.u b/DeusEx.u index 008f7d19e..50ecc5762 100644 Binary files a/DeusEx.u and b/DeusEx.u differ diff --git a/GMDXRandomizer.u b/GMDXRandomizer.u index 888df11fa..58e091660 100644 Binary files a/GMDXRandomizer.u and b/GMDXRandomizer.u differ diff --git a/GUI/DeusEx/Classes/DXRNewsWindow.uc b/GUI/DeusEx/Classes/DXRNewsWindow.uc index b4bc541eb..20f8260b6 100644 --- a/GUI/DeusEx/Classes/DXRNewsWindow.uc +++ b/GUI/DeusEx/Classes/DXRNewsWindow.uc @@ -9,6 +9,7 @@ function CreateControls() news = DXRNews(winClient.NewChild(class'DXRNews')); news.CreateNews(player, 0, 0, ClientWidth, ClientHeight); + news.SetBackgroundStyle(DSTY_Normal); // update notification window has a solid black background, because it can appear on top of other windows } function ProcessAction(String actionKey) diff --git a/GUI/DeusEx/Classes/MenuChoice_ShowBingoUpdates.uc b/GUI/DeusEx/Classes/MenuChoice_ShowBingoUpdates.uc index 3f700b611..c659f4118 100644 --- a/GUI/DeusEx/Classes/MenuChoice_ShowBingoUpdates.uc +++ b/GUI/DeusEx/Classes/MenuChoice_ShowBingoUpdates.uc @@ -2,6 +2,7 @@ class MenuChoice_ShowBingoUpdates extends DXRMenuUIChoiceInt; static function bool IsEnabled(DXRFlags f) { + if(f.IsHordeMode()) return false; return (default.value==2) || (default.value==1 && !f.IsReducedRando() && !f.IsSpeedrunMode()) || (default.value==1 && f.settings.bingo_win>0); diff --git a/HXRandomizer.u b/HXRandomizer.u index c5ee8dfa9..784a678c7 100644 Binary files a/HXRandomizer.u and b/HXRandomizer.u differ diff --git a/RevRandomizer.u b/RevRandomizer.u index 985640899..6dba3c10b 100644 Binary files a/RevRandomizer.u and b/RevRandomizer.u differ diff --git a/VMDRandomizer.u b/VMDRandomizer.u index 6d4c3af88..bb63ffa59 100644 Binary files a/VMDRandomizer.u and b/VMDRandomizer.u differ