Merge branch 'sal-misc' of https://git.magicalgirl.moe/KartKrew/Kart.git into itemdrop

# Conflicts:
#	src/info.c
#	src/sounds.c
#	src/sounds.h
This commit is contained in:
toaster 2018-09-12 15:04:53 +01:00
commit 6f6fcc9615
15 changed files with 317 additions and 244 deletions

View File

@ -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

View File

@ -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",

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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
},

View File

@ -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,

View File

@ -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;
}
}

View File

@ -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

View File

@ -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:

View File

@ -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<<FRACBITS);
}
else
{
mobj->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
{

View File

@ -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
{

View File

@ -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},

View File

@ -883,6 +883,7 @@ typedef enum
sfx_noooo1,
sfx_noooo2,
sfx_hogbom,
sfx_ddash,
sfx_mcitm1,
sfx_dbgsal,

View File

@ -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