More work towards Legacy of Rust support (with caveats).

As of this commit, do not consider the experience when playing that new
expansion to be complete. I've only partially written some of the mission texts
and rudimentarily enhanced some boss fights.

Currently there is one major limitation in that the intermission texts cannot
be replaced, as they're hardcoded inside the UMAPINFO. I don't know if I can
work around that.
This commit is contained in:
Mari the Deer 2025-08-20 15:50:07 +02:00
commit 2aa0ea4680
16 changed files with 414 additions and 43 deletions

View file

@ -77,6 +77,28 @@ Class ROM3R0Death : Inventory
return;
}
}
Class TyrantWake : Inventory
{
override void DoEffect()
{
if ( Owner.InStateSequence(Owner.CurState,Owner.SeeState) )
{
let hnd = SWWMHandler(EventHandler.Find("SWWMHandler"));
if ( hnd && (hnd.bosstag != "$BT_TYRANT2") )
{
hnd.bossactors.Clear();
hnd.initialized = false;
let ti = ThinkerIterator.Create('Deh_Actor_157');
Actor a;
while ( a = Actor(ti.Next()) )
hnd.bossactors.Push(a);
hnd.bosstag = "$BT_TYRANT2";
}
DepleteOrDestroy();
return;
}
}
}
extend Class SWWMHandler
{
@ -124,7 +146,9 @@ extend Class SWWMHandler
MAP_HMAP60,
MAP_EVMAP30, // eviternity
MAP_EVIIMAP30, // eviternity 2
MAP_DE1M8B // "tech gone bad"
MAP_DE1M8B, // "tech gone bad"
MAP_ID24MAP13, // TODO Soul Silo cybies
MAP_ID24MAP14 // TODO Brink tyrants
};
static play void AddBoss( int tid, String tag, bool endgame = false )
@ -237,6 +261,10 @@ extend Class SWWMHandler
return MAP_EVMAP30;
if ( mapsum ~== "CF2B3E2589CA6FBB6EE3E3A09F19BA18" )
return MAP_EVIIMAP30;
if ( mapsum ~== "7CABD8B043B69996D9777F7070C8BCCE" )
return MAP_ID24MAP13;
if ( mapsum ~== "A3F7A58FC08C369F1360741A99F1497C" )
return MAP_ID24MAP14;
return MAP_NONE;
}
private void VanillaBossSpawn( WorldEvent e )
@ -320,6 +348,42 @@ extend Class SWWMHandler
bosstag = "$BT_CYBIE2";
}
}
else if ( bossmap == MAP_ID24MAP13 )
{
if ( e.Thing is 'Cyberdemon' )
{
bossactors.Push(e.Thing);
e.Thing.StartHealth = e.Thing.Health *= 4;
e.Thing.GiveInventory('BossMarker',1);
bosstag = "$BT_CYBIE3";
}
}
else if ( bossmap == MAP_ID24MAP14 )
{
if ( e.Thing is 'Deh_Actor_156' )
{
bossactors.Push(e.Thing);
e.Thing.StartHealth = e.Thing.Health *= 4;
e.Thing.GiveInventory('BossMarker',1);
bosstag = "$BT_TYRANT";
}
else if ( e.Thing is 'Deh_Actor_155' )
{
e.Thing.StartHealth = e.Thing.Health *= 4;
e.Thing.GiveInventory('BossMarker',1);
}
else if ( e.Thing is 'Deh_Actor_157' )
{
e.Thing.StartHealth = e.Thing.Health *= 4;
e.Thing.GiveInventory('BossMarker',1);
e.Thing.GiveInventory('TyrantWake',1);
}
else if ( e.Thing is 'Cyberdemon' )
{
e.Thing.StartHealth = e.Thing.Health *= 4;
e.Thing.GiveInventory('BossMarker',1);
}
}
else if ( bossmap == MAP_HE1M8_HE4M8 )
{
if ( e.Thing is 'IronLich' )