Implemented a skin-based linedef executor trigger

This commit is contained in:
MascaraSnake 2019-07-03 09:19:29 +02:00
parent 5cec737985
commit a5074a846b
2 changed files with 22 additions and 2 deletions

View File

@ -1282,6 +1282,9 @@ static void P_LoadLineDefs2(void)
// Compile linedef 'text' from both sidedefs 'text' for appropriate specials. // Compile linedef 'text' from both sidedefs 'text' for appropriate specials.
switch(ld->special) switch(ld->special)
{ {
case 331: // Trigger linedef executor: Skin - Continuous
case 332: // Trigger linedef executor: Skin - Each time
case 333: // Trigger linedef executor: Skin - Once
case 443: // Calls a named Lua function case 443: // Calls a named Lua function
if (sides[ld->sidenum[0]].text) if (sides[ld->sidenum[0]].text)
{ {
@ -1492,6 +1495,9 @@ static void P_LoadRawSideDefs2(void *data)
break; break;
} }
case 331: // Trigger linedef executor: Skin - Continuous
case 332: // Trigger linedef executor: Skin - Each time
case 333: // Trigger linedef executor: Skin - Once
case 443: // Calls a named Lua function case 443: // Calls a named Lua function
case 459: // Control text prompt (named tag) case 459: // Control text prompt (named tag)
{ {

View File

@ -36,6 +36,7 @@
#include "m_cond.h" //unlock triggers #include "m_cond.h" //unlock triggers
#include "lua_hook.h" // LUAh_LinedefExecute #include "lua_hook.h" // LUAh_LinedefExecute
#include "f_finale.h" // control text prompt #include "f_finale.h" // control text prompt
#include "r_things.h" // skins
#ifdef HW3SOUND #ifdef HW3SOUND
#include "hardware/hw3sound.h" #include "hardware/hw3sound.h"
@ -2008,7 +2009,12 @@ boolean P_RunTriggerLinedef(line_t *triggerline, mobj_t *actor, sector_t *caller
if (!P_CheckNightsTriggerLine(triggerline, actor)) if (!P_CheckNightsTriggerLine(triggerline, actor))
return false; return false;
break; break;
case 331: // continuous
case 332: // each time
case 333: // once
if (!(actor && actor->player && ((stricmp(triggerline->text, skins[actor->player->skin].name) == 0) ^ ((triggerline->flags & ML_NOCLIMB) == ML_NOCLIMB))))
return false;
break;
default: default:
break; break;
} }
@ -2141,6 +2147,7 @@ boolean P_RunTriggerLinedef(line_t *triggerline, mobj_t *actor, sector_t *caller
|| specialtype == 326 // DeNightserize - Once || specialtype == 326 // DeNightserize - Once
|| specialtype == 328 // Nights lap - Once || specialtype == 328 // Nights lap - Once
|| specialtype == 330 // Nights Bonus Time - Once || specialtype == 330 // Nights Bonus Time - Once
|| specialtype == 333 // Skin - Once
|| specialtype == 399) // Level Load || specialtype == 399) // Level Load
triggerline->special = 0; // Clear it out triggerline->special = 0; // Clear it out
@ -2181,7 +2188,8 @@ void P_LinedefExecute(INT16 tag, mobj_t *actor, sector_t *caller)
|| lines[masterline].special == 306 // Character ability - Each time || lines[masterline].special == 306 // Character ability - Each time
|| lines[masterline].special == 310 // CTF Red team - Each time || lines[masterline].special == 310 // CTF Red team - Each time
|| lines[masterline].special == 312 // CTF Blue team - Each time || lines[masterline].special == 312 // CTF Blue team - Each time
|| lines[masterline].special == 322) // Trigger on X calls - Each Time || lines[masterline].special == 322 // Trigger on X calls - Each Time
|| lines[masterline].special == 332)// Skin - Each time
continue; continue;
if (lines[masterline].special < 300 if (lines[masterline].special < 300
@ -7169,6 +7177,7 @@ void P_SpawnSpecials(INT32 fromnetsave)
case 301: case 301:
case 310: case 310:
case 312: case 312:
case 332:
sec = sides[*lines[i].sidenum].sector - sectors; sec = sides[*lines[i].sidenum].sector - sectors;
P_AddEachTimeThinker(&sectors[sec], &lines[i]); P_AddEachTimeThinker(&sectors[sec], &lines[i]);
break; break;
@ -7217,6 +7226,11 @@ void P_SpawnSpecials(INT32 fromnetsave)
case 330: case 330:
break; break;
// Skin trigger executors
case 331:
case 333:
break;
case 399: // Linedef execute on map load case 399: // Linedef execute on map load
// This is handled in P_RunLevelLoadExecutors. // This is handled in P_RunLevelLoadExecutors.
break; break;