diff --git a/language.version b/language.version index a330bfd9a..3f76d2523 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1015 \cu(Wed 22 Nov 19:49:24 CET 2023)\c-"; -SWWM_SHORTVER="\cw1.3pre r1015 \cu(2023-11-22 19:49:24)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1016 \cu(Wed 22 Nov 19:49:39 CET 2023)\c-"; +SWWM_SHORTVER="\cw1.3pre r1016 \cu(2023-11-22 19:49:39)\c-"; diff --git a/zscript/hud/swwm_hud_topstuff.zsc b/zscript/hud/swwm_hud_topstuff.zsc index 9f796faa2..23f5a068f 100644 --- a/zscript/hud/swwm_hud_topstuff.zsc +++ b/zscript/hud/swwm_hud_topstuff.zsc @@ -223,35 +223,33 @@ extend Class SWWMStatusBar } return true; } - private bool CheckSectorAction( Sector s, out int special, bool useonly ) + private bool CheckWhichSpecial( int type, int special ) { - for ( Actor act=s.SecActTarget; act; act=act.tracer ) + if ( type == 1 ) { - if ( (act.Health&(SectorAction.SECSPAC_Use|SectorAction.SECSPAC_UseWall) || !useonly) - && act.special && !act.bFRIENDLY ) - { - special = act.special; + // check for teleport specials + if ( (special == Teleport) + || (special == Teleport_NoFog) + || (special == Teleport_ZombieChanger) + || (special == Teleport_Line) ) return true; - } + return false; } - return false; - } - private bool RealLineSpecial( Line l, out int special ) - { - if ( special && l.activation&SPAC_PlayerActivate ) - return true; - if ( CheckSectorAction(l.frontsector,special,!l.backsector) ) - return true; - return (l.backsector && CheckSectorAction(l.backsector,special,false)); - } - private bool ShowTriggerLine( Line l ) - { - if ( am_showtriggerlines == 0 ) return false; - int special = l.special; - if ( !RealLineSpecial(l,special) ) return false; + if ( type == 2 ) + { + // check for exit specials + if ( (special == Exit_Normal) + || (special == Exit_Secret) + || (special == Teleport_NewMap) + || (special == Teleport_EndGame) ) + return true; + return false; + } + // just check normal specials + if ( !special || (am_showtriggerlines == 0) ) return false; if ( !ShouldDisplaySpecial(special) ) return false; if ( special && (am_showtriggerlines >= 2) ) return true; - if ( !special || (special == Door_Open) + if ( (special == Door_Open) || (special == Door_Close) || (special == Door_CloseWaitOpen) || (special == Door_Raise) @@ -260,6 +258,36 @@ extend Class SWWMStatusBar return false; return true; } + private bool CheckSectorAction( Sector s, int type, bool useonly ) + { + for ( Actor act=s.SecActTarget; act; act=act.tracer ) + { + if ( ((act.Health&(SectorAction.SECSPAC_Use|SectorAction.SECSPAC_UseWall)) || (false == useonly)) + && CheckWhichSpecial(type,act.special) && !act.bFRIENDLY ) + return true; + } + return false; + } + private bool RealLineSpecial( Line l, int type ) + { + if ( l.activation&SPAC_PlayerActivate && CheckWhichSpecial(type,l.special) ) + return true; + if ( CheckSectorAction(l.frontsector,type,!l.backsector) ) + return true; + return (l.backsector && CheckSectorAction(l.backsector,type,false)); + } + private bool CheckTriggerLine( Line l ) + { + return RealLineSpecial(l,0); + } + private bool CheckTeleportLine( Line l ) + { + return RealLineSpecial(l,1); + } + private bool CheckExitLine( Line l ) + { + return RealLineSpecial(l,2); + } private bool CmpFloorPlanes( Line l ) { return (l.frontsector.floorplane.Normal == l.backsector.floorplane.Normal) @@ -270,7 +298,6 @@ extend Class SWWMStatusBar return (l.frontsector.ceilingplane.Normal == l.backsector.ceilingplane.Normal) && (l.frontsector.ceilingplane.D == l.backsector.ceilingplane.D); } - private int CheckSecret( Line l ) { if ( !mm_secretsectorcolor || !mm_unexploredsecretcolor ) @@ -402,18 +429,9 @@ extend Class SWWMStatusBar col = mm_secretwallcolor; else col = mm_wallcolor; } - else if ( mm_interlevelcolor - && ((l.special == Exit_Normal) - || (l.special == Exit_Secret) - || (l.special == Teleport_NewMap) - || (l.special == Teleport_EndGame)) ) + else if ( mm_interlevelcolor && CheckExitLine(l) ) col = mm_interlevelcolor; - else if ( mm_intralevelcolor && - (l.activation&SPAC_PlayerActivate) - && ((l.special == Teleport) - || (l.special == Teleport_NoFog) - || (l.special == Teleport_ZombieChanger) - || (l.special == Teleport_Line)) ) + else if ( mm_intralevelcolor && CheckTeleportLine(l) ) col = mm_intralevelcolor; else if ( (lock > 0) && (lock < 256) ) { @@ -442,7 +460,7 @@ extend Class SWWMStatusBar else if ( lcol != -1 ) col = lcol; else col = mm_lockedcolor; } - else if ( mm_specialwallcolor && ShowTriggerLine(l) ) + else if ( mm_specialwallcolor && CheckTriggerLine(l) ) col = mm_specialwallcolor; else if ( secwit == 1 ) col = mm_secretsectorcolor; // locked doors and trigger lines take priority over secrets else if ( secwit == 2 ) col = mm_unexploredsecretcolor;