Legion of Bones support.

This commit is contained in:
Mari the Deer 2022-08-31 10:58:25 +02:00
commit e9013694f0
7 changed files with 137 additions and 24 deletions

View file

@ -210,49 +210,49 @@ extend Class SWWMHandler
case 0:
for ( int i=0; i<18; i++ )
{
if ( !(a is babypool[i]) ) continue;
if ( !(a.GetClassName() == babypool[i]) ) continue;
return refpool[i];
}
break;
case 1:
for ( int i=0; i<18; i++ )
{
if ( !(a is easypool[i]) ) continue;
if ( !(a.GetClassName() == easypool[i]) ) continue;
return refpool[i];
}
break;
case 2:
for ( int i=0; i<18; i++ )
{
if ( !(a is normalpool[i]) ) continue;
if ( !(a.GetClassName() == normalpool[i]) ) continue;
return refpool[i];
}
break;
case 3:
for ( int i=0; i<18; i++ )
{
if ( !(a is hardpool[i]) ) continue;
if ( !(a.GetClassName() == hardpool[i]) ) continue;
return refpool[i];
}
break;
case 4:
for ( int i=0; i<18; i++ )
{
if ( !(a is nightmarepool[i]) ) continue;
if ( !(a.GetClassName() == nightmarepool[i]) ) continue;
return refpool[i];
}
break;
case 5:
for ( int i=0; i<18; i++ )
{
if ( !(a is technophobiapool[i]) ) continue;
if ( !(a.GetClassName() == technophobiapool[i]) ) continue;
return refpool[i];
}
break;
case 6:
for ( int i=0; i<18; i++ )
{
if ( !(a is armageddonpool[i]) ) continue;
if ( !(a.GetClassName() == armageddonpool[i]) ) continue;
return refpool[i];
}
break;
@ -260,7 +260,7 @@ extend Class SWWMHandler
default:
for ( int i=0; i<18; i++ )
{
if ( !(a is adaptivepool[i]) ) continue;
if ( !(a.GetClassName() == adaptivepool[i]) ) continue;
return refpool[i];
}
break;
@ -268,12 +268,66 @@ extend Class SWWMHandler
return null;
}
private Class<Actor> GetLOBReplacee( Class<Actor> a )
{
static const String refpool[] =
{
"Zombieman",
"Shotgunguy",
"Chaingunguy",
"DoomImp",
"Demon",
"Spectre",
"Cacodemon",
"HellKnight",
"BaronOfHell",
"Revenant",
"Fatso",
"Arachnotron",
"Archvile"
};
static const String reppool[] =
{
"LOBZombieman",
"LOBShotgunguy",
"LOBChaingunguy",
"LOBDoomImp",
"LOBDemon",
"LOBSpectre",
"LOBCacodemon",
"LOBHellKnight",
"LOBBaronOfHell",
"LOBRevenant",
"LOBFatso",
"LOBArachnotron",
"LOBArchvile"
};
for ( int i=0; i<13; i++ )
{
if ( !(a.GetClassName() == reppool[i]) ) continue;
return refpool[i];
}
return null;
}
override void CheckReplacee( ReplacedEvent e )
{
if ( profiling ) ProfileTick();
// these are all needed so boss deaths work
if ( e.Replacement is 'DSparilHax' )
e.Replacee = 'Sorcerer2';
// drla stuff, needed so boss deaths work
// LOB "double death" stuff
if ( haslegionofbones && swwm_lobdoubled )
{
let rep = GetLOBReplacee(e.Replacement);
if ( rep )
{
e.Replacee = rep;
if ( profiling ) ProfileTock(PT_CHECKREPLACEE);
return;
}
}
// drla stuff
if ( !hasdrlamonsters )
{
if ( profiling ) ProfileTock(PT_CHECKREPLACEE);
@ -489,49 +543,49 @@ extend Class SWWMHandler
case 0:
for ( int i=0; i<18; i++ )
{
if ( !(a is refpool[i]) ) continue;
if ( !(a.GetClassName() == refpool[i]) ) continue;
return babypool[i];
}
break;
case 1:
for ( int i=0; i<18; i++ )
{
if ( !(a is refpool[i]) ) continue;
if ( !(a.GetClassName() == refpool[i]) ) continue;
return easypool[i];
}
break;
case 2:
for ( int i=0; i<18; i++ )
{
if ( !(a is refpool[i]) ) continue;
if ( !(a.GetClassName() == refpool[i]) ) continue;
return normalpool[i];
}
break;
case 3:
for ( int i=0; i<18; i++ )
{
if ( !(a is refpool[i]) ) continue;
if ( !(a.GetClassName() == refpool[i]) ) continue;
return hardpool[i];
}
break;
case 4:
for ( int i=0; i<18; i++ )
{
if ( !(a is refpool[i]) ) continue;
if ( !(a.GetClassName() == refpool[i]) ) continue;
return nightmarepool[i];
}
break;
case 5:
for ( int i=0; i<18; i++ )
{
if ( !(a is refpool[i]) ) continue;
if ( !(a.GetClassName() == refpool[i]) ) continue;
return technophobiapool[i];
}
break;
case 6:
for ( int i=0; i<18; i++ )
{
if ( !(a is refpool[i]) ) continue;
if ( !(a.GetClassName() == refpool[i]) ) continue;
return armageddonpool[i];
}
break;
@ -539,7 +593,7 @@ extend Class SWWMHandler
default:
for ( int i=0; i<18; i++ )
{
if ( !(a is refpool[i]) ) continue;
if ( !(a.GetClassName() == refpool[i]) ) continue;
return adaptivepool[i];
}
break;
@ -547,6 +601,48 @@ extend Class SWWMHandler
return null;
}
private Class<Actor> GetLOBReplacement( Class<Actor> a )
{
static const String refpool[] =
{
"Zombieman",
"Shotgunguy",
"Chaingunguy",
"DoomImp",
"Demon",
"Spectre",
"Cacodemon",
"HellKnight",
"BaronOfHell",
"Revenant",
"Fatso",
"Arachnotron",
"Archvile"
};
static const String reppool[] =
{
"LOBZombieman",
"LOBShotgunguy",
"LOBChaingunguy",
"LOBDoomImp",
"LOBDemon",
"LOBSpectre",
"LOBCacodemon",
"LOBHellKnight",
"LOBBaronOfHell",
"LOBRevenant",
"LOBFatso",
"LOBArachnotron",
"LOBArchvile"
};
for ( int i=0; i<13; i++ )
{
if ( !(a.GetClassName() == refpool[i]) ) continue;
return reppool[i];
}
return null;
}
override void CheckReplacement( ReplaceEvent e )
{
if ( profiling ) ProfileTick();
@ -568,6 +664,18 @@ extend Class SWWMHandler
return;
}
}
// LOB "double death" stuff
if ( haslegionofbones && swwm_lobdoubled )
{
let rep = GetLOBReplacement(e.Replacee);
if ( rep )
{
e.Replacement = rep;
e.IsFinal = true;
if ( profiling ) ProfileTock(PT_CHECKREPLACEMENT);
return;
}
}
// only replace vanilla blood if no other gore mod is doing it
if ( (((e.Replacee == "Blood") && (!e.Replacement || e.Replacement == "Blood")) || (bludtypes.Find(e.Replacee.GetClassName()) < bludtypes.Size())) && swwm_blood ) e.Replacement = "mkBlood";
else if ( e.Replacee is 'ItemFog' ) e.Replacement = 'SWWMItemFog';

View file

@ -23,7 +23,7 @@ Class SWWMHandler : EventHandler
Array<Service> funtagsv, mergemonstersv;
// for checkreplacement
bool hasdrlamonsters;
bool hasdrlamonsters, haslegionofbones;
int iskdizd;
Array<String> bludtypes;
@ -73,12 +73,11 @@ Class SWWMHandler : EventHandler
bossmap = -1;
indoomvacation = -1;
inultdoom2 = -1;
// this one can be initialized here easily
// class-checking ones can be initialized here easily
for ( int i=0; i<AllActorClasses.Size(); i++ )
{
if ( AllActorClasses[i].GetClassName() != "RLMonster" ) continue;
hasdrlamonsters = true;
break;
if ( AllActorClasses[i].GetClassName() == "RLMonster" ) hasdrlamonsters = true;
else if ( AllActorClasses[i].GetClassName() == "LOBZombieman" ) haslegionofbones = true;
}
for ( int i=0; i<AllClasses.Size(); i++ )
{