diff --git a/src/d_player.h b/src/d_player.h index 34eb385c..822ea305 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -276,6 +276,7 @@ typedef enum k_waypoint, // Waypoints. k_starpostwp, // Temporarily stores player waypoint for... some reason. Used when respawning and finishing. k_respawn, // Timer for the DEZ laser respawn effect + k_dropdash, // Charge up for respawn Drop Dash k_throwdir, // Held dir of controls; 1 = forward, 0 = none, -1 = backward (was "player->heldDir") k_lapanimation, // Used to show the lap start wing logo animation @@ -291,7 +292,8 @@ typedef enum k_driftend, // Drift has ended, used to adjust character angle after drift k_driftcharge, // Charge your drift so you can release a burst of speed k_driftboost, // Boost you get from drifting - k_boostcharge, // Charge-up for boosting at the start of the race, or when dropping from respawn + k_boostcharge, // Charge-up for boosting at the start of the race + k_startboost, // Boost you get from start of race or respawn drop dash k_jmp, // In Mario Kart, letting go of the jump button stops the drift k_offroad, // In Super Mario Kart, going offroad has lee-way of about 1 second before you start losing speed k_pogospring, // Pogo spring bounce effect diff --git a/src/dehacked.c b/src/dehacked.c index 2ffaf079..6365453f 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6236,12 +6236,12 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_ITEMICON", // Drift Sparks - "S_DRIFTSPARK1", - "S_DRIFTSPARK2", - "S_DRIFTSPARK3", - "S_DRIFTSPARK4", - "S_DRIFTSPARK5", - "S_DRIFTSPARK6", + "S_DRIFTSPARK_A1", + "S_DRIFTSPARK_A2", + "S_DRIFTSPARK_A3", + "S_DRIFTSPARK_B1", + "S_DRIFTSPARK_C1", + "S_DRIFTSPARK_C2", // Drift Smoke "S_DRIFTDUST1", @@ -7228,7 +7228,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_SPARKLETRAIL", "MT_INVULNFLASH", "MT_WIPEOUTTRAIL", - "MT_DRIFT", + "MT_DRIFTSPARK", "MT_DRIFTDUST", "MT_FAKESHIELD", @@ -7675,6 +7675,7 @@ static const char *const KARTSTUFF_LIST[] = { "WAYPOINT", "STARPOSTWP", "RESPAWN", + "DROPDASH", "THROWDIR", "LAPANIMATION", @@ -7691,6 +7692,7 @@ static const char *const KARTSTUFF_LIST[] = { "DRIFTCHARGE", "DRIFTBOOST", "BOOSTCHARGE", + "STARTBOOST", "JMP", "OFFROAD", "POGOSPRING", diff --git a/src/g_game.c b/src/g_game.c index cacc12a9..68127eaa 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -2347,6 +2347,10 @@ void G_PlayerReborn(INT32 player) // SRB2kart INT32 starpostwp; + INT32 itemtype; + INT32 itemamount; + INT32 itemroulette; + INT32 roulettetype; INT32 bumper; INT32 comebackpoints; INT32 wanted; @@ -2404,10 +2408,39 @@ void G_PlayerReborn(INT32 player) pity = players[player].pity; // SRB2kart - starpostwp = players[player].kartstuff[k_starpostwp]; - bumper = players[player].kartstuff[k_bumper]; - comebackpoints = players[player].kartstuff[k_comebackpoints]; - wanted = players[player].kartstuff[k_wanted]; + if (leveltime <= starttime) + { + itemroulette = 0; + roulettetype = 0; + itemtype = 0; + itemamount = 0; + bumper = (G_BattleGametype() ? cv_kartbumpers.value : 0); + comebackpoints = 0; + wanted = 0; + starpostwp = 0; + } + else + { + starpostwp = players[player].kartstuff[k_starpostwp]; + + itemroulette = (players[player].kartstuff[k_itemroulette] > 0 ? 1 : 0); + roulettetype = players[player].kartstuff[k_roulettetype]; + + if (players[player].kartstuff[k_itemheld]) + { + itemtype = 0; + itemamount = 0; + } + else + { + itemtype = players[player].kartstuff[k_itemtype]; + itemamount = players[player].kartstuff[k_itemamount]; + } + + bumper = players[player].kartstuff[k_bumper]; + comebackpoints = players[player].kartstuff[k_comebackpoints]; + wanted = players[player].kartstuff[k_wanted]; + } p = &players[player]; memset(p, 0, sizeof (*p)); @@ -2464,6 +2497,10 @@ void G_PlayerReborn(INT32 player) // SRB2kart p->kartstuff[k_starpostwp] = starpostwp; // TODO: get these out of kartstuff, it causes desync + p->kartstuff[k_itemroulette] = itemroulette; + p->kartstuff[k_roulettetype] = roulettetype; + p->kartstuff[k_itemtype] = itemtype; + p->kartstuff[k_itemamount] = itemamount; p->kartstuff[k_bumper] = bumper; p->kartstuff[k_comebackpoints] = comebackpoints; p->kartstuff[k_comebacktimer] = comebacktime; diff --git a/src/g_input.c b/src/g_input.c index 2822cc29..279ee56b 100644 --- a/src/g_input.c +++ b/src/g_input.c @@ -29,7 +29,7 @@ consvar_t cv_mousesens = {"mousesens", "35", CV_SAVE, mousesens_cons_t, NULL, 0, consvar_t cv_mousesens2 = {"mousesens2", "35", CV_SAVE, mousesens_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_mouseysens = {"mouseysens", "35", CV_SAVE, mousesens_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_mouseysens2 = {"mouseysens2", "35", CV_SAVE, mousesens_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; -consvar_t cv_controlperkey = {"controlperkey", "One", CV_SAVE, onecontrolperkey_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; +consvar_t cv_controlperkey = {"controlperkey", "Several", CV_SAVE, onecontrolperkey_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; INT32 mousex, mousey; INT32 mlooky; // like mousey but with a custom sensitivity for mlook @@ -1208,6 +1208,7 @@ static const char *gamecontrolname[num_gamecontrols] = "scores", "console", "pause", + "systemmenu", "custom1", "custom2", "custom3", @@ -1283,68 +1284,53 @@ void G_Controldefault(void) gamecontrol[gc_fire ][0] = KEY_SPACE; gamecontrol[gc_lookback ][0] = KEY_LSHIFT; - gamecontrol[gc_aimforward ][1] = KEY_HAT1+0; - gamecontrol[gc_aimbackward][1] = KEY_HAT1+1; - gamecontrol[gc_turnleft ][1] = KEY_HAT1+2; - gamecontrol[gc_turnright ][1] = KEY_HAT1+3; gamecontrol[gc_accelerate ][1] = KEY_JOY1+0; // A - gamecontrol[gc_drift ][1] = KEY_JOY1+1; // X + gamecontrol[gc_lookback ][1] = KEY_JOY1+1; // X gamecontrol[gc_brake ][1] = KEY_JOY1+2; // B - gamecontrol[gc_fire ][1] = KEY_JOY1+4; // LB - gamecontrol[gc_lookback ][1] = KEY_JOY1+5; // RB + gamecontrol[gc_fire ][1] = KEY_JOY1+4; // LB + gamecontrol[gc_drift ][1] = KEY_JOY1+5; // RB // Extra controls gamecontrol[gc_pause ][0] = KEY_PAUSE; gamecontrol[gc_console ][0] = KEY_CONSOLE; gamecontrol[gc_talkkey ][0] = 't'; - gamecontrol[gc_teamkey ][0] = 'y'; + //gamecontrol[gc_teamkey ][0] = 'y'; gamecontrol[gc_scores ][0] = KEY_TAB; gamecontrol[gc_spectate ][0] = '\''; - - gamecontrol[gc_scores ][1] = KEY_JOY1+6; // Back - gamecontrol[gc_spectate ][1] = KEY_JOY1+7; // Start (This is sort of like MP's pause...?) - gamecontrol[gc_lookup ][0] = KEY_PGUP; gamecontrol[gc_lookdown ][0] = KEY_PGDN; gamecontrol[gc_centerview ][0] = KEY_END; gamecontrol[gc_camreset ][0] = KEY_HOME; gamecontrol[gc_camtoggle ][0] = KEY_BACKSPACE; + //gamecontrol[gc_viewpoint ][1] = KEY_JOY1+3; // Y + gamecontrol[gc_pause ][1] = KEY_JOY1+6; // Back + gamecontrol[gc_systemmenu ][0] = KEY_JOY1+7; // Start + gamecontrol[gc_camtoggle ][1] = KEY_HAT1+0; // D-Pad Up + //gamecontrol[gc_screenshot ][1] = KEY_HAT1+1; // D-Pad Down + gamecontrol[gc_talkkey ][1] = KEY_HAT1+2; // D-Pad Left + gamecontrol[gc_scores ][1] = KEY_HAT1+3; // D-Pad Right + // Player 2 controls - gamecontrolbis[gc_aimforward ][0] = KEY_2HAT1+0; - gamecontrolbis[gc_aimbackward][0] = KEY_2HAT1+1; - gamecontrolbis[gc_turnleft ][0] = KEY_2HAT1+2; - gamecontrolbis[gc_turnright ][0] = KEY_2HAT1+3; gamecontrolbis[gc_accelerate ][0] = KEY_2JOY1+0; // A - gamecontrolbis[gc_drift ][0] = KEY_2JOY1+1; // X + gamecontrolbis[gc_lookback ][0] = KEY_2JOY1+1; // X gamecontrolbis[gc_brake ][0] = KEY_2JOY1+2; // B gamecontrolbis[gc_fire ][0] = KEY_2JOY1+4; // LB - gamecontrolbis[gc_lookback ][0] = KEY_2JOY1+5; // RB - gamecontrolbis[gc_spectate ][0] = KEY_2JOY1+7; // Start + gamecontrolbis[gc_drift ][0] = KEY_2JOY1+5; // RB // Player 3 controls - gamecontrol3[gc_aimforward ][0] = KEY_3HAT1+0; - gamecontrol3[gc_aimbackward][0] = KEY_3HAT1+1; - gamecontrol3[gc_turnleft ][0] = KEY_3HAT1+2; - gamecontrol3[gc_turnright ][0] = KEY_3HAT1+3; gamecontrol3[gc_accelerate ][0] = KEY_3JOY1+0; // A - gamecontrol3[gc_drift ][0] = KEY_3JOY1+1; // X + gamecontrol3[gc_lookback ][0] = KEY_3JOY1+1; // X gamecontrol3[gc_brake ][0] = KEY_3JOY1+2; // B gamecontrol3[gc_fire ][0] = KEY_3JOY1+4; // LB - gamecontrol3[gc_lookback ][0] = KEY_3JOY1+5; // RB - gamecontrol3[gc_spectate ][0] = KEY_3JOY1+7; // Start + gamecontrol3[gc_drift ][0] = KEY_3JOY1+5; // RB // Player 4 controls - gamecontrol4[gc_aimforward ][0] = KEY_4HAT1+0; - gamecontrol4[gc_aimbackward][0] = KEY_4HAT1+1; - gamecontrol4[gc_turnleft ][0] = KEY_4HAT1+2; - gamecontrol4[gc_turnright ][0] = KEY_4HAT1+3; gamecontrol4[gc_accelerate ][0] = KEY_4JOY1+0; // A - gamecontrol4[gc_drift ][0] = KEY_4JOY1+1; // X + gamecontrol4[gc_lookback ][0] = KEY_4JOY1+1; // X gamecontrol4[gc_brake ][0] = KEY_4JOY1+2; // B gamecontrol4[gc_fire ][0] = KEY_4JOY1+4; // LB - gamecontrol4[gc_lookback ][0] = KEY_4JOY1+5; // RB - gamecontrol4[gc_spectate ][0] = KEY_4JOY1+7; // Start + gamecontrol4[gc_drift ][0] = KEY_4JOY1+5; // RB } //#endif diff --git a/src/g_input.h b/src/g_input.h index 7e49fff3..6bbadf3e 100644 --- a/src/g_input.h +++ b/src/g_input.h @@ -114,6 +114,7 @@ typedef enum gc_scores, gc_console, gc_pause, + gc_systemmenu, gc_custom1, // Lua scriptable gc_custom2, // Lua scriptable gc_custom3, // Lua scriptable diff --git a/src/info.c b/src/info.c index 389d7651..e7c40cb9 100644 --- a/src/info.c +++ b/src/info.c @@ -2566,14 +2566,16 @@ state_t states[NUMSTATES] = {SPR_RPOP, FF_FULLBRIGHT|2, 5, {NULL}, 0, 0, S_RANDOMITEMPOP4}, // S_RANDOMITEMPOP3 {SPR_RPOP, FF_FULLBRIGHT|3, 5, {NULL}, 0, 0, S_NULL}, // S_RANDOMITEMPOP4 - {SPR_NULL, 0|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_ITEMICON + {SPR_NULL, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_ITEMICON - {SPR_DRIF, 0|FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_DRIFTSPARK2}, // S_DRIFTSPARK1 - {SPR_DRIF, 1|FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_DRIFTSPARK3}, // S_DRIFTSPARK2 - {SPR_DRIF, 2|FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_DRIFTSPARK1}, // S_DRIFTSPARK3 - {SPR_DRIF, 3|FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_DRIFTSPARK5}, // S_DRIFTSPARK4 - {SPR_DRIF, 4|FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_DRIFTSPARK6}, // S_DRIFTSPARK5 - {SPR_DRIF, 5|FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_DRIFTSPARK4}, // S_DRIFTSPARK6 + {SPR_DRIF, FF_FULLBRIGHT|2, 2, {NULL}, 0, 0, S_DRIFTSPARK_A2}, // S_DRIFTSPARK_A1 + {SPR_DRIF, FF_FULLBRIGHT|FF_TRANS20|1, 1, {NULL}, 0, 0, S_DRIFTSPARK_A3}, // S_DRIFTSPARK_A2 + {SPR_DRIF, FF_FULLBRIGHT|FF_TRANS50, 1, {NULL}, 0, 0, S_NULL}, // S_DRIFTSPARK_A3 + + {SPR_DRIF, FF_FULLBRIGHT|1, 2, {NULL}, 0, 0, S_DRIFTSPARK_A2}, // S_DRIFTSPARK_B1 (Loop back to A2) + + {SPR_DRIF, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_DRIFTSPARK_C2}, // S_DRIFTSPARK_C1 + {SPR_DRIF, FF_FULLBRIGHT|FF_TRANS20, 1, {NULL}, 0, 0, S_DRIFTSPARK_A3}, // S_DRIFTSPARK_C2 (Loop back to A3) {SPR_DUST, 0, 3, {NULL}, 0, 0, S_DRIFTDUST2}, // S_DRIFTDUST1 {SPR_DUST, 1, 3, {NULL}, 0, 0, S_DRIFTDUST3}, // S_DRIFTDUST2 @@ -2782,30 +2784,30 @@ state_t states[NUMSTATES] = {SPR_LIGH, 2, 2, {NULL}, 0, 0, S_LIGHTNING4}, // S_LIGHTNING3 {SPR_LIGH, 3, 2, {NULL}, 0, 0, S_NULL}, // S_LIGHTNING4 - {SPR_THNS, 0, 2, {NULL}, 0, 0, S_THUNDERSHIELD2}, // S_THUNDERSHIELD1 - {SPR_THNS, 1, 2, {NULL}, 0, 0, S_THUNDERSHIELD3}, // S_THUNDERSHIELD2 - {SPR_THNS, 2, 2, {NULL}, 0, 0, S_THUNDERSHIELD4}, // S_THUNDERSHIELD3 - {SPR_THNS, 3, 2, {NULL}, 0, 0, S_THUNDERSHIELD5}, // S_THUNDERSHIELD4 - {SPR_THNS, 4, 2, {NULL}, 0, 0, S_THUNDERSHIELD6}, // S_THUNDERSHIELD5 - {SPR_THNS, 5, 2, {NULL}, 0, 0, S_THUNDERSHIELD7}, // S_THUNDERSHIELD6 - {SPR_THNS, 6, 2, {NULL}, 0, 0, S_THUNDERSHIELD8}, // S_THUNDERSHIELD7 - {SPR_THNS, 7, 2, {NULL}, 0, 0, S_THUNDERSHIELD9}, // S_THUNDERSHIELD8 - {SPR_THNS, 8, 2, {NULL}, 0, 0, S_THUNDERSHIELD10}, // S_THUNDERSHIELD9 - {SPR_THNS, 9, 2, {NULL}, 0, 0, S_THUNDERSHIELD11}, // S_THUNDERSHIELD10 - {SPR_THNS, 10, 2, {NULL}, 0, 0, S_THUNDERSHIELD12}, // S_THUNDERSHIELD11 - {SPR_THNS, 11, 2, {NULL}, 0, 0, S_THUNDERSHIELD13}, // S_THUNDERSHIELD12 - {SPR_THNS, 8, 2, {NULL}, 0, 0, S_THUNDERSHIELD14}, // S_THUNDERSHIELD13 - {SPR_THNS, 7, 2, {NULL}, 0, 0, S_THUNDERSHIELD15}, // S_THUNDERSHIELD14 - {SPR_THNS, 6, 2, {NULL}, 0, 0, S_THUNDERSHIELD16}, // S_THUNDERSHIELD15 - {SPR_THNS, 5, 2, {NULL}, 0, 0, S_THUNDERSHIELD17}, // S_THUNDERSHIELD16 - {SPR_THNS, 4, 2, {NULL}, 0, 0, S_THUNDERSHIELD18}, // S_THUNDERSHIELD17 - {SPR_THNS, 3, 2, {NULL}, 0, 0, S_THUNDERSHIELD19}, // S_THUNDERSHIELD18 - {SPR_THNS, 2, 2, {NULL}, 0, 0, S_THUNDERSHIELD20}, // S_THUNDERSHIELD19 - {SPR_THNS, 1, 2, {NULL}, 0, 0, S_THUNDERSHIELD21}, // S_THUNDERSHIELD20 - {SPR_THNS, 0, 2, {NULL}, 0, 0, S_THUNDERSHIELD22}, // S_THUNDERSHIELD21 - {SPR_THNS, 9, 2, {NULL}, 0, 0, S_THUNDERSHIELD23}, // S_THUNDERSHIELD22 - {SPR_THNS, 10, 2, {NULL}, 0, 0, S_THUNDERSHIELD24}, // S_THUNDERSHIELD23 - {SPR_THNS, 11, 2, {NULL}, 0, 0, S_THUNDERSHIELD1}, // S_THUNDERSHIELD24 + {SPR_THNS, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_THUNDERSHIELD2}, // S_THUNDERSHIELD1 + {SPR_THNS, FF_FULLBRIGHT|1, 2, {NULL}, 0, 0, S_THUNDERSHIELD3}, // S_THUNDERSHIELD2 + {SPR_THNS, FF_FULLBRIGHT|2, 2, {NULL}, 0, 0, S_THUNDERSHIELD4}, // S_THUNDERSHIELD3 + {SPR_THNS, FF_FULLBRIGHT|3, 2, {NULL}, 0, 0, S_THUNDERSHIELD5}, // S_THUNDERSHIELD4 + {SPR_THNS, FF_FULLBRIGHT|4, 2, {NULL}, 0, 0, S_THUNDERSHIELD6}, // S_THUNDERSHIELD5 + {SPR_THNS, FF_FULLBRIGHT|5, 2, {NULL}, 0, 0, S_THUNDERSHIELD7}, // S_THUNDERSHIELD6 + {SPR_THNS, FF_FULLBRIGHT|6, 2, {NULL}, 0, 0, S_THUNDERSHIELD8}, // S_THUNDERSHIELD7 + {SPR_THNS, FF_FULLBRIGHT|7, 2, {NULL}, 0, 0, S_THUNDERSHIELD9}, // S_THUNDERSHIELD8 + {SPR_THNS, FF_FULLBRIGHT|8, 2, {NULL}, 0, 0, S_THUNDERSHIELD10}, // S_THUNDERSHIELD9 + {SPR_THNS, FF_FULLBRIGHT|9, 2, {NULL}, 0, 0, S_THUNDERSHIELD11}, // S_THUNDERSHIELD10 + {SPR_THNS, FF_FULLBRIGHT|10, 2, {NULL}, 0, 0, S_THUNDERSHIELD12}, // S_THUNDERSHIELD11 + {SPR_THNS, FF_FULLBRIGHT|11, 2, {NULL}, 0, 0, S_THUNDERSHIELD13}, // S_THUNDERSHIELD12 + {SPR_THNS, FF_FULLBRIGHT|8, 2, {NULL}, 0, 0, S_THUNDERSHIELD14}, // S_THUNDERSHIELD13 + {SPR_THNS, FF_FULLBRIGHT|7, 2, {NULL}, 0, 0, S_THUNDERSHIELD15}, // S_THUNDERSHIELD14 + {SPR_THNS, FF_FULLBRIGHT|6, 2, {NULL}, 0, 0, S_THUNDERSHIELD16}, // S_THUNDERSHIELD15 + {SPR_THNS, FF_FULLBRIGHT|5, 2, {NULL}, 0, 0, S_THUNDERSHIELD17}, // S_THUNDERSHIELD16 + {SPR_THNS, FF_FULLBRIGHT|4, 2, {NULL}, 0, 0, S_THUNDERSHIELD18}, // S_THUNDERSHIELD17 + {SPR_THNS, FF_FULLBRIGHT|3, 2, {NULL}, 0, 0, S_THUNDERSHIELD19}, // S_THUNDERSHIELD18 + {SPR_THNS, FF_FULLBRIGHT|2, 2, {NULL}, 0, 0, S_THUNDERSHIELD20}, // S_THUNDERSHIELD19 + {SPR_THNS, FF_FULLBRIGHT|1, 2, {NULL}, 0, 0, S_THUNDERSHIELD21}, // S_THUNDERSHIELD20 + {SPR_THNS, FF_FULLBRIGHT|0, 2, {NULL}, 0, 0, S_THUNDERSHIELD22}, // S_THUNDERSHIELD21 + {SPR_THNS, FF_FULLBRIGHT|9, 2, {NULL}, 0, 0, S_THUNDERSHIELD23}, // S_THUNDERSHIELD22 + {SPR_THNS, FF_FULLBRIGHT|10, 2, {NULL}, 0, 0, S_THUNDERSHIELD24}, // S_THUNDERSHIELD23 + {SPR_THNS, FF_FULLBRIGHT|11, 2, {NULL}, 0, 0, S_THUNDERSHIELD1}, // S_THUNDERSHIELD24 {SPR_SINK, 0, 1, {A_SmokeTrailer}, MT_SINKTRAIL, 0, S_SINK}, // S_SINK {SPR_SINK, 0|FF_TRANS80|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_SINK_SHIELD}, // S_SINK_SHIELD @@ -14591,9 +14593,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_DRIFT + { // MT_DRIFTSPARK -1, // doomednum - S_DRIFTSPARK1, // spawnstate + S_DRIFTSPARK_B1,// spawnstate 1000, // spawnhealth S_NULL, // seestate sfx_None, // seesound @@ -14608,13 +14610,13 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL, // xdeathstate sfx_None, // deathsound 8, // speed - 64*FRACUNIT, // radius - 64*FRACUNIT, // height + 14*FRACUNIT, // radius + 14*FRACUNIT, // height 0, // display offset 16, // mass 0, // damage sfx_None, // activesound - MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags + MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY, // flags S_NULL // raisestate }, diff --git a/src/info.h b/src/info.h index 9eb88471..53b5809a 100644 --- a/src/info.h +++ b/src/info.h @@ -3083,12 +3083,12 @@ typedef enum state S_ITEMICON, // Drift Sparks - S_DRIFTSPARK1, - S_DRIFTSPARK2, - S_DRIFTSPARK3, - S_DRIFTSPARK4, - S_DRIFTSPARK5, - S_DRIFTSPARK6, + S_DRIFTSPARK_A1, + S_DRIFTSPARK_A2, + S_DRIFTSPARK_A3, + S_DRIFTSPARK_B1, + S_DRIFTSPARK_C1, + S_DRIFTSPARK_C2, // Drift Smoke S_DRIFTDUST1, @@ -4092,7 +4092,7 @@ typedef enum mobj_type MT_SPARKLETRAIL, MT_INVULNFLASH, MT_WIPEOUTTRAIL, - MT_DRIFT, + MT_DRIFTSPARK, MT_DRIFTDUST, MT_FAKESHIELD, diff --git a/src/k_kart.c b/src/k_kart.c index 7db478dd..f21662aa 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1237,7 +1237,7 @@ void K_RespawnChecker(player_t *player) if (player->spectator) return; - if (player->kartstuff[k_respawn] > 3) + if (player->kartstuff[k_respawn] > 1) { player->kartstuff[k_respawn]--; player->mo->momz = 0; @@ -1275,26 +1275,39 @@ void K_RespawnChecker(player_t *player) } } } - - if (player->kartstuff[k_respawn] > 0 && player->kartstuff[k_respawn] <= 3) + else if (player->kartstuff[k_respawn] == 1) { if (!P_IsObjectOnGround(player->mo)) { player->powers[pw_flashing] = 2; - // If you tried to boost while in the air, - // you lose your chance of boosting at all. + + // Sal: That's stupid and prone to accidental usage. + // Let's rip off Mania instead, and turn this into a Drop Dash! + if (cmd->buttons & BT_ACCELERATE) - { - player->powers[pw_flashing] = 0; - player->kartstuff[k_respawn] = 0; - } + player->kartstuff[k_dropdash]++; + else + player->kartstuff[k_dropdash] = 0; + + if (player->kartstuff[k_dropdash] == TICRATE/4) + S_StartSound(player->mo, sfx_ddash); + + if ((player->kartstuff[k_dropdash] >= TICRATE/4) + && (player->kartstuff[k_dropdash] & 1)) + player->mo->colorized = true; + else + player->mo->colorized = false; } else { - player->kartstuff[k_respawn]--; - // Quick! You only have three tics to boost! - if (cmd->buttons & BT_ACCELERATE) - K_DoSneaker(player, true); + if ((cmd->buttons & BT_ACCELERATE) && (player->kartstuff[k_dropdash] >= TICRATE/4)) + { + S_StartSound(player->mo, sfx_s23c); + player->kartstuff[k_startboost] = 50; + } + player->mo->colorized = false; + player->kartstuff[k_dropdash] = 0; + player->kartstuff[k_respawn] = 0; } } } @@ -1479,23 +1492,6 @@ static void K_GetKartBoostPower(player_t *player) else if (player->kartstuff[k_bananadrag] > TICRATE) boostpower = 4*boostpower/5; - if (player->kartstuff[k_growshrinktimer] > 0) // Grow - { - speedboost = max(speedboost, FRACUNIT/5); // + 20% - } - - if (player->kartstuff[k_invincibilitytimer]) // Invincibility - { - speedboost = max(speedboost, 3*(FRACUNIT/8)); // + 37.5% - accelboost = max(accelboost, 3*FRACUNIT); // + 600% - } - - if (player->kartstuff[k_driftboost]) // Drift Boost - { - speedboost = max(speedboost, FRACUNIT/4); // + 25% - accelboost = max(accelboost, 4*FRACUNIT); // + 400% - } - if (player->kartstuff[k_sneakertimer]) // Sneaker { switch (gamespeed) @@ -1513,6 +1509,29 @@ static void K_GetKartBoostPower(player_t *player) accelboost = max(accelboost, 8*FRACUNIT); // + 800% } + if (player->kartstuff[k_invincibilitytimer]) // Invincibility + { + speedboost = max(speedboost, 3*FRACUNIT/8); // + 37.5% + accelboost = max(accelboost, 3*FRACUNIT); // + 300% + } + + if (player->kartstuff[k_growshrinktimer] > 0) // Grow + { + speedboost = max(speedboost, FRACUNIT/5); // + 20% + } + + if (player->kartstuff[k_driftboost]) // Drift Boost + { + speedboost = max(speedboost, FRACUNIT/4); // + 25% + accelboost = max(accelboost, 4*FRACUNIT); // + 400% + } + + if (player->kartstuff[k_startboost]) // Startup Boost + { + speedboost = max(speedboost, FRACUNIT/4); // + 25% + accelboost = max(accelboost, 6*FRACUNIT); // + 300% + } + // don't average them anymore, this would make a small boost and a high boost less useful // just take the highest we want instead @@ -2209,6 +2228,98 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t angle return NULL; } +static void K_SpawnDriftSparks(player_t *player) +{ + fixed_t newx; + fixed_t newy; + //fixed_t ground; + mobj_t *spark; + angle_t travelangle; + INT32 i; + + I_Assert(player != NULL); + I_Assert(player->mo != NULL); + I_Assert(!P_MobjWasRemoved(player->mo)); + + if (leveltime % 2 == 1) + return; + + if (!P_IsObjectOnGround(player->mo)) + return; + + if (!player->kartstuff[k_drift] || player->kartstuff[k_driftcharge] < K_GetKartDriftSparkValue(player)) + return; + + /*if (player->mo->eflags & MFE_VERTICALFLIP) + ground = player->mo->ceilingz - FixedMul(mobjinfo[MT_DRIFTSPARK].height, player->mo->scale); + else + ground = player->mo->floorz;*/ + + travelangle = player->mo->angle-(ANGLE_45/5)*player->kartstuff[k_drift]; + + for (i = 0; i < 2; i++) + { + newx = player->mo->x + P_ReturnThrustX(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(32*FRACUNIT, player->mo->scale)); + newy = player->mo->y + P_ReturnThrustY(player->mo, travelangle + ((i&1) ? -1 : 1)*ANGLE_135, FixedMul(32*FRACUNIT, player->mo->scale)); +/*#ifdef ESLOPE + if (player->mo->standingslope) + { + ground = P_GetZAt(player->mo->standingslope, newx, newy); + if (player->mo->eflags & MFE_VERTICALFLIP) + ground -= FixedMul(mobjinfo[MT_DRIFTSPARK].height, player->mo->scale); + } +#endif*/ + spark = P_SpawnMobj(newx, newy, player->mo->z, MT_DRIFTSPARK); + + P_SetTarget(&spark->target, player->mo); + spark->angle = travelangle-(ANGLE_45/5)*player->kartstuff[k_drift]; + spark->destscale = player->mo->scale; + P_SetScale(spark, player->mo->scale); + + spark->momx = player->mo->momx/2; + spark->momy = player->mo->momy/2; + //spark->momz = player->mo->momz/2; + + if (player->kartstuff[k_driftcharge] >= K_GetKartDriftSparkValue(player)*2) + { + if (player->kartstuff[k_driftcharge] <= (K_GetKartDriftSparkValue(player)*2)+(32*3)) + spark->color = SKINCOLOR_DUSK; // transition + else + spark->color = SKINCOLOR_RUBY; + } + else + spark->color = SKINCOLOR_SAPPHIRE; + + if ((player->kartstuff[k_drift] > 0 && player->cmd.driftturn > 0) // Inward drifts + || (player->kartstuff[k_drift] < 0 && player->cmd.driftturn < 0)) + { + if ((player->kartstuff[k_drift] < 0 && (i & 1)) + || (player->kartstuff[k_drift] > 0 && !(i & 1))) + P_SetMobjState(spark, S_DRIFTSPARK_A1); + else if ((player->kartstuff[k_drift] < 0 && !(i & 1)) + || (player->kartstuff[k_drift] > 0 && (i & 1))) + P_SetMobjState(spark, S_DRIFTSPARK_C1); + } + else if ((player->kartstuff[k_drift] > 0 && player->cmd.driftturn < 0) // Outward drifts + || (player->kartstuff[k_drift] < 0 && player->cmd.driftturn > 0)) + { + if ((player->kartstuff[k_drift] < 0 && (i & 1)) + || (player->kartstuff[k_drift] > 0 && !(i & 1))) + P_SetMobjState(spark, S_DRIFTSPARK_C1); + else if ((player->kartstuff[k_drift] < 0 && !(i & 1)) + || (player->kartstuff[k_drift] > 0 && (i & 1))) + P_SetMobjState(spark, S_DRIFTSPARK_A1); + } + + spark->flags2 = (spark->flags2 & ~MF2_DONTDRAW)|(player->mo->eflags & MF2_DONTDRAW); + spark->eflags = (spark->eflags & ~MFE_VERTICALFLIP)|(player->mo->eflags & MFE_VERTICALFLIP); + spark->eflags = (spark->eflags & ~MFE_DRAWONLYFORP1)|(player->mo->eflags & MFE_DRAWONLYFORP1); + spark->eflags = (spark->eflags & ~MFE_DRAWONLYFORP2)|(player->mo->eflags & MFE_DRAWONLYFORP2); + spark->eflags = (spark->eflags & ~MFE_DRAWONLYFORP3)|(player->mo->eflags & MFE_DRAWONLYFORP3); + spark->eflags = (spark->eflags & ~MFE_DRAWONLYFORP4)|(player->mo->eflags & MFE_DRAWONLYFORP4); + } +} + void K_SpawnBoostTrail(player_t *player) { fixed_t newx; @@ -2721,9 +2832,10 @@ void K_DoSneaker(player_t *player, boolean doPFlag) player->kartstuff[k_sneakertimer] = sneakertime; if (doPFlag) + { player->pflags |= PF_ATTACKDOWN; - - K_PlayTauntSound(player->mo); + K_PlayTauntSound(player->mo); + } K_GetKartBoostPower(player); if (player->kartstuff[k_speedboost] > prevboost) @@ -3489,6 +3601,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) if (player->kartstuff[k_driftboost]) player->kartstuff[k_driftboost]--; + if (player->kartstuff[k_startboost]) + player->kartstuff[k_startboost]--; + if (player->kartstuff[k_invincibilitytimer]) player->kartstuff[k_invincibilitytimer]--; @@ -3901,8 +4016,8 @@ static void K_KartDrift(player_t *player, boolean onground) } // This spawns the drift sparks - if (player->kartstuff[k_driftcharge] < dsone && player->kartstuff[k_driftcharge] + driftadditive >= dsone) - P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_DRIFT)->target = player->mo; + if (player->kartstuff[k_driftcharge] + driftadditive >= dsone) + K_SpawnDriftSparks(player); player->kartstuff[k_driftcharge] += driftadditive; player->kartstuff[k_driftend] = 0; @@ -4677,16 +4792,24 @@ void K_MoveKartPlayer(player_t *player, boolean onground) // Get an instant boost! else if (player->kartstuff[k_boostcharge] <= 50) { - player->kartstuff[k_sneakertimer] = -((21*(player->kartstuff[k_boostcharge]*player->kartstuff[k_boostcharge]))/425)+131; // max time is 70, min time is 7; yay parabooolas - if (!player->kartstuff[k_floorboost] || player->kartstuff[k_floorboost] == 3) + player->kartstuff[k_startboost] = (50-player->kartstuff[k_boostcharge])+20; + + if (player->kartstuff[k_boostcharge] <= 36) { - if (player->kartstuff[k_sneakertimer] >= 70) - S_StartSound(player->mo, sfx_s25f); // Special sound for the perfect start boost! - else if (player->kartstuff[k_sneakertimer] >= sneakertime) - S_StartSound(player->mo, sfx_cdfm01); // Sneaker boost sound for big boost - else - S_StartSound(player->mo, sfx_s23c); // Drift boost sound for small boost + player->kartstuff[k_startboost] = 0; + K_DoSneaker(player, false); + player->kartstuff[k_sneakertimer] = 70; // PERFECT BOOST!! + + if (!player->kartstuff[k_floorboost] || player->kartstuff[k_floorboost] == 3) // Let everyone hear this one + S_StartSound(player->mo, sfx_s25f); } + else if ((!player->kartstuff[k_floorboost] || player->kartstuff[k_floorboost] == 3) && P_IsLocalPlayer(player)) + { + if (player->kartstuff[k_boostcharge] <= 40) + S_StartSound(player->mo, sfx_cdfm01); // You were almost there! + else + S_StartSound(player->mo, sfx_s23c); // Nope, better luck next time. + } } // You overcharged your engine? Those things are expensive!!! else if (player->kartstuff[k_boostcharge] > 50) @@ -4896,6 +5019,8 @@ void K_CheckSpectateStatus(void) return; if (numingame < 2 || leveltime < starttime || mapreset) // Allow if the match hasn't started yet continue; + if (leveltime > 20*TICRATE) // DON'T allow if the match is 20 seconds in + return; if (G_RaceGametype() && players[i].laps) // DON'T allow if the race is at 2 laps return; continue; @@ -5551,6 +5676,9 @@ static void K_drawKartItem(void) case KITEM_SAD: localpatch = kp_sadface[offset]; break; default: return; } + + if (stplyr->kartstuff[k_itemheld] && !(leveltime & 1)) + localpatch = kp_nodraw; } } diff --git a/src/m_menu.c b/src/m_menu.c index f7fe1e84..e697b915 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -1092,12 +1092,13 @@ static menuitem_t OP_MoveControlsMenu[] = {IT_CONTROL, NULL, "Talk key", M_ChangeControl, gc_talkkey }, //{IT_CONTROL, NULL, "Team-Talk key", M_ChangeControl, gc_teamkey }, {IT_CONTROL, NULL, "Rankings/Scores", M_ChangeControl, gc_scores }, + {IT_CONTROL, NULL, "Open/Close Menu (ESC)", M_ChangeControl, gc_systemmenu}, {IT_CONTROL, NULL, "Pause", M_ChangeControl, gc_pause }, {IT_CONTROL, NULL, "Console", M_ChangeControl, gc_console }, - {IT_SUBMENU | IT_STRING, NULL, "Gamepad Options...", &OP_Joystick1Def, 112}, - {IT_SUBMENU | IT_STRING, NULL, "Spectator Controls...", &OP_SpectateControlsDef, 120}, - {IT_SUBMENU | IT_STRING, NULL, "Custom Lua Actions...", &OP_CustomControlsDef, 128}, + {IT_SUBMENU | IT_STRING, NULL, "Gamepad Options...", &OP_Joystick1Def, 120}, + {IT_SUBMENU | IT_STRING, NULL, "Spectator Controls...", &OP_SpectateControlsDef, 128}, + {IT_SUBMENU | IT_STRING, NULL, "Custom Lua Actions...", &OP_CustomControlsDef, 136}, }; static menuitem_t OP_SpectateControlsMenu[] = @@ -2467,11 +2468,14 @@ boolean M_Responder(event_t *ev) if (ch == -1) return false; + else if (ch == gamecontrol[gc_systemmenu][0]) // allow remappable ESC key + ch = KEY_ESCAPE; // F-Keys if (!menuactive) { noFurtherInput = true; + switch (ch) { case KEY_F1: // Help key diff --git a/src/p_inter.c b/src/p_inter.c index aab44b5f..4cf6530c 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -1770,7 +1770,6 @@ static void P_HitDeathMessages(player_t *player, mobj_t *inflictor, mobj_t *sour str = M_GetText("%s%s's tagging hand %s %s.\n"); break; case MT_SPINFIRE: - case MT_SNEAKERTRAIL: str = M_GetText("%s%s's elemental fire trail %s %s.\n"); break; case MT_THROWNBOUNCE: diff --git a/src/p_mobj.c b/src/p_mobj.c index baf0f1f2..59b5c6cf 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -6617,110 +6617,6 @@ void P_MobjThinker(mobj_t *mobj) return; break; //{ SRB2kart mobs - case MT_DRIFT: - { - if (mobj->target && mobj->target->player && mobj->target->player->mo && mobj->target->player->health > 0 && !mobj->target->player->spectator) - { - fixed_t HEIGHT; - fixed_t radius; - - fixed_t dsone = K_GetKartDriftSparkValue(mobj->target->player); - fixed_t dstwo = dsone*2; - - if (mobj->target->player->kartstuff[k_driftcharge] < dsone) - { - P_RemoveMobj(mobj); - return; - } - - if (mobj->target->player->kartstuff[k_hyudorotimer] > 0) - { - if (splitscreen) - { - if (leveltime & 1) - mobj->flags2 |= MF2_DONTDRAW; - else - mobj->flags2 &= ~MF2_DONTDRAW; - - if (mobj->target->player->kartstuff[k_hyudorotimer] >= (1*TICRATE/2) && mobj->target->player->kartstuff[k_hyudorotimer] <= hyudorotime-(1*TICRATE/2)) - { - if (mobj->target->player == &players[secondarydisplayplayer]) - mobj->eflags |= MFE_DRAWONLYFORP2; - else if (mobj->target->player == &players[thirddisplayplayer] && splitscreen > 1) - mobj->eflags |= MFE_DRAWONLYFORP3; - else if (mobj->target->player == &players[fourthdisplayplayer] && splitscreen > 2) - mobj->eflags |= MFE_DRAWONLYFORP4; - else - mobj->eflags |= MFE_DRAWONLYFORP1; - } - else - mobj->eflags &= ~(MFE_DRAWONLYFORP1|MFE_DRAWONLYFORP2|MFE_DRAWONLYFORP3|MFE_DRAWONLYFORP4); - } - else - { - if (mobj->target->player == &players[displayplayer] - || (mobj->target->player != &players[displayplayer] - && (mobj->target->player->kartstuff[k_hyudorotimer] < (1*TICRATE/2) || mobj->target->player->kartstuff[k_hyudorotimer] > hyudorotime-(1*TICRATE/2)))) - { - if (leveltime & 1) - mobj->flags2 |= MF2_DONTDRAW; - else - mobj->flags2 &= ~MF2_DONTDRAW; - } - else - mobj->flags2 |= MF2_DONTDRAW; - } - } - else if (mobj->target->player->kartstuff[k_hyudorotimer] == 0) - { - mobj->flags2 &= ~MF2_DONTDRAW; - mobj->eflags &= ~(MFE_DRAWONLYFORP1|MFE_DRAWONLYFORP2|MFE_DRAWONLYFORP3|MFE_DRAWONLYFORP4); - } - - // Actor's distance from its Target, or Radius. - radius = 7*mobj->target->scale; - - // Switch blue flames to red flames - if (mobj->target->player && mobj->type == MT_DRIFT - && mobj->target->player->kartstuff[k_driftcharge] >= dstwo - && !(mobj->state >= &states[S_DRIFTSPARK4] && mobj->state <= &states[S_DRIFTSPARK6])) - P_SetMobjStateNF(mobj, S_DRIFTSPARK4); - - // Get the angle - if (mobj->target->player) - mobj->angle = ANGLE_180 + mobj->target->player->frameangle; - - // If the player is on the ceiling, then flip - if (mobj->target->eflags & MFE_VERTICALFLIP) - { - mobj->eflags |= MFE_VERTICALFLIP; - HEIGHT = (16<eflags &= ~MFE_VERTICALFLIP; - HEIGHT = 0; - } - - // Shrink if the player shrunk too. - mobj->scale = mobj->target->scale; - - P_UnsetThingPosition(mobj); - { - const angle_t fa = mobj->angle>>ANGLETOFINESHIFT; - mobj->x = mobj->target->x + FixedMul(finecosine[fa],radius); - mobj->y = mobj->target->y + FixedMul(finesine[fa],radius); - mobj->z = mobj->target->z - HEIGHT; - P_SetThingPosition(mobj); - } - } - else - { - P_RemoveMobj(mobj); - return; - } - break; - } case MT_ORBINAUT_SHIELD: // Kart orbit/trail items case MT_JAWZ_SHIELD: case MT_BANANA_SHIELD: @@ -7028,7 +6924,15 @@ void P_MobjThinker(mobj_t *mobj) break; } - mobj->tracer->flags2 &= ~MF2_DONTDRAW; + if (mobj->target->player->kartstuff[k_itemheld]) + { + if (leveltime & 1) + mobj->tracer->flags2 &= ~MF2_DONTDRAW; + else + mobj->tracer->flags2 |= MF2_DONTDRAW; + } + else + mobj->tracer->flags2 &= ~MF2_DONTDRAW; } else { diff --git a/src/p_user.c b/src/p_user.c index 7c7253f6..f499b7ec 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -8394,8 +8394,8 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall // SRB2Kart: set camera panning if (player->kartstuff[k_drift] != 0) { - fixed_t panmax = (camdist/5); - pan = min(player->kartstuff[k_driftcharge], K_GetKartDriftSparkValue(player)) * panmax / K_GetKartDriftSparkValue(player); + fixed_t panmax = (dist/5); + pan = FixedDiv(FixedMul(min((fixed_t)player->kartstuff[k_driftcharge], K_GetKartDriftSparkValue(player)), panmax), K_GetKartDriftSparkValue(player)); if (pan > panmax) pan = panmax; if (player->kartstuff[k_drift] < 0) @@ -9285,7 +9285,7 @@ void P_PlayerThink(player_t *player) #if 1 // "Blur" a bit when you have speed shoes and are going fast enough if ((player->powers[pw_super] || player->powers[pw_sneakers] - || player->kartstuff[k_driftboost] || player->kartstuff[k_sneakertimer]) && !player->kartstuff[k_invincibilitytimer] // SRB2kart + || player->kartstuff[k_driftboost] || player->kartstuff[k_sneakertimer] || player->kartstuff[k_startboost]) && !player->kartstuff[k_invincibilitytimer] // SRB2kart && (player->speed + abs(player->mo->momz)) > FixedMul(20*FRACUNIT,player->mo->scale)) { mobj_t *gmobj = P_SpawnGhostMobj(player->mo); @@ -9434,6 +9434,7 @@ void P_PlayerThink(player_t *player) if (!(player->pflags & PF_NIGHTSMODE || player->kartstuff[k_hyudorotimer] // SRB2kart - fixes Hyudoro not flashing when it should. || player->kartstuff[k_growshrinktimer] > 0 // Grow doesn't flash either. + || player->kartstuff[k_respawn] // Respawn timer (for drop dash effect) || (G_BattleGametype() && player->kartstuff[k_bumper] <= 0 && player->kartstuff[k_comebacktimer]) || leveltime < starttime)) // Level intro { diff --git a/src/sounds.c b/src/sounds.c index b68c8afa..7c69eed7 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -811,6 +811,7 @@ sfxinfo_t S_sfx[NUMSFX] = {"noooo1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"noooo2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"hogbom", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR}, + {"ddash", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR}, {"mcitm1", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR}, {"dbgsal", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR}, diff --git a/src/sounds.h b/src/sounds.h index 86319c33..13669e3a 100644 --- a/src/sounds.h +++ b/src/sounds.h @@ -883,6 +883,7 @@ typedef enum sfx_noooo1, sfx_noooo2, sfx_hogbom, + sfx_ddash, sfx_mcitm1, sfx_dbgsal, diff --git a/src/w_wad.c b/src/w_wad.c index 9df2065f..89fdadde 100644 --- a/src/w_wad.c +++ b/src/w_wad.c @@ -782,7 +782,12 @@ static size_t W_RawReadLumpHeader(UINT16 wad, UINT16 lump, void *dest, size_t si && sigcheck[5] == 0x0a && sigcheck[6] == 0x1a && sigcheck[7] == 0x0a) - I_Error("W_Wad: Tried to cache a .PNG - have you tried converting to Doom or Flat (raw) image formats?"); + { + char pnglump[9]; + strncpy(pnglump, l->name, 8); + pnglump[8] = '\0'; + I_Error("W_Wad: Lump \"%s\" is a .PNG - have you tried converting to Doom or Flat (raw) image formats?", pnglump); + } #undef sigcheck #endif