From 68413ac674bf588497301c4be737ed7a085bfe0f Mon Sep 17 00:00:00 2001 From: Morten Date: Mon, 7 Apr 2025 23:09:34 +0200 Subject: [PATCH 1/3] feature: do some adjustments to BridgePV - Replace most of the sniper ammo packs with rifle shells. Add a second shell at final tele exit. - Replace SB in defender spawn with armor - Add a Keg in attacker's spawn - Add a RL in the underwater tele exit next to sniper and flak --- Classes/MapFixes.uc | 3 ++ Classes/fix_BridgePV_beta8.uc | 99 +++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 Classes/fix_BridgePV_beta8.uc diff --git a/Classes/MapFixes.uc b/Classes/MapFixes.uc index c75c7b0..8218f6b 100644 --- a/Classes/MapFixes.uc +++ b/Classes/MapFixes.uc @@ -75,6 +75,9 @@ function fixMaps() case "AS-BRIDGE": F = Spawn(class'fix_Bridge'); break; + case "AS-BRIDGEPV_BETA8": + F = Spawn(class'fix_BridgePV_beta8'); + break; case "AS-COLDERSTEEL": F = Spawn(class'fix_Coldersteel'); break; diff --git a/Classes/fix_BridgePV_beta8.uc b/Classes/fix_BridgePV_beta8.uc new file mode 100644 index 0000000..fd4041f --- /dev/null +++ b/Classes/fix_BridgePV_beta8.uc @@ -0,0 +1,99 @@ +//============================================================================= +// BridgePV_beta8 - lilfvb@gmail.com - Ulv 2025 +//============================================================================= +class fix_BridgePV_beta8 extends MapFix config(MapFixes); + +var bool bTweaked; +var() config bool bEnabled; +var() config bool bDebug; + +function BeginPlay() +{ + Super.BeginPlay(); + if (!bTweaked) + { + bTweaked = True; + if (bEnabled) + { + if (bIncludeLAS140Tweaks) + { + fixBridgePV_beta8Objects(); + } + } + } +} + +function fixBridgePV_beta8Objects() +{ + local string S; + local string SA; + local BulletBox BB; + local RifleShell RS; + local UT_ShieldBelt SB; + local Armor2 A2; + local HealthPack HP; + local Vector V; + local Rotator R; + + S = Left(Self, InStr(Self, ".")); + if(S~="AS-BridgePV_beta8") + { + foreach AllActors(class'BulletBox', BB) + { + SA = Mid(string(BB), InStr(string(BB), ".") + 1); + if ( (SA == "BulletBox0") || (SA == "BulletBox2") || (SA == "BulletBox3") || (SA == "BulletBox4") || (SA == "BulletBox11") ) + { + V = BB.Location; + R = BB.Rotation; + BB.Destroy(); + RS = Spawn(class'RifleShell',,, V, R); + } + } + + // Replace the belt with armor in defender spawn + foreach AllActors(class'UT_ShieldBelt', SB) + { + SA = Mid(string(SB), InStr(string(SB), ".") + 1); + if (SA == "ut_shieldbelt0") + { + V = SB.Location; + R = SB.Rotation; + SB.Destroy(); + A2 = Spawn(class'Armor2',,, V, R); + } + } + + // Add a Keg in the box in attacker spawn + V.X = -3120.438721; + V.Y = 581.074585; + V.Z = 792.103943; + R.Pitch = 0; + R.Roll = 0; + R.Yaw = 0; + HP = Spawn(class'HealthPack',,, V, R); + + // Add a RifleShell near the Sniper at Final exit + V.X = -2507.945801; + V.Y = -1440.486694; + V.Z = 1462.380005; + R.Pitch = 0; + R.Roll = 0; + R.Yaw = 0; + RS = Spawn(class'RifleShell',,, V, R); + + // Add a RocketLauncher near sniper and flak at the underwater tele exit + V.X = 295.726440; + V.Y = -448.705444; + V.Z = -1373.900024; + R.Pitch = 0; + R.Roll = 0; + R.Yaw = 0; + Spawn(class'UT_EightBall',,, V, R); + } +} + +defaultproperties +{ + bEnabled=True + bHidden=True +} \ No newline at end of file From 7fec8cf4f8a5779a44f519958c00d7e28b915604 Mon Sep 17 00:00:00 2001 From: Morten Date: Mon, 9 Jun 2025 12:53:36 +0200 Subject: [PATCH 2/3] feature: add timed item spawner spawns an actor in the location when an event tag is triggered optional timed delay can be set --- Classes/ItemEventSpawner.uc | 40 +++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Classes/ItemEventSpawner.uc diff --git a/Classes/ItemEventSpawner.uc b/Classes/ItemEventSpawner.uc new file mode 100644 index 0000000..fc0d071 --- /dev/null +++ b/Classes/ItemEventSpawner.uc @@ -0,0 +1,40 @@ +class ItemEventSpawner extends Actor; + +var() class SpawnClass; +var() float SpawnDelay; // Delay in seconds (default 0, set to 10 for 10s delay) +var bool bPendingSpawn; + +function Trigger(actor Other, pawn EventInstigator) +{ + if (SpawnDelay > 0) + { + bPendingSpawn = true; + SetTimer(SpawnDelay, false); + } + else + { + DoSpawn(); + } +} + +function Timer() +{ + if (bPendingSpawn) + DoSpawn(); +} + +function DoSpawn() +{ + local Actor A; + A = Spawn(SpawnClass,,, Location); +} + +defaultproperties +{ + SpawnClass=class'Armor2' + Tag=DP2 + bHidden=True + bCollideActors=False + bCollideWorld=False + SpawnDelay=0.0 // Set to 10.0 for 10 seconds +} \ No newline at end of file From a3536145731ec306b3f34a795f400a8ea960f209 Mon Sep 17 00:00:00 2001 From: Morten Date: Mon, 9 Jun 2025 12:56:16 +0200 Subject: [PATCH 3/3] feature: add item spawns on maps --- Classes/MapFixes.uc | 3 +++ Classes/fix_Ballistic.uc | 15 ++++++++++++ Classes/fix_BridgePV_beta8.uc | 10 ++++---- Classes/fix_Desolate2.uc | 12 +++++++++ Classes/fix_Riverbed3AL.uc | 18 ++++++++++++-- Classes/fix_TheDungeon3AL.uc | 46 +++++++++++++++++++++++++++++++++++ 6 files changed, 97 insertions(+), 7 deletions(-) create mode 100644 Classes/fix_TheDungeon3AL.uc diff --git a/Classes/MapFixes.uc b/Classes/MapFixes.uc index 8218f6b..ffa2231 100644 --- a/Classes/MapFixes.uc +++ b/Classes/MapFixes.uc @@ -108,6 +108,9 @@ function fixMaps() case "AS-SUBMARINEBASE][": F = Spawn(class'fix_Submarinebase2'); break; + case "AS-THEDUNGEON]L[AL": + F = Spawn(class'fix_TheDungeon3AL'); + break; case "THEDUNGEON]L[BETA2": F = Spawn(class'fix_TheDungeons3Betas'); break; diff --git a/Classes/fix_Ballistic.uc b/Classes/fix_Ballistic.uc index 9430867..0b66859 100644 --- a/Classes/fix_Ballistic.uc +++ b/Classes/fix_Ballistic.uc @@ -21,6 +21,7 @@ function BeginPlay() fixWalls(); if (bIncludeLAS140Tweaks) fixBallisticObjects(); + spawnBallisticItems(); } } } @@ -96,6 +97,20 @@ function fixWalls() if (bDebug) log("Ballistic Wall Fixes -->"); } +function spawnBallisticItems() +{ + local ItemEventSpawner Spawner; + + // Example: Spawn a ShieldBelt after the generator is destroyed (event "powerdestroyed") + Spawner = Spawn(class'ItemEventSpawner',,, vect(-778.608215, -377.934814, -1006.903076)); + if (Spawner != None) + { + Spawner.SpawnClass = class'UT_ShieldBelt'; + Spawner.Tag = 'powerdestroyed'; + Spawner.SpawnDelay = 10.0; // Set to 10 seconds delay + } +} + function fixTele_ThanksToMyM() { local Dispatcher D; diff --git a/Classes/fix_BridgePV_beta8.uc b/Classes/fix_BridgePV_beta8.uc index fd4041f..2e340b2 100644 --- a/Classes/fix_BridgePV_beta8.uc +++ b/Classes/fix_BridgePV_beta8.uc @@ -15,10 +15,7 @@ function BeginPlay() bTweaked = True; if (bEnabled) { - if (bIncludeLAS140Tweaks) - { - fixBridgePV_beta8Objects(); - } + fixBridgePV_beta8Objects(); } } } @@ -34,6 +31,7 @@ function fixBridgePV_beta8Objects() local HealthPack HP; local Vector V; local Rotator R; + local UT_Eightball RL; S = Left(Self, InStr(Self, ".")); if(S~="AS-BridgePV_beta8") @@ -88,7 +86,9 @@ function fixBridgePV_beta8Objects() R.Pitch = 0; R.Roll = 0; R.Yaw = 0; - Spawn(class'UT_EightBall',,, V, R); + RL = Spawn(class'UT_EightBall',,, V, R); + RL.bRotatingPickup = False; + RL.SetWeaponStay(); } } diff --git a/Classes/fix_Desolate2.uc b/Classes/fix_Desolate2.uc index 7991a42..a420b25 100644 --- a/Classes/fix_Desolate2.uc +++ b/Classes/fix_Desolate2.uc @@ -20,6 +20,7 @@ function BeginPlay() if (bIncludeLAS140Tweaks) fixD2Spawns(); fixDesolateObjs(); + spawnDesolate2Items(); } } } @@ -61,6 +62,17 @@ function fixDesolateObjs() { if (bDebug) log("Desolate][ Fixes -->"); } +function spawnDesolate2Items() { + local ItemEventSpawner Spawner; + // Spawn Armor after Lower Levels + Spawner = Spawn(class'ItemEventSpawner',,, vect(-5275.133789, -477.687500, -1106.479858)); + if (Spawner != None) + { + Spawner.SpawnClass = class'Armor2'; + Spawner.Tag = 'dis1'; + } +} + function fixD2Spawns() { local Dispatcher D; local string S; diff --git a/Classes/fix_Riverbed3AL.uc b/Classes/fix_Riverbed3AL.uc index cfd29c0..e144e61 100644 --- a/Classes/fix_Riverbed3AL.uc +++ b/Classes/fix_Riverbed3AL.uc @@ -10,6 +10,7 @@ var() config bool bDebug; function BeginPlay() { local string S; + Super.BeginPlay(); if (!bTweaked) { @@ -18,7 +19,7 @@ function BeginPlay() if (bEnabled && S~="AS-Riverbed]l[AL") { fixRiverbed3(); - + spawnRiverbed3Items(); } } } @@ -47,11 +48,24 @@ function fixRiverbed3() { KR.SetCollisionSize(KickerR[i],KickerH[i]); KR.KickVelocity = vect(150.000000,150.000000,-80.000000); if (bDebug) log("* Spawned KR - L:"@KR.Location@"/ R:"@KR.CollisionRadius@"/ H:"@KR.CollisionHeight); + } if (bDebug) log("Riv3 Wall Tweak -->"); } +function spawnRiverbed3Items() { + local ItemEventSpawner Spawner; + // Spawns armor in truck after Compressor + Spawner = Spawn(class'ItemEventSpawner',,, vect(-2340.212158, -3763.420410, 975.493347)); + if (Spawner != None) + { + Spawner.SpawnClass = class'Armor2'; + Spawner.Tag = 'DP2'; + } +} + defaultproperties { - bEnabled=False + bEnabled=True + Tag=DP2 } diff --git a/Classes/fix_TheDungeon3AL.uc b/Classes/fix_TheDungeon3AL.uc new file mode 100644 index 0000000..769e13b --- /dev/null +++ b/Classes/fix_TheDungeon3AL.uc @@ -0,0 +1,46 @@ +//============================================================================= +// TheDungeon]l[AL - lilfvb@gmail.com - Ulv 2025 +//============================================================================= +class fix_TheDungeon3AL extends MapFix config(MapFixes); + +var bool bTweaked; +var() config bool bEnabled; +var() config bool bDebug; + +function BeginPlay() +{ + local string S; + + Super.BeginPlay(); + if (!bTweaked) + { + bTweaked = True; + S = Left(Self, InStr(Self, ".")); + if (bEnabled && S~="AS-TheDungeon]L[AL") + { + + spawnDungeon3Items(); + } + } +} + +function spawnDungeon3Items() { + local ItemEventSpawner Spawner; + + // Spawn armor at boots 10 seconds after skull lock. + Spawner = Spawn(class'ItemEventSpawner',,, vect(11218.932617, 11338.771484, 1018.700195)); + if (Spawner != None) + { + Spawner.SpawnClass = class'Armor2'; + Spawner.Tag = 'skullboom'; + Spawner.SpawnDelay = 10.0; + Spawner.Rotation.Pitch = 12; + Spawner.Rotation.Roll = 3456; + Spawner.Rotation.Yaw = 15364; + } +} + +defaultproperties +{ + bEnabled=True +} \ No newline at end of file