From e56d444c84f7534d41546ae92c1368beca56219e Mon Sep 17 00:00:00 2001 From: Lactozilla <jp6781615@gmail.com> Date: Sat, 12 Aug 2023 17:33:54 -0300 Subject: [PATCH] Delete MT_TEAMFLAG --- src/deh_tables.c | 1 - src/doomdata.h | 2 ++ src/g_game.c | 14 ++++++++++ src/g_game.h | 1 + src/info.c | 27 ------------------ src/info.h | 1 - src/p_mobj.c | 71 +++++++++++++++++++++++++++++------------------- 7 files changed, 60 insertions(+), 57 deletions(-) diff --git a/src/deh_tables.c b/src/deh_tables.c index 5f473654cf..c256218613 100644 --- a/src/deh_tables.c +++ b/src/deh_tables.c @@ -3690,7 +3690,6 @@ const char *const MOBJTYPE_LIST[] = { // array length left dynamic for sanity t "MT_TOKEN", // Special Stage token for special stage "MT_REDFLAG", // Red CTF Flag "MT_BLUEFLAG", // Blue CTF Flag - "MT_TEAMFLAG", // Team flag "MT_EMBLEM", "MT_EMERALD1", "MT_EMERALD2", diff --git a/src/doomdata.h b/src/doomdata.h index 576fe03e29..439cb22b15 100644 --- a/src/doomdata.h +++ b/src/doomdata.h @@ -217,6 +217,8 @@ typedef struct struct mobj_s *mobj; } mapthing_t; +#define THING_TYPE_CTF_TEAM_FLAG 324 + #define ZSHIFT 4 #define NUMMAPS 1035 diff --git a/src/g_game.c b/src/g_game.c index cc9767bed4..08beccd92d 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -3995,6 +3995,20 @@ UINT8 G_GetTeamListFromTeamFlags(UINT8 *teamlist, UINT32 flags) return count; } +UINT8 G_GetTeamByName(const char *name) +{ + if (name != NULL) + { + for (UINT8 i = 0; i < numteams; i++) + { + if (!strcmp(name, teamnames[i][1])) + return i; + } + } + + return MAXTEAMS; +} + const char *G_GetTeamName(UINT8 team) { if (team >= numteams || !teams[team].name) diff --git a/src/g_game.h b/src/g_game.h index 6119645c1b..b1d8d1bbbc 100644 --- a/src/g_game.h +++ b/src/g_game.h @@ -228,6 +228,7 @@ UINT8 G_GetGametypeTeam(UINT8 gtype, UINT8 team); UINT8 G_GetTeam(UINT8 team); UINT8 G_GetTeamFromTeamFlag(UINT32 flag); UINT8 G_GetTeamListFromTeamFlags(UINT8 *teamlist, UINT32 flags); +UINT8 G_GetTeamByName(const char *name); const char *G_GetTeamName(UINT8 team); const char *G_GetTeamFlagName(UINT8 team); UINT32 G_GetTeamWeaponMobjtype(UINT8 team); diff --git a/src/info.c b/src/info.c index bc5214f597..47e4b6b935 100644 --- a/src/info.c +++ b/src/info.c @@ -7149,33 +7149,6 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_TEAMFLAG - 323, // doomednum - S_NULL, // spawnstate - 1000, // spawnhealth - S_NULL, // seestate - sfx_None, // seesound - 8, // reactiontime - sfx_None, // attacksound - S_NULL, // painstate - 0, // painchance - sfx_None, // painsound - S_NULL, // meleestate - S_NULL, // missilestate - S_NULL, // deathstate - S_NULL, // xdeathstate - sfx_lvpass, // deathsound - 8, // speed - 24*FRACUNIT, // radius - 64*FRACUNIT, // height - 0, // display offset - 0, // mass - 0, // damage - sfx_None, // activesound - MF_SPECIAL, // flags - S_NULL // raisestate - }, - { // MT_EMBLEM 322, // doomednum S_EMBLEM1, // spawnstate diff --git a/src/info.h b/src/info.h index f7c7f80d49..5c7a9f3fd4 100644 --- a/src/info.h +++ b/src/info.h @@ -4521,7 +4521,6 @@ typedef enum mobj_type MT_TOKEN, // Special Stage token for special stage MT_REDFLAG, // Red CTF Flag MT_BLUEFLAG, // Blue CTF Flag - MT_TEAMFLAG, // Team flag MT_EMBLEM, MT_EMERALD1, MT_EMERALD2, diff --git a/src/p_mobj.c b/src/p_mobj.c index 336e775933..6300bde481 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -10012,6 +10012,10 @@ static void P_FlagFuseThink(mobj_t *mobj) if (!mobj->spawnpoint) return; + UINT8 team = mobj->extravalue1; + if (team == TEAM_NONE || team >= numteams) + return; + x = mobj->spawnpoint->x << FRACBITS; y = mobj->spawnpoint->y << FRACBITS; z = mobj->spawnpoint->z << FRACBITS; @@ -10020,7 +10024,11 @@ static void P_FlagFuseThink(mobj_t *mobj) z = ss->sector->ceilingheight - mobjinfo[mobj->type].height - z; else z = ss->sector->floorheight + z; - flagmo = P_SpawnMobj(x, y, z, mobj->type); + + flagmo = P_SpawnTeamFlag(team, x, y, z); + if (flagmo == NULL) + return; + flagmo->spawnpoint = mobj->spawnpoint; if (mobj->spawnpoint->options & MTF_OBJECTFLIP) { @@ -10028,20 +10036,16 @@ static void P_FlagFuseThink(mobj_t *mobj) flagmo->flags2 |= MF2_OBJECTFLIP; } - UINT8 team = mobj->info->mass; - if (team < numteams) - { - if (!(mobj->flags2 & MF2_JUSTATTACKED)) - CONS_Printf(M_GetText("The %s%s\200 has returned to base.\n"), GetChatColorForSkincolor(G_GetTeamColor(team)), G_GetTeamFlagName(team)); + if (!(mobj->flags2 & MF2_JUSTATTACKED)) + CONS_Printf(M_GetText("The %s%s\200 has returned to base.\n"), GetChatColorForSkincolor(G_GetTeamColor(team)), G_GetTeamFlagName(team)); - // Assumedly in splitscreen players will be on opposing teams - if (players[consoleplayer].ctfteam == team || splitscreen) - S_StartSound(NULL, sfx_hoop1); - else if (players[consoleplayer].ctfteam != 0) - S_StartSound(NULL, sfx_hoop3); + // Assumedly in splitscreen players will be on opposing teams + if (players[consoleplayer].ctfteam == team || splitscreen) + S_StartSound(NULL, sfx_hoop1); + else if (players[consoleplayer].ctfteam != 0) + S_StartSound(NULL, sfx_hoop3); - P_SetTarget(&flagmobjs[team], flagmo); - } + P_SetTarget(&flagmobjs[team], flagmo); } static boolean P_FuseThink(mobj_t *mobj) @@ -10587,7 +10591,6 @@ static fixed_t P_DefaultMobjShadowScale (mobj_t *thing) case MT_FLICKY_16: case MT_SECRETFLICKY_01: case MT_SECRETFLICKY_02: - return FRACUNIT; default: @@ -11472,6 +11475,24 @@ mobjtype_t P_GetMobjtype(UINT16 mthingtype) return MT_UNKNOWN; } +static mobjtype_t P_GetMobjtypeFromMapthing(mapthing_t *mthing) +{ + if (mthing->type == THING_TYPE_CTF_TEAM_FLAG) // CTF team flag + { + UINT8 team = G_GetTeamByName(mthing->stringargs[0]); + if (team == TEAM_NONE || team >= numteams) + return MT_UNKNOWN; + else + { + mobjtype_t type = teams[team].flag_mobj_type; + if (type == MT_NULL || type >= NUMMOBJTYPES) + return MT_UNKNOWN; + } + } + + return P_GetMobjtype(mthing->type); +} + // // P_RespawnSpecials // @@ -12055,12 +12076,12 @@ static boolean P_AllowMobjSpawn(mapthing_t* mthing, mobjtype_t i) if (!(gametyperules & GTR_TEAMFLAGS)) // CTF specific things { - if (i == MT_BLUEFLAG || i == MT_REDFLAG || i == MT_TEAMFLAG) + if (i == MT_BLUEFLAG || i == MT_REDFLAG || mthing->type == THING_TYPE_CTF_TEAM_FLAG) return false; // No flags in non-CTF modes! } - else if (i == MT_BLUEFLAG || i == MT_REDFLAG || i == MT_TEAMFLAG) + else if (i == MT_BLUEFLAG || i == MT_REDFLAG || mthing->type == THING_TYPE_CTF_TEAM_FLAG) { - UINT8 team = i == MT_TEAMFLAG ? mthing->args[0] : G_GetTeam(mobjinfo[i].mass); + UINT8 team = mthing->type == THING_TYPE_CTF_TEAM_FLAG ? G_GetTeamByName(mthing->stringargs[0]) : G_GetTeam(mobjinfo[i].mass); if (team == TEAM_NONE || team >= numteams) return false; else if (flagmobjs[team] && !P_MobjWasRemoved(flagmobjs[team])) @@ -12148,14 +12169,7 @@ static mobjtype_t P_GetMobjtypeSubstitute(mapthing_t *mthing, mobjtype_t i) return MT_NIGHTSCHIP; } - if (i == MT_TEAMFLAG) - { - INT32 team = mthing->args[0]; - if (team == TEAM_NONE || team >= numteams) - return MT_NULL; - return teams[team].flag_mobj_type; - } - else if (i == MT_BLUEFLAG || i == MT_REDFLAG) + if (i == MT_BLUEFLAG || i == MT_REDFLAG) { INT32 team = G_GetTeam(mobjinfo[i].mass); if (team == TEAM_NONE || team >= numteams) @@ -13189,8 +13203,6 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj, boolean case MT_REDFLAG: case MT_BLUEFLAG: mobj->extravalue1 = G_GetTeam(mobj->info->mass); - /* FALLTHRU */ - case MT_TEAMFLAG: mobj->eflags |= MFE_TEAMFLAG; break; case MT_NIGHTSSTAR: @@ -13249,6 +13261,9 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj, boolean break; } + if (mthing->type == THING_TYPE_CTF_TEAM_FLAG) + mobj->eflags |= MFE_TEAMFLAG; + if (mobj->flags & MF_BOSS) { if (mthing->args[1]) // No egg trap for this boss @@ -13406,7 +13421,7 @@ mobj_t *P_SpawnMapThing(mapthing_t *mthing) if (!objectplacing && P_SpawnNonMobjMapThing(mthing)) return mobj; - i = P_GetMobjtype(mthing->type); + i = P_GetMobjtypeFromMapthing(mthing); if (i == MT_UNKNOWN) CONS_Alert(CONS_WARNING, M_GetText("Unknown thing type %d placed at (%d, %d)\n"), mthing->type, mthing->x, mthing->y); -- GitLab