From 7025f12d95bd68abbb0680cd5d7c75f26113ea2b Mon Sep 17 00:00:00 2001 From: MascaraSnake Date: Fri, 25 Jun 2021 10:12:16 +0200 Subject: [PATCH] -Pass tag as argument to EV_ functions -Get rid of junk linedefs for specialized EV_ calls -Store tag in args[0] --- src/p_ceilng.c | 8 +++--- src/p_enemy.c | 21 +++------------ src/p_floor.c | 6 ++--- src/p_inter.c | 8 +----- src/p_setup.c | 42 ++++++++++++++++++++++++++++++ src/p_spec.c | 70 +++++++++++++++++--------------------------------- src/p_spec.h | 8 +++--- 7 files changed, 80 insertions(+), 83 deletions(-) diff --git a/src/p_ceilng.c b/src/p_ceilng.c index 43f3cc1d5..6349820bc 100644 --- a/src/p_ceilng.c +++ b/src/p_ceilng.c @@ -383,18 +383,18 @@ void T_CrushCeiling(ceiling_t *ceiling) /** Starts a ceiling mover. * + * \param tag Tag. * \param line The source line. * \param type The type of ceiling movement. * \return 1 if at least one ceiling mover was started, 0 otherwise. * \sa EV_DoCrush, EV_DoFloor, EV_DoElevator, T_MoveCeiling */ -INT32 EV_DoCeiling(line_t *line, ceiling_e type) +INT32 EV_DoCeiling(mtag_t tag, line_t *line, ceiling_e type) { INT32 rtn = 0, firstone = 1; INT32 secnum = -1; sector_t *sec; ceiling_t *ceiling; - mtag_t tag = Tag_FGet(&line->tags); TAG_ITER_SECTORS(tag, secnum) { @@ -603,19 +603,19 @@ INT32 EV_DoCeiling(line_t *line, ceiling_e type) /** Starts a ceiling crusher. * + * \param tag Tag. * \param line The source line. * \param type The type of ceiling, either ::crushAndRaise or * ::fastCrushAndRaise. * \return 1 if at least one crusher was started, 0 otherwise. * \sa EV_DoCeiling, EV_DoFloor, EV_DoElevator, T_CrushCeiling */ -INT32 EV_DoCrush(line_t *line, ceiling_e type) +INT32 EV_DoCrush(mtag_t tag, line_t *line, ceiling_e type) { INT32 rtn = 0; INT32 secnum = -1; sector_t *sec; ceiling_t *ceiling; - mtag_t tag = Tag_FGet(&line->tags); TAG_ITER_SECTORS(tag, secnum) { diff --git a/src/p_enemy.c b/src/p_enemy.c index 6a92c5d33..09cd82894 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -3873,7 +3873,6 @@ void A_BossDeath(mobj_t *mo) { thinker_t *th; mobj_t *mo2; - line_t junk; INT32 i; if (LUA_CallAction(A_BOSSDEATH, mo)) @@ -3925,18 +3924,11 @@ void A_BossDeath(mobj_t *mo) } else { - // Initialize my junk - junk.tags.tags = NULL; - junk.tags.count = 0; - // Bring the egg trap up to the surface // Incredibly shitty code ahead - Tag_FSet(&junk.tags, LE_CAPSULE0); - EV_DoElevator(&junk, elevateHighest, false); - Tag_FSet(&junk.tags, LE_CAPSULE1); - EV_DoElevator(&junk, elevateUp, false); - Tag_FSet(&junk.tags, LE_CAPSULE2); - EV_DoElevator(&junk, elevateHighest, false); + EV_DoElevator(LE_CAPSULE0, NULL, elevateHighest, false); + EV_DoElevator(LE_CAPSULE1, NULL, elevateUp, false); + EV_DoElevator(LE_CAPSULE2, NULL, elevateHighest, false); if (mapheaderinfo[gamemap-1]->muspostbossname[0] && S_MusicExists(mapheaderinfo[gamemap-1]->muspostbossname, !midi_disabled, !digital_disabled)) @@ -4058,12 +4050,7 @@ bossjustdie: } case MT_KOOPA: { - // Initialize my junk - junk.tags.tags = NULL; - junk.tags.count = 0; - - Tag_FSet(&junk.tags, LE_KOOPA); - EV_DoCeiling(&junk, raiseToHighest); + EV_DoCeiling(LE_KOOPA, NULL, raiseToHighest); return; } case MT_FANG: diff --git a/src/p_floor.c b/src/p_floor.c index 102ac67e0..e06f65f5c 100644 --- a/src/p_floor.c +++ b/src/p_floor.c @@ -1805,13 +1805,12 @@ void T_PlaneDisplace(planedisplace_t *pd) // (egg capsule button), P_PlayerInSpecialSector (buttons), // and P_SpawnSpecials (continuous floor movers and instant lower). // -void EV_DoFloor(line_t *line, floor_e floortype) +void EV_DoFloor(mtag_t tag, line_t *line, floor_e floortype) { INT32 firstone = 1; INT32 secnum = -1; sector_t *sec; floormove_t *dofloor; - mtag_t tag = Tag_FGet(&line->tags); TAG_ITER_SECTORS(tag, secnum) { @@ -2022,12 +2021,11 @@ void EV_DoFloor(line_t *line, floor_e floortype) // // jff 2/22/98 new type to move floor and ceiling in parallel // -void EV_DoElevator(line_t *line, elevator_e elevtype, boolean customspeed) +void EV_DoElevator(mtag_t tag, line_t *line, elevator_e elevtype, boolean customspeed) { INT32 secnum = -1; sector_t *sec; elevator_t *elevator; - mtag_t tag = Tag_FGet(&line->tags); // act on all sectors with the same tag as the triggering linedef TAG_ITER_SECTORS(tag, secnum) diff --git a/src/p_inter.c b/src/p_inter.c index 89989d1af..33052c3b8 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -1381,19 +1381,13 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) return; case MT_AXE: { - line_t junk; thinker_t *th; mobj_t *mo2; if (player->bot) return; - // Initialize my junk - junk.tags.tags = NULL; - junk.tags.count = 0; - - Tag_FSet(&junk.tags, LE_AXE); - EV_DoElevator(&junk, bridgeFall, false); + EV_DoElevator(LE_AXE, NULL, bridgeFall, false); // scan the remaining thinkers to find koopa for (th = thlist[THINK_MOBJ].next; th != &thlist[THINK_MOBJ]; th = th->next) diff --git a/src/p_setup.c b/src/p_setup.c index b0488dbbb..9bea8f868 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -3081,6 +3081,28 @@ static void P_ConvertBinaryMap(void) break; } + case 50: //Instantly lower floor on level load + case 51: //Instantly raise ceiling on level load + lines[i].args[0] = tag; + break; + case 53: //Continuous floor/ceiling mover + case 54: //Continuous floor mover + case 55: //Continuous ceiling mover + lines[i].args[0] = tag; + break; + case 56: //Continuous two-speed floor/ceiling mover + case 57: //Continuous two-speed floor mover + case 58: //Continuous two-speed ceiling mover + lines[i].args[0] = tag; + break; + case 59: //Activate moving platform + case 60: //Activate moving platform (adjustable speed) + lines[i].args[0] = tag; + break; + case 61: //Crusher (Ceiling to floor) + case 62: //Crusher (Floor to ceiling) + lines[i].args[0] = tag; + break; case 76: //Make FOF bouncy lines[i].args[0] = tag; lines[i].args[1] = P_AproxDistance(lines[i].dx, lines[i].dy) >> FRACBITS; @@ -3482,6 +3504,26 @@ static void P_ConvertBinaryMap(void) else lines[i].args[1] = 255; break; + case 400: //Set tagged sector's floor height/texture + case 401: //Set tagged sector's ceiling height/texture + lines[i].args[0] = tag; + break; + case 403: //Move tagged sector's floor + case 404: //Move tagged sector's ceiling + lines[i].args[0] = tag; + break; + case 405: //Move floor according to front texture offsets + case 407: //Move ceiling according to front texture offsets + lines[i].args[0] = tag; + break; + case 428: //Start platform movement + lines[i].args[0] = tag; + break; + case 429: //Crush ceiling once + case 430: //Crush floor once + case 431: //Crush floor and ceiling once + lines[i].args[0] = tag; + break; case 443: //Call Lua function if (lines[i].text) { diff --git a/src/p_spec.c b/src/p_spec.c index 6a5bb9451..936551e0e 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -2234,11 +2234,11 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec) switch (line->special) { case 400: // Set tagged sector's floor height/pic - EV_DoFloor(line, instantMoveFloorByFrontSector); + EV_DoFloor(line->args[0], line, instantMoveFloorByFrontSector); break; case 401: // Set tagged sector's ceiling height/pic - EV_DoCeiling(line, instantMoveCeilingByFrontSector); + EV_DoCeiling(line->args[0], line, instantMoveCeilingByFrontSector); break; case 402: // Set tagged sector's light level @@ -2272,37 +2272,21 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec) break; case 403: // Move floor, linelen = speed, frontsector floor = dest height - EV_DoFloor(line, moveFloorByFrontSector); + EV_DoFloor(line->args[0], line, moveFloorByFrontSector); break; case 404: // Move ceiling, linelen = speed, frontsector ceiling = dest height - EV_DoCeiling(line, moveCeilingByFrontSector); + EV_DoCeiling(line->args[0], line, moveCeilingByFrontSector); break; case 405: // Move floor by front side texture offsets, offset x = speed, offset y = amount to raise/lower - EV_DoFloor(line, moveFloorByFrontTexture); + EV_DoFloor(line->args[0], line, moveFloorByFrontTexture); break; case 407: // Move ceiling by front side texture offsets, offset x = speed, offset y = amount to raise/lower - EV_DoCeiling(line, moveCeilingByFrontTexture); + EV_DoCeiling(line->args[0], line, moveCeilingByFrontTexture); break; -/* case 405: // Lower floor by line, dx = speed, dy = amount to lower - EV_DoFloor(line, lowerFloorByLine); - break; - - case 406: // Raise floor by line, dx = speed, dy = amount to raise - EV_DoFloor(line, raiseFloorByLine); - break; - - case 407: // Lower ceiling by line, dx = speed, dy = amount to lower - EV_DoCeiling(line, lowerCeilingByLine); - break; - - case 408: // Raise ceiling by line, dx = speed, dy = amount to raise - EV_DoCeiling(line, raiseCeilingByLine); - break;*/ - case 409: // Change tagged sectors' tag // (formerly "Change calling sectors' tag", but behavior was changed) { @@ -2886,19 +2870,19 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec) break; case 428: // Start floating platform movement - EV_DoElevator(line, elevateContinuous, true); + EV_DoElevator(line->args[0], line, elevateContinuous, true); break; case 429: // Crush Ceiling Down Once - EV_DoCrush(line, crushCeilOnce); + EV_DoCrush(line->args[0], line, crushCeilOnce); break; case 430: // Crush Floor Up Once - EV_DoFloor(line, crushFloorOnce); + EV_DoFloor(line->args[0], line, crushFloorOnce); break; case 431: // Crush Floor & Ceiling to middle Once - EV_DoCrush(line, crushBothOnce); + EV_DoCrush(line->args[0], line, crushBothOnce); break; case 432: // Enable 2D Mode (Disable if noclimb) @@ -4414,7 +4398,6 @@ void P_ProcessSpecialSector(player_t *player, sector_t *sector, sector_t *rovers { thinker_t *th; mobj_t *mo2; - line_t junk; if (player->bot || sector->ceilingdata || sector->floordata) return; @@ -4434,20 +4417,13 @@ void P_ProcessSpecialSector(player_t *player, sector_t *sector, sector_t *rovers // clear the special so you can't push the button twice. sector->special = 0; - // Initialize my junk - junk.tags.tags = NULL; - junk.tags.count = 0; - // Move the button down - Tag_FSet(&junk.tags, LE_CAPSULE0); - EV_DoElevator(&junk, elevateDown, false); + EV_DoElevator(LE_CAPSULE0, NULL, elevateDown, false); // Open the top FOF - Tag_FSet(&junk.tags, LE_CAPSULE1); - EV_DoFloor(&junk, raiseFloorToNearestFast); + EV_DoFloor(LE_CAPSULE1, NULL, raiseFloorToNearestFast); // Open the bottom FOF - Tag_FSet(&junk.tags, LE_CAPSULE2); - EV_DoCeiling(&junk, lowerToLowestFast); + EV_DoCeiling(LE_CAPSULE2, NULL, lowerToLowestFast); // Mark all players with the time to exit thingy! for (i = 0; i < MAXPLAYERS; i++) @@ -6342,11 +6318,11 @@ void P_SpawnSpecials(boolean fromnetsave) break; case 50: // Insta-Lower Sector - EV_DoFloor(&lines[i], instantLower); + EV_DoFloor(lines[i].args[0], &lines[i], instantLower); break; case 51: // Instant raise for ceilings - EV_DoCeiling(&lines[i], instantRaise); + EV_DoCeiling(lines[i].args[0], &lines[i], instantRaise); break; case 52: // Continuously Falling sector @@ -6356,20 +6332,20 @@ void P_SpawnSpecials(boolean fromnetsave) case 53: // New super cool and awesome moving floor and ceiling type case 54: // New super cool and awesome moving floor type if (lines[i].backsector) - EV_DoFloor(&lines[i], bounceFloor); + EV_DoFloor(lines[i].args[0], &lines[i], bounceFloor); if (lines[i].special == 54) break; /* FALLTHRU */ case 55: // New super cool and awesome moving ceiling type if (lines[i].backsector) - EV_DoCeiling(&lines[i], bounceCeiling); + EV_DoCeiling(lines[i].args[0], &lines[i], bounceCeiling); break; case 56: // New super cool and awesome moving floor and ceiling crush type case 57: // New super cool and awesome moving floor crush type if (lines[i].backsector) - EV_DoFloor(&lines[i], bounceFloorCrush); + EV_DoFloor(lines[i].args[0], &lines[i], bounceFloorCrush); if (lines[i].special == 57) break; //only move the floor @@ -6377,23 +6353,23 @@ void P_SpawnSpecials(boolean fromnetsave) case 58: // New super cool and awesome moving ceiling crush type if (lines[i].backsector) - EV_DoCeiling(&lines[i], bounceCeilingCrush); + EV_DoCeiling(lines[i].args[0], &lines[i], bounceCeilingCrush); break; case 59: // Activate floating platform - EV_DoElevator(&lines[i], elevateContinuous, false); + EV_DoElevator(lines[i].args[0], &lines[i], elevateContinuous, false); break; case 60: // Floating platform with adjustable speed - EV_DoElevator(&lines[i], elevateContinuous, true); + EV_DoElevator(lines[i].args[0], &lines[i], elevateContinuous, true); break; case 61: // Crusher! - EV_DoCrush(&lines[i], crushAndRaise); + EV_DoCrush(lines[i].args[0], &lines[i], crushAndRaise); break; case 62: // Crusher (up and then down)! - EV_DoCrush(&lines[i], fastCrushAndRaise); + EV_DoCrush(lines[i].args[0], &lines[i], fastCrushAndRaise); break; case 63: // support for drawn heights coming from different sector diff --git a/src/p_spec.h b/src/p_spec.h index 536b6c313..a06c677e3 100644 --- a/src/p_spec.h +++ b/src/p_spec.h @@ -307,9 +307,9 @@ typedef struct #define CEILSPEED (FRACUNIT) -INT32 EV_DoCeiling(line_t *line, ceiling_e type); +INT32 EV_DoCeiling(mtag_t tag, line_t *line, ceiling_e type); -INT32 EV_DoCrush(line_t *line, ceiling_e type); +INT32 EV_DoCrush(mtag_t tag, line_t *line, ceiling_e type); void T_CrushCeiling(ceiling_t *ceiling); void T_MoveCeiling(ceiling_t *ceiling); @@ -520,8 +520,8 @@ typedef enum result_e T_MovePlane(sector_t *sector, fixed_t speed, fixed_t dest, boolean crush, boolean ceiling, INT32 direction); -void EV_DoFloor(line_t *line, floor_e floortype); -void EV_DoElevator(line_t *line, elevator_e elevtype, boolean customspeed); +void EV_DoFloor(mtag_t tag, line_t *line, floor_e floortype); +void EV_DoElevator(mtag_t tag, line_t *line, elevator_e elevtype, boolean customspeed); void EV_CrumbleChain(sector_t *sec, ffloor_t *rover); void EV_BounceSector(sector_t *sector, fixed_t momz, line_t *sourceline);