From 86190d4c989167773b828a559497598432b988ec Mon Sep 17 00:00:00 2001 From: Wolfy Date: Fri, 8 Dec 2017 00:32:31 -0500 Subject: [PATCH 1/8] oops From d6af8e52c1888f92845b51dd277070fee3e3d648 Mon Sep 17 00:00:00 2001 From: Wolfy Date: Fri, 8 Dec 2017 00:59:12 -0500 Subject: [PATCH 2/8] double oops --- src/d_netcmd.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 4eff3242..552ebdf9 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -436,6 +436,7 @@ const char *netxcmdnames[MAXNETXCMD - 1] = "DELFILE", "SETMOTD", "SUICIDE", + "DEMOTED", #ifdef HAVE_BLUA "LUACMD", "LUAVAR" From f5650eba09fa10cf17701af88e53963ed2d33672 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Sun, 10 Dec 2017 20:57:46 -0500 Subject: [PATCH 3/8] Wipeout & minor tweaks - SMK-style wipeout - Using goldshroom removes some of its timer again - Karma item boxes follow the player more closely - "ATTACK OR PROTECT" no longer appears when you die if you've already seen it - Lua support for our SOC actions - Fixed KARTSTUFF_LIST for Lua/SOC - "Battle" is now an accepted word in level headers for setting TOL_MATCH - Default map numlaps is now 3 instead of 4 - Reverted making LF2_RECORDATTACK and LF2_NOVISITNEEDED default menu flags, needs to be set manually now --- src/d_player.h | 2 +- src/dehacked.c | 4 +++ src/doomstat.h | 1 + src/g_game.c | 5 ++++ src/info.c | 3 +- src/info.h | 1 + src/k_kart.c | 74 ++++++++++++++++++++++++++++++-------------------- src/k_kart.h | 2 +- src/p_enemy.c | 12 ++++++++ src/p_inter.c | 23 +++++++++++----- src/p_map.c | 4 +-- src/p_mobj.c | 12 +++++++- src/p_setup.c | 4 +-- src/p_user.c | 7 +++-- 14 files changed, 106 insertions(+), 48 deletions(-) diff --git a/src/d_player.h b/src/d_player.h index ceb48440..83976f10 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -276,7 +276,7 @@ typedef enum k_goldshroomtimer, // Gold Mushroom duration timer k_startimer, // Invincibility timer k_spinouttimer, // Spin-out from a banana peel or oil slick (was "pw_bananacam") - //k_wipeouttimer, // Wipe-out from a shell, waits a short amount of time before making you stop and spinning out in place + k_wipeouttimer, // Wipe-out from a shell, waits a short amount of time before making you stop and spinning out in place k_laserwisptimer, // The duration and relative angle of the laser k_justbumped, // Prevent players from endlessly bumping into each other k_poweritemtimer, // Battle mode, how long before you're allowed another power item (Star, Megashroom) diff --git a/src/dehacked.c b/src/dehacked.c index c4c8fed9..6dc5beb7 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -981,6 +981,7 @@ static const struct { {"RACE",TOL_RACE}, {"MATCH",TOL_MATCH}, + {"BATTLE",TOL_MATCH}, // SRB2kart {"TAG",TOL_TAG}, {"CTF",TOL_CTF}, @@ -6426,6 +6427,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_PLAYERARROW_ROULETTE", "S_PLAYERBOMB", // Player bomb overlay + "S_PLAYERBOMB_WHEEL", #ifdef SEENAMES "S_NAMECHECK", @@ -7326,6 +7328,7 @@ static const char *const KARTSTUFF_LIST[] = { "THROWDIR", "CAMSPIN", "LAPANIMATION", + "CARDANIMATION", "SOUNDS", "BOOSTING", @@ -7354,6 +7357,7 @@ static const char *const KARTSTUFF_LIST[] = { "GOLDSHROOMTIMER", "STARTIMER", "SPINOUTTIMER", + "WIPEOUTTIMER", "LASERWISPTIMER", "JUSTBUMPED", "POWERITEMTIMER", diff --git a/src/doomstat.h b/src/doomstat.h index 11560259..df13266f 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -405,6 +405,7 @@ extern INT32 boostealtime; extern INT32 mushroomtime; extern INT32 itemtime; extern INT32 comebacktime; +extern INT32 wipeouttime; extern UINT8 introtoplay; extern UINT8 creditscutscene; diff --git a/src/g_game.c b/src/g_game.c index e0fb25c0..6f3bf3bb 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -206,6 +206,7 @@ INT32 boostealtime = TICRATE/2; INT32 mushroomtime = TICRATE + (TICRATE/3); INT32 itemtime = 8*TICRATE; INT32 comebacktime = 10*TICRATE; +INT32 wipeouttime = 20; INT32 gameovertics = 15*TICRATE; @@ -2203,6 +2204,7 @@ void G_PlayerReborn(INT32 player) INT32 offroad; INT32 balloon; INT32 comebackpoints; + INT32 comebackshowninfo; score = players[player].score; lives = players[player].lives; @@ -2260,6 +2262,7 @@ void G_PlayerReborn(INT32 player) offroad = players[player].kartstuff[k_offroad]; balloon = players[player].kartstuff[k_balloon]; comebackpoints = players[player].kartstuff[k_comebackpoints]; + comebackshowninfo = players[player].kartstuff[k_comebackshowninfo]; p = &players[player]; memset(p, 0, sizeof (*p)); @@ -2316,8 +2319,10 @@ void G_PlayerReborn(INT32 player) // SRB2kart p->kartstuff[k_starpostwp] = starpostwp; // TODO: get these out of kartstuff, it causes desync p->kartstuff[k_offroad] = offroad; + p->kartstuff[k_balloon] = balloon; p->kartstuff[k_comebackpoints] = comebackpoints; + p->kartstuff[k_comebackshowninfo] = comebackshowninfo; p->kartstuff[k_comebacktimer] = comebacktime; // Don't do anything immediately diff --git a/src/info.c b/src/info.c index 79433ecd..ec5097a6 100644 --- a/src/info.c +++ b/src/info.c @@ -2881,7 +2881,8 @@ state_t states[NUMSTATES] = {SPR_ARRO, FF_FULLBRIGHT|16, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERARROW_EMPTY {SPR_ARRO, FF_FULLBRIGHT|FF_ANIMATE|1, -1, {NULL}, 5, 3, S_NULL}, // S_PLAYERARROW_ROULETTE - {SPR_PBOM, 0, -1, {NULL}, 1, 0, S_NULL}, // S_PLAYERBOMB + {SPR_PBOM, FF_ANIMATE, -1, {NULL}, 3, 3, S_NULL}, // S_PLAYERBOMB + {SPR_PBOM, 4, -1, {NULL}, 0, 0, S_NULL}, // S_PLAYERBOMB_WHEEL #ifdef SEENAMES {SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK diff --git a/src/info.h b/src/info.h index 2624f16e..e50e9bf0 100644 --- a/src/info.h +++ b/src/info.h @@ -3403,6 +3403,7 @@ typedef enum state S_PLAYERARROW_ROULETTE, S_PLAYERBOMB, + S_PLAYERBOMB_WHEEL, #ifdef SEENAMES S_NAMECHECK, diff --git a/src/k_kart.c b/src/k_kart.c index df25cfa8..1efe2814 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -728,7 +728,7 @@ static INT32 K_KartItemOddsBalloons[NUMKARTITEMS][5] = /*Gold Mushroom*/ { 0, 0, 0, 0, 0 }, // Gold Mushroom /*Star*/ { 1, 1, 0, 0, 0 }, // Star - /*Triple Banana*/ { 0, 3, 3, 1, 0 }, // Triple Banana + /*Triple Banana*/ { 0, 3, 1, 1, 0 }, // Triple Banana /*Fake Item*/ { 0, 0, 2, 2, 1 }, // Fake Item /*Banana*/ { 0, 0, 3, 1, 1 }, // Banana /*Green Shell*/ { 0, 0, 5, 3, 1 }, // Green Shell @@ -1455,16 +1455,22 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->kartstuff[k_spinout] == 0 && player->kartstuff[k_spinouttimer] == 0 && player->powers[pw_flashing] == K_GetKartFlashing()) player->powers[pw_flashing]--; - /*if (player->kartstuff[k_wipeouttimer]) + if (player->kartstuff[k_wipeouttimer]) { if (player->kartstuff[k_wipeouttimer] == 1) { - player->kartstuff[k_spinouttype] = 1; - K_SpinPlayer(player, NULL); - player->mo->momx = player->mo->momy = 0; + if (P_IsObjectOnGround(player->mo)) + { + player->kartstuff[k_wipeouttimer] = 0; + P_PlayRinglossSound(player->mo); + player->kartstuff[k_spinouttype] = 1; + K_SpinPlayer(player, NULL); + player->mo->momx = player->mo->momy = 0; + } } - player->kartstuff[k_wipeouttimer]--; - }*/ + else + player->kartstuff[k_wipeouttimer]--; + } if (player->kartstuff[k_magnettimer]) player->kartstuff[k_magnettimer]--; @@ -1521,13 +1527,20 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->kartstuff[k_lapanimation]) player->kartstuff[k_lapanimation]--; - if (gametype != GT_RACE && (player->exiting || (player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]))) + if (gametype != GT_RACE && (player->exiting || player->kartstuff[k_comebacktimer])) { - if ((player->exiting < 6*TICRATE) - || (player->kartstuff[k_comebacktimer] > 7*TICRATE && player->kartstuff[k_comebacktimer] < 9*TICRATE)) - player->kartstuff[k_cardanimation] += ((164-player->kartstuff[k_cardanimation])/8)+1; - else if (player->kartstuff[k_comebacktimer] < 5*TICRATE && !player->exiting) - player->kartstuff[k_cardanimation] -= ((164-player->kartstuff[k_cardanimation])/8)+1; + if (player->exiting) + { + if (player->exiting < 6*TICRATE) + player->kartstuff[k_cardanimation] += ((164-player->kartstuff[k_cardanimation])/8)+1; + } + else + { + if (player->kartstuff[k_comebacktimer] < 6*TICRATE) + player->kartstuff[k_cardanimation] -= ((164-player->kartstuff[k_cardanimation])/8)+1; + else if (player->kartstuff[k_comebacktimer] < 9*TICRATE) + player->kartstuff[k_cardanimation] += ((164-player->kartstuff[k_cardanimation])/8)+1; + } if (player->kartstuff[k_cardanimation] > 164) player->kartstuff[k_cardanimation] = 164; @@ -1802,7 +1815,7 @@ void K_SpinPlayer(player_t *player, mobj_t *source) return; if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0) - || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 + || player->kartstuff[k_wipeouttimer] > 0 || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 || (gametype != GT_RACE && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1))) return; @@ -1860,13 +1873,13 @@ void K_SpinPlayer(player_t *player, mobj_t *source) return; } -/*void K_WipeoutPlayer(player_t *player, mobj_t *source) +void K_WipeoutPlayer(player_t *player, mobj_t *source) { if (player->health <= 0) return; if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0) - || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 + || player->kartstuff[k_wipeouttimer] > 0 || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 || (gametype != GT_RACE && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1))) return; @@ -1882,19 +1895,18 @@ void K_SpinPlayer(player_t *player, mobj_t *source) P_AddPlayerScore(source->player, 1); } - P_RingDamage(player, NULL, source, player->mo->health-1); P_PlayerRingBurst(player, 5); if (P_IsLocalPlayer(player)) { quake.intensity = 32*FRACUNIT; quake.time = 5; - } + } - player->kartstuff[k_wipeouttimer] = 21; + player->kartstuff[k_wipeouttimer] = wipeouttime+1; return; -}*/ +} void K_SquishPlayer(player_t *player, mobj_t *source) { @@ -1902,7 +1914,7 @@ void K_SquishPlayer(player_t *player, mobj_t *source) return; if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || player->kartstuff[k_startimer] > 0 - || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 + || player->kartstuff[k_wipeouttimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 || (gametype != GT_RACE && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1))) return; @@ -1946,7 +1958,7 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju return; if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0) - || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 + || player->kartstuff[k_wipeouttimer] > 0 || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 || (gametype != GT_RACE && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1))) return; @@ -2025,10 +2037,10 @@ void K_StealBalloon(player_t *player, player_t *victim, boolean force) return; if ((player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0) - || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 + || player->kartstuff[k_wipeouttimer] > 0 || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 || (player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer])) || (victim->powers[pw_flashing] > 0 || victim->kartstuff[k_squishedtimer] > 0 || (victim->kartstuff[k_spinouttimer] > 0 && victim->kartstuff[k_spinout] > 0) - || victim->kartstuff[k_startimer] > 0 || victim->kartstuff[k_growshrinktimer] > 0 || victim->kartstuff[k_bootimer] > 0)) + || victim->kartstuff[k_wipeouttimer] > 0 || victim->kartstuff[k_startimer] > 0 || victim->kartstuff[k_growshrinktimer] > 0 || victim->kartstuff[k_bootimer] > 0)) return; } @@ -2902,7 +2914,7 @@ static void K_KartDrift(player_t *player, boolean onground) } // Stop drifting - if (player->kartstuff[k_spinouttimer] > 0 // banana peel + if (player->kartstuff[k_spinouttimer] > 0 || player->kartstuff[k_wipeouttimer] > 0 // banana peel || player->speed < (10<<16)) // you're too slow! { player->kartstuff[k_drift] = 0; @@ -3135,7 +3147,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) else if (cmd->buttons & BT_ATTACK) player->pflags |= PF_ATTACKDOWN; - if (player && player->health > 0 && !player->spectator && !player->exiting && player->kartstuff[k_spinouttimer] == 0) + if (player && player->health > 0 && !player->spectator && !player->exiting && player->kartstuff[k_spinouttimer] == 0 && player->kartstuff[k_wipeouttimer] == 0) { // Magnet @@ -3170,9 +3182,9 @@ void K_MoveKartPlayer(player_t *player, boolean onground) else if (ATTACK_IS_DOWN && player->kartstuff[k_goldshroomtimer] > 1 && onground && NO_BOO) { K_DoMushroom(player, true, false); - //player->kartstuff[k_goldshroomtimer] -= 10; - //if (player->kartstuff[k_goldshroomtimer] < 1) - // player->kartstuff[k_goldshroomtimer] = 1; + player->kartstuff[k_goldshroomtimer] -= 10; + if (player->kartstuff[k_goldshroomtimer] < 1) + player->kartstuff[k_goldshroomtimer] = 1; } // TripleMushroom power else if (ATTACK_IS_DOWN && !HOLDING_ITEM && player->kartstuff[k_mushroom] == 4 && onground && NO_BOO) @@ -3614,10 +3626,12 @@ void K_MoveKartPlayer(player_t *player, boolean onground) player->mo->flags2 |= MF2_SHADOW; if (!(player->mo->tracer)) + { player->mo->tracer = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_OVERLAY); + P_SetMobjState(player->mo->tracer, S_PLAYERBOMB); + } P_SetTarget(&player->mo->tracer->target, player->mo); - P_SetMobjState(player->mo->tracer, S_PLAYERBOMB); player->mo->tracer->color = player->mo->color; if (player->kartstuff[k_comebacktimer] > 0) diff --git a/src/k_kart.h b/src/k_kart.h index c9ab9c0f..a8c86cfe 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -23,7 +23,7 @@ void K_LakituChecker(player_t *player); void K_KartMoveAnimation(player_t *player); void K_KartPlayerThink(player_t *player, ticcmd_t *cmd); void K_SpinPlayer(player_t *player, mobj_t *source); -//void K_WipeoutPlayer(player_t *player, mobj_t *source); +void K_WipeoutPlayer(player_t *player, mobj_t *source); void K_SquishPlayer(player_t *player, mobj_t *source); void K_ExplodePlayer(player_t *player, mobj_t *source); void K_StealBalloon(player_t *player, player_t *victim, boolean force); diff --git a/src/p_enemy.c b/src/p_enemy.c index 2b010327..59a4a076 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -8094,6 +8094,10 @@ void A_ToggleFlameJet(mobj_t* actor) void A_ItemPop(mobj_t *actor) { mobj_t *remains; +#ifdef HAVE_BLUA + if (LUA_CallAction("A_ItemPop", actor)) + return; +#endif if (!(actor->target && actor->target->player)) { @@ -8151,6 +8155,10 @@ void A_RedShellChase(mobj_t *actor) INT32 c = 0; INT32 stop; player_t *player; +#ifdef HAVE_BLUA + if (LUA_CallAction("A_RedShellChase", actor)) + return; +#endif if (actor->tracer) { @@ -8252,6 +8260,10 @@ void A_BobombExplode(mobj_t *actor) INT32 d; INT32 locvar1 = var1; mobjtype_t type; +#ifdef HAVE_BLUA + if (LUA_CallAction("A_BobombExplode", actor)) + return; +#endif type = (mobjtype_t)locvar1; diff --git a/src/p_inter.c b/src/p_inter.c index 0882f23f..6491ce67 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -2911,7 +2911,7 @@ static void P_ShieldDamage(player_t *player, mobj_t *inflictor, mobj_t *source, } */ -static void P_RingDamage(player_t *player, mobj_t *inflictor, mobj_t *source, INT32 damage) +/*static void P_RingDamage(player_t *player, mobj_t *inflictor, mobj_t *source, INT32 damage) { if (!(inflictor && ((inflictor->flags & MF_MISSILE) || inflictor->player) && player->powers[pw_super] && ALL7EMERALDS(player->powers[pw_emeralds]))) { @@ -2923,7 +2923,7 @@ static void P_RingDamage(player_t *player, mobj_t *inflictor, mobj_t *source, IN S_StartSound(player->mo, sfx_spkdth); } - /*if (source && source->player && !player->powers[pw_super]) //don't score points against super players + if (source && source->player && !player->powers[pw_super]) //don't score points against super players { // Award no points when players shoot each other when cv_friendlyfire is on. if (!G_GametypeHasTeams() || !(source->player->ctfteam == player->ctfteam && source != player->mo)) @@ -2939,11 +2939,11 @@ static void P_RingDamage(player_t *player, mobj_t *inflictor, mobj_t *source, IN if (!G_GametypeHasTeams() || !(source->player->ctfteam == player->ctfteam && source != player->mo)) P_AddPlayerScore(source->player, 1); } - }*/ + } // Ring loss sound plays despite hitting spikes P_PlayRinglossSound(player->mo); // Ringledingle! -} +}*/ /** Damages an object, which may or may not be a player. * For melee attacks, source and inflictor are the same. @@ -3202,8 +3202,17 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da || inflictor->type == MT_TRIPLEREDSHIELD1 || inflictor->type == MT_TRIPLEREDSHIELD2 || inflictor->type == MT_TRIPLEREDSHIELD3 || inflictor->player)) { - //K_WipeoutPlayer(player, source); - player->kartstuff[k_spinouttype] = 1; + fixed_t tmomx = inflictor->momx; + fixed_t tmomy = inflictor->momy; + fixed_t tmomz = inflictor->momz; + + K_KartBouncing(target, inflictor, false); + K_WipeoutPlayer(player, source); + + inflictor->momx = tmomx; + inflictor->momy = tmomy; + inflictor->momz = tmomz; + /*player->kartstuff[k_spinouttype] = 1; K_SpinPlayer(player, source); damage = player->mo->health - 1; P_RingDamage(player, inflictor, source, damage); @@ -3213,7 +3222,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da { quake.intensity = 32*FRACUNIT; quake.time = 5; - } + }*/ } else { diff --git a/src/p_map.c b/src/p_map.c index f2fcf53c..5502aea6 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -1627,12 +1627,12 @@ static boolean PIT_CheckThing(mobj_t *thing) return true; // underneath if (thing->player->kartstuff[k_growshrinktimer] || thing->player->kartstuff[k_squishedtimer] - || thing->player->kartstuff[k_bootimer] || thing->player->kartstuff[k_spinouttimer] + || thing->player->kartstuff[k_bootimer] || thing->player->kartstuff[k_spinouttimer] || thing->player->kartstuff[k_wipeouttimer] || thing->player->kartstuff[k_startimer] || thing->player->kartstuff[k_justbumped] || (gametype != GT_RACE && (thing->player->kartstuff[k_balloon] <= 0 && (thing->player->kartstuff[k_comebacktimer] || thing->player->kartstuff[k_comebackmode] == 1))) || tmthing->player->kartstuff[k_growshrinktimer] || tmthing->player->kartstuff[k_squishedtimer] - || tmthing->player->kartstuff[k_bootimer] || tmthing->player->kartstuff[k_spinouttimer] + || tmthing->player->kartstuff[k_bootimer] || tmthing->player->kartstuff[k_spinouttimer] || tmthing->player->kartstuff[k_wipeouttimer] || tmthing->player->kartstuff[k_startimer] || tmthing->player->kartstuff[k_justbumped] || (gametype != GT_RACE && (tmthing->player->kartstuff[k_balloon] <= 0 && (tmthing->player->kartstuff[k_comebacktimer] || tmthing->player->kartstuff[k_comebackmode] == 1)))) diff --git a/src/p_mobj.c b/src/p_mobj.c index adbc466c..e2565a71 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -2867,7 +2867,7 @@ static void P_PlayerZMovement(mobj_t *mo) // Cut momentum in half when you hit the ground and // aren't pressing any controls. if (!(mo->player->cmd.forwardmove || mo->player->cmd.sidemove) && !mo->player->cmomx && !mo->player->cmomy - && !(mo->player->pflags & PF_SPINNING) && !(mo->player->kartstuff[k_spinouttimer])) + && !(mo->player->pflags & PF_SPINNING) && !(mo->player->kartstuff[k_spinouttimer] || mo->player->kartstuff[k_wipeouttimer])) { mo->momx = mo->momx/2; mo->momy = mo->momy/2; @@ -5922,6 +5922,13 @@ void P_Attract(mobj_t *source, mobj_t *dest, boolean nightsgrab) // Home in on y if (!dest || dest->health <= 0 || !dest->player || !source->tracer) return; + if (dest->player && dest->player->kartstuff[k_comebackmode] == 1) + { + P_TeleportMove(source, dest->x+dest->momx, dest->y+dest->momy, dest->z+dest->momz); + source->angle = dest->angle; + return; + } + // change angle source->angle = R_PointToAngle2(source->x, source->y, tx, ty); @@ -9492,6 +9499,9 @@ void P_SpawnPlayer(INT32 playernum) overheadarrow->flags2 |= MF2_DONTDRAW; P_SetScale(overheadarrow, mobj->destscale); + if (leveltime < 1) + p->kartstuff[k_comebackshowninfo] = 0; + if (gametype != GT_RACE) { /*INT32 i; diff --git a/src/p_setup.c b/src/p_setup.c index 3e817fb1..ff256703 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -160,7 +160,7 @@ FUNCNORETURN static ATTRNORETURN void CorruptMapError(const char *msg) I_Error("Invalid or corrupt map.\nLook in log file or text console for technical details."); } -#define NUMLAPS_DEFAULT 4 +#define NUMLAPS_DEFAULT 3 /** Clears the data from a single map header. * @@ -224,7 +224,7 @@ static void P_ClearSingleMapHeaderInfo(INT16 i) DEH_WriteUndoline("LEVELFLAGS", va("%d", mapheaderinfo[num]->levelflags), UNDO_NONE); mapheaderinfo[num]->levelflags = 0; DEH_WriteUndoline("MENUFLAGS", va("%d", mapheaderinfo[num]->menuflags), UNDO_NONE); - mapheaderinfo[num]->menuflags = LF2_RECORDATTACK|LF2_NOVISITNEEDED; // 0 + mapheaderinfo[num]->menuflags = 0; // TODO grades support for delfile (pfft yeah right) P_DeleteGrades(num); // an even further impossibility, delfile custom opts support diff --git a/src/p_user.c b/src/p_user.c index 5e47cdde..bd0b8f49 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -3665,7 +3665,7 @@ void P_DoJump(player_t *player, boolean soundandstate) if (!player->jumpfactor) return; - if (player->kartstuff[k_spinouttimer]) // SRB2kart + if (player->kartstuff[k_spinouttimer] || player->kartstuff[k_wipeouttimer]) // SRB2kart return; /* // SRB2kart - climbing in a kart? @@ -4636,7 +4636,8 @@ static void P_3dMovement(player_t *player) cmd = &player->cmd; - if (player->exiting || player->pflags & PF_STASIS || player->kartstuff[k_spinouttimer]) // pw_introcam? + if (player->exiting || player->pflags & PF_STASIS + || player->kartstuff[k_spinouttimer] || player->kartstuff[k_wipeouttimer]) // pw_introcam? { cmd->forwardmove = cmd->sidemove = 0; if (player->pflags & PF_GLIDING) @@ -4868,7 +4869,7 @@ static void P_3dMovement(player_t *player) P_Thrust(player->mo, movepushangle, movepushforward); #endif } - else if (!player->kartstuff[k_spinouttimer]) + else if (!(player->kartstuff[k_spinouttimer] || player->kartstuff[k_wipeouttimer])) { K_MomentumToFacing(player); } From ffbf6e8752e2e9199f4183bd9c0d59316669deaa Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Tue, 12 Dec 2017 00:07:14 -0500 Subject: [PATCH 4/8] Mirror Mode - Added kartmirror cvar, flips the screen & player controls. The post-processing effect is currently Software only; will need an OpenGL implementation but I don't know enough to make that happen - Moved adminplayer = -1 setting to SV_ResetServer instead of SV_StartServer --- src/d_clisrv.c | 5 +---- src/d_netcmd.c | 3 ++- src/d_netcmd.h | 1 + src/doomtype.h | 3 ++- src/g_game.c | 26 ++++++++++++++++++++++++++ src/k_kart.c | 3 ++- src/p_mobj.c | 4 +++- src/p_user.c | 3 +++ src/v_video.c | 15 +++++++++++++++ 9 files changed, 55 insertions(+), 8 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index c5cb0c70..96452c24 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -2956,6 +2956,7 @@ void SV_ResetServer(void) playeringame[i] = false; playernode[i] = UINT8_MAX; sprintf(player_names[i], "Player %d", i + 1); + adminplayers[i] = -1; // Populate the entire adminplayers array with -1. } mynode = 0; @@ -3223,10 +3224,6 @@ boolean Playing(void) boolean SV_SpawnServer(void) { - INT32 i; - for (i = 0; i < MAXPLAYERS; i++) - adminplayers[i] = -1; // Populate the entire adminplayers array with -1. - if (demoplayback) G_StopDemo(); // reset engine parameter if (metalplayback) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 552ebdf9..777c4764 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -320,12 +320,13 @@ consvar_t cv_feather = {"feathers", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NU consvar_t cv_karthud = {"karthud", "Default", CV_SAVE|CV_CALL, karthud_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartcheck = {"kartcheck", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t kartstarsfx_cons_t[] = {{0, "Music"}, {1, "SMK"}, {0, NULL}}; -consvar_t cv_kartstarsfx = {"kartstarsfx", "SMK", CV_SAVE, kartstarsfx_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // change default to "SMK"? +consvar_t cv_kartstarsfx = {"kartstarsfx", "SMK", CV_SAVE, kartstarsfx_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartcc = {"kartcc", "100cc", CV_NETVAR, kartcc_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t kartballoons_cons_t[] = {{1, "MIN"}, {12, "MAX"}, {0, NULL}}; consvar_t cv_kartballoons = {"kartballoons", "3", CV_NETVAR, kartballoons_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartfrantic = {"kartfrantic", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_kartcomeback = {"kartcomeback", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_kartmirror = {"kartmirror", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; static CV_PossibleValue_t speedometer_cons_t[] = {{0, "Off"}, {1, "Kilometers"}, {2, "Miles"}, {3, "Fracunits"}, {0, NULL}}; consvar_t cv_speedometer = {"speedometer", "Kilometers", CV_SAVE, speedometer_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // use tics in display diff --git a/src/d_netcmd.h b/src/d_netcmd.h index d5287ddf..ebda15d4 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -112,6 +112,7 @@ extern consvar_t cv_kartcc; extern consvar_t cv_kartballoons; extern consvar_t cv_kartfrantic; extern consvar_t cv_kartcomeback; +extern consvar_t cv_kartmirror; extern consvar_t cv_speedometer; extern consvar_t cv_collideminimum; diff --git a/src/doomtype.h b/src/doomtype.h index a711b466..3cd7b7da 100644 --- a/src/doomtype.h +++ b/src/doomtype.h @@ -259,7 +259,8 @@ typedef enum postimg_water, postimg_motion, postimg_flip, - postimg_heat + postimg_heat, + postimg_mirror } postimg_t; typedef UINT32 lumpnum_t; // 16 : 16 unsigned long (wad num: lump num) diff --git a/src/g_game.c b/src/g_game.c index 6f3bf3bb..72c3bf1b 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -981,6 +981,14 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics) gamepadjoystickmove = cv_usejoystick.value && Joystick.bGamepadStyle; axis = JoyAxis(AXISTURN); + + if (cv_kartmirror.value) + { + turnright = PLAYER1INPUTDOWN(gc_turnleft); + turnleft = PLAYER1INPUTDOWN(gc_turnright); + axis = -axis; + } + if (gamepadjoystickmove && axis != 0) { turnright = turnright || (axis > 0); @@ -1253,8 +1261,13 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics) cmd->forwardmove = (SINT8)(cmd->forwardmove + forward); cmd->sidemove = (SINT8)(cmd->sidemove + side); + if (cv_kartmirror.value) + cmd->sidemove = -cmd->sidemove; + //{ SRB2kart - Drift support axis = JoyAxis(AXISTURN); + if (cv_kartmirror.value) + axis = -axis; if (cmd->angleturn > 0) // Drifting to the left cmd->buttons |= BT_DRIFTLEFT; @@ -1329,6 +1342,14 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics) gamepadjoystickmove = cv_usejoystick2.value && Joystick2.bGamepadStyle; axis = Joy2Axis(AXISTURN); + + if (cv_kartmirror.value) + { + turnright = PLAYER2INPUTDOWN(gc_turnleft); + turnleft = PLAYER2INPUTDOWN(gc_turnright); + axis = -axis; + } + if (gamepadjoystickmove && axis != 0) { turnright = turnright || (axis > 0); @@ -1585,8 +1606,13 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics) cmd->forwardmove = (SINT8)(cmd->forwardmove + forward); cmd->sidemove = (SINT8)(cmd->sidemove + side); + if (cv_kartmirror.value) + cmd->sidemove = -cmd->sidemove; + //{ SRB2kart - Drift support axis = Joy2Axis(AXISTURN); + if (cv_kartmirror.value) + axis = -axis; if (cmd->angleturn > 0) // Drifting to the left cmd->buttons |= BT_DRIFTLEFT; diff --git a/src/k_kart.c b/src/k_kart.c index 1efe2814..c9b4e056 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -308,7 +308,8 @@ void K_RegisterKartStuff(void) CV_RegisterVar(&cv_kartcc); CV_RegisterVar(&cv_kartballoons); CV_RegisterVar(&cv_kartfrantic); - CV_RegisterVar(&cv_kartcomeback); + CV_RegisterVar(&cv_kartcomeback); + CV_RegisterVar(&cv_kartmirror); CV_RegisterVar(&cv_speedometer); CV_RegisterVar(&cv_collideminimum); CV_RegisterVar(&cv_collidesoundnum); diff --git a/src/p_mobj.c b/src/p_mobj.c index e2565a71..2f23c7c8 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -3581,7 +3581,9 @@ boolean P_CameraThinker(player_t *player, camera_t *thiscam, boolean resetcalled || (thiscam == &camera2 && players[secondarydisplayplayer].mo && (players[secondarydisplayplayer].mo->flags2 & MF2_TWOD))) itsatwodlevel = true; - if (player->pflags & PF_FLIPCAM && !(player->pflags & PF_NIGHTSMODE) && player->mo->eflags & MFE_VERTICALFLIP) + if (cv_kartmirror.value) + postimg = postimg_mirror; + else if (player->pflags & PF_FLIPCAM && !(player->pflags & PF_NIGHTSMODE) && player->mo->eflags & MFE_VERTICALFLIP) postimg = postimg_flip; else if (player->awayviewtics) { diff --git a/src/p_user.c b/src/p_user.c index bd0b8f49..72d74a3f 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -8992,6 +8992,9 @@ static void P_CalcPostImg(player_t *player) *param = 5; } #endif + + if (cv_kartmirror.value) // srb2kart + *type = postimg_mirror; } /*void P_DoPityCheck(player_t *player) diff --git a/src/v_video.c b/src/v_video.c index bda2f5e8..157edcbf 100644 --- a/src/v_video.c +++ b/src/v_video.c @@ -2121,6 +2121,21 @@ Unoptimized version heatindex[view]++; heatindex[view] %= vid.height; + VID_BlitLinearScreen(tmpscr+vid.width*vid.bpp*yoffset, screens[0]+vid.width*vid.bpp*yoffset, + vid.width*vid.bpp, height, vid.width*vid.bpp, vid.width); + } + else if (type == postimg_mirror) // Flip the screen on the x axis + { + UINT8 *tmpscr = screens[4]; + UINT8 *srcscr = screens[0]; + INT32 y, x, x2; + + for (y = yoffset; y < yoffset+height; y++) + { + for (x = 0, x2 = (vid.width*vid.bpp)-1; x < (vid.width*vid.bpp); x++, x2--) + tmpscr[y*vid.width + x2] = srcscr[y*vid.width + x]; + } + VID_BlitLinearScreen(tmpscr+vid.width*vid.bpp*yoffset, screens[0]+vid.width*vid.bpp*yoffset, vid.width*vid.bpp, height, vid.width*vid.bpp, vid.width); } From b6d86145a90ee7bc3415f9ab26e8144ae046515a Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Tue, 12 Dec 2017 17:31:25 -0500 Subject: [PATCH 5/8] OGL Mirror Mode Haven't tested a whole lot but it seems okay? --- src/hardware/hw_defs.h | 1 + src/hardware/hw_main.c | 20 ++++++++++++++++++++ src/hardware/r_opengl/r_opengl.c | 4 +++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/hardware/hw_defs.h b/src/hardware/hw_defs.h index 70d776d9..02093955 100644 --- a/src/hardware/hw_defs.h +++ b/src/hardware/hw_defs.h @@ -109,6 +109,7 @@ typedef struct FLOAT fovxangle, fovyangle; INT32 splitscreen; boolean flip; // screenflip + boolean mirror; // SRB2Kart: Mirror Mode } FTransform; // Transformed vector, as passed to HWR API diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index a4785f12..6d1cdb4a 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -5591,6 +5591,11 @@ void HWR_RenderSkyboxView(INT32 viewnumber, player_t *player) else atransform.flip = false; + if (*type == postimg_mirror) + atransform.mirror = true; + else + atransform.mirror = false; + atransform.x = gr_viewx; // FIXED_TO_FLOAT(viewx) atransform.y = gr_viewy; // FIXED_TO_FLOAT(viewy) atransform.z = gr_viewz; // FIXED_TO_FLOAT(viewz) @@ -5610,6 +5615,11 @@ void HWR_RenderSkyboxView(INT32 viewnumber, player_t *player) else stransform.flip = false; + if (*type == postimg_mirror) + stransform.mirror = true; + else + stransform.mirror = false; + stransform.x = 0.0f; stransform.y = 0.0f; stransform.z = 0.0f; @@ -5821,6 +5831,11 @@ void HWR_RenderPlayerView(INT32 viewnumber, player_t *player) else atransform.flip = false; + if (*type == postimg_mirror) + atransform.mirror = true; + else + atransform.mirror = false; + atransform.x = gr_viewx; // FIXED_TO_FLOAT(viewx) atransform.y = gr_viewy; // FIXED_TO_FLOAT(viewy) atransform.z = gr_viewz; // FIXED_TO_FLOAT(viewz) @@ -5840,6 +5855,11 @@ void HWR_RenderPlayerView(INT32 viewnumber, player_t *player) else stransform.flip = false; + if (*type == postimg_mirror) + stransform.mirror = true; + else + stransform.mirror = false; + stransform.x = 0.0f; stransform.y = 0.0f; stransform.z = 0.0f; diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index e6ff83e8..80da98c4 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -2013,7 +2013,9 @@ EXPORT void HWRAPI(SetTransform) (FTransform *stransform) // keep a trace of the transformation for md2 memcpy(&md2_transform, stransform, sizeof (md2_transform)); - if (stransform->flip) + if (stransform->mirror) + pglScalef(-stransform->scalex, stransform->scaley, -stransform->scalez); + else if (stransform->flip) pglScalef(stransform->scalex, -stransform->scaley, -stransform->scalez); else pglScalef(stransform->scalex, stransform->scaley, -stransform->scalez); From f69270027cb94b05ecacf60d2d1bf7f6182aae2b Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Tue, 12 Dec 2017 19:58:44 -0500 Subject: [PATCH 6/8] Reverted wipeout --- src/d_player.h | 1 - src/dehacked.c | 1 - src/doomstat.h | 1 - src/g_game.c | 1 - src/k_kart.c | 66 ++++++-------------------------------------------- src/k_kart.h | 1 - src/p_inter.c | 14 ++--------- src/p_map.c | 4 +-- src/p_mobj.c | 2 +- src/p_user.c | 7 +++--- 10 files changed, 15 insertions(+), 83 deletions(-) diff --git a/src/d_player.h b/src/d_player.h index 83976f10..f4128e13 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -276,7 +276,6 @@ typedef enum k_goldshroomtimer, // Gold Mushroom duration timer k_startimer, // Invincibility timer k_spinouttimer, // Spin-out from a banana peel or oil slick (was "pw_bananacam") - k_wipeouttimer, // Wipe-out from a shell, waits a short amount of time before making you stop and spinning out in place k_laserwisptimer, // The duration and relative angle of the laser k_justbumped, // Prevent players from endlessly bumping into each other k_poweritemtimer, // Battle mode, how long before you're allowed another power item (Star, Megashroom) diff --git a/src/dehacked.c b/src/dehacked.c index 6dc5beb7..0372df6d 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -7357,7 +7357,6 @@ static const char *const KARTSTUFF_LIST[] = { "GOLDSHROOMTIMER", "STARTIMER", "SPINOUTTIMER", - "WIPEOUTTIMER", "LASERWISPTIMER", "JUSTBUMPED", "POWERITEMTIMER", diff --git a/src/doomstat.h b/src/doomstat.h index df13266f..11560259 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -405,7 +405,6 @@ extern INT32 boostealtime; extern INT32 mushroomtime; extern INT32 itemtime; extern INT32 comebacktime; -extern INT32 wipeouttime; extern UINT8 introtoplay; extern UINT8 creditscutscene; diff --git a/src/g_game.c b/src/g_game.c index 72c3bf1b..9627e048 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -206,7 +206,6 @@ INT32 boostealtime = TICRATE/2; INT32 mushroomtime = TICRATE + (TICRATE/3); INT32 itemtime = 8*TICRATE; INT32 comebacktime = 10*TICRATE; -INT32 wipeouttime = 20; INT32 gameovertics = 15*TICRATE; diff --git a/src/k_kart.c b/src/k_kart.c index c9b4e056..dc61a89e 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1456,23 +1456,6 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->kartstuff[k_spinout] == 0 && player->kartstuff[k_spinouttimer] == 0 && player->powers[pw_flashing] == K_GetKartFlashing()) player->powers[pw_flashing]--; - if (player->kartstuff[k_wipeouttimer]) - { - if (player->kartstuff[k_wipeouttimer] == 1) - { - if (P_IsObjectOnGround(player->mo)) - { - player->kartstuff[k_wipeouttimer] = 0; - P_PlayRinglossSound(player->mo); - player->kartstuff[k_spinouttype] = 1; - K_SpinPlayer(player, NULL); - player->mo->momx = player->mo->momy = 0; - } - } - else - player->kartstuff[k_wipeouttimer]--; - } - if (player->kartstuff[k_magnettimer]) player->kartstuff[k_magnettimer]--; @@ -1816,7 +1799,7 @@ void K_SpinPlayer(player_t *player, mobj_t *source) return; if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0) - || player->kartstuff[k_wipeouttimer] > 0 || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 + || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 || (gametype != GT_RACE && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1))) return; @@ -1874,48 +1857,13 @@ void K_SpinPlayer(player_t *player, mobj_t *source) return; } -void K_WipeoutPlayer(player_t *player, mobj_t *source) -{ - if (player->health <= 0) - return; - - if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0) - || player->kartstuff[k_wipeouttimer] > 0 || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 - || (gametype != GT_RACE && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1))) - return; - - if (source && source != player->mo && source->player && !source->player->kartstuff[k_sounds]) - { - S_StartSound(source, sfx_hitem); - source->player->kartstuff[k_sounds] = 50; - } - - if (gametype != GT_RACE) - { - if (source && source->player && player != source->player) - P_AddPlayerScore(source->player, 1); - } - - P_PlayerRingBurst(player, 5); - - if (P_IsLocalPlayer(player)) - { - quake.intensity = 32*FRACUNIT; - quake.time = 5; - } - - player->kartstuff[k_wipeouttimer] = wipeouttime+1; - - return; -} - void K_SquishPlayer(player_t *player, mobj_t *source) { if (player->health <= 0) return; if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || player->kartstuff[k_startimer] > 0 - || player->kartstuff[k_wipeouttimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 + || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 || (gametype != GT_RACE && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1))) return; @@ -1959,7 +1907,7 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju return; if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0) - || player->kartstuff[k_wipeouttimer] > 0 || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 + || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 || (gametype != GT_RACE && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1))) return; @@ -2038,10 +1986,10 @@ void K_StealBalloon(player_t *player, player_t *victim, boolean force) return; if ((player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0) - || player->kartstuff[k_wipeouttimer] > 0 || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 + || player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0 || (player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer])) || (victim->powers[pw_flashing] > 0 || victim->kartstuff[k_squishedtimer] > 0 || (victim->kartstuff[k_spinouttimer] > 0 && victim->kartstuff[k_spinout] > 0) - || victim->kartstuff[k_wipeouttimer] > 0 || victim->kartstuff[k_startimer] > 0 || victim->kartstuff[k_growshrinktimer] > 0 || victim->kartstuff[k_bootimer] > 0)) + || victim->kartstuff[k_startimer] > 0 || victim->kartstuff[k_growshrinktimer] > 0 || victim->kartstuff[k_bootimer] > 0)) return; } @@ -2915,7 +2863,7 @@ static void K_KartDrift(player_t *player, boolean onground) } // Stop drifting - if (player->kartstuff[k_spinouttimer] > 0 || player->kartstuff[k_wipeouttimer] > 0 // banana peel + if (player->kartstuff[k_spinouttimer] > 0 // banana peel || player->speed < (10<<16)) // you're too slow! { player->kartstuff[k_drift] = 0; @@ -3148,7 +3096,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) else if (cmd->buttons & BT_ATTACK) player->pflags |= PF_ATTACKDOWN; - if (player && player->health > 0 && !player->spectator && !player->exiting && player->kartstuff[k_spinouttimer] == 0 && player->kartstuff[k_wipeouttimer] == 0) + if (player && player->health > 0 && !player->spectator && !player->exiting && player->kartstuff[k_spinouttimer] == 0) { // Magnet diff --git a/src/k_kart.h b/src/k_kart.h index a8c86cfe..d47c3c49 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -23,7 +23,6 @@ void K_LakituChecker(player_t *player); void K_KartMoveAnimation(player_t *player); void K_KartPlayerThink(player_t *player, ticcmd_t *cmd); void K_SpinPlayer(player_t *player, mobj_t *source); -void K_WipeoutPlayer(player_t *player, mobj_t *source); void K_SquishPlayer(player_t *player, mobj_t *source); void K_ExplodePlayer(player_t *player, mobj_t *source); void K_StealBalloon(player_t *player, player_t *victim, boolean force); diff --git a/src/p_inter.c b/src/p_inter.c index 6491ce67..ab0a1e0b 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -3202,17 +3202,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da || inflictor->type == MT_TRIPLEREDSHIELD1 || inflictor->type == MT_TRIPLEREDSHIELD2 || inflictor->type == MT_TRIPLEREDSHIELD3 || inflictor->player)) { - fixed_t tmomx = inflictor->momx; - fixed_t tmomy = inflictor->momy; - fixed_t tmomz = inflictor->momz; - - K_KartBouncing(target, inflictor, false); - K_WipeoutPlayer(player, source); - - inflictor->momx = tmomx; - inflictor->momy = tmomy; - inflictor->momz = tmomz; - /*player->kartstuff[k_spinouttype] = 1; + player->kartstuff[k_spinouttype] = 1; K_SpinPlayer(player, source); damage = player->mo->health - 1; P_RingDamage(player, inflictor, source, damage); @@ -3222,7 +3212,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da { quake.intensity = 32*FRACUNIT; quake.time = 5; - }*/ + } } else { diff --git a/src/p_map.c b/src/p_map.c index 5502aea6..f2fcf53c 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -1627,12 +1627,12 @@ static boolean PIT_CheckThing(mobj_t *thing) return true; // underneath if (thing->player->kartstuff[k_growshrinktimer] || thing->player->kartstuff[k_squishedtimer] - || thing->player->kartstuff[k_bootimer] || thing->player->kartstuff[k_spinouttimer] || thing->player->kartstuff[k_wipeouttimer] + || thing->player->kartstuff[k_bootimer] || thing->player->kartstuff[k_spinouttimer] || thing->player->kartstuff[k_startimer] || thing->player->kartstuff[k_justbumped] || (gametype != GT_RACE && (thing->player->kartstuff[k_balloon] <= 0 && (thing->player->kartstuff[k_comebacktimer] || thing->player->kartstuff[k_comebackmode] == 1))) || tmthing->player->kartstuff[k_growshrinktimer] || tmthing->player->kartstuff[k_squishedtimer] - || tmthing->player->kartstuff[k_bootimer] || tmthing->player->kartstuff[k_spinouttimer] || tmthing->player->kartstuff[k_wipeouttimer] + || tmthing->player->kartstuff[k_bootimer] || tmthing->player->kartstuff[k_spinouttimer] || tmthing->player->kartstuff[k_startimer] || tmthing->player->kartstuff[k_justbumped] || (gametype != GT_RACE && (tmthing->player->kartstuff[k_balloon] <= 0 && (tmthing->player->kartstuff[k_comebacktimer] || tmthing->player->kartstuff[k_comebackmode] == 1)))) diff --git a/src/p_mobj.c b/src/p_mobj.c index 2f23c7c8..256e3993 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -2867,7 +2867,7 @@ static void P_PlayerZMovement(mobj_t *mo) // Cut momentum in half when you hit the ground and // aren't pressing any controls. if (!(mo->player->cmd.forwardmove || mo->player->cmd.sidemove) && !mo->player->cmomx && !mo->player->cmomy - && !(mo->player->pflags & PF_SPINNING) && !(mo->player->kartstuff[k_spinouttimer] || mo->player->kartstuff[k_wipeouttimer])) + && !(mo->player->pflags & PF_SPINNING) && !(mo->player->kartstuff[k_spinouttimer])) { mo->momx = mo->momx/2; mo->momy = mo->momy/2; diff --git a/src/p_user.c b/src/p_user.c index 72d74a3f..930c5fea 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -3665,7 +3665,7 @@ void P_DoJump(player_t *player, boolean soundandstate) if (!player->jumpfactor) return; - if (player->kartstuff[k_spinouttimer] || player->kartstuff[k_wipeouttimer]) // SRB2kart + if (player->kartstuff[k_spinouttimer]) // SRB2kart return; /* // SRB2kart - climbing in a kart? @@ -4636,8 +4636,7 @@ static void P_3dMovement(player_t *player) cmd = &player->cmd; - if (player->exiting || player->pflags & PF_STASIS - || player->kartstuff[k_spinouttimer] || player->kartstuff[k_wipeouttimer]) // pw_introcam? + if (player->exiting || player->pflags & PF_STASIS || player->kartstuff[k_spinouttimer]) // pw_introcam? { cmd->forwardmove = cmd->sidemove = 0; if (player->pflags & PF_GLIDING) @@ -4869,7 +4868,7 @@ static void P_3dMovement(player_t *player) P_Thrust(player->mo, movepushangle, movepushforward); #endif } - else if (!(player->kartstuff[k_spinouttimer] || player->kartstuff[k_wipeouttimer])) + else if (!(player->kartstuff[k_spinouttimer])) { K_MomentumToFacing(player); } From 6e47a1481565a03dea5608f759c2574b6da4ddad Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 13 Dec 2017 18:01:26 -0500 Subject: [PATCH 7/8] Some HUD tweaks - CHECK now works in Mirror Mode - Lakitu flips in Mirror Mode - CHECK now shows up in splitscreen, because why not - Fixed a compiling error as a result of me attempting to revert wipeout --- src/k_kart.c | 25 +++++++++++++++++-------- src/p_inter.c | 4 ++-- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index dc61a89e..f276b44c 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4776,9 +4776,12 @@ fixed_t K_FindCheckX(fixed_t px, fixed_t py, angle_t ang, fixed_t mx, fixed_t my if (diff < ANGLE_90 || diff > ANGLE_270) return -320; else - x = (FixedMul(FINETANGENT(((diff+ANGLE_90)>>ANGLETOFINESHIFT) & 4095), 160<>ANGLETOFINESHIFT) & 4095), 160<>FRACBITS; - return (x>>FRACBITS); + if (cv_kartmirror.value) + x = 320-x; + + return x; } static void K_drawKartPlayerCheck(void) @@ -4920,7 +4923,10 @@ static void K_drawStartLakitu(void) else adjustY = 200; - V_DrawSmallScaledPatch(LAKI_X, STRINGY(LAKI_Y + adjustY), V_SNAPTOTOP, localpatch); + if (cv_kartmirror.value) + V_DrawSmallScaledPatch(320-LAKI_X, STRINGY(LAKI_Y + adjustY), V_SNAPTOTOP|V_FLIP, localpatch); + else + V_DrawSmallScaledPatch(LAKI_X, STRINGY(LAKI_Y + adjustY), V_SNAPTOTOP, localpatch); } static void K_drawLapLakitu(void) @@ -4990,7 +4996,10 @@ static void K_drawLapLakitu(void) adjustY = 200; } - V_DrawSmallScaledPatch(LAKI_X+14+(swoopTimer/4), STRINGY(LAKI_Y + adjustY), V_SNAPTOTOP, localpatch); + if (cv_kartmirror.value) + V_DrawSmallScaledPatch(320-(LAKI_X+14+(swoopTimer/4)), STRINGY(LAKI_Y + adjustY), V_SNAPTOTOP|V_FLIP, localpatch); + else + V_DrawSmallScaledPatch(LAKI_X+14+(swoopTimer/4), STRINGY(LAKI_Y + adjustY), V_SNAPTOTOP, localpatch); } void K_drawKartHUD(void) @@ -5016,12 +5025,12 @@ void K_drawKartHUD(void) if (stplyr->kartstuff[k_lapanimation]) K_drawLapLakitu(); - - // Draw the CHECK indicator before the other items too, so it's overlapped by everything else - if (cv_kartcheck.value) - K_drawKartPlayerCheck(); } + // Draw the CHECK indicator before the other items too, so it's overlapped by everything else + if (cv_kartcheck.value) + K_drawKartPlayerCheck(); + // If the item window is closing, draw it closing! if (stplyr->kartstuff[k_itemclose]) K_drawKartItemClose(); diff --git a/src/p_inter.c b/src/p_inter.c index ab0a1e0b..b269c0e1 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -2911,7 +2911,7 @@ static void P_ShieldDamage(player_t *player, mobj_t *inflictor, mobj_t *source, } */ -/*static void P_RingDamage(player_t *player, mobj_t *inflictor, mobj_t *source, INT32 damage) +static void P_RingDamage(player_t *player, mobj_t *inflictor, mobj_t *source, INT32 damage) { if (!(inflictor && ((inflictor->flags & MF_MISSILE) || inflictor->player) && player->powers[pw_super] && ALL7EMERALDS(player->powers[pw_emeralds]))) { @@ -2943,7 +2943,7 @@ static void P_ShieldDamage(player_t *player, mobj_t *inflictor, mobj_t *source, // Ring loss sound plays despite hitting spikes P_PlayRinglossSound(player->mo); // Ringledingle! -}*/ +} /** Damages an object, which may or may not be a player. * For melee attacks, source and inflictor are the same. From db1f584c135b1526dac0a42676a1e6118739748c Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Sat, 16 Dec 2017 15:38:15 -0500 Subject: [PATCH 8/8] MobjScale setting for map headers Replacement for Oldbrak mode, lets you set any scale instead of only 1/2, also modified some of Kart's scale shenanigans to be compatible. Requested by Sev for Dimension Heist --- src/dehacked.c | 22 +++++++++++++++++----- src/doomstat.h | 13 +++++++------ src/k_kart.c | 16 ++++++++-------- src/lua_maplib.c | 4 ++++ src/p_mobj.c | 15 ++++++--------- src/p_setup.c | 5 +++++ 6 files changed, 47 insertions(+), 28 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 0372df6d..f829090a 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -990,13 +990,13 @@ static const struct { {"2D",TOL_2D}, {"MARIO",TOL_MARIO}, {"NIGHTS",TOL_NIGHTS}, - {"OLDBRAK",TOL_ERZ3}, + //{"OLDBRAK",TOL_ERZ3}, {"XMAS",TOL_XMAS}, {"CHRISTMAS",TOL_XMAS}, {"WINTER",TOL_XMAS}, - {"KART",TOL_KART}, // SRB2kart + //{"KART",TOL_KART}, // SRB2kart {NULL, 0} }; @@ -1253,9 +1253,20 @@ static void readlevelheader(MYFILE *f, INT32 num) } else if (fastcmp(word, "LEVELFLAGS")) - mapheaderinfo[num-1]->levelflags = (UINT8)i; + mapheaderinfo[num-1]->levelflags = get_number(word2); else if (fastcmp(word, "MENUFLAGS")) - mapheaderinfo[num-1]->menuflags = (UINT8)i; + mapheaderinfo[num-1]->menuflags = get_number(word2); + + // SRB2Kart + /*else if (fastcmp(word, "AUTOMAP")) + { + if (i || word2[0] == 'T' || word2[0] == 'Y') + mapheaderinfo[num-1]->automap = true; + else + mapheaderinfo[num-1]->automap = false; + }*/ + else if (fastcmp(word, "MOBJSCALE")) + mapheaderinfo[num-1]->mobj_scale = get_number(word2); // Individual triggers for level flags, for ease of use (and 2.0 compatibility) else if (fastcmp(word, "SCRIPTISFILE")) @@ -7529,8 +7540,9 @@ struct { {"TOL_2D",TOL_2D}, {"TOL_MARIO",TOL_MARIO}, {"TOL_NIGHTS",TOL_NIGHTS}, - {"TOL_ERZ3",TOL_ERZ3}, + //{"TOL_ERZ3",TOL_ERZ3}, {"TOL_XMAS",TOL_XMAS}, + //{"TOL_KART",TOL_KART}, // Level flags {"LF_SCRIPTISFILE",LF_SCRIPTISFILE}, diff --git a/src/doomstat.h b/src/doomstat.h index 11560259..726e3e63 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -246,13 +246,14 @@ typedef struct UINT8 numGradedMares; ///< Internal. For grade support. nightsgrades_t *grades; ///< NiGHTS grades. Allocated dynamically for space reasons. Be careful. + // SRB2kart + //boolean automap; ///< Displays a level's white map outline in modified games + fixed_t mobj_scale; ///< Replacement for TOL_ERZ3 + // Lua stuff. // (This is not ifdeffed so the map header structure can stay identical, just in case.) UINT8 numCustomOptions; ///< Internal. For Lua custom value support. customoption_t *customopts; ///< Custom options. Allocated dynamically for space reasons. Be careful. - - // SRB2kart - boolean automap; ///< Displays a level's white map outline in modified games } mapheader_t; // level flags @@ -290,9 +291,9 @@ enum TypeOfLevel TOL_2D = 0x0100, ///< 2D TOL_MARIO = 0x0200, ///< Mario TOL_NIGHTS = 0x0400, ///< NiGHTS - TOL_ERZ3 = 0x0800, ///< ERZ3 - TOL_XMAS = 0x1000, ///< Christmas NiGHTS - TOL_KART = 0x4000 ///< Kart 32768 + //TOL_ERZ3 = 0x0800, ///< ERZ3 + TOL_XMAS = 0x1000 ///< Christmas NiGHTS + //TOL_KART = 0x4000 ///< Kart 32768 }; // Gametypes diff --git a/src/k_kart.c b/src/k_kart.c index f276b44c..e037caa8 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -308,7 +308,7 @@ void K_RegisterKartStuff(void) CV_RegisterVar(&cv_kartcc); CV_RegisterVar(&cv_kartballoons); CV_RegisterVar(&cv_kartfrantic); - CV_RegisterVar(&cv_kartcomeback); + CV_RegisterVar(&cv_kartcomeback); CV_RegisterVar(&cv_kartmirror); CV_RegisterVar(&cv_speedometer); CV_RegisterVar(&cv_collideminimum); @@ -1479,7 +1479,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->kartstuff[k_growshrinktimer] == 1 || player->kartstuff[k_growshrinktimer] == -1) { - player->mo->destscale = FRACUNIT; + player->mo->destscale = mapheaderinfo[gamemap-1]->mobj_scale; P_RestoreMusic(player); } @@ -3524,21 +3524,21 @@ void K_MoveKartPlayer(player_t *player, boolean onground) if (player->kartstuff[k_growshrinktimer] > ((itemtime + TICRATE*2) - 25)) { if (leveltime & 2) - player->mo->destscale = FRACUNIT*3/2; + player->mo->destscale = (mapheaderinfo[gamemap-1]->mobj_scale)*3/2; else - player->mo->destscale = FRACUNIT; + player->mo->destscale = (mapheaderinfo[gamemap-1]->mobj_scale); } else if (player->kartstuff[k_growshrinktimer] > 26 && player->kartstuff[k_growshrinktimer] <= ((itemtime + TICRATE*2) - 25)) - player->mo->destscale = FRACUNIT*3/2; + player->mo->destscale = (mapheaderinfo[gamemap-1]->mobj_scale)*3/2; // Megashroom - Back to normal... else if (player->kartstuff[k_growshrinktimer] > 1 && player->kartstuff[k_growshrinktimer] <= 26) { if (leveltime & 2) - player->mo->destscale = FRACUNIT; + player->mo->destscale = (mapheaderinfo[gamemap-1]->mobj_scale); else - player->mo->destscale = FRACUNIT*3/2; + player->mo->destscale = (mapheaderinfo[gamemap-1]->mobj_scale)*3/2; } if (player->kartstuff[k_growshrinktimer] == 26) S_StartSound(player->mo, sfx_mario8); @@ -3671,7 +3671,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground) player->kartstuff[k_boostcharge] = 0; // Increase your size while charging your engine. if (leveltime < 150) - player->mo->destscale = FRACUNIT + (player->kartstuff[k_boostcharge]*655); + player->mo->destscale = (mapheaderinfo[gamemap-1]->mobj_scale) + (player->kartstuff[k_boostcharge]*655); // Determine the outcome of your charge. if (leveltime > 140 && player->kartstuff[k_boostcharge]) diff --git a/src/lua_maplib.c b/src/lua_maplib.c index 0a455a30..771dd0af 100644 --- a/src/lua_maplib.c +++ b/src/lua_maplib.c @@ -1235,6 +1235,10 @@ static int mapheaderinfo_get(lua_State *L) lua_pushinteger(L, header->levelflags); else if (fastcmp(field,"menuflags")) lua_pushinteger(L, header->menuflags); + /*else if (fastcmp(field,"automap")) + lua_pushboolean(L, header->automap);*/ + else if (fastcmp(field,"mobj_scale")) + lua_pushfixed(L, header->mobj_scale); // TODO add support for reading numGradedMares and grades else { // Read custom vars now diff --git a/src/p_mobj.c b/src/p_mobj.c index 256e3993..98063a02 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6507,7 +6507,7 @@ void P_MobjThinker(mobj_t *mobj) } // Actor's distance from its Target, or Radius. - radius = FixedDiv(7, mobj->target->scale)*FRACUNIT; + radius = 7*mobj->target->scale; // Switch blue flames to red flames if (mobj->target->player && mobj->type == MT_DRIFT @@ -6532,8 +6532,7 @@ void P_MobjThinker(mobj_t *mobj) } // Shrink if the player shrunk too. - if (mobj->target->player) - mobj->scale = mobj->target->scale; + mobj->scale = mobj->target->scale; P_UnsetThingPosition(mobj); { @@ -8466,9 +8465,8 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) mobj->destscale = mobj->scale; mobj->scalespeed = FRACUNIT/12; - // TODO: Make this a special map header - if ((maptol & TOL_ERZ3) && !(mobj->type == MT_BLACKEGGMAN)) - mobj->destscale = FRACUNIT/2; + if (mapheaderinfo[gamemap-1] && mapheaderinfo[gamemap-1]->mobj_scale != FRACUNIT) //&& !(mobj->type == MT_BLACKEGGMAN) + mobj->destscale = mapheaderinfo[gamemap-1]->mobj_scale; // set subsector and/or block links P_SetThingPosition(mobj); @@ -8737,9 +8735,8 @@ mobj_t *P_SpawnShadowMobj(mobj_t * caster) mobj->destscale = mobj->scale; mobj->scalespeed = FRACUNIT/12; - // TODO: Make this a special map header - if ((maptol & TOL_ERZ3) && !(mobj->type == MT_BLACKEGGMAN)) - mobj->destscale = FRACUNIT/2; + if (mapheaderinfo[gamemap-1] && mapheaderinfo[gamemap-1]->mobj_scale != FRACUNIT) //&& !(mobj->type == MT_BLACKEGGMAN) + mobj->destscale = mapheaderinfo[gamemap-1]->mobj_scale; // set subsector and/or block links P_SetThingPosition(mobj); diff --git a/src/p_setup.c b/src/p_setup.c index ff256703..39eadd08 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -227,6 +227,11 @@ static void P_ClearSingleMapHeaderInfo(INT16 i) mapheaderinfo[num]->menuflags = 0; // TODO grades support for delfile (pfft yeah right) P_DeleteGrades(num); + // SRB2Kart + //DEH_WriteUndoline("AUTOMAP", va("%d", mapheaderinfo[num]->automap), UNDO_NONE); + //mapheaderinfo[num]->automap = false; + DEH_WriteUndoline("MOBJSCALE", va("%d", mapheaderinfo[num]->mobj_scale), UNDO_NONE); + mapheaderinfo[num]->mobj_scale = FRACUNIT; // an even further impossibility, delfile custom opts support mapheaderinfo[num]->customopts = NULL; mapheaderinfo[num]->numCustomOptions = 0;