diff --git a/DXRBalance/DeusEx/Classes/AugmentationManager.uc b/DXRBalance/DeusEx/Classes/AugmentationManager.uc index fa56ceaf2..a99fd3354 100644 --- a/DXRBalance/DeusEx/Classes/AugmentationManager.uc +++ b/DXRBalance/DeusEx/Classes/AugmentationManager.uc @@ -14,6 +14,20 @@ function DeactivateAll() } } +function ActivateAllAutoAugs() +{ + local Augmentation anAug; + + if (player != None) + { + for(anAug = FirstAug; anAug != None; anAug = anAug.next) + { + if (anAug.bAutomatic) + anAug.Activate(); + } + } +} + simulated function int NumAugsActive() { local Augmentation anAug; diff --git a/DXRBalance/DeusEx/Classes/WeaponRifle.uc b/DXRBalance/DeusEx/Classes/WeaponRifle.uc index 16b4a36a6..1f67fb324 100644 --- a/DXRBalance/DeusEx/Classes/WeaponRifle.uc +++ b/DXRBalance/DeusEx/Classes/WeaponRifle.uc @@ -1,10 +1,11 @@ class DXRWeaponRifle injects WeaponRifle; -// vanilla is shottime=1.5, reloadcount=6, reloadtime=1 (inherited from DeusExWeapon), TODO: maybe bCanHaveModReloadCount=False? +// vanilla is shottime=1.5, reloadcount=6, reloadtime=1 (inherited from DeusExWeapon), bCanHaveModReloadCount=True defaultproperties { ShotTime=1 bHasMuzzleFlash=True ReloadCount=1 ReloadTime=1 + bCanHaveModReloadCount=False } diff --git a/DXRCore/DeusEx/Classes/DXRVersion.uc b/DXRCore/DeusEx/Classes/DXRVersion.uc index 9f7ae5d55..5bfeb5063 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=2; minor=6; patch=0; - build=3;//build can't be higher than 99 + build=6;//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 = "Beta"; + status = ""; if(status!="") { status = " " $ status; diff --git a/DXRFixes/DeusEx/Classes/ActorDisplayWindow.uc b/DXRFixes/DeusEx/Classes/ActorDisplayWindow.uc index 1ef6303ee..98412e0b1 100644 --- a/DXRFixes/DeusEx/Classes/ActorDisplayWindow.uc +++ b/DXRFixes/DeusEx/Classes/ActorDisplayWindow.uc @@ -8,6 +8,8 @@ var bool bShowCustom; var string customAttrib; var bool bShowInventory; var string nameFilter; +var string tagFilter; +var string eventFilter; var bool bLimitRadius; var int actorRadius; var bool bShowTagEvent; @@ -42,6 +44,24 @@ function String GetNameFilter(){ return nameFilter; } +function SetTagFilter(string newFilter) +{ + tagFilter = newFilter; +} + +function String GetTagFilter(){ + return tagFilter; +} + +function SetEventFilter(string newFilter) +{ + eventFilter = newFilter; +} + +function String GetEventFilter(){ + return eventFilter; +} + function SetViewClass(Class newViewClass) { Super.SetViewClass(newViewClass); @@ -207,7 +227,7 @@ function DrawWindow(GC gc) return; classToShow = viewClass; - if (nameFilter!="" && classToShow==None){ + if ((nameFilter!="" || tagFilter!="" || eventFilter!="") && classToShow==None){ classToShow=class'Actor'; } @@ -231,6 +251,10 @@ function DrawWindow(GC gc) if (filter!='' && filter!=trackActor.Name) continue; + if (tagFilter!="" && tagFilter!=string(trackActor.Tag)) + continue; + if (eventFilter!="" && eventFilter!=string(trackActor.Event)) + continue; dxMover = DeusExMover(trackActor); cVect.X = trackActor.CollisionRadius; diff --git a/DXRFixes/DeusEx/Classes/BeamTrigger.uc b/DXRFixes/DeusEx/Classes/BeamTrigger.uc index 41af97909..1eecfbcbe 100644 --- a/DXRFixes/DeusEx/Classes/BeamTrigger.uc +++ b/DXRFixes/DeusEx/Classes/BeamTrigger.uc @@ -1,4 +1,5 @@ class DXRBeamTrigger injects BeamTrigger; +// the blue one with no alarm function bool IsRelevant( actor Other ) { diff --git a/DXRFixes/DeusEx/Classes/LaserEmitter.uc b/DXRFixes/DeusEx/Classes/LaserEmitter.uc index c5fcfb14d..fcb91dbc3 100644 --- a/DXRFixes/DeusEx/Classes/LaserEmitter.uc +++ b/DXRFixes/DeusEx/Classes/LaserEmitter.uc @@ -1,4 +1,5 @@ class DXRLaserEmitter injects #var(prefix)LaserEmitter; +// used by both BeamTrigger and LaserTrigger // make sure death markers don't block lasers, continue tracing through them function CalcTrace(float deltaTime) diff --git a/DXRFixes/DeusEx/Classes/LaserTrigger.uc b/DXRFixes/DeusEx/Classes/LaserTrigger.uc index 6e5b11353..96a3c6b37 100644 --- a/DXRFixes/DeusEx/Classes/LaserTrigger.uc +++ b/DXRFixes/DeusEx/Classes/LaserTrigger.uc @@ -1,4 +1,5 @@ class DXRLaserTrigger injects LaserTrigger; +// the red one with the alarm built-in function bool IsRelevant( actor Other ) { diff --git a/DXRMapFixups/DeusEx/Classes/DXRFixupM08.uc b/DXRMapFixups/DeusEx/Classes/DXRFixupM08.uc index 9b04d65f0..71d23a087 100644 --- a/DXRMapFixups/DeusEx/Classes/DXRFixupM08.uc +++ b/DXRMapFixups/DeusEx/Classes/DXRFixupM08.uc @@ -137,6 +137,7 @@ function PreFirstEntryMapFixes() local #var(prefix)BlackHelicopter jock; local DXRHoverHint hoverHint; local bool VanillaMaps; + local ScriptedPawn pawn; #ifdef injections local #var(prefix)Newspaper np; @@ -153,6 +154,23 @@ function PreFirstEntryMapFixes() switch(dxr.localURL) { case "08_NYC_STREET": + // fix alliances + foreach AllActors(class'ScriptedPawn', pawn) { + switch(pawn.Alliance) { + case 'UNATCO': + case 'RiotCop': + case 'Robot': + case 'MJ12': + case 'ShadyGuy': + // make their alliances permananet + pawn.ChangeAlly('RiotCop', 1, true); + pawn.ChangeAlly('Robot', 1, true); + pawn.ChangeAlly('UNATCO', 1, true); + pawn.ChangeAlly('MJ12', 1, true); + pawn.ChangeAlly('ShadyGuy', 1, true); + break; + } + } //Since we always spawn the helicopter on the roof immediately after the conversation, //the ambush should also always happen immediately after the conversation (instead of //after getting explosives) diff --git a/DXRMapFixups/DeusEx/Classes/DXRFixupParis.uc b/DXRMapFixups/DeusEx/Classes/DXRFixupParis.uc index 4b7bca582..7685de7b5 100644 --- a/DXRMapFixups/DeusEx/Classes/DXRFixupParis.uc +++ b/DXRMapFixups/DeusEx/Classes/DXRFixupParis.uc @@ -9,7 +9,6 @@ function PreFirstEntryMapFixes() local ScriptedPawn sp; local Conversation c; local #var(prefix)TobyAtanwe toby; - local #var(prefix)DataLinkTrigger dlt; local #var(prefix)JaimeReyes j; local #var(prefix)DamageTrigger dt; local #var(prefix)ComputerSecurity cs; @@ -23,29 +22,6 @@ function PreFirstEntryMapFixes() VanillaMaps = class'DXRMapVariants'.static.IsVanillaMaps(player()); - // shut up, Tong! (reduced rando is not as focused on replays compared to normal rando) - if(!dxr.flags.IsReducedRando()) { - foreach AllActors(class'#var(prefix)DataLinkTrigger', dlt) { - switch(dlt.dataLinkTag) { - case 'DL_paris_10_shaft': - case 'DL_paris_10_radiation': - case 'DL_paris_10_catacombs': - case 'DL_tunnels_oldplace': - case 'DL_tunnels_oldplace2': - case 'DL_tunnels_oldplace3': - case 'DL_metroentrance': - case 'DL_club_entry': - case 'DL_apartments': - case 'DL_hotel': - case 'DL_bakery': - case 'DL_entered_graveyard': - case 'DL_restaurant': - dlt.Event=''; - dlt.Destroy(); - } - } - } - switch(dxr.localURL) { case "10_PARIS_CATACOMBS": diff --git a/DXRMissions/DeusEx/Classes/DXRMissionsM06.uc b/DXRMissions/DeusEx/Classes/DXRMissionsM06.uc index 1a6d412cd..b11c61daf 100644 --- a/DXRMissions/DeusEx/Classes/DXRMissionsM06.uc +++ b/DXRMissions/DeusEx/Classes/DXRMissionsM06.uc @@ -43,6 +43,8 @@ function int InitGoals(int mission, string map) AddGoalLocation("06_HONGKONG_MJ12LAB", "Lab", NORMAL_GOAL, vect(-1712.699951, -809.700012, -744.500610), rot(0, 16384, 0)); AddGoalLocation("06_HONGKONG_MJ12LAB", "ROM Encoding Room", NORMAL_GOAL | VANILLA_GOAL, vect(-0.995101,-260.668579,-311.088989), rot(0,32824,0)); AddGoalLocation("06_HONGKONG_MJ12LAB", "Radioactive Lab", NORMAL_GOAL | VANILLA_GOAL, vect(-723.018677,591.498901,-743.972717), rot(0,49160,0)); + loc = AddGoalLocation("06_HONGKONG_MJ12LAB", "Overlook Office", NORMAL_GOAL, vect(3, 886, 820), rot(0, 32768, 0)); + AddActorLocation(loc, 1, vect(3, 886, 789.101990), rot(0,0,0));// MAHOGANY desk return 62; case "06_HONGKONG_WANCHAI_STREET": @@ -246,7 +248,6 @@ function CreateGoal(out Goal g, GoalLocation Loc) dlt.Tag=''; dlt.datalinkTag='DL_Tong_00'; dlt.SetCollisionSize(100,20); - break; } } @@ -269,4 +270,13 @@ function AfterMoveGoalToLocation(Goal g, GoalLocation Loc) if (g.name=="Nanotech Blade ROM" && Loc.name!="ROM Encoding Room") { g.actors[3].a.SetCollisionSize(400, 100);// DL_Tong_08: The ROM-encoding should be in this wing of the laboratory. } + + if (Loc.name == "Overlook Office") { + // spawn the MAHOGANY desk (CreateGoal only gets called for different maps) + g.actors[1].a = Spawnm(class'#var(prefix)WHDeskOvalOffice',,,Loc.positions[1].pos, Loc.positions[1].rot); + if(g.actors[1].a != None) { + #var(prefix)WHDeskOvalOffice(g.actors[1].a).ItemName = "Mahogany Desk"; + #var(prefix)WHDeskOvalOffice(g.actors[1].a).HitPoints *= 4; + } + } } diff --git a/DXRMissions/DeusEx/Classes/DXRMissionsM09.uc b/DXRMissions/DeusEx/Classes/DXRMissionsM09.uc index 83cee44b8..72254b979 100644 --- a/DXRMissions/DeusEx/Classes/DXRMissionsM09.uc +++ b/DXRMissions/DeusEx/Classes/DXRMissionsM09.uc @@ -122,7 +122,8 @@ function int InitGoals(int mission, string map) AddMapMarker(class'Image09_NYC_Ship_Bottom',51,102,"C","Bilge Computer", loc,"The bilge pump computer can be located on a bed in the barracks underneath the helicopter in the helibay."); loc = AddGoalLocation("09_NYC_SHIPBELOW", "Engine Room Tower", GOAL_TYPE1, vect(-133,-678,15), rot(0, -15815, 0)); AddMapMarker(class'Image09_NYC_Ship_Bottom',328,256,"C","Bilge Computer", loc,"The bilge pump computer can be found in the control tower in the engine room."); - loc = AddGoalLocation("09_NYC_SHIPBELOW", "Helipad Air Control", GOAL_TYPE1, vect(-4987,1176,-205), rot(0, 32710, 0)); + loc = AddGoalLocation("09_NYC_SHIPBELOW", "Helipad Air Control", GOAL_TYPE1, vect(-4799, 1198, -150), rot(0, 32768, 0)); + AddActorLocation(loc, 1, vect(-4799, 1198, -220), rot(0,0,0));// MAHOGANY desk AddMapMarker(class'Image09_NYC_Ship_Bottom',78,353,"C","Bilge Computer", loc,"The bilge pump computer can be found in the air control room of the helipad."); return 92; @@ -330,6 +331,15 @@ function AfterMoveGoalToLocation(Goal g, GoalLocation Loc) se.Message="EM Field Disabled"; se.GoToState('DisplayMessage'); } + + if (g.name=="Bilge Pump Computer" && Loc.name=="Helipad Air Control") { + // spawn the MAHOGANY desk (CreateGoal only gets called for different maps) + g.actors[1].a = Spawnm(class'#var(prefix)WHDeskOvalOffice',,,Loc.positions[1].pos, Loc.positions[1].rot); + if(g.actors[1].a != None) { + #var(prefix)WHDeskOvalOffice(g.actors[1].a).ItemName = "Mahogany Desk"; + #var(prefix)WHDeskOvalOffice(g.actors[1].a).HitPoints *= 4; + } + } } diff --git a/DXRMissions/DeusEx/Classes/DXRMissionsVandenberg.uc b/DXRMissions/DeusEx/Classes/DXRMissionsVandenberg.uc index 9acc978ce..d846aa4a2 100644 --- a/DXRMissions/DeusEx/Classes/DXRMissionsVandenberg.uc +++ b/DXRMissions/DeusEx/Classes/DXRMissionsVandenberg.uc @@ -4,7 +4,10 @@ var bool WaltonAppeared; function int InitGoals(int mission, string map) { - local int goal, loc, howard1, howard2, jock1, jock2; + local int goal, loc; + local int howard_cherry, howard_meeting, howard_radio, howard_computer; + local int jock_vanilla, jock_cherry, jock_tower, jock_computer; + local int computer_vanilla, computer_radio, computer_meeting; switch(map) { case "12_VANDENBERG_CMD": @@ -80,22 +83,41 @@ function int InitGoals(int mission, string map) return 141; case "14_OCEANLAB_SILO": + // HOWARD AddGoal("14_OCEANLAB_SILO", "Howard Strong", NORMAL_GOAL, 'HowardStrong0', PHYS_Falling); - - AddGoalLocation("14_OCEANLAB_SILO", "Third Floor", NORMAL_GOAL, vect(-220.000000, -6829.463379, 55.600639), rot(0, 0, 0)); + howard_computer = AddGoalLocation("14_OCEANLAB_SILO", "Control Room", NORMAL_GOAL, vect(38,-1306,832), rot(0, 28804, 0)); + //howard_computer = AddGoalLocation("14_OCEANLAB_SILO", "Computer Room", NORMAL_GOAL, vect(-100, -1331, 832), rot(0, 32768, 0)); + howard_meeting = AddGoalLocation("14_OCEANLAB_SILO", "Surface Meeting Room", NORMAL_GOAL, vect(-640,-3589,1472), rot(0, 34388, 0)); + howard_radio = AddGoalLocation("14_OCEANLAB_SILO", "Radio", NORMAL_GOAL, vect(-1822,-6516,1662), rot(0, 24308, 0)); + AddGoalLocation("14_OCEANLAB_SILO", "Machine Shop", NORMAL_GOAL, vect(566,-4395,1474), rot(0, 21120, 0)); + //AddGoalLocation("14_OCEANLAB_SILO", "Third Floor", NORMAL_GOAL, vect(-220.000000, -6829.463379, 55.600639), rot(0, 0, 0)); AddGoalLocation("14_OCEANLAB_SILO", "Fourth Floor", NORMAL_GOAL, vect(-259.846710, -6848.406250, 326.598969), rot(0, 0, 0)); - AddGoalLocation("14_OCEANLAB_SILO", "Fifth Floor", NORMAL_GOAL, vect(-271.341187, -6832.150391, 535.596741), rot(0, 0, 0)); - howard1 = AddGoalLocation("14_OCEANLAB_SILO", "Sixth Floor", NORMAL_GOAL, vect(-266.569397, -6868.054199, 775.592590), rot(0, 0, 0)); - howard2 = AddGoalLocation("14_OCEANLAB_SILO", "Cherry Picker", NORMAL_GOAL | VANILLA_GOAL, vect(-52.397560,-6767.679199,-320.225006), rot(0,-7512,0)); + //AddGoalLocation("14_OCEANLAB_SILO", "Fifth Floor", NORMAL_GOAL, vect(-271.341187, -6832.150391, 535.596741), rot(0, 0, 0)); //this one sucks, since he runs away down the hall + //howard_sixth = AddGoalLocation("14_OCEANLAB_SILO", "Sixth Floor", NORMAL_GOAL, vect(-266.569397, -6868.054199, 775.592590), rot(0, 0, 0)); + howard_cherry = AddGoalLocation("14_OCEANLAB_SILO", "Cherry Picker", NORMAL_GOAL | VANILLA_GOAL, vect(-52.397560,-6767.679199,-320.225006), rot(0,-7512,0)); + // JOCK AddGoal("14_OCEANLAB_SILO", "Jock Escape", GOAL_TYPE1, 'BlackHelicopter0', PHYS_None); - jock1 = AddGoalLocation("14_OCEANLAB_SILO", "Vanilla Escape", GOAL_TYPE1 | VANILLA_GOAL, vect(-194.602554, -5680.964355, 1507.895020), rot(0, 0, 0)); - AddGoalLocation("14_OCEANLAB_SILO", "Sniper Tower", GOAL_TYPE1, vect(-842.344604, -3827.978027, 2039.993286), rot(0, 0, 0)); - jock2 = AddGoalLocation("14_OCEANLAB_SILO", "Cherry Picker", GOAL_TYPE1, vect(-13.000000, -6790.000000, -542.000000), rot(0, 32768, 0)); - AddGoalLocation("14_OCEANLAB_SILO", "Computer Room", GOAL_TYPE1, vect(-100.721497, -1331.947754, 904.364380), rot(0, 32768, 0)); - - AddMutualExclusion(howard1, jock1); - AddMutualExclusion(howard2, jock2); + jock_vanilla = AddGoalLocation("14_OCEANLAB_SILO", "Vanilla Escape", GOAL_TYPE1 | VANILLA_GOAL, vect(-194.602554, -5680.964355, 1507.895020), rot(0, 0, 0)); + jock_tower = AddGoalLocation("14_OCEANLAB_SILO", "Sniper Tower", GOAL_TYPE1, vect(-842.344604, -3827.978027, 2039.993286), rot(0, 0, 0)); + jock_cherry = AddGoalLocation("14_OCEANLAB_SILO", "Cherry Picker", GOAL_TYPE1, vect(-13.000000, -6790.000000, -542.000000), rot(0, 32768, 0)); + jock_computer = AddGoalLocation("14_OCEANLAB_SILO", "Computer Room", GOAL_TYPE1, vect(-100.721497, -1331.947754, 904.364380), rot(0, 32768, 0)); + + // COMPUTER + goal = AddGoal("14_OCEANLAB_SILO", "Launch Control Computer", GOAL_TYPE2, 'ComputerSecurity0', PHYS_None); + AddGoalActor(goal, 1, 'DataLinkTrigger4', PHYS_None); // Launch sequence initiated. It's gonna be a sunny day at Area 51... + computer_vanilla = AddGoalLocation("14_OCEANLAB_SILO", "Control Room", GOAL_TYPE2 | VANILLA_GOAL, vect(175.973724, -1612.441650, 853.105103), rot(0,16344,0)); + computer_radio = AddGoalLocation("14_OCEANLAB_SILO", "Radio", GOAL_TYPE2, vect(-1721.988770, -6533.606445, 1664), rot(16384,32768,0)); + computer_meeting = AddGoalLocation("14_OCEANLAB_SILO", "Surface Meeting Room", GOAL_TYPE2, vect(-691.854248, -3575.400391, 1475), rot(16384,0,0)); + + // MUTEXES + AddMutualExclusion(howard_radio, computer_radio); + AddMutualExclusion(howard_computer, computer_vanilla); + AddMutualExclusion(howard_meeting, computer_meeting); + + AddMutualExclusion(howard_cherry, jock_cherry); //Cherry Picker and bottom of silo Jock + AddMutualExclusion(howard_meeting, jock_tower); //Surface meeting room and sniper tower + AddMutualExclusion(howard_radio, jock_vanilla); //Radio/Poker building and vanilla Jock return 142; } @@ -286,6 +308,9 @@ function AfterMoveGoalToLocation(Goal g, GoalLocation Loc) local #var(prefix)OrdersTrigger ot; local #var(prefix)ComputerPersonal cp; local DXRPasswords passwords; + local #var(prefix)DataLinkTrigger dt; + local #var(prefix)Switch1 button; + local #var(DeusExPrefix)Mover door; if (g.name=="Jock and Tong") { foreach AllActors(class'#var(prefix)OrdersTrigger', ot, 'TongGO') { @@ -322,6 +347,26 @@ function AfterMoveGoalToLocation(Goal g, GoalLocation Loc) else if (g.name=="Backup Power Keypad") { GlowUp(g.actors[0].a, 255); } + else if (g.name=="Missile Computer" && Loc.name != "Computer Room") { + foreach AllActors(class'#var(prefix)DataLinkTrigger', dt) { + if(dt.name=='DataLinkTrigger1' || dt.name=='DataLinkTrigger6') { + dt.Destroy(); + } + } + foreach AllActors(class'#var(prefix)Switch1', button) { + if(button.name=='Switch4') { + button.Destroy(); + break; + } + } + } + + if (g.name=="Missile Computer") { + g.actors[1].a.Tag = 'klax'; // trigger the DataLinkTrigger immediately + foreach AllActors(class'#var(DeusExPrefix)Mover', door, 'computerdoors') { + door.MoverEncroachType = ME_IgnoreWhenEncroach; + } + } } function PreFirstEntryMapFixes() diff --git a/DXRModules/DeusEx/Classes/DXRFlags.uc b/DXRModules/DeusEx/Classes/DXRFlags.uc index f88129706..937ecc447 100644 --- a/DXRModules/DeusEx/Classes/DXRFlags.uc +++ b/DXRModules/DeusEx/Classes/DXRFlags.uc @@ -614,6 +614,8 @@ function FlagsSettings SetDifficulty(int new_difficulty) settings.skill_value_rando = 80; // at least level 1 speed aug settings.speedlevel = Max(settings.speedlevel, 1); + // speedrunners, please install augs + moresettings.empty_medbots *= 1.5; } else if(IsWaltonWare()) { settings.bingo_win = 1; @@ -621,6 +623,7 @@ function FlagsSettings SetDifficulty(int new_difficulty) settings.skills_reroll_missions = 0;// no rerolls since after the menu screen you would immediately get a reroll depending what mission you start in settings.banned_skills = 0;// need computer skill for hacking settings.prison_pocket = 100; //Keep your items in mission 5 + moresettings.empty_medbots *= 1.5; // WW gets lower medbots chances pretty quickly bingo_duration = 1; bingo_scale = 0; moresettings.newgameplus_curve_scalar = 50; diff --git a/DXRModules/DeusEx/Classes/DXRHordeMode.uc b/DXRModules/DeusEx/Classes/DXRHordeMode.uc index e9ff30e16..cc24904a8 100644 --- a/DXRModules/DeusEx/Classes/DXRHordeMode.uc +++ b/DXRModules/DeusEx/Classes/DXRHordeMode.uc @@ -43,7 +43,7 @@ var config ItemChances items[32]; function CheckConfig() { local int i; - if( ConfigOlderThan(2,6,0,2) ) { + if( ConfigOlderThan(2,6,0,5) ) { time_between_waves = 65; time_before_damage = 180; damage_timer = 10; @@ -246,6 +246,8 @@ function CheckConfig() remove_objects[i++] = 'Teleporter'; remove_objects[i++] = 'SecurityCamera'; remove_objects[i++] = 'AutoTurret'; + remove_objects[i++] = 'AlarmUnit'; + remove_objects[i++] = 'LaserTrigger'; i=0; lock_doors[i++] = 'BreakableGlass0'; diff --git a/DXRModules/DeusEx/Classes/DXRPlayerStats.uc b/DXRModules/DeusEx/Classes/DXRPlayerStats.uc index 7745b80bc..900d00bc2 100644 --- a/DXRModules/DeusEx/Classes/DXRPlayerStats.uc +++ b/DXRModules/DeusEx/Classes/DXRPlayerStats.uc @@ -28,6 +28,10 @@ function PlayerLogin(#var(PlayerPawn) p) p.Energy = rng(p.default.EnergyMax-25)+25; p.Energy = Min(p.Energy, p.default.EnergyMax); + if(dxr.flags.IsSpeedrunMode()) { + p.Energy = p.EnergyMax; + } + p.Credits=0; class'DXRStartMap'.static.AddStartingCredits(dxr,p); diff --git a/DXRModules/DeusEx/Classes/DXRStartMap.uc b/DXRModules/DeusEx/Classes/DXRStartMap.uc index 555366b2f..3a1069784 100644 --- a/DXRModules/DeusEx/Classes/DXRStartMap.uc +++ b/DXRModules/DeusEx/Classes/DXRStartMap.uc @@ -724,7 +724,8 @@ static function int _ChooseRandomStartMap(DXRBase m) case 0: return 10; case 1: return 20; case 2: return 30; - case 4: return 40; + case 3: return 40; + case 4: return 50; case 5: return 61; case 6: return 81; case 7: return 90; diff --git a/DXRVanilla/DeusEx/Classes/DXRShowClassWindow.uc b/DXRVanilla/DeusEx/Classes/DXRShowClassWindow.uc index dc5db71fb..337d19808 100644 --- a/DXRVanilla/DeusEx/Classes/DXRShowClassWindow.uc +++ b/DXRVanilla/DeusEx/Classes/DXRShowClassWindow.uc @@ -2,6 +2,8 @@ class DXRShowClassWindow injects ShowClassWindow; var ToolEditWindow custAttribName; var ToolEditWindow nameFilter; +var ToolEditWindow tagFilter; +var ToolEditWindow eventFilter; var ToolEditWindow radiusFilter; var ToolCheckboxWindow chkCustom; var ToolCheckboxWindow chkInventory; @@ -21,38 +23,67 @@ event InitWindow() function CreateDXRandoControls() { + local int y; + // If you wanted the custom attribute up at the top of the window - CreateToolLabel(218, 30, "Name Filter:"); - nameFilter = CreateToolEditWindow(215, 50, 185, 64); + y = 30; + CreateToolLabel(218, y, "Name Filter:"); + y += 20; + nameFilter = CreateToolEditWindow(215, y, 185, 64); + y += 40; nameFilter.SetText(actorDisplay.GetNameFilter()); nameFilter.SetInsertionPoint(Len(actorDisplay.GetNameFilter()) - 1); nameFilter.SetSelectedArea(0, Len(actorDisplay.GetNameFilter())); - chkCustom = CreateToolCheckbox(215, 90, "Show Custom Attribute", actorDisplay.IsCustomVisible()); + CreateToolLabel(218, y, "Tag Filter:"); + y += 20; + tagFilter = CreateToolEditWindow(215, y, 185, 64); + y += 40; + tagFilter.SetText(actorDisplay.GetTagFilter()); + tagFilter.SetInsertionPoint(Len(actorDisplay.GetTagFilter()) - 1); + tagFilter.SetSelectedArea(0, Len(actorDisplay.GetTagFilter())); + + CreateToolLabel(218, y, "Event Filter:"); + y += 20; + eventFilter = CreateToolEditWindow(215, y, 185, 64); + y += 40; + eventFilter.SetText(actorDisplay.GetEventFilter()); + eventFilter.SetInsertionPoint(Len(actorDisplay.GetEventFilter()) - 1); + eventFilter.SetSelectedArea(0, Len(actorDisplay.GetEventFilter())); + + chkCustom = CreateToolCheckbox(215, y, "Show Custom Attribute", actorDisplay.IsCustomVisible()); + y += 20; // Spot to enter the custom attribute to show - custAttribName = CreateToolEditWindow(235, 105, 160, 64); + custAttribName = CreateToolEditWindow(235, y, 160, 64); + y += 25; custAttribName.SetText(actorDisplay.GetCustomAttrib()); custAttribName.SetInsertionPoint(Len(actorDisplay.GetCustomAttrib()) - 1); custAttribName.SetSelectedArea(0, Len(actorDisplay.GetCustomAttrib())); // Show inventory - chkInventory = CreateToolCheckbox(215, 130, "Show Inventory", actorDisplay.IsInventoryVisible()); + chkInventory = CreateToolCheckbox(215, y, "Show Inventory", actorDisplay.IsInventoryVisible()); + y += 25; //Limit the actors shown to a radius? - chkLimitRadius = CreateToolCheckbox(215, 155, "Limit to Radius", actorDisplay.IsRadiusLimited()); + chkLimitRadius = CreateToolCheckbox(215, y, "Limit to Radius", actorDisplay.IsRadiusLimited()); + y += 15; // Spot to enter the radius limit - radiusFilter = CreateToolEditWindow(235, 170, 160, 64); + radiusFilter = CreateToolEditWindow(235, y, 160, 64); + y += 25; radiusFilter.SetText(string(actorDisplay.GetActorRadius())); radiusFilter.SetInsertionPoint(Len(string(actorDisplay.GetActorRadius())) - 1); radiusFilter.SetSelectedArea(0, Len(string(actorDisplay.GetActorRadius()))); //Show the tag and event of the actors? - chkTagEvent = CreateToolCheckbox(215, 195, "Show Tag and Event", actorDisplay.IsTagEventVisible()); + chkTagEvent = CreateToolCheckbox(215, y, "Show Tag and Event", actorDisplay.IsTagEventVisible()); + y += 25; - chkTagConns = CreateToolCheckbox(215, 220, "Show Connections to Tag (Green)", actorDisplay.IsTagConnsVisible()); - chkEventConns = CreateToolCheckbox(215, 245, "Show Connections to Event (Red)", actorDisplay.IsEventConnsVisible()); + chkTagConns = CreateToolCheckbox(215, y, "Show Connections to Tag (Green)", actorDisplay.IsTagConnsVisible()); + y += 25; + chkEventConns = CreateToolCheckbox(215, y, "Show Connections to Event (Red)", actorDisplay.IsEventConnsVisible()); + y += 25; } @@ -61,6 +92,8 @@ function SaveSettings() Super.SaveSettings(); actorDisplay.SetNameFilter(nameFilter.GetText()); + actorDisplay.SetTagFilter(tagFilter.GetText()); + actorDisplay.SetEventFilter(eventFilter.GetText()); actorDisplay.SetCustomAttrib(custAttribName.GetText()); actorDisplay.ShowCustom(chkCustom.GetToggle()); diff --git a/DXRVanilla/DeusEx/Classes/Player.uc b/DXRVanilla/DeusEx/Classes/Player.uc index 1417a8fa7..a9bb04f90 100644 --- a/DXRVanilla/DeusEx/Classes/Player.uc +++ b/DXRVanilla/DeusEx/Classes/Player.uc @@ -1374,4 +1374,15 @@ exec function ShowBingoWindow() InvokeUIScreen(Class'PersonaScreenBingo'); } +exec function ActivateAllAutoAugs() +{ + if (AugmentationSystem != None) + AugmentationSystem.ActivateAllAutoAugs(); +} + +exec function invis(bool B) +{// TODO: why doesn't the invisible 1 cheat work anymore? + Invisible(B); +} + // --- diff --git a/DXRando/DeusEx/Classes/CCResidentEvilCam.uc b/DXRando/DeusEx/Classes/CCResidentEvilCam.uc index ed0dfa8e5..1d3eaee20 100644 --- a/DXRando/DeusEx/Classes/CCResidentEvilCam.uc +++ b/DXRando/DeusEx/Classes/CCResidentEvilCam.uc @@ -1,4 +1,4 @@ -class CCResidentEvilCam extends SecurityCamera; +class CCResidentEvilCam extends SecurityCamera transient; var DeusExPlayer p; var bool Reposition; diff --git a/DeusEx.u b/DeusEx.u index de262e672..f9414431c 100644 Binary files a/DeusEx.u and b/DeusEx.u differ diff --git a/GMDXRandomizer.u b/GMDXRandomizer.u index 07a92b97f..c0b3a79b0 100644 Binary files a/GMDXRandomizer.u and b/GMDXRandomizer.u differ diff --git a/GUI/DeusEx/Classes/HUDSpeedrunSplits.uc b/GUI/DeusEx/Classes/HUDSpeedrunSplits.uc index ce8b49b22..5976b00aa 100644 --- a/GUI/DeusEx/Classes/HUDSpeedrunSplits.uc +++ b/GUI/DeusEx/Classes/HUDSpeedrunSplits.uc @@ -340,7 +340,7 @@ function DrawWindow(GC gc) // draw notes if(notes != "") { y = 4; - x = windowWidth + 8; + x = windowWidth + 16; gc.SetAlignments(HALIGN_Left, VALIGN_Top); gc.SetTextColor(colorText); @@ -464,6 +464,8 @@ function int BalancedSplit(int m) local int balanced_split_time; local float ratio_of_game; + if(PB_total == 0) return Golds[m]; + ratio_of_game = float(Golds[m]) / float(sum_of_bests); balanced_split_time = ratio_of_game * float(PB_total); return balanced_split_time; diff --git a/GUI/DeusEx/Classes/MenuScreenCustomizeKeys.uc b/GUI/DeusEx/Classes/MenuScreenCustomizeKeys.uc index da12bbe42..c688dfa49 100644 --- a/GUI/DeusEx/Classes/MenuScreenCustomizeKeys.uc +++ b/GUI/DeusEx/Classes/MenuScreenCustomizeKeys.uc @@ -18,10 +18,10 @@ struct S_KeyDisplayItem }; //Make sure to update all four of these when you add a new binding -var localized string FunctionText[62]; -var string MenuValues1[62]; -var string MenuValues2[62]; -var string AliasNames[62]; +var localized string FunctionText[63]; +var string MenuValues1[63]; +var string MenuValues2[63]; +var string AliasNames[63]; var string PendingCommands[100]; @@ -628,6 +628,7 @@ defaultproperties FunctionText(59)="Activate Multiplayer Skill Menu" FunctionText(60)="Show Multiplayer Kill Details" FunctionText(61)="Activate Bingo Screen" + FunctionText(62)="Activate All Auto Augs" AliasNames(0)="ParseLeftClick|Fire" AliasNames(1)="ParseRightClick" AliasNames(2)="DropItem" @@ -690,6 +691,7 @@ defaultproperties AliasNames(59)="BuySkills" AliasNames(60)="KillerProfile" AliasNames(61)="ShowBingoWindow" + AliasNames(62)="ActivateAllAutoAugs" 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") diff --git a/HXRandomizer.u b/HXRandomizer.u index f96cfb298..81ac31f4e 100644 Binary files a/HXRandomizer.u and b/HXRandomizer.u differ diff --git a/RevRandomizer.u b/RevRandomizer.u index c1f5f47de..ba30c5faf 100644 Binary files a/RevRandomizer.u and b/RevRandomizer.u differ diff --git a/VMDRandomizer.u b/VMDRandomizer.u index 364a0671e..b874ea5cc 100644 Binary files a/VMDRandomizer.u and b/VMDRandomizer.u differ diff --git a/installer/GUI/InstallerWindow.py b/installer/GUI/InstallerWindow.py index 3890d61f9..71967a89d 100644 --- a/installer/GUI/InstallerWindow.py +++ b/installer/GUI/InstallerWindow.py @@ -2,7 +2,7 @@ import webbrowser from GUI import * from pathlib import Path - from Install import Install, IsWindows, CheckVulkan, getDefaultPath + from Install import Install, IsWindows, CheckVulkan, getDefaultPath, GetVersion import traceback import re except Exception as e: @@ -15,7 +15,7 @@ def initWindow(self): self.width = 350 self.height = 500 self.lastprogress = '' - self.root.title("Deus Ex Randomizer Installer") + self.root.title("Deus Ex Randomizer Installer " + GetVersion()) dxvk_default = CheckVulkan()# this takes a second or so ogl2_default = dxvk_default or not IsWindows() diff --git a/installer/Install/__init__.py b/installer/Install/__init__.py index edb48ce09..20e561cd3 100644 --- a/installer/Install/__init__.py +++ b/installer/Install/__init__.py @@ -1,6 +1,7 @@ try: - outfile = open('log.txt', 'w') + outfile = open('log.txt', 'w', encoding="utf-8") + print('starting', file=outfile, flush=True) except Exception as e: print('ERROR writing to log.txt file', e) outfile = None @@ -10,13 +11,14 @@ def debug(*args): if GetVerbose(): print(*args) if outfile: - print(*args, file=outfile) + print(*args, file=outfile, flush=True) def info(*args): global outfile print(*args) if outfile: - print(*args, file=outfile) + print(*args, file=outfile, flush=True) + @@ -54,6 +56,9 @@ def GetDryrun() -> bool: def IsWindows() -> bool: return os.name == 'nt' +def GetVersion(): + return 'v2.6' # TODO: make this automatic + def CheckVulkan() -> bool: if not IsWindows(): return False # no easy way to detect Vulkan on Linux, they don't need DXVK anyways diff --git a/installer/installer.py b/installer/installer.py index bdcb2c9ad..eba778095 100644 --- a/installer/installer.py +++ b/installer/installer.py @@ -1,4 +1,4 @@ -from Install import GetSourcePath, SetDryrun, SetVerbose, info, debug +from Install import GetSourcePath, SetDryrun, SetVerbose, info, debug, GetVersion try: import argparse import sys @@ -10,7 +10,7 @@ info('ERROR: importing', e) raise -parser = argparse.ArgumentParser(description='Deus Ex Randomizer') +parser = argparse.ArgumentParser(description='Deus Ex Randomizer Installer') parser.add_argument('--version', action="store_true", help='Output version') parser.add_argument('--dryrun', action="store_true", help="Dry run, don't actually change anything") parser.add_argument('--unattended', action="store_true", help='Unattended installation') @@ -19,9 +19,6 @@ parser.add_argument('--verbose', action="store_true", help="Output way more to the console") args = parser.parse_args() -def GetVersion(): - return 'v0.4' - if args.verbose: SetVerbose(True) diff --git a/notes/missiondistribution.py b/notes/missiondistribution.py index d6d0e9802..58d50a791 100644 --- a/notes/missiondistribution.py +++ b/notes/missiondistribution.py @@ -1,4 +1,6 @@ -eventfile = "..\DXRModules\DeusEx\Classes\DXREvents.uc" +import os + +eventfile = os.path.join("..", "DXRModules", "DeusEx", "Classes", "DXREvents.uc") mission=[] for i in range(0,16):