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

@ -62,9 +62,9 @@ extend Class SWWMHandler
S_StartSound("menu/buyinv",CHAN_ITEM,CHANF_UI);
S_StartSound("misc/w_pkup",CHAN_VOICE,CHANF_UI);
}
for ( int i=0; i<AllActorClasses.Size(); i++ )
foreach ( cls:AllActorClasses )
{
let w = (Class<SWWMWeapon>)(AllActorClasses[i]);
let w = (Class<SWWMWeapon>)(cls);
if ( !w || (w == 'SWWMWeapon') ) continue;
let def = GetDefaultByType(w);
if ( def.bCHEATNOTWEAPON ) continue;
@ -179,9 +179,9 @@ extend Class SWWMHandler
if ( !(i is 'Ammo') ) continue;
i.Amount = i.MaxAmount;
}
for ( int i=0; i<AllActorClasses.Size(); i++ )
foreach ( cls:AllActorClasses )
{
let w = (Class<SWWMWeapon>)(AllActorClasses[i]);
let w = (Class<SWWMWeapon>)(cls);
if ( !w || (w == 'SWWMWeapon') ) continue;
let def = GetDefaultByType(w);
if ( def.bCHEATNOTWEAPON ) continue;
@ -411,17 +411,7 @@ extend Class SWWMHandler
let s = SWWMStats.Find(players[consoleplayer]);
if ( (i > 5) && !swwm_nomapmsg && (!s || !s.oldcheat) )
{
if ( !swwm_oldcheats )
{
let m = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_ZNVSNAME"),StringTable.Localize("$SWWM_ZNVNAME"),"Znv");
m.seqname = "ZNVTXT";
m.seqcnt = 5;
m.znvspecial = true;
m.delay = 80;
m.enddelay = 90;
m.pausedelay = 40;
StatusBar.AttachMessage(m,-1232);
}
if ( !swwm_oldcheats ) SWWMDialogues.StartSeq(SWWMDLG_CHEATS);
CVar.GetCVar('swwm_oldcheats').SetBool(true);
SendNetworkEvent("swwmsetoldcheat",consoleplayer);
}

View file

@ -58,7 +58,7 @@ extend Class SWWMHandler
ctr.ignoreme = mo;
Vector3 x, y, z, ofs, origin;
Color col;
[x, y, z] = swwm_CoordUtil.GetAxes(e.ViewPitch,e.ViewAngle,e.ViewRoll);
[x, y, z] = SWWMUtility.GetAxes(e.ViewAngle,e.ViewPitch,e.ViewRoll);
int chp = crosshairhealth;
for ( int i=0; i<numcrosshairs; i++ )
{

View file

@ -30,7 +30,7 @@ extend Class SWWMHandler
private ui void DrawWorldCircle( RenderEvent e, Vector3 pos, double radius, Color col )
{
Vector3 x, y, z;
[x, y, z] = swwm_CoordUtil.GetAxes(e.viewpitch,e.viewangle,e.viewroll);
[x, y, z] = SWWMUtility.GetAxes(e.viewangle,e.viewpitch,e.viewroll);
Vector3 ndc[64];
for ( int i=0; i<64; i++ )
{
@ -82,7 +82,7 @@ extend Class SWWMHandler
DrawWorldLine(e,(b2.x,b2.y,b1.z),(b2.x,b2.y,b2.z),"White");
}
Vector3 x, y, z;
[x, y, z] = swwm_CoordUtil.GetAxes(a.pitch,a.angle,a.roll);
[x, y, z] = SWWMUtility.GetAxes(a.angle,a.pitch,a.roll);
DrawWorldLine(e,pos,pos+x*16,"Red");
DrawWorldLine(e,pos,pos+y*16,"Green");
DrawWorldLine(e,pos,pos+z*16,"Blue");

View file

@ -28,7 +28,7 @@ extend Class SWWMHandler
Vector3 x, y, z;
double ang = e.Thing.target.target?e.Thing.AngleTo(e.Thing.target.target):e.Thing.angle;
double pt = e.Thing.target.target?SWWMUtility.PitchTo(e.Thing,e.Thing.target.target,.5):e.Thing.pitch;
[x, y, z] = swwm_CoordUtil.GetAxes(pt,ang,e.Thing.roll);
[x, y, z] = SWWMUtility.GetAxes(ang,pt,e.Thing.roll);
int numpt = Random[ExtraMissiles](1,2);
for ( int i=0; i<numpt; i++ )
{

View file

@ -15,9 +15,9 @@ extend Class SWWMHandler
if ( !(p.mo is 'Demolitionist') )
{
// make sure it's defined here, so special purpose classes (player chunks, scripted overrides) are respected
for ( int i=0; i<PlayerClasses.Size(); i++ )
foreach ( pc:PlayerClasses )
{
if ( !(p.mo is PlayerClasses[i].Type) ) continue;
if ( !(p.mo is pc.Type) ) continue;
// perform a hotswap, code adapted from my .flow player morph in spooktober
let n = PlayerPawn(Actor.Spawn("Demolitionist",p.mo.pos));
n.player = p;
@ -130,10 +130,10 @@ extend Class SWWMHandler
if ( swwm_resetscore && level.info.flags2&LEVEL2_RESETINVENTORY && !e.IsReturn )
c.credits = 0;
// re-add any missing collectibles after a death exit (yes, this happens)
for ( int i=0; i<s.ownedcollectibles.Size(); i++ )
foreach ( oc:s.ownedcollectibles )
{
if ( p.mo.FindInventory(s.ownedcollectibles[i]) ) continue;
let c = SWWMCollectible(Actor.Spawn(s.ownedcollectibles[i],p.mo.pos));
if ( p.mo.FindInventory(oc) ) continue;
let c = SWWMCollectible(Actor.Spawn(oc,p.mo.pos));
c.propagated = true;
if ( !c.CallTryPickup(p.mo) )
c.Destroy();

View file

@ -37,6 +37,51 @@ extend Class SWWMHandler
}
}
override void InterfaceProcess( ConsoleEvent e )
{
if ( e.IsManual ) return;
if ( e.Name ~== "swwmsetdialogue" )
SWWMDialogues.StartSeq(e.Args[0]);
else if ( e.Name.Left(11) ~== "swwmkeyget." )
{
let bar = SWWMStatusBar(StatusBar);
if ( !bar || (bar.CPlayer != players[e.Args[0]]) ) return;
String kname = e.Name.Mid(11);
Class<Key> k = kname;
if ( k )
{
let kg = new("KeyGet");
kg.got = k;
kg.flashtime = gametic+25;
bar.keyflash.Push(kg);
}
}
else if ( e.Name.Left(15) ~== "swwmwpntooltip." )
{
let bar = SWWMStatusBar(StatusBar);
if ( !bar ) return;
String wname = e.Name.Mid(15);
Class<SWWMWeapon> w = wname;
if ( w )
{
let tt = new("SWWMWeaponTooltip").Init(w);
bool appended = false;
for ( SWWMWeaponTooltip t=bar.ctip; t; t=t.next )
{
if ( t.next ) continue;
appended = true;
t.next = tt;
break;
}
if ( !appended )
{
bar.ctip = tt;
bar.AttachMessage(tt,-2910);
}
}
}
}
override void NetworkProcess( ConsoleEvent e )
{
if ( e.Name ~== "swwmgesture" )
@ -343,18 +388,18 @@ extend Class SWWMHandler
// if it's an ammo, check the largest unit givable
if ( i is 'Ammo' )
{
for ( int i=0; i<AllActorClasses.Size(); i++ )
foreach ( cls:AllActorClasses )
{
let a = (Class<Ammo>)(AllActorClasses[i]);
let a = (Class<Ammo>)(cls);
if ( !a || (a.GetParentClass() != item) || (GetDefaultByType(a).Amount < amt) ) continue;
amt = GetDefaultByType(a).Amount;
}
}
if ( i is 'MagAmmo' )
{
for ( int i=0; i<AllActorClasses.Size(); i++ )
foreach ( cls:AllActorClasses )
{
let a = (Class<MagAmmo>)(AllActorClasses[i]);
let a = (Class<MagAmmo>)(cls);
if ( !a || (a.GetParentClass() != item) || (GetDefaultByType(a).Amount < amt) ) continue;
amt = GetDefaultByType(a).Amount;
}
@ -457,8 +502,6 @@ extend Class SWWMHandler
}
else if ( e.Name ~== "swwmccstart" )
gdat.ccstartonce = true;
else if ( e.Name ~== "swwmcclilith" )
gdat.cclilithonce = true;
// cheats go here
else CheatEvent(e);
}

View file

@ -146,7 +146,7 @@ extend Class SWWMHandler
PPShader.SetUniform1f("ZoomBlur","Fade",clamp((spd-20.)/60.,0.,1.));
double str = min(spd/40.,15.);
Vector3 x, y, z;
[x, y, z] = swwm_CoordUtil.GetAxes(e.ViewPitch,e.ViewAngle,e.ViewRoll);
[x, y, z] = SWWMUtility.GetAxes(e.ViewAngle,e.ViewPitch,e.ViewRoll);
Vector3 reldir = (worlddir dot y, worlddir dot z, worlddir dot x);
Vector2 centerspot = (.5+reldir.x*.5,.5+reldir.y*.5);
if ( reldir.z < 0 )

View file

@ -1,561 +0,0 @@
// misc. UI Tick stuff
extend Class SWWMHandler
{
ui bool didstartmsg;
bool doextramsg;
ui bool didextramsg;
// april fools special
ui bool didaprmsg;
// corruption cards stuff
ui bool incardmenu, cardmessaged;
bool dolilithmsg, doromerobotmsg;
ui bool didlilithmsg, didromerobotmsg;
private ui void MapstartUITick()
{
if ( !didextramsg && doextramsg )
{
if ( !swwm_nomapmsg )
{
// angry about phase two
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYAEVIB";
msg.seqcnt = 2;
msg.delay = 20;
StatusBar.AttachMessage(msg,-1232);
}
didextramsg = true;
}
if ( !didlilithmsg && !gdat.cclilithonce && dolilithmsg )
{
if ( !swwm_nomapmsg )
{
// saya's live freakout™
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYALILITHA";
msg.seqcnt = 2;
msg.delay = 1050; // give it about 15 seconds for it to happen
StatusBar.AttachMessage(msg,-1232);
let msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_CYTHOSNAME"),StringTable.Localize("$SWWM_CYTHONAME"),"Cytho");
msg2.seqname = "SAYALILITHB";
msg2.seqcnt = 1;
msg2.delay = 30;
msg.nextmsg = msg2;
msg.nextdirect = true;
msg = msg2;
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg2.seqname = "SAYALILITHC";
msg2.seqcnt = 1;
msg2.delay = 20;
msg.nextmsg = msg2;
msg.nextdirect = true;
msg = msg2;
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_CYTHOSNAME"),StringTable.Localize("$SWWM_CYTHONAME"),"Cytho");
msg2.seqname = "SAYALILITHD";
msg2.seqcnt = 1;
msg2.delay = 40;
msg.nextmsg = msg2;
msg.nextdirect = true;
msg = msg2;
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg2.seqname = "SAYALILITHE";
msg2.seqcnt = 1;
msg2.delay = 50;
msg.nextmsg = msg2;
msg.nextdirect = true;
}
didlilithmsg = true;
SendNetworkEvent("swwmcclilith");
}
if ( !didromerobotmsg && doromerobotmsg )
{
if ( !swwm_nomapmsg )
{
// rom3r-0 is about to make you his bitch
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYAROMEROA";
msg.seqcnt = 1;
msg.delay = 50;
StatusBar.AttachMessage(msg,-1232);
let msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_CYTHOSNAME"),StringTable.Localize("$SWWM_CYTHONAME"),"Cytho");
msg2.seqname = "SAYAROMEROB";
msg2.seqcnt = 1;
msg2.delay = 40;
msg.nextmsg = msg2;
msg.nextdirect = true;
msg = msg2;
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg2.seqname = "SAYAROMEROC";
msg2.seqcnt = 1;
msg2.delay = 30;
msg.nextmsg = msg2;
msg.nextdirect = true;
msg = msg2;
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_CYTHOSNAME"),StringTable.Localize("$SWWM_CYTHONAME"),"Cytho");
msg2.seqname = "SAYAROMEROD";
msg2.seqcnt = 2;
msg2.delay = 50;
msg.nextmsg = msg2;
msg.nextdirect = true;
msg = msg2;
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg2.seqname = "SAYAROMEROE";
msg2.seqcnt = 1;
msg2.delay = 70;
msg.nextmsg = msg2;
msg.nextdirect = true;
}
didromerobotmsg = true;
}
if ( ccloaded && !gdat.ccstartonce && !cardmessaged && (gamestate == GS_LEVEL) )
{
let m = Menu.GetCurrentMenu();
if ( m && (m.GetClassName() == 'CorruptionCardsSelector') ) incardmenu = true;
else if ( incardmenu )
{
if ( !swwm_ccmessage )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_CYTHOSNAME"),StringTable.Localize("$SWWM_CYTHONAME"),"Cytho");
msg.seqname = "CYTHOCCA";
msg.seqcnt = 4;
msg.delay = 120;
StatusBar.AttachMessage(msg,-1232);
let msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg2.seqname = "CYTHOCCB";
msg2.seqcnt = 1;
msg2.delay = 30;
msg.nextmsg = msg2;
msg.nextdirect = true;
msg = msg2;
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_CYTHOSNAME"),StringTable.Localize("$SWWM_CYTHONAME"),"Cytho");
msg2.seqname = "CYTHOCCC";
msg2.seqcnt = 1;
msg2.delay = 45;
msg.nextmsg = msg2;
msg.nextdirect = true;
}
CVar.GetCVar('swwm_ccmessage').SetBool(true);
cardmessaged = true;
SendNetworkEvent("swwmccstart");
}
}
if ( didstartmsg ) return;
if ( swwm_nomapmsg )
{
didstartmsg = true;
return;
}
if ( !didaprmsg && (gamestate == GS_LEVEL) )
{
didaprmsg = true;
if ( SystemTime.Format("%d%m",SystemTime.Now()) == "0104" )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYAFOOL";
msg.seqcnt = 5;
msg.delay = 120;
StatusBar.AttachMessage(msg,-1232);
didstartmsg = true;
return;
}
}
int whichboss = WhichVanillaBossMap();
if ( bossmap == MAP_DE1M8 )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYAPHOBOS";
msg.seqcnt = 4;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
else if ( bossmap == MAP_DE2M8 )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYADEIMOS";
msg.seqcnt = 4;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
else if ( bossmap == MAP_DE3M8 )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYADIS";
msg.seqcnt = 4;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
else if ( bossmap == MAP_DE4M8 )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYATHY";
msg.seqcnt = 4;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
else if ( bossmap == MAP_DMAP07 )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYADIMPLE";
msg.seqcnt = 5;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
else if ( bossmap == MAP_DMAP30 )
{
// rampancy check
bool rampancy = false;
for ( int i=0; i<AllActorClasses.Size(); i++ )
{
if ( AllActorClasses[i].GetClassName() != "Robot_BossBrain" ) continue;
rampancy = true;
break;
}
if ( rampancy )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYARAMPANCY";
msg.seqcnt = 4;
msg.delay = 250;
StatusBar.AttachMessage(msg,-1232);
}
else
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYAIOS";
msg.seqcnt = 5;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
}
else if ( bossmap == MAP_DLVL08 )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_CYTHOSNAME"),StringTable.Localize("$SWWM_CYTHONAME"),"Cytho");
msg.seqname = "CYTHONERVE";
msg.seqcnt = 5;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
else if ( bossmap == MAP_EVMAP30 )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYAEVIA";
msg.seqcnt = 4;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
else if ( bossmap == MAP_HE1M8_HE4M8 )
{
if ( level.mapname ~== "E1M8" )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYAMAW";
msg.seqcnt = 5;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
else
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYAHEADS";
msg.seqcnt = 6;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
}
else if ( bossmap == MAP_HE2M8_HE5M8 )
{
if ( level.mapname ~== "E2M8" )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYAMASTERS";
msg.seqcnt = 5;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
else
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYABULLS";
msg.seqcnt = 5;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
}
else if ( bossmap == MAP_HE3M8 )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYADSPARIL";
msg.seqcnt = 5;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
else if ( bossmap == MAP_HMAP38 )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYACLERICA";
msg.seqcnt = 2;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
let msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_KIRINSNAME"),StringTable.Localize("$SWWM_KIRINNAME"),"Kirin");
msg2.seqname = "SAYACLERICB";
msg2.seqcnt = 1;
msg2.delay = 20;
msg.nextmsg = msg2;
msg.nextdirect = true;
msg = msg2;
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg2.seqname = "SAYACLERICC";
msg2.seqcnt = 2;
msg2.delay = 20;
msg.nextmsg = msg2;
msg.nextdirect = true;
}
else if ( bossmap == MAP_HMAP36 )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYAFIGHTER";
msg.seqcnt = 2;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
else if ( bossmap == MAP_HMAP37 )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYAMAGE";
msg.seqcnt = 4;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
else if ( bossmap == MAP_HMAP12 )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYAHYPO";
msg.seqcnt = 4;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
else if ( bossmap == MAP_HMAP40 )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYAKORAXA";
msg.seqcnt = 1;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
let msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_KIRINSNAME"),StringTable.Localize("$SWWM_KIRINNAME"),"Kirin");
msg2.seqname = "SAYAKORAXB";
msg2.seqcnt = 1;
msg2.delay = 20;
msg.nextmsg = msg2;
msg.nextdirect = true;
msg = msg2;
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_IBUKISNAME"),StringTable.Localize("$SWWM_IBUKINAME"),"Ibuki");
msg2.seqname = "SAYAKORAXC";
msg2.seqcnt = 1;
msg2.delay = 20;
msg.nextmsg = msg2;
msg.nextdirect = true;
msg = msg2;
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg2.seqname = "SAYAKORAXD";
msg2.seqcnt = 1;
msg2.delay = 20;
msg.nextmsg = msg2;
msg.nextdirect = true;
msg = msg2;
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_KIRINSNAME"),StringTable.Localize("$SWWM_KIRINNAME"),"Kirin");
msg2.seqname = "SAYAKORAXE";
msg2.seqcnt = 1;
msg2.delay = 20;
msg.nextmsg = msg2;
msg.nextdirect = true;
}
else if ( (bossmap == MAP_HMAP23_HMAP27_HMAP48_HMAP55) && (level.mapname ~== "MAP48") )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYACONSTABLEA";
msg.seqcnt = 2;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
let msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_IBUKISNAME"),StringTable.Localize("$SWWM_IBUKINAME"),"Ibuki");
msg2.seqname = "SAYACONSTABLEB";
msg2.seqcnt = 1;
msg2.delay = 30;
msg.nextmsg = msg2;
msg.nextdirect = true;
msg = msg2;
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg2.seqname = "SAYACONSTABLEC";
msg2.seqcnt = 1;
msg2.delay = 20;
msg.nextmsg = msg2;
msg.nextdirect = true;
msg = msg2;
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_IBUKISNAME"),StringTable.Localize("$SWWM_IBUKINAME"),"Ibuki");
msg2.seqname = "SAYACONSTABLED";
msg2.seqcnt = 1;
msg2.delay = 20;
msg.nextmsg = msg2;
msg.nextdirect = true;
}
else if ( bossmap == MAP_HMAP60 )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYADEATHKINGS";
msg.seqcnt = 1;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
else if ( bossmap == MAP_NONE ) // gotta get checksums here
{
String csum = level.GetChecksum();
// SIGIL E5M8
if ( (csum ~== "3D72FD17F36D2D43FD9A21E6E57EE357")
|| (csum ~== "09B30C9DA9D73D3D5A709502FBB947AA")
|| (csum ~== "6EAD80DA1F30B4B3546FA294EEF9F87C") )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_CYTHOSNAME"),StringTable.Localize("$SWWM_CYTHONAME"),"Cytho");
msg.seqname = "CYTHOSIGIL";
msg.seqcnt = 4;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
// Doom 2 MAP11
else if ( (csum ~== "73D9E03CEE7BF1A97EFD2EAD86688EF8")
|| (csum ~== "F4F2A769609988837458772AAE99008C")
|| (csum ~== "DF6A001A6C42DB5CCA599EE5883B294A") )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYACIRCLE";
msg.seqcnt = 5;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
// Doom 2 MAP20
else if ( (csum ~== "8898F5EC9CBDCD98019A1BC1BF892A8A")
|| (csum ~== "CC53CFFCB30E873669AA2F09DA0D3566") )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYAGOTCHA";
msg.seqcnt = 5;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
// Eviternity
// MAP05
else if ( csum ~== "33B8501B10CE5E2555C03725F765A914" )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYADMN";
msg.seqcnt = 8;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
}
// MAP10
else if ( csum ~== "9E83602D325677B8D7C3BC44BEF9B03F" )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYACRE";
msg.seqcnt = 4;
msg.delay = 50;
StatusBar.AttachMessage(msg,-1232);
}
// MAP15
else if ( csum ~== "CA40E6DDAB6B5C924CDC36B1F851421E" )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYACRY";
msg.seqcnt = 5;
msg.delay = 30;
StatusBar.AttachMessage(msg,-1232);
}
// MAP20
else if ( csum ~== "F34B3FD4D13AC763469A8E0D7379B9D0" )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYACON";
msg.seqcnt = 5;
msg.delay = 50;
StatusBar.AttachMessage(msg,-1232);
}
// MAP25
else if ( csum ~== "196BC735473C593F924A59B238574C35" )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYASLA";
msg.seqcnt = 1;
msg.delay = 120;
StatusBar.AttachMessage(msg,-1232);
}
// Deathkings
// Blight
else if ( csum ~== "E3EFB0156A20ADF2DF00915A0EA85DF5" )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYABLIGHTA";
msg.seqcnt = 1;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
let msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_KIRINSNAME"),StringTable.Localize("$SWWM_KIRINNAME"),"Kirin");
msg2.seqname = "SAYABLIGHTB";
msg2.seqcnt = 1;
msg2.delay = 5;
msg2.enddelay = 15;
msg.nextmsg = msg2;
msg.nextdirect = true;
msg = msg2;
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg2.seqname = "SAYABLIGHTC";
msg2.seqcnt = 2;
msg2.delay = 20;
msg.nextmsg = msg2;
msg.nextdirect = true;
}
// Nave
else if ( csum ~== "E2B5D1400279335811C1C1C0B437D9C8" )
{
let msg = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg.seqname = "SAYANAVEA";
msg.seqcnt = 2;
msg.delay = 40;
StatusBar.AttachMessage(msg,-1232);
let msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_IBUKISNAME"),StringTable.Localize("$SWWM_IBUKINAME"),"Ibuki");
msg2.seqname = "SAYANAVEB";
msg2.seqcnt = 1;
msg2.delay = 20;
msg.nextmsg = msg2;
msg.nextdirect = true;
msg = msg2;
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_KIRINSNAME"),StringTable.Localize("$SWWM_KIRINNAME"),"Kirin");
msg2.seqname = "SAYANAVEC";
msg2.seqcnt = 1;
msg2.delay = 5;
msg2.enddelay = 30;
msg.nextmsg = msg2;
msg.nextdirect = true;
msg = msg2;
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg2.seqname = "SAYANAVED";
msg2.seqcnt = 1;
msg2.delay = 20;
msg.nextmsg = msg2;
msg.nextdirect = true;
msg = msg2;
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_IBUKISNAME"),StringTable.Localize("$SWWM_IBUKINAME"),"Ibuki");
msg2.seqname = "SAYANAVEE";
msg2.seqcnt = 1;
msg2.delay = 30;
msg.nextmsg = msg2;
msg.nextdirect = true;
msg = msg2;
msg2 = new("SWWMDirectMessage").Init(StringTable.Localize("$SWWM_SAYASNAME"),StringTable.Localize("$SWWM_SAYANAME"),"Saya");
msg2.seqname = "SAYANAVEF";
msg2.seqcnt = 1;
msg2.delay = 40;
msg.nextmsg = msg2;
msg.nextdirect = true;
}
}
didstartmsg = true;
}
}

View file

@ -49,8 +49,7 @@ Class ROM3R0Message : Inventory
if ( Owner.InStateSequence(Owner.CurState,Owner.SeeState) )
{
Console.PrintfEx(PRINT_CHAT,StringTable.Localize("$BOSSLINE_ROM3R0"));
let hnd = SWWMHandler(EventHandler.Find("SWWMHandler"));
if ( hnd ) hnd.doromerobotmsg = true;
EventHandler.SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_ROMERO);
DepleteOrDestroy();
return;
}
@ -460,7 +459,7 @@ extend Class SWWMHandler
bosstag = "$BT_ARCHANGELUS";
e.Thing.GiveInventory('BossMarker',1);
e.Thing.GiveInventory('EndgameBossMarker',1);
doextramsg = true;
SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_EVIB);
}
}
if ( ccloaded && (e.Thing.GetClassName() == "CCards_Boss_Romero") )
@ -478,10 +477,10 @@ extend Class SWWMHandler
{
if ( initialized ) return;
// wait until bosses are active
for ( int i=0; i<bossactors.Size(); i++ )
foreach ( a:bossactors )
{
if ( !bossactors[i] ) continue;
if ( (!bossactors[i].target || !bossactors[i].CheckSight(bossactors[i].target,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY))
if ( !a ) continue;
if ( (!a.target || !a.CheckSight(a.target,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY))
&& (!bossviewactor || (bossviewactor && !bossviewactor.target)) ) continue;
initialized = true;
// oneliners
@ -515,10 +514,10 @@ extend Class SWWMHandler
{
ui_initialized = true;
thealth = 0;
for ( int i=0; i<bossactors.Size(); i++ )
foreach ( a:bossactors )
{
if ( !bossactors[i] ) continue;
thealth += max(0,bossactors[i].SpawnHealth());
if ( !a ) continue;
thealth += max(0,a.SpawnHealth());
}
hmax = thealth;
for ( int i=0; i<30; i++ ) oldhealth[i] = thealth;
@ -532,10 +531,10 @@ extend Class SWWMHandler
if ( !ui_initialized ) return;
// update healthbar
int newhealth = 0;
for ( int i=0; i<bossactors.Size(); i++ )
foreach ( a:bossactors )
{
if ( !bossactors[i] ) continue;
newhealth += max(0,bossactors[i].Health);
if ( !a ) continue;
newhealth += max(0,a.Health);
}
oldhealth[0] = newhealth;
int curcumm = max(0,thealth-newhealth);

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);
}

View file

@ -396,7 +396,10 @@ extend Class SWWMHandler
e.Thing.ActiveSound = "grunt/active";
}
else if ( ccloaded && (e.Thing.GetClassName() == "CCards_Token_Glitched") )
dolilithmsg = true;
{
if ( !gdat.cclilithonce ) SendInterfaceEvent(consoleplayer,"swwmsetdialogue",SWWMDLG_LILITH);
gdat.cclilithonce = true;
}
if ( SWWMUtility.IdentifyingDog(e.Thing) || SWWMUtility.IdentifyingCaco(e.Thing)
|| SWWMUtility.IdentifyingDrug(e.Thing) || SWWMUtility.IdentifyingDoubleBoi(e.Thing) )
{

View file

@ -306,9 +306,8 @@ extend Class SWWMHandler
SWWMSimpleTracker.Track(self,a);
}
// we need to refer to the suckables array to find missiles
for ( int i=0; i<suckableactors.Size(); i++ )
foreach ( a:suckableactors )
{
let a = suckableactors[i];
if ( !a || !a.bMISSILE ) continue;
Vector2 rv = a.pos.xy-players[consoleplayer].Camera.pos.xy;
if ( max(abs(rv.x)-a.radius,abs(rv.y)-a.radius) > viewdist )
@ -317,9 +316,8 @@ extend Class SWWMHandler
continue;
SWWMSimpleTracker.Track(self,a);
}
for ( int i=0; i<beams.Size(); i++ )
foreach ( a:beams )
{
let a = beams[i];
if ( !a ) continue;
Vector2 rv = a.pos.xy-players[consoleplayer].Camera.pos.xy;
double rad = SWWMUtility.IsYBeam(a)?(a.scale.y*cos(a.pitch-90)):(a.speed*cos(a.pitch));
@ -330,63 +328,58 @@ extend Class SWWMHandler
SWWMSimpleTracker.Track(self,a);
}
bt.Destroy();
if ( psectors.Size() > 1 )
// oh boy here we go
int thisgroup = players[consoleplayer].Camera.CurSector.portalgroup;
for ( int i=0; i<level.GetPortalGroupCount(); i++ )
{
// oh boy here we go
int thisgroup = players[consoleplayer].Camera.CurSector.portalgroup;
for ( int i=0; i<psectors.Size(); i++ )
if ( i == thisgroup ) continue;
Vector2 relpos = players[consoleplayer].Camera.pos.xy+level.GetDisplacement(thisgroup,i);
if ( bt ) bt.Destroy();
bt = BlockThingsIterator.CreateFromPos(relpos.x,relpos.y,players[consoleplayer].Camera.pos.z,players[consoleplayer].Camera.pos.z+players[consoleplayer].Camera.height,viewdist,false);
while ( bt.Next() )
{
if ( i == thisgroup ) continue;
Vector2 relpos = players[consoleplayer].Camera.pos.xy+SWWMUtility.PortalDisplacement(level.Sectors[psectors[thisgroup]],level.Sectors[psectors[i]]);
if ( bt ) bt.Destroy();
bt = BlockThingsIterator.CreateFromPos(relpos.x,relpos.y,players[consoleplayer].Camera.pos.z,players[consoleplayer].Camera.pos.z+players[consoleplayer].Camera.height,viewdist,false);
while ( bt.Next() )
{
let a = bt.Thing;
if ( !a ) continue;
Vector2 rv = a.pos.xy-relpos;
if ( max(abs(rv.x)-a.radius,abs(rv.y)-a.radius) > viewdist )
continue;
if ( a == players[consoleplayer].Camera )
continue;
if ( a is 'GhostTarget' )
continue;
if ( !a.player && !a.bSOLID && !a.bSHOOTABLE && !a.bISMONSTER && !a.bFRIENDLY && !(a is 'Inventory') && !(a is 'Chancebox') )
continue;
if ( !level.allmap && !(deathmatch && (a is 'Inventory') && !a.bDROPPED) && !a.IsFriend(players[consoleplayer].mo) && !a.CheckSight(players[consoleplayer].Camera,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) )
continue;
if ( a.bKILLED || (a.Health <= 0) || a.bUnmorphed )
continue;
if ( (a is 'Inventory') && (!a.bSPECIAL || Inventory(a).Owner) )
continue;
if ( (a is 'Chancebox') && (a.CurState != a.SpawnState) )
continue;
SWWMSimpleTracker.Track(self,a);
}
// we need to refer to the suckables array to find missiles
for ( int i=0; i<suckableactors.Size(); i++ )
{
let a = suckableactors[i];
if ( !a || !a.bMISSILE ) continue;
Vector2 rv = a.pos.xy-relpos;
if ( max(abs(rv.x)-a.radius,abs(rv.y)-a.radius) > viewdist )
continue;
if ( !level.allmap && !(a.target && a.target.IsFriend(players[consoleplayer].mo)) && !a.CheckSight(players[consoleplayer].Camera,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) )
continue;
SWWMSimpleTracker.Track(self,a);
}
for ( int i=0; i<beams.Size(); i++ )
{
let a = beams[i];
if ( !a ) continue;
Vector2 rv = a.pos.xy-relpos;
double rad = SWWMUtility.IsYBeam(a)?(a.scale.y*cos(a.pitch-90)):(a.speed*cos(a.pitch));
if ( max(abs(rv.x)-rad,abs(rv.y)-rad) > viewdist )
continue;
if ( !level.allmap && !(a.target && a.target.IsFriend(players[consoleplayer].mo)) && !a.CheckSight(players[consoleplayer].Camera,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) )
continue;
SWWMSimpleTracker.Track(self,a);
}
let a = bt.Thing;
if ( !a ) continue;
Vector2 rv = a.pos.xy-relpos;
if ( max(abs(rv.x)-a.radius,abs(rv.y)-a.radius) > viewdist )
continue;
if ( a == players[consoleplayer].Camera )
continue;
if ( a is 'GhostTarget' )
continue;
if ( !a.player && !a.bSOLID && !a.bSHOOTABLE && !a.bISMONSTER && !a.bFRIENDLY && !(a is 'Inventory') && !(a is 'Chancebox') )
continue;
if ( !level.allmap && !(deathmatch && (a is 'Inventory') && !a.bDROPPED) && !a.IsFriend(players[consoleplayer].mo) && !a.CheckSight(players[consoleplayer].Camera,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) )
continue;
if ( a.bKILLED || (a.Health <= 0) || a.bUnmorphed )
continue;
if ( (a is 'Inventory') && (!a.bSPECIAL || Inventory(a).Owner) )
continue;
if ( (a is 'Chancebox') && (a.CurState != a.SpawnState) )
continue;
SWWMSimpleTracker.Track(self,a);
}
// we need to refer to the suckables array to find missiles
foreach ( a:suckableactors )
{
if ( !a || !a.bMISSILE ) continue;
Vector2 rv = a.pos.xy-relpos;
if ( max(abs(rv.x)-a.radius,abs(rv.y)-a.radius) > viewdist )
continue;
if ( !level.allmap && !(a.target && a.target.IsFriend(players[consoleplayer].mo)) && !a.CheckSight(players[consoleplayer].Camera,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) )
continue;
SWWMSimpleTracker.Track(self,a);
}
foreach ( a:beams )
{
if ( !a ) continue;
Vector2 rv = a.pos.xy-relpos;
double rad = SWWMUtility.IsYBeam(a)?(a.scale.y*cos(a.pitch-90)):(a.speed*cos(a.pitch));
if ( max(abs(rv.x)-rad,abs(rv.y)-rad) > viewdist )
continue;
if ( !level.allmap && !(a.target && a.target.IsFriend(players[consoleplayer].mo)) && !a.CheckSight(players[consoleplayer].Camera,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) )
continue;
SWWMSimpleTracker.Track(self,a);
}
}
SWWMSimpleTracker trk = strackers;

View file

@ -119,12 +119,12 @@ extend Class SWWMStaticHandler
dat.Replace("\r","");
list.Clear();
dat.Split(list,"\n");
for ( int i=0; i<list.Size(); i++ )
foreach ( l:list )
{
if ( (list[i].Length() == 0) || (list[i].Left(1) == "#") || (list[i].Left(1) == "") )
if ( (l.Length() == 0) || (l.Left(1) == "#") || (l.Left(1) == "") )
continue;
ln.Clear();
list[i].Split(ln,",",0);
l.Split(ln,",",0);
// game filtering
if ( !(gameinfo.gametype&GAME_DOOM) && (ln[3] ~== "doom") ) continue;
else if ( !(gameinfo.gametype&GAME_HERETIC) && (ln[3] ~== "heretic") ) continue;
@ -142,9 +142,9 @@ extend Class SWWMStaticHandler
if ( (ac.maxval == -1) && (ac.basename == "allcoll") )
{
int nc = 0;
for ( int i=0; i<AllActorClasses.Size(); i++ )
foreach ( cls:AllActorClasses )
{
let c = (Class<SWWMCollectible>)(AllActorClasses[i]);
let c = (Class<SWWMCollectible>)(cls);
if ( !c || (c == 'SWWMCollectible') ) continue;
let def = GetDefaultByType(c);
// check that we can collect it in this IWAD
@ -212,29 +212,29 @@ extend Class SWWMStaticHandler
Array<String> keys;
keys.Clear();
statestr.Split(keys,",");
for ( int i=0; i<keys.Size(); i++ )
foreach ( k:keys )
{
int colon = keys[i].IndexOf(":");
int colon = k.IndexOf(":");
// no value separator?
if ( colon == -1 )
{
CreateAchievements();
return;
}
achievementstate.Insert(keys[i].Left(colon),keys[i].Mid(colon+1));
achievementstate.Insert(k.Left(colon),k.Mid(colon+1));
}
keys.Clear();
progstr.Split(keys,",");
for ( int i=0; i<keys.Size(); i++ )
foreach ( k:keys )
{
int colon = keys[i].IndexOf(":");
int colon = k.IndexOf(":");
// no value separator?
if ( colon == -1 )
{
CreateAchievements();
return;
}
achievementprogress.Insert(keys[i].Left(colon),keys[i].Mid(colon+1));
achievementprogress.Insert(k.Left(colon),k.Mid(colon+1));
}
// load achievement info and trim any bogus keys, as well as adding any new ones that are missing
ParseAchievementList(achievementinfo);
@ -243,9 +243,9 @@ extend Class SWWMStaticHandler
{
String key = di.Key();
bool deleteme = true;
for ( int i=0; i<achievementinfo.Size(); i++ )
foreach ( inf:achievementinfo )
{
if ( achievementinfo[i].basename != key ) continue;
if ( inf.basename != key ) continue;
deleteme = false;
break;
}
@ -260,10 +260,10 @@ extend Class SWWMStaticHandler
{
String key = di.Key();
bool deleteme = true;
for ( int i=0; i<achievementinfo.Size(); i++ )
foreach ( inf:achievementinfo )
{
if ( achievementinfo[i].basename != key ) continue;
if ( !achievementinfo[i].maxval ) continue;
if ( inf.basename != key ) continue;
if ( !inf.maxval ) continue;
deleteme = false;
break;
}
@ -273,17 +273,17 @@ extend Class SWWMStaticHandler
achievementprogress.Remove(key);
}
}
for ( int i=0; i<achievementinfo.Size(); i++ )
foreach ( inf:achievementinfo )
{
if ( achievementstate.At(achievementinfo[i].basename) == "" )
if ( achievementstate.At(inf.basename) == "" )
{
if ( developer >= 2 ) Console.Printf("Adding missing achievement state %s",achievementinfo[i].basename);
achievementstate.Insert(achievementinfo[i].basename,"0");
if ( developer >= 2 ) Console.Printf("Adding missing achievement state %s",inf.basename);
achievementstate.Insert(inf.basename,"0");
}
if ( achievementinfo[i].maxval && (achievementprogress.At(achievementinfo[i].basename) == "") )
if ( inf.maxval && (achievementprogress.At(inf.basename) == "") )
{
if ( developer >= 2 ) Console.Printf("Adding missing achievement progress %s",achievementinfo[i].basename);
achievementprogress.Insert(achievementinfo[i].basename,"0");
if ( developer >= 2 ) Console.Printf("Adding missing achievement progress %s",inf.basename);
achievementprogress.Insert(inf.basename,"0");
}
}
}
@ -334,11 +334,11 @@ extend Class SWWMStaticHandler
achievementstate = Dictionary.Create();
achievementprogress = Dictionary.Create();
ParseAchievementList(achievementinfo);
for ( int i=0; i<achievementinfo.Size(); i++ )
foreach ( inf:achievementinfo )
{
achievementstate.Insert(achievementinfo[i].basename,"0");
if ( !achievementinfo[i].maxval ) continue;
achievementprogress.Insert(achievementinfo[i].basename,"0");
achievementstate.Insert(inf.basename,"0");
if ( !inf.maxval ) continue;
achievementprogress.Insert(inf.basename,"0");
}
}
@ -349,17 +349,17 @@ extend Class SWWMStaticHandler
achievementprogress = Dictionary.Create();
ParseAchievementList(achievementinfo);
CVar cv;
for ( int i=0; i<achievementinfo.Size(); i++ )
foreach ( inf:achievementinfo )
{
String val = "0";
cv = CVar.FindCVar("swwm_achievement_"..achievementinfo[i].basename);
cv = CVar.FindCVar("swwm_achievement_"..inf.basename);
if ( cv ) val = cv.GetString();
achievementstate.Insert(achievementinfo[i].basename,val);
if ( !achievementinfo[i].maxval ) continue;
achievementstate.Insert(inf.basename,val);
if ( !inf.maxval ) continue;
val = "0";
cv = CVar.FindCVar("swwm_progress_"..achievementinfo[i].basename);
cv = CVar.FindCVar("swwm_progress_"..inf.basename);
if ( cv ) val = cv.GetString();
achievementprogress.Insert(achievementinfo[i].basename,val);
achievementprogress.Insert(inf.basename,val);
}
}
}