4.10 support update (unfinished and untested).

This commit is contained in:
Mari the Deer 2022-12-05 02:10:56 +01:00
commit 8e952f412f
80 changed files with 2343 additions and 2356 deletions

View file

@ -19,13 +19,6 @@ Class RampancyLogonDummy : Actor
extend Class SWWMHandler
{
// list contains a sector that belongs to each portal group
// used to ease some portal-aware functions
Array<int> psectors;
// for minimap
Array<int> ffsectors;
bool maphaskeys;
// level end stats
@ -217,9 +210,122 @@ extend Class SWWMHandler
}
}
private void MapStartDialogues()
{
int whichboss = WhichVanillaBossMap();
switch ( whichboss )
{
case MAP_DE1M8:
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_PHOBOS);
break;
case MAP_DE2M8:
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_DEIMOS);
break;
case MAP_DE3M8:
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_DIS);
break;
case MAP_DE4M8:
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_THY);
break;
case MAP_DMAP07:
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_DIMPLE);
break;
case MAP_DMAP30:
bool rampancy = false;
foreach ( cls:AllActorClasses )
{
if ( cls.GetClassName() != "Robot_BossBrain" ) continue;
rampancy = true;
break;
}
if ( rampancy ) SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_RAMPANCY);
else SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_IOS);
break;
case MAP_DLVL08:
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_NERVE);
break;
case MAP_EVMAP30:
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_EVIA);
break;
case MAP_HE1M8_HE4M8:
if ( level.mapname ~== "E1M8" ) SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_MAW);
else SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_HEADS);
break;
case MAP_HE2M8_HE5M8:
if ( level.mapname ~== "E2M8" ) SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_PORTALS);
else SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_BULLS);
break;
case MAP_HE3M8:
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_DSPARIL);
break;
case MAP_HMAP38:
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_CLERIC);
break;
case MAP_HMAP36:
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_FIGHTER);
break;
case MAP_HMAP37:
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_MAGE);
break;
case MAP_HMAP12:
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_HYPO);
break;
case MAP_HMAP40:
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_KORAX);
break;
case MAP_HMAP23_HMAP27_HMAP48_HMAP55:
if ( level.mapname ~== "MAP48" ) SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_CONSTABLE);
break;
case MAP_HMAP60:
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_DEATHKINGS);
break;
case MAP_NONE:
String csum = level.GetChecksum();
// SIGIL E5M8
if ( (csum ~== "3D72FD17F36D2D43FD9A21E6E57EE357")
|| (csum ~== "09B30C9DA9D73D3D5A709502FBB947AA")
|| (csum ~== "6EAD80DA1F30B4B3546FA294EEF9F87C") )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_SIGIL);
// Doom 2 MAP11
else if ( (csum ~== "73D9E03CEE7BF1A97EFD2EAD86688EF8")
|| (csum ~== "F4F2A769609988837458772AAE99008C")
|| (csum ~== "DF6A001A6C42DB5CCA599EE5883B294A") )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_CIRCLE);
// Doom 2 MAP20
else if ( (csum ~== "8898F5EC9CBDCD98019A1BC1BF892A8A")
|| (csum ~== "CC53CFFCB30E873669AA2F09DA0D3566") )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_GOTCHA);
// Eviternity
// MAP05
else if ( csum ~== "33B8501B10CE5E2555C03725F765A914" )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_DMN);
// MAP10
else if ( csum ~== "9E83602D325677B8D7C3BC44BEF9B03F" )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_CRE);
// MAP15
else if ( csum ~== "CA40E6DDAB6B5C924CDC36B1F851421E" )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_CRY);
// MAP20
else if ( csum ~== "F34B3FD4D13AC763469A8E0D7379B9D0" )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_CON);
// MAP25
else if ( csum ~== "196BC735473C593F924A59B238574C35" )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_SLA);
// Deathkings
// Blight
else if ( csum ~== "E3EFB0156A20ADF2DF00915A0EA85DF5" )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_BLIGHT);
// Nave
else if ( csum ~== "E2B5D1400279335811C1C1C0B437D9C8" )
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_NAVE);
break;
}
}
override void WorldLoaded( WorldEvent e )
{
if ( e.IsReopen ) return;
MapStartDialogues();
if ( gamestate != GS_TITLELEVEL )
{
if ( (level.GetChecksum() ~== "D0E5ECD94BD38DF33F25515C00148693")
@ -268,9 +374,9 @@ extend Class SWWMHandler
// since KDiKDiZD requires software rendering, while this is a
// hardware-only mod... but hey, they can sort-of-work together
// (with broken visual effects, but still... somewhat working)
for ( int i=0; i<AllClasses.Size(); i++ )
foreach ( cls:AllClasses )
{
if ( AllClasses[i].GetClassName() != 'KdikdizdCompatEventHandler' )
if ( cls.GetClassName() != 'KdikdizdCompatEventHandler' )
continue;
ti = ThinkerIterator.Create("Thinker");
Thinker t;
@ -285,36 +391,12 @@ extend Class SWWMHandler
// setup cached lockdefs data
let cli = SWWMCachedLockInfo.GetInstance();
if ( cli.ent.Size() == 0 ) SetupLockdefsCache(cli);
// keep a list of sectors containing 3D floors, for use by the minimap
// also does the same for the portal group list
ffsectors.Clear();
psectors.Clear();
for ( int i=0; i<level.sectors.Size(); i++ )
{
Sector s = level.sectors[i];
if ( psectors.Size() <= s.portalgroup )
psectors.Resize(s.portalgroup+1);
psectors[s.portalgroup] = s.Index();
if ( !s.Get3DFloorCount() ) continue;
int realcount = 0;
for ( int j=0; j<s.Get3DFloorCount(); j++ )
{
F3DFloor rover = s.Get3DFloor(j);
if ( rover.flags&F3DFloor.FF_THISINSIDE ) continue;
if ( !(rover.flags&F3DFloor.FF_EXISTS) ) continue;
if ( rover.alpha == 0 ) continue;
realcount++;
}
if ( !realcount ) continue;
ffsectors.Push(s.Index());
}
// for skipping over merged exit lines (sharing vertices)
Array<Line> skipme;
skipme.Clear();
// find exit lines, and use lines that aren't exits
for ( int i=0; i<level.lines.Size(); i++ )
foreach ( l:level.Lines )
{
Line l = level.lines[i];
// all lines are immediately visible in DM
if ( deathmatch && !(l.flags&Line.ML_DONTDRAW) )
l.flags |= Line.ML_MAPPED;
@ -340,15 +422,14 @@ extend Class SWWMHandler
do
{
found = 0;
for ( int j=0; j<l.frontsector.Lines.Size(); j++ )
foreach ( l2:l.frontsector.Lines )
{
let l2 = l.frontsector.Lines[j];
if ( (l2.special != l.special) || (con.Find(l2) < con.Size()) ) continue;
// needs to have a point in common with this one or any of the added lines
bool nomatches = true;
for ( int k=0; k<con.Size(); k++ )
foreach ( c:con )
{
if ( (l2.v1 != con[k].v1) && (l2.v2 != con[k].v2) && (l2.v1 != con[k].v2) && (l2.v2 != con[k].v1) )
if ( (l2.v1 != c.v1) && (l2.v2 != c.v2) && (l2.v1 != c.v2) && (l2.v2 != c.v1) )
continue;
nomatches = false;
break;
@ -366,15 +447,14 @@ extend Class SWWMHandler
do
{
found = 0;
for ( int j=0; j<l.backsector.Lines.Size(); j++ )
foreach ( l2:l.backsector.Lines )
{
let l2 = l.backsector.Lines[j];
if ( (l2.special != l.special) || (con.Find(l2) < con.Size()) ) continue;
// needs to have a point in common with this one or any of the added lines
bool nomatches = true;
for ( int k=0; k<skipme.Size(); k++ )
foreach ( s:skipme )
{
if ( (l2.v1 != skipme[k].v1) && (l2.v2 != skipme[k].v2) && (l2.v1 != skipme[k].v2) && (l2.v2 != skipme[k].v1) )
if ( (l2.v1 != s.v1) && (l2.v2 != s.v2) && (l2.v1 != s.v2) && (l2.v2 != s.v1) )
continue;
nomatches = false;
break;
@ -388,8 +468,8 @@ extend Class SWWMHandler
while ( found > 0 );
}
Vector3 lpos = (0,0,0);
for ( int i=0; i<con.Size(); i++ )
lpos += SWWMUtility.UseLinePos(con[i]);
foreach ( c:con )
lpos += SWWMUtility.UseLinePos(c);
lpos /= con.Size();
SWWMInterest.Spawn(self,lpos,theline:l,theexit:exittype);
}