Redid control names, some item code, start of drift shenanigans

This commit is contained in:
ZTsukei 2016-08-20 22:15:06 -04:00
parent d631d0ef04
commit 3a3180ce05
25 changed files with 3561 additions and 335 deletions

View File

@ -191,7 +191,7 @@ void B_KeysToTiccmd(mobj_t *mo, ticcmd_t *cmd, boolean forward, boolean backward
if (jump)
cmd->buttons |= BT_JUMP;
if (spin)
cmd->buttons |= BT_USE;
cmd->buttons |= BT_BRAKE;
}
void B_MoveBlocked(player_t *player)

View File

@ -824,6 +824,8 @@ static void IdentifyVersion(void)
// SRB2kart - Add graphics (temp)
D_AddFile(va(pandf,srb2waddir,"AllKartGraphics.wad"));
D_AddFile(va(pandf,srb2waddir,"AllKartChars.wad"));
D_AddFile(va(pandf,srb2waddir,"AllKartSounds.wad"));
#if !defined (HAVE_SDL) || defined (HAVE_MIXER)
{

View File

@ -234,6 +234,7 @@ typedef enum
typedef enum
{
// Basic gameplay things
k_introcam, // Something to do with the map intro
k_position, // Used for Kart positions, mostly for deterministic stuff
k_playerahead, // Is someone ahead of me or not?
k_oldposition, // Used for taunting when you pass someone
@ -252,11 +253,11 @@ typedef enum
k_drift, // Drifting Left or Right, plus a bigger counter = sharper turn
k_driftcharge, // Charge your drift so you can release a burst of speed
k_boostcharge, // Charge-up for boosting at the start of the race, or when Lakitu drops you
k_jmp, // In Mario Kart, letting go of the jump button stops the drift
k_lakitu, // > 0 = Lakitu fishing, < 0 = Lakitu lap counter (was "player->airtime") // NOTE: Check for ->lakitu, replace with this
k_itemroulette, // Used for the roulette when deciding what item to give you (was "pw_kartitem")
k_itemslot, // If you have X item, and kartitem chose X too, save it
k_itemclose, // Used to animate the item window closing (was "pw_psychic")
// Some items use timers for their duration or effects

View File

@ -27,16 +27,16 @@ typedef enum
// First 4 bits are weapon change info, DO NOT USE!
BT_WEAPONMASK = 0x0F, //our first four bits.
BT_WEAPONNEXT = 1<<4,
BT_WEAPONPREV = 1<<5,
BT_DRIFTLEFT = 1<<4, // Drift Left // BT_WEAPONNEXT
BT_DRIFTRIGHT = 1<<5, // Drift Right // BT_WEAPONPREV
BT_ATTACK = 1<<6, // shoot rings
BT_USE = 1<<7, // spin
BT_CAMLEFT = 1<<8, // turn camera left
BT_CAMRIGHT = 1<<9, // turn camera right
BT_TOSSFLAG = 1<<10,
BT_ATTACK = 1<<6, // use kart item // SRB2kart
BT_BRAKE = 1<<7, // brake // BT_USE
BT_FORWARD = 1<<8, // toss item forward // BT_CAMLEFT
BT_BACKWARD = 1<<9, // drop item behind // BT_CAMRIGHT
BT_SPECTATE = 1<<10, // toggle spectate // BT_TOSSFLAG
BT_JUMP = 1<<11,
BT_FIRENORMAL = 1<<12, // Fire a normal ring no matter what
BT_ACCELERATE = 1<<12, // Accelerate // BT_FIRENORMAL
BT_CUSTOM1 = 1<<13,
BT_CUSTOM2 = 1<<14,

View File

@ -1698,6 +1698,7 @@ static actionpointer_t actionpointers[] =
{{A_DropMine}, "A_DROPMINE"},
{{A_FishJump}, "A_FISHJUMP"},
{{A_ThrownRing}, "A_THROWNRING"},
{{A_GrenadeRing}, "A_GRENADERING"}, // SRB2kart
{{A_SetSolidSteam}, "A_SETSOLIDSTEAM"},
{{A_UnsetSolidSteam}, "A_UNSETSOLIDSTEAM"},
{{A_SignPlayer}, "A_SIGNPLAYER"},
@ -1800,6 +1801,8 @@ static actionpointer_t actionpointers[] =
{{A_DualAction}, "A_DUALACTION"},
{{A_RemoteAction}, "A_REMOTEACTION"},
{{A_ToggleFlameJet}, "A_TOGGLEFLAMEJET"},
{{A_RedShellChase}, "A_REDSHELLCHASE"}, // SRB2kart
{{A_BobombExplode}, "A_BOBOMBEXPLODE"}, // SRB2kart
{{A_OrbitNights}, "A_ORBITNIGHTS"},
{{A_GhostMe}, "A_GHOSTME"},
{{A_SetObjectState}, "A_SETOBJECTSTATE"},
@ -7379,17 +7382,17 @@ struct {
{"DI_SOUTHEAST",DI_SOUTHEAST},
{"NUMDIRS",NUMDIRS},
// Buttons (ticcmd_t)
// Buttons (ticcmd_t) // SRB2kart
{"BT_WEAPONMASK",BT_WEAPONMASK}, //our first four bits.
{"BT_WEAPONNEXT",BT_WEAPONNEXT},
{"BT_WEAPONPREV",BT_WEAPONPREV},
{"BT_DRIFTLEFT",BT_DRIFTLEFT},
{"BT_DRIFTRIGHT",BT_DRIFTRIGHT},
{"BT_ATTACK",BT_ATTACK}, // shoot rings
{"BT_USE",BT_USE}, // spin
{"BT_CAMLEFT",BT_CAMLEFT}, // turn camera left
{"BT_CAMRIGHT",BT_CAMRIGHT}, // turn camera right
{"BT_TOSSFLAG",BT_TOSSFLAG},
{"BT_BRAKE",BT_BRAKE}, // brake
{"BT_FORWARD",BT_FORWARD}, // turn camera left
{"BT_BACKWARD",BT_BACKWARD}, // turn camera right
{"BT_SPECTATE",BT_SPECTATE},
{"BT_JUMP",BT_JUMP},
{"BT_FIRENORMAL",BT_FIRENORMAL}, // Fire a normal ring no matter what
{"BT_ACCELERATE",BT_ACCELERATE}, // Fire a normal ring no matter what
{"BT_CUSTOM1",BT_CUSTOM1}, // Lua customizable
{"BT_CUSTOM2",BT_CUSTOM2}, // Lua customizable
{"BT_CUSTOM3",BT_CUSTOM3}, // Lua customizable

View File

@ -997,7 +997,7 @@ static const char *credits[] = {
"",
"\1Sprite Artists",
"Odi \"Iceman404\" Atunzu",
"Victor \"VAdaPEGA\" Ara\x1Fjo", // Araújo -- sorry for our limited font! D:
"Victor \"VAdaPEGA\" Ara\x1Fjo", // Araújo -- sorry for our limited font! D:
"Jim \"MotorRoach\" DeMello",
"Desmond \"Blade\" DesJardins",
"Sherman \"CoatRack\" DesJardins",
@ -1847,7 +1847,7 @@ void F_CutsceneTicker(void)
if (netgame && i != serverplayer && i != adminplayer)
continue;
if (players[i].cmd.buttons & BT_USE)
if (players[i].cmd.buttons & BT_BRAKE || players[i].cmd.buttons & BT_ACCELERATE) // SRB2kart
{
keypressed = false;
cutscene_boostspeed = 1;

View File

@ -947,7 +947,7 @@ angle_t localangle, localangle2;
static fixed_t forwardmove[2] = {25<<FRACBITS>>16, 50<<FRACBITS>>16};
static fixed_t sidemove[2] = {25<<FRACBITS>>16, 50<<FRACBITS>>16}; // faster!
static fixed_t angleturn[3] = {640, 1280, 320}; // + slow turn
static fixed_t angleturn[3] = {400/NEWTICRATERATIO, 800/NEWTICRATERATIO, 200/NEWTICRATERATIO}; // + slow turn
void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
{
@ -1030,9 +1030,9 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
}
else
{
if (turnright)
if (turnright && !(turnleft))
cmd->angleturn = (INT16)(cmd->angleturn - angleturn[tspeed]);
else if (turnleft)
else if (turnleft && !(turnright))
cmd->angleturn = (INT16)(cmd->angleturn + angleturn[tspeed]);
if (analogjoystickmove && axis != 0)
@ -1073,10 +1073,12 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
if (PLAYER1INPUTDOWN(gc_strafeleft))
side -= sidemove[speed];
if (PLAYER1INPUTDOWN(gc_weaponnext))
/* // SRB2kart - these aren't used in kart
if (PLAYER1INPUTDOWN(gc_driftleft))
cmd->buttons |= BT_WEAPONNEXT; // Next Weapon
if (PLAYER1INPUTDOWN(gc_weaponprev))
if (PLAYER1INPUTDOWN(gc_driftright))
cmd->buttons |= BT_WEAPONPREV; // Previous Weapon
*/
#if NUM_WEAPONS > 10
"Add extra inputs to g_input.h/gamecontrols_e"
@ -1097,11 +1099,11 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
// fire normal with any button/key
axis = JoyAxis(AXISFIRENORMAL);
if (PLAYER1INPUTDOWN(gc_firenormal) || (cv_usejoystick.value && axis > 0))
cmd->buttons |= BT_FIRENORMAL;
if (PLAYER1INPUTDOWN(gc_accelerate) || (cv_usejoystick.value && axis > 0))
cmd->buttons |= BT_ACCELERATE;
if (PLAYER1INPUTDOWN(gc_tossflag))
cmd->buttons |= BT_TOSSFLAG;
if (PLAYER1INPUTDOWN(gc_spectate))
cmd->buttons |= BT_SPECTATE;
// Lua scriptable buttons
if (PLAYER1INPUTDOWN(gc_custom1))
@ -1112,22 +1114,22 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
cmd->buttons |= BT_CUSTOM3;
// use with any button/key
if (PLAYER1INPUTDOWN(gc_use))
cmd->buttons |= BT_USE;
if (PLAYER1INPUTDOWN(gc_brake))
cmd->buttons |= BT_BRAKE;
// Camera Controls
if (cv_debug || cv_analog.value || demoplayback || objectplacing || player->pflags & PF_NIGHTSMODE)
{
if (PLAYER1INPUTDOWN(gc_camleft))
cmd->buttons |= BT_CAMLEFT;
if (PLAYER1INPUTDOWN(gc_camright))
cmd->buttons |= BT_CAMRIGHT;
if (PLAYER1INPUTDOWN(gc_aimforward))
cmd->buttons |= BT_FORWARD;
if (PLAYER1INPUTDOWN(gc_aimbackward))
cmd->buttons |= BT_BACKWARD;
}
if (PLAYER1INPUTDOWN(gc_camreset))
if (PLAYER1INPUTDOWN(gc_lookback))
{
if (camera.chase && !resetdown)
P_ResetCamera(&players[displayplayer], &camera);
P_ResetCamera(&players[displayplayer], &camera); // TODO: Replace with a camflip
resetdown = true;
}
else
@ -1222,6 +1224,20 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
cmd->forwardmove = (SINT8)(cmd->forwardmove + forward);
cmd->sidemove = (SINT8)(cmd->sidemove + side);
//{ SRB2kart - Drift support
axis = JoyAxis(AXISTURN);
if (turnleft || axis < 0) // Drifting to the left
cmd->buttons |= BT_DRIFTLEFT;
else
cmd->buttons &= ~BT_DRIFTLEFT;
if (turnright || axis > 0) // Drifting to the right
cmd->buttons |= BT_DRIFTRIGHT;
else
cmd->buttons &= ~BT_DRIFTRIGHT;
//}
if (cv_analog.value) {
cmd->angleturn = (INT16)(thiscam->angle >> 16);
if (player->awayviewtics)
@ -1229,7 +1245,15 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics)
}
else
{
localangle += (cmd->angleturn<<16);
// SRB2kart
INT32 turnspeed;
if (players[consoleplayer].mo && (players[consoleplayer].kartstuff[k_introcam] > 1 || players[consoleplayer].speed == 0))
turnspeed = 0;
else
turnspeed = 16;
localangle += (cmd->angleturn<<turnspeed); // << 16
cmd->angleturn = (INT16)(localangle >> 16);
}
@ -1364,10 +1388,12 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics)
if (PLAYER2INPUTDOWN(gc_strafeleft))
side -= sidemove[speed];
if (PLAYER2INPUTDOWN(gc_weaponnext))
/* // SRB2kart - these aren't used in kart
if (PLAYER2INPUTDOWN(gc_driftleft))
cmd->buttons |= BT_WEAPONNEXT; // Next Weapon
if (PLAYER2INPUTDOWN(gc_weaponprev))
if (PLAYER2INPUTDOWN(gc_driftright))
cmd->buttons |= BT_WEAPONPREV; // Previous Weapon
*/
//use the four avaliable bits to determine the weapon.
cmd->buttons &= ~BT_WEAPONMASK;
@ -1385,11 +1411,11 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics)
// fire normal with any button/key
axis = Joy2Axis(AXISFIRENORMAL);
if (PLAYER2INPUTDOWN(gc_firenormal) || (cv_usejoystick2.value && axis > 0))
cmd->buttons |= BT_FIRENORMAL;
if (PLAYER2INPUTDOWN(gc_accelerate) || (cv_usejoystick2.value && axis > 0))
cmd->buttons |= BT_ACCELERATE;
if (PLAYER2INPUTDOWN(gc_tossflag))
cmd->buttons |= BT_TOSSFLAG;
if (PLAYER2INPUTDOWN(gc_spectate))
cmd->buttons |= BT_SPECTATE;
// Lua scriptable buttons
if (PLAYER2INPUTDOWN(gc_custom1))
@ -1400,22 +1426,22 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics)
cmd->buttons |= BT_CUSTOM3;
// use with any button/key
if (PLAYER2INPUTDOWN(gc_use))
cmd->buttons |= BT_USE;
if (PLAYER2INPUTDOWN(gc_brake))
cmd->buttons |= BT_BRAKE;
// Camera Controls
if (cv_debug || cv_analog2.value || player->pflags & PF_NIGHTSMODE)
{
if (PLAYER2INPUTDOWN(gc_camleft))
cmd->buttons |= BT_CAMLEFT;
if (PLAYER2INPUTDOWN(gc_camright))
cmd->buttons |= BT_CAMRIGHT;
if (PLAYER2INPUTDOWN(gc_aimforward))
cmd->buttons |= BT_FORWARD;
if (PLAYER2INPUTDOWN(gc_aimbackward))
cmd->buttons |= BT_BACKWARD;
}
if (PLAYER2INPUTDOWN(gc_camreset))
if (PLAYER2INPUTDOWN(gc_lookback))
{
if (camera2.chase && !resetdown)
P_ResetCamera(&players[secondarydisplayplayer], &camera2);
P_ResetCamera(&players[secondarydisplayplayer], &camera2); // TODO: Replace with a camflip
resetdown = true;
}
else
@ -1509,6 +1535,26 @@ void G_BuildTiccmd2(ticcmd_t *cmd, INT32 realtics)
cmd->forwardmove = (SINT8)(cmd->forwardmove + forward);
cmd->sidemove = (SINT8)(cmd->sidemove + side);
//{ SRB2kart - Drift support
axis = Joy2Axis(AXISTURN);
if (turnleft || axis < 0) // Drifting to the left
cmd->buttons |= BT_DRIFTLEFT;
else
cmd->buttons &= ~BT_DRIFTLEFT;
if (turnright || axis > 0) // Drifting to the right
cmd->buttons |= BT_DRIFTRIGHT;
else
cmd->buttons &= ~BT_DRIFTRIGHT;
if (turnright && turnleft)
{
cmd->buttons &= ~BT_DRIFTLEFT;
cmd->buttons &= ~BT_DRIFTRIGHT;
}
//}
if (player->bot == 1) {
if (!player->powers[pw_tailsfly] && (cmd->forwardmove || cmd->sidemove || cmd->buttons))
{
@ -3784,7 +3830,7 @@ void G_ReadDemoTiccmd(ticcmd_t *cmd, INT32 playernum)
if (ziptic & ZT_ANGLE)
oldcmd.angleturn = READINT16(demo_p);
if (ziptic & ZT_BUTTONS)
oldcmd.buttons = (oldcmd.buttons & (BT_CAMLEFT|BT_CAMRIGHT)) | (READUINT16(demo_p) & ~(BT_CAMLEFT|BT_CAMRIGHT));
oldcmd.buttons = (oldcmd.buttons & (BT_FORWARD|BT_BACKWARD)) | (READUINT16(demo_p) & ~(BT_FORWARD|BT_BACKWARD));
if (ziptic & ZT_AIMING)
oldcmd.aiming = READINT16(demo_p);

View File

@ -1064,19 +1064,19 @@ void G_Controldefault(void)
gamecontrol[gc_turnleft ][1] = KEY_LEFTARROW;
gamecontrol[gc_turnright ][0] = KEY_HAT1+3; //Right
gamecontrol[gc_turnright ][1] = KEY_RIGHTARROW;
gamecontrol[gc_weaponnext ][0] = ']';
gamecontrol[gc_weaponprev ][0] = '[';
gamecontrol[gc_driftleft ][0] = ']';
gamecontrol[gc_driftright ][0] = '[';
gamecontrol[gc_fire ][0] = KEY_JOY1+6; //X
gamecontrol[gc_fire ][1] = KEY_RCTRL;
gamecontrol[gc_firenormal ][0] = KEY_JOY1+5; //Y
gamecontrol[gc_firenormal ][1] = ';';
gamecontrol[gc_tossflag ][0] = '\'';
gamecontrol[gc_use ][0] = KEY_JOY1+1; //B
gamecontrol[gc_use ][1] = '.';
gamecontrol[gc_accelerate ][0] = KEY_JOY1+5; //Y
gamecontrol[gc_accelerate ][1] = ';';
gamecontrol[gc_spectate ][0] = '\'';
gamecontrol[gc_brake ][0] = KEY_JOY1+1; //B
gamecontrol[gc_brake ][1] = '.';
gamecontrol[gc_camtoggle ][1] = ',';
gamecontrol[gc_camleft ][0] = 'o';
gamecontrol[gc_camright ][0] = 'p';
gamecontrol[gc_camreset ][0] = 'c';
gamecontrol[gc_aimforward ][0] = 'o';
gamecontrol[gc_aimbackward][0] = 'p';
gamecontrol[gc_lookback ][0] = 'c';
gamecontrol[gc_lookup ][0] = KEY_PGUP;
gamecontrol[gc_lookdown ][0] = KEY_PGDN;
gamecontrol[gc_centerview ][0] = KEY_END;
@ -1097,11 +1097,11 @@ void G_Controldefault(void)
gamecontrolbis[gc_turnleft ][1] = 'a';
gamecontrolbis[gc_turnright ][0] = KEY_2HAT1+3;
gamecontrolbis[gc_turnright ][1] = 'd';
gamecontrolbis[gc_weaponnext][0] = 't';
gamecontrolbis[gc_weaponprev][0] = 'r';
gamecontrolbis[gc_driftleft ][0] = 't';
gamecontrolbis[gc_driftright][0] = 'r';
gamecontrolbis[gc_fire ][0] = KEY_2JOY1+6; //X
gamecontrolbis[gc_firenormal][0] = KEY_2JOY1+5; //Y
gamecontrolbis[gc_use ][0] = KEY_2JOY1+1; //B
gamecontrolbis[gc_accelerate][0] = KEY_2JOY1+5; //Y
gamecontrolbis[gc_brake ][0] = KEY_2JOY1+1; //B
gamecontrolbis[gc_jump ][0] = KEY_2JOY1+2; //A
//gamecontrolbis[gc_straferight][0] = 'x';
//gamecontrolbis[gc_strafeleft ][0] = 'z';
@ -1115,10 +1115,10 @@ void G_Controldefault(void)
gamecontrol[gc_turnright ][0] = KEY_HAT1+3; // Right
gamecontrol[gc_strafeleft ][0] = KEY_JOY1+4; // L
gamecontrol[gc_straferight][0] = KEY_JOY1+5; // R
gamecontrol[gc_tossflag ][0] = KEY_JOY1+0; // Triangle
gamecontrol[gc_use ][0] = KEY_JOY1+1; // Circle
gamecontrol[gc_spectate ][0] = KEY_JOY1+0; // Triangle
gamecontrol[gc_brake ][0] = KEY_JOY1+1; // Circle
gamecontrol[gc_camtoggle ][0] = KEY_JOY1+6; // Select
gamecontrol[gc_camreset ][0] = KEY_JOY1+3; // Square
gamecontrol[gc_lookback ][0] = KEY_JOY1+3; // Square
gamecontrol[gc_centerview ][0] = KEY_JOY1+9; // Hold
gamecontrol[gc_pause ][0] = KEY_JOY1+8; // Start
gamecontrol[gc_jump ][0] = KEY_JOY1+2; // Cross
@ -1129,7 +1129,7 @@ void G_Controldefault(void)
gamecontrol[gc_fire ][0] = KEY_JOY1+0; //A
gamecontrol[gc_forward ][0] = KEY_JOY1+1; //Y
gamecontrol[gc_jump ][0] = KEY_JOY1+2; //B
gamecontrol[gc_use ][0] = KEY_JOY1+3; //X
gamecontrol[gc_brake ][0] = KEY_JOY1+3; //X
gamecontrol[gc_strafeleft ][0] = KEY_JOY1+4; //L
gamecontrol[gc_straferight][0] = KEY_JOY1+5; //R
gamecontrol[gc_lookup ][0] = KEY_JOY1+6; //U
@ -1143,13 +1143,13 @@ void G_Controldefault(void)
gamecontrol[gc_forward ][0] = KEY_UPARROW;
gamecontrol[gc_backward ][0] = KEY_DOWNARROW;
gamecontrol[gc_jump ][0] = KEY_JOY1+0; //A
gamecontrol[gc_use ][0] = KEY_JOY1+3; //Y
gamecontrol[gc_brake ][0] = KEY_JOY1+3; //Y
gamecontrol[gc_strafeleft ][0] = KEY_JOY1+4; //L
gamecontrol[gc_straferight][0] = KEY_JOY1+5; //R
gamecontrol[gc_turnleft ][0] = KEY_LEFTARROW;
gamecontrol[gc_turnright ][0] = KEY_RIGHTARROW;
gamecontrol[gc_pause ][0] = KEY_JOY1+6; //Start
gamecontrol[gc_weaponnext ][0] = KEY_JOY1+7; //Select
gamecontrol[gc_driftleft ][0] = KEY_JOY1+7; //Select
}
#else
void G_Controldefault(void)
@ -1162,8 +1162,8 @@ void G_Controldefault(void)
gamecontrol[gc_straferight][0] = 'd';
gamecontrol[gc_turnleft ][0] = KEY_LEFTARROW;
gamecontrol[gc_turnright ][0] = KEY_RIGHTARROW;
gamecontrol[gc_weaponnext ][0] = 'e';
gamecontrol[gc_weaponprev ][0] = 'q';
gamecontrol[gc_driftleft ][0] = 'e';
gamecontrol[gc_driftright ][0] = 'q';
gamecontrol[gc_wepslot1 ][0] = '1';
gamecontrol[gc_wepslot2 ][0] = '2';
gamecontrol[gc_wepslot3 ][0] = '3';
@ -1176,13 +1176,13 @@ void G_Controldefault(void)
gamecontrol[gc_wepslot10 ][0] = '0';
gamecontrol[gc_fire ][0] = KEY_RCTRL;
gamecontrol[gc_fire ][1] = KEY_MOUSE1+0;
gamecontrol[gc_firenormal ][0] = 'c';
gamecontrol[gc_tossflag ][0] = '\'';
gamecontrol[gc_use ][0] = 'x';
gamecontrol[gc_accelerate ][0] = 'c';
gamecontrol[gc_spectate ][0] = '\'';
gamecontrol[gc_brake ][0] = 'x';
gamecontrol[gc_camtoggle ][0] = 'v';
gamecontrol[gc_camleft ][0] = '[';
gamecontrol[gc_camright ][0] = ']';
gamecontrol[gc_camreset ][0] = 'r';
gamecontrol[gc_aimforward ][0] = '[';
gamecontrol[gc_aimbackward][0] = ']';
gamecontrol[gc_lookback ][0] = 'r';
gamecontrol[gc_lookup ][0] = KEY_PGUP;
gamecontrol[gc_lookdown ][0] = KEY_PGDN;
gamecontrol[gc_centerview ][0] = KEY_END;
@ -1198,12 +1198,12 @@ void G_Controldefault(void)
gamecontrol[gc_backward ][0] = KEY_JOY1+03; //DOWN
gamecontrol[gc_turnleft ][0] = KEY_JOY1+04; //LEFT
gamecontrol[gc_turnright ][0] = KEY_JOY1+05; //RIGHT
gamecontrol[gc_weaponnext ][0] = KEY_JOY1+10; //y
gamecontrol[gc_weaponprev ][0] = KEY_JOY1+9; //x
gamecontrol[gc_driftleft ][0] = KEY_JOY1+10; //y
gamecontrol[gc_driftright ][0] = KEY_JOY1+9; //x
gamecontrol[gc_fire ][0] = KEY_JOY1+12; //L
gamecontrol[gc_firenormal ][0] = KEY_JOY1+13; //R
gamecontrol[gc_use ][0] = KEY_JOY1+00; //B
gamecontrol[gc_use ][1] = KEY_JOY1+07; //b
gamecontrol[gc_accelerate ][0] = KEY_JOY1+13; //R
gamecontrol[gc_brake ][0] = KEY_JOY1+00; //B
gamecontrol[gc_brake ][1] = KEY_JOY1+07; //b
gamecontrol[gc_jump ][0] = KEY_JOY1+01; //A
gamecontrol[gc_jump ][1] = KEY_JOY1+06; //a
gamecontrol[gc_pause ][0] = KEY_JOY1+18; //Home
@ -1211,12 +1211,12 @@ void G_Controldefault(void)
gamecontrolbis[gc_backward ][0] = KEY_2JOY1+03; //DOWN
gamecontrolbis[gc_turnleft ][0] = KEY_2JOY1+04; //LEFT
gamecontrolbis[gc_turnright ][0] = KEY_2JOY1+05; //RIGHT
gamecontrolbis[gc_weaponnext ][0] = KEY_2JOY1+10; //y
gamecontrolbis[gc_weaponprev ][0] = KEY_2JOY1+9; //x
gamecontrolbis[gc_driftleft ][0] = KEY_2JOY1+10; //y
gamecontrolbis[gc_driftright ][0] = KEY_2JOY1+9; //x
gamecontrolbis[gc_fire ][0] = KEY_2JOY1+12; //L
gamecontrolbis[gc_firenormal ][0] = KEY_2JOY1+13; //R
gamecontrolbis[gc_use ][0] = KEY_2JOY1+00; //B
gamecontrolbis[gc_use ][1] = KEY_2JOY1+07; //b
gamecontrolbis[gc_accelerate ][0] = KEY_2JOY1+13; //R
gamecontrolbis[gc_brake ][0] = KEY_2JOY1+00; //B
gamecontrolbis[gc_brake ][1] = KEY_2JOY1+07; //b
gamecontrolbis[gc_jump ][0] = KEY_2JOY1+01; //A
gamecontrolbis[gc_jump ][1] = KEY_2JOY1+06; //a
gamecontrolbis[gc_pause ][0] = KEY_2JOY1+18; //Home
@ -1228,14 +1228,14 @@ void G_Controldefault(void)
gamecontrol[gc_strafeleft ][1] = KEY_JOY1+15; //ZL
gamecontrol[gc_turnleft ][1] = KEY_HAT1+02; //LEFT
gamecontrol[gc_turnright ][1] = KEY_HAT1+03; //RIGHT
gamecontrol[gc_weaponnext ][1] = KEY_JOY1+11; //x
gamecontrol[gc_driftleft ][1] = KEY_JOY1+11; //x
gamecontrol[gc_fire ][0] = KEY_JOY1+12; //y
gamecontrol[gc_fire ][1] = KEY_JOY1+01; //B
gamecontrol[gc_firenormal ][0] = KEY_JOY1+13; //L
gamecontrol[gc_firenormal ][1] = KEY_JOY1+00; //A
gamecontrol[gc_tossflag ][1] = KEY_JOY1+17; //Plus CC
gamecontrol[gc_use ][0] = KEY_JOY1+9; //a
gamecontrol[gc_use ][1] = KEY_JOY1+02; //1
gamecontrol[gc_accelerate ][0] = KEY_JOY1+13; //L
gamecontrol[gc_accelerate ][1] = KEY_JOY1+00; //A
gamecontrol[gc_spectate ][1] = KEY_JOY1+17; //Plus CC
gamecontrol[gc_brake ][0] = KEY_JOY1+9; //a
gamecontrol[gc_brake ][1] = KEY_JOY1+02; //1
gamecontrol[gc_centerview ][1] = KEY_JOY1+14; //R
gamecontrol[gc_scores ][0] = KEY_JOY1+04; //Minus
gamecontrol[gc_scores ][1] = KEY_JOY1+18; //Minus
@ -1249,14 +1249,14 @@ void G_Controldefault(void)
gamecontrolbis[gc_strafeleft ][1] = KEY_2JOY1+15; //ZL
gamecontrolbis[gc_turnleft ][1] = KEY_2HAT1+02; //LEFT
gamecontrolbis[gc_turnright ][1] = KEY_2HAT1+03; //RIGHT
gamecontrolbis[gc_weaponnext ][1] = KEY_2JOY1+11; //x
gamecontrolbis[gc_driftleft ][1] = KEY_2JOY1+11; //x
gamecontrolbis[gc_fire ][0] = KEY_2JOY1+12; //y
gamecontrolbis[gc_fire ][1] = KEY_2JOY1+01; //B
gamecontrolbis[gc_firenormal ][0] = KEY_2JOY1+13; //L
gamecontrolbis[gc_firenormal ][1] = KEY_2JOY1+00; //A
gamecontrolbis[gc_tossflag ][1] = KEY_2JOY1+17; //Plus CC
gamecontrolbis[gc_use ][0] = KEY_2JOY1+9; //a
gamecontrolbis[gc_use ][1] = KEY_2JOY1+02; //1
gamecontrolbis[gc_accelerate ][0] = KEY_2JOY1+13; //L
gamecontrolbis[gc_accelerate ][1] = KEY_2JOY1+00; //A
gamecontrolbis[gc_spectate ][1] = KEY_2JOY1+17; //Plus CC
gamecontrolbis[gc_brake ][0] = KEY_2JOY1+9; //a
gamecontrolbis[gc_brake ][1] = KEY_2JOY1+02; //1
gamecontrolbis[gc_centerview ][1] = KEY_2JOY1+14; //R
gamecontrolbis[gc_scores ][0] = KEY_2JOY1+04; //Minus
gamecontrolbis[gc_scores ][1] = KEY_2JOY1+18; //Minus

View File

@ -88,8 +88,8 @@ typedef enum
gc_straferight,
gc_turnleft,
gc_turnright,
gc_weaponnext,
gc_weaponprev,
gc_driftleft, // gc_weaponnext
gc_driftright, // gc_weaponprev
gc_wepslot1,
gc_wepslot2,
gc_wepslot3,
@ -101,13 +101,13 @@ typedef enum
gc_wepslot9,
gc_wepslot10,
gc_fire,
gc_firenormal,
gc_tossflag,
gc_use,
gc_accelerate, // gc_firenormal
gc_spectate, // gc_tossflag
gc_brake, // gc_use
gc_camtoggle,
gc_camleft,
gc_camright,
gc_camreset,
gc_aimforward, // gc_camleft
gc_aimbackward, // gc_camright
gc_lookback, // gc_camreset
gc_lookup,
gc_lookdown,
gc_centerview,

View File

@ -497,6 +497,26 @@ light_t *t_lspr[NUMSPRITES] =
&lspr[NOLIGHT], // SPR_SRBN
&lspr[NOLIGHT], // SPR_SRBO
&lspr[NOLIGHT], //"SPRG",
&lspr[NOLIGHT], //"BSPR",
&lspr[NOLIGHT], //"RNDM",
&lspr[NOLIGHT], //"SPRK",
&lspr[NOLIGHT], //"KFRE",
&lspr[NOLIGHT], //"DRIF",
&lspr[NOLIGHT], //"FAKE",
&lspr[NOLIGHT], //"DFAK",
&lspr[NOLIGHT], //"BANA",
&lspr[NOLIGHT], //"DBAN",
&lspr[NOLIGHT], //"GSHE",
&lspr[NOLIGHT], //"GSTR",
&lspr[NOLIGHT], //"DGSH",
&lspr[NOLIGHT], //"RSHE",
&lspr[NOLIGHT], //"RSTR",
&lspr[NOLIGHT], //"DRSH",
&lspr[NOLIGHT], //"BOMB",
&lspr[NOLIGHT], //"BLIG",
&lspr[NOLIGHT], //"LIGH"
// Free slots
&lspr[NOLIGHT],
&lspr[NOLIGHT],

1082
src/info.c

File diff suppressed because it is too large Load Diff

View File

@ -60,6 +60,7 @@ void A_AttractChase(); // Ring Chase
void A_DropMine(); // Drop Mine from Skim or Jetty-Syn Bomber
void A_FishJump(); // Fish Jump
void A_ThrownRing(); // Sparkle trail for red ring
void A_GrenadeRing(); // SRB2kart
void A_SetSolidSteam();
void A_UnsetSolidSteam();
void A_SignPlayer();
@ -162,6 +163,8 @@ void A_RandomStateRange();
void A_DualAction();
void A_RemoteAction();
void A_ToggleFlameJet();
void A_RedShellChase(); // SRB2kart
void A_BobombExplode(); // SRB2kart
void A_OrbitNights();
void A_GhostMe();
void A_SetObjectState();
@ -570,6 +573,30 @@ typedef enum sprite
SPR_SRBN,
SPR_SRBO,
// Springs
SPR_SPRG, // Gray Spring
SPR_BSPR, // Blue Diagonal Spring
SPR_RNDM, // Random Item Box
SPR_RPOP, // Random Item Box Pop
SPR_KFRE, // Mushroom fire trail
SPR_DRIF, // Drift Sparks
// Kart Items
SPR_FITE, // Fake Item box
SPR_DFAK, // Dead Fake Item
SPR_BANA, // Banana Peel
SPR_DBAN, // Dead Banana Peel
SPR_GSHE, // Green Shell
SPR_GSTR, // Green Shell Trail
SPR_DGSH, // Dead Green Shell
SPR_RSHE, // Red Shell
SPR_RSTR, // Red Shell Trail
SPR_DRSH, // Dead Red Shell
SPR_BOMB, // Bob-omb
SPR_BLIG, // Blue Lightning
SPR_LIGH, // Lightning
SPR_FIRSTFREESLOT,
SPR_LASTFREESLOT = SPR_FIRSTFREESLOT + NUMSPRITEFREESLOTS - 1,
NUMSPRITES
@ -2957,6 +2984,203 @@ typedef enum state
S_SRB1_GENREX1,
S_SRB1_GENREX2,
// Gray Springs
S_GRAYSPRING,
S_GRAYSPRING2,
S_GRAYSPRING3,
S_GRAYSPRING4,
S_GRAYSPRING5,
// Blue Diagonal Spring
S_BDIAG1,
S_BDIAG2,
S_BDIAG3,
S_BDIAG4,
S_BDIAG5,
S_BDIAG6,
S_BDIAG7,
S_BDIAG8,
//{ Random Item Box
S_RANDOMITEM1,
S_RANDOMITEM2,
S_RANDOMITEM3,
S_RANDOMITEM4,
S_RANDOMITEM5,
S_RANDOMITEM6,
S_RANDOMITEM7,
S_RANDOMITEM8,
S_RANDOMITEM9,
S_RANDOMITEM10,
S_RANDOMITEM11,
S_RANDOMITEM12,
S_RANDOMITEM13,
S_RANDOMITEM14,
S_RANDOMITEM15,
S_RANDOMITEM16,
S_RANDOMITEM17,
S_RANDOMITEM18,
S_RANDOMITEM19,
S_RANDOMITEM20,
S_RANDOMITEM21,
S_RANDOMITEM22,
S_RANDOMITEM23,
S_RANDOMITEM24,
// Random Item Pop
S_RANDOMITEMPOP1,
S_RANDOMITEMPOP2,
S_RANDOMITEMPOP3,
S_RANDOMITEMPOP4,
S_RANDOMITEMPOP5,
//}
// Drift Sparks
S_DRIFTSPARK1,
S_DRIFTSPARK2,
S_DRIFTSPARK3,
S_DRIFTSPARK4,
S_DRIFTSPARK5,
S_DRIFTSPARK6,
// Magnet Burst
// Mushroom Fire Trail
S_KARTFIRE1,
S_KARTFIRE2,
S_KARTFIRE3,
S_KARTFIRE4,
S_KARTFIRE5,
S_KARTFIRE6,
S_KARTFIRE7,
S_KARTFIRE8,
//{ Fake Item
S_FAKEITEM1,
S_FAKEITEM2,
S_FAKEITEM3,
S_FAKEITEM4,
S_FAKEITEM5,
S_FAKEITEM6,
S_FAKEITEM7,
S_FAKEITEM8,
S_FAKEITEM9,
S_FAKEITEM10,
S_FAKEITEM11,
S_FAKEITEM12,
S_FAKEITEM13,
S_FAKEITEM14,
S_FAKEITEM15,
S_FAKEITEM16,
S_FAKEITEM17,
S_FAKEITEM18,
S_FAKEITEM19,
S_FAKEITEM20,
S_FAKEITEM21,
S_FAKEITEM22,
S_FAKEITEM23,
S_FAKEITEM24,
S_DEADFAKEITEM,
//}
// Banana
S_BANANAITEM,
S_DEADBANANA,
//{ Green Shell
S_TRIPLEGREENSHIELD1,
S_TRIPLEGREENSHIELD2,
S_TRIPLEGREENSHIELD3,
S_TRIPLEGREENSHIELD4,
S_TRIPLEGREENSHIELD5,
S_TRIPLEGREENSHIELD6,
S_TRIPLEGREENSHIELD7,
S_TRIPLEGREENSHIELD8,
S_GREENSHIELD1,
S_GREENSHIELD2,
S_GREENSHIELD3,
S_GREENSHIELD4,
S_GREENSHIELD5,
S_GREENSHIELD6,
S_GREENSHIELD7,
S_GREENSHIELD8,
S_GREENITEM1,
S_GREENITEM2,
S_GREENITEM3,
S_GREENITEM4,
S_GREENITEM5,
S_GREENITEM6,
S_GREENITEM7,
S_GREENITEM8,
S_GREENTRAIL1,
S_GREENTRAIL2,
S_GREENTRAIL3,
S_GREENTRAIL4,
S_GREENTRAIL5,
S_GREENTRAIL6,
S_GREENTRAIL7,
S_GREENTRAIL8,
S_GREENTRAIL9,
S_DEADGREEN,
//}
//{ Red Shell
S_TRIPLEREDSHIELD1,
S_TRIPLEREDSHIELD2,
S_TRIPLEREDSHIELD3,
S_TRIPLEREDSHIELD4,
S_TRIPLEREDSHIELD5,
S_TRIPLEREDSHIELD6,
S_TRIPLEREDSHIELD7,
S_TRIPLEREDSHIELD8,
S_REDSHIELD1,
S_REDSHIELD2,
S_REDSHIELD3,
S_REDSHIELD4,
S_REDSHIELD5,
S_REDSHIELD6,
S_REDSHIELD7,
S_REDSHIELD8,
S_REDITEM1,
S_REDITEM2,
S_REDITEM3,
S_REDITEM4,
S_REDITEM5,
S_REDITEM6,
S_REDITEM7,
S_REDITEM8,
S_REDITEMCHASE,
S_REDITEMTRAIL,
S_REDTRAIL1,
S_REDTRAIL2,
S_REDTRAIL3,
S_REDTRAIL4,
S_REDTRAIL5,
S_REDTRAIL6,
S_REDTRAIL7,
S_REDTRAIL8,
S_REDTRAIL9,
S_DEADRED,
//}
// Bob-omb
S_BOMBSHIELD,
S_BOMBITEM,
S_BOMBAIR,
S_BOMBEXPLODE,
// Blue Shell - Blue Lightning for now...
S_BLUELIGHTNING1,
S_BLUELIGHTNING2,
S_BLUELIGHTNING3,
S_BLUELIGHTNING4,
S_BLUEEXPLODE,
// Lightning
S_LIGHTNING1,
S_LIGHTNING2,
S_LIGHTNING3,
S_LIGHTNING4,
#ifdef SEENAMES
S_NAMECHECK,
#endif
@ -3483,6 +3707,49 @@ typedef enum mobj_type
MT_SRB1_METALSONIC,
MT_SRB1_GOLDBOT,
MT_SRB1_GENREX,
// SRB2kart
MT_GRAYSPRING,
MT_INVISSPRING,
MT_BLUEDIAG,
MT_RANDOMITEM,
MT_RANDOMITEMPOP,
MT_MUSHROOMTRAIL,
MT_DRIFT,
MT_FAKESHIELD,
MT_FAKEITEM,
MT_TRIPLEBANANASHIELD1, // Banana Stuff
MT_TRIPLEBANANASHIELD2,
MT_TRIPLEBANANASHIELD3,
MT_BANANASHIELD,
MT_BANANAITEM,
MT_TRIPLEGREENSHIELD1, // Green shell stuff
MT_TRIPLEGREENSHIELD2,
MT_TRIPLEGREENSHIELD3,
MT_GREENSHIELD,
MT_GREENITEM,
MT_GREENTRAIL,
MT_TRIPLEREDSHIELD1, // Red shell stuff
MT_TRIPLEREDSHIELD2,
MT_TRIPLEREDSHIELD3,
MT_REDSHIELD,
MT_REDITEM,
MT_REDITEMDUD,
MT_REDTRAIL,
MT_BOMBSHIELD, // Bob-omb stuff
MT_BOMBITEM,
MT_BOMBEXPLOSION,
MT_BLUELIGHTNING, // Lightning stuff
MT_BLUEEXPLOSION,
MT_LIGHTNING,
#ifdef SEENAMES
MT_NAMECHECK,
#endif

File diff suppressed because it is too large Load Diff

View File

@ -16,9 +16,11 @@ UINT8 K_GetKartColorByName(const char *name);
void K_RegisterKartStuff(void);
void K_KartPlayerThink(player_t *player, ticcmd_t *cmd);
boolean P_SpinPlayerMobj(mobj_t *target, mobj_t *source);
boolean P_SquishPlayerMobj(mobj_t *target, mobj_t *source);
boolean P_ExplodePlayerMobj(mobj_t *target, mobj_t *source);
boolean K_SpinPlayer(player_t *player, mobj_t *source);
boolean K_SquishPlayer(player_t *player, mobj_t *source);
boolean K_ExplodePlayer(player_t *player, mobj_t *source);
void K_SpawnKartExplosion(fixed_t x, fixed_t y, fixed_t z, fixed_t radius, INT32 number, mobjtype_t type, angle_t rotangle, boolean spawncenter, boolean ghostit);
void K_MoveKartPlayer(player_t *player, boolean onground);
void K_LoadKartHUDGraphics(void);
void K_drawKartHUD(void);

View File

@ -968,7 +968,7 @@ void OP_NightsObjectplace(player_t *player)
if (player->pflags & PF_ATTACKDOWN)
{
// Are ANY objectplace buttons pressed? If no, remove flag.
if (!(cmd->buttons & (BT_ATTACK|BT_TOSSFLAG|BT_USE|BT_CAMRIGHT|BT_CAMLEFT)))
if (!(cmd->buttons & (BT_ATTACK|BT_ACCELERATE|BT_BRAKE|BT_FORWARD|BT_BACKWARD)))
player->pflags &= ~PF_ATTACKDOWN;
// Do nothing.
@ -1008,7 +1008,7 @@ void OP_NightsObjectplace(player_t *player)
}
// This places a bumper!
if (cmd->buttons & BT_TOSSFLAG)
if (cmd->buttons & BT_SPECTATE)
{
player->pflags |= PF_ATTACKDOWN;
if (!OP_HeightOkay(player, false))
@ -1019,7 +1019,7 @@ void OP_NightsObjectplace(player_t *player)
}
// This places a ring!
if (cmd->buttons & BT_CAMRIGHT)
if (cmd->buttons & BT_BACKWARD)
{
player->pflags |= PF_ATTACKDOWN;
if (!OP_HeightOkay(player, false))
@ -1030,7 +1030,7 @@ void OP_NightsObjectplace(player_t *player)
}
// This places a wing item!
if (cmd->buttons & BT_CAMLEFT)
if (cmd->buttons & BT_FORWARD)
{
player->pflags |= PF_ATTACKDOWN;
if (!OP_HeightOkay(player, false))
@ -1041,7 +1041,7 @@ void OP_NightsObjectplace(player_t *player)
}
// This places a custom object as defined in the console cv_mapthingnum.
if (cmd->buttons & BT_USE)
if (cmd->buttons & BT_BRAKE)
{
UINT16 angle;
@ -1101,7 +1101,7 @@ void OP_ObjectplaceMovement(player_t *player)
if (cmd->buttons & BT_JUMP)
player->mo->z += FRACUNIT*cv_speed.value;
else if (cmd->buttons & BT_USE)
else if (cmd->buttons & BT_BRAKE)
player->mo->z -= FRACUNIT*cv_speed.value;
if (cmd->forwardmove != 0)
@ -1165,19 +1165,19 @@ void OP_ObjectplaceMovement(player_t *player)
if (player->pflags & PF_ATTACKDOWN)
{
// Are ANY objectplace buttons pressed? If no, remove flag.
if (!(cmd->buttons & (BT_ATTACK|BT_TOSSFLAG|BT_CAMRIGHT|BT_CAMLEFT)))
if (!(cmd->buttons & (BT_ATTACK|BT_SPECTATE|BT_BACKWARD|BT_FORWARD)))
player->pflags &= ~PF_ATTACKDOWN;
// Do nothing.
return;
}
if (cmd->buttons & BT_CAMLEFT)
if (cmd->buttons & BT_FORWARD)
{
OP_CycleThings(-1);
player->pflags |= PF_ATTACKDOWN;
}
else if (cmd->buttons & BT_CAMRIGHT)
else if (cmd->buttons & BT_BACKWARD)
{
OP_CycleThings(1);
player->pflags |= PF_ATTACKDOWN;

View File

@ -1039,7 +1039,7 @@ static menuitem_t OP_MoveControlsMenu[] =
{IT_CALL | IT_STRING2, NULL, "Turn Left", M_ChangeControl, gc_turnleft },
{IT_CALL | IT_STRING2, NULL, "Turn Right", M_ChangeControl, gc_turnright },
{IT_CALL | IT_STRING2, NULL, "Jump", M_ChangeControl, gc_jump },
{IT_CALL | IT_STRING2, NULL, "Spin", M_ChangeControl, gc_use },
{IT_CALL | IT_STRING2, NULL, "Brake", M_ChangeControl, gc_brake },
{IT_CALL | IT_STRING2, NULL, "Strafe Left", M_ChangeControl, gc_strafeleft },
{IT_CALL | IT_STRING2, NULL, "Strafe Right", M_ChangeControl, gc_straferight},
};
@ -1049,29 +1049,29 @@ static menuitem_t OP_MPControlsMenu[] =
{IT_CALL | IT_STRING2, NULL, "Talk key", M_ChangeControl, gc_talkkey },
{IT_CALL | IT_STRING2, NULL, "Team-Talk key", M_ChangeControl, gc_teamkey },
{IT_CALL | IT_STRING2, NULL, "Rankings/Scores", M_ChangeControl, gc_scores },
{IT_CALL | IT_STRING2, NULL, "Toss Flag", M_ChangeControl, gc_tossflag },
{IT_CALL | IT_STRING2, NULL, "Next Weapon", M_ChangeControl, gc_weaponnext },
{IT_CALL | IT_STRING2, NULL, "Prev Weapon", M_ChangeControl, gc_weaponprev },
{IT_CALL | IT_STRING2, NULL, "Weapon Slot 1", M_ChangeControl, gc_wepslot1 },
{IT_CALL | IT_STRING2, NULL, "Weapon Slot 2", M_ChangeControl, gc_wepslot2 },
{IT_CALL | IT_STRING2, NULL, "Weapon Slot 3", M_ChangeControl, gc_wepslot3 },
{IT_CALL | IT_STRING2, NULL, "Weapon Slot 4", M_ChangeControl, gc_wepslot4 },
{IT_CALL | IT_STRING2, NULL, "Weapon Slot 5", M_ChangeControl, gc_wepslot5 },
{IT_CALL | IT_STRING2, NULL, "Weapon Slot 6", M_ChangeControl, gc_wepslot6 },
{IT_CALL | IT_STRING2, NULL, "Weapon Slot 7", M_ChangeControl, gc_wepslot7 },
{IT_CALL | IT_STRING2, NULL, "Spectate", M_ChangeControl, gc_spectate },
// {IT_CALL | IT_STRING2, NULL, "Next Weapon", M_ChangeControl, gc_driftleft },
// {IT_CALL | IT_STRING2, NULL, "Prev Weapon", M_ChangeControl, gc_driftright },
// {IT_CALL | IT_STRING2, NULL, "Weapon Slot 1", M_ChangeControl, gc_wepslot1 },
// {IT_CALL | IT_STRING2, NULL, "Weapon Slot 2", M_ChangeControl, gc_wepslot2 },
// {IT_CALL | IT_STRING2, NULL, "Weapon Slot 3", M_ChangeControl, gc_wepslot3 },
// {IT_CALL | IT_STRING2, NULL, "Weapon Slot 4", M_ChangeControl, gc_wepslot4 },
// {IT_CALL | IT_STRING2, NULL, "Weapon Slot 5", M_ChangeControl, gc_wepslot5 },
// {IT_CALL | IT_STRING2, NULL, "Weapon Slot 6", M_ChangeControl, gc_wepslot6 },
// {IT_CALL | IT_STRING2, NULL, "Weapon Slot 7", M_ChangeControl, gc_wepslot7 },
{IT_CALL | IT_STRING2, NULL, "Ring Toss", M_ChangeControl, gc_fire },
{IT_CALL | IT_STRING2, NULL, "Ring Toss Normal", M_ChangeControl, gc_firenormal },
{IT_CALL | IT_STRING2, NULL, "Accelerate", M_ChangeControl, gc_accelerate },
};
static menuitem_t OP_CameraControlsMenu[] =
{
{IT_CALL | IT_STRING2, NULL, "Look Up", M_ChangeControl, gc_lookup },
{IT_CALL | IT_STRING2, NULL, "Look Down", M_ChangeControl, gc_lookdown },
{IT_CALL | IT_STRING2, NULL, "Rotate Camera L", M_ChangeControl, gc_camleft },
{IT_CALL | IT_STRING2, NULL, "Rotate Camera R", M_ChangeControl, gc_camright },
{IT_CALL | IT_STRING2, NULL, "Center View", M_ChangeControl, gc_centerview },
{IT_CALL | IT_STRING2, NULL, "Mouselook", M_ChangeControl, gc_mouseaiming },
{IT_CALL | IT_STRING2, NULL, "Reset Camera", M_ChangeControl, gc_camreset },
// {IT_CALL | IT_STRING2, NULL, "Look Up", M_ChangeControl, gc_lookup },
// {IT_CALL | IT_STRING2, NULL, "Look Down", M_ChangeControl, gc_lookdown },
{IT_CALL | IT_STRING2, NULL, "Aim Forward", M_ChangeControl, gc_aimforward },
{IT_CALL | IT_STRING2, NULL, "Aim Backward", M_ChangeControl, gc_aimbackward },
// {IT_CALL | IT_STRING2, NULL, "Center View", M_ChangeControl, gc_centerview },
// {IT_CALL | IT_STRING2, NULL, "Mouselook", M_ChangeControl, gc_mouseaiming },
{IT_CALL | IT_STRING2, NULL, "Look Backward", M_ChangeControl, gc_lookback },
{IT_CALL | IT_STRING2, NULL, "Toggle Chasecam", M_ChangeControl, gc_camtoggle },
};

View File

@ -23,6 +23,7 @@
#include "r_things.h"
#include "i_video.h"
#include "lua_hook.h"
#include "k_kart.h" // SRB2kart
#ifdef HW3SOUND
#include "hardware/hw3sound.h"
@ -113,6 +114,7 @@ void A_AttractChase(mobj_t *actor);
void A_DropMine(mobj_t *actor);
void A_FishJump(mobj_t *actor);
void A_ThrownRing(mobj_t *actor);
void A_GrenadeRing(mobj_t *actor);
void A_SetSolidSteam(mobj_t *actor);
void A_UnsetSolidSteam(mobj_t *actor);
void A_SignPlayer(mobj_t *actor);
@ -185,6 +187,8 @@ void A_RandomStateRange(mobj_t *actor);
void A_DualAction(mobj_t *actor);
void A_RemoteAction(mobj_t *actor);
void A_ToggleFlameJet(mobj_t *actor);
void A_RedShellChase(mobj_t *actor); // SRB2kart
void A_BobombExplode(mobj_t *actor); // SRB2kart
void A_OrbitNights(mobj_t *actor);
void A_GhostMe(mobj_t *actor);
void A_SetObjectState(mobj_t *actor);
@ -3893,6 +3897,74 @@ void A_ThrownRing(mobj_t *actor)
return;
}
//{ SRB2kart - A_GRENADERING
static mobj_t *grenade;
static inline boolean PIT_GrenadeRing(mobj_t *thing)
{
if (!grenade)
return true;
if (thing->type != MT_PLAYER) // Don't explode for anything but an actual player.
return true;
if (thing == grenade->target && !(grenade->threshold == 0)) // Don't blow up at your owner.
return true;
if (thing->player && thing->player->kartstuff[k_bootaketimer])
return true;
if ((gametype == GT_CTF || gametype == GT_MATCH)
&& !cv_friendlyfire.value && grenade->target->player && thing->player
&& grenade->target->player->ctfteam == thing->player->ctfteam) // Don't blow up at your teammates, unless friendlyfire is on
return true;
// see if it went over / under
if (grenade->z - grenade->info->painchance > thing->z + thing->height)
return true; // overhead
if (grenade->z + grenade->height + grenade->info->painchance < thing->z)
return true; // underneath
if (netgame && thing->player && thing->player->spectator)
return true;
if (!(thing->flags & MF_SHOOTABLE))
{
// didn't do any damage
return true;
}
if (P_AproxDistance(P_AproxDistance(thing->x - grenade->x, thing->y - grenade->y),
thing->z - grenade->z) > grenade->info->painchance)
return true; // Too far away
// Explode!
P_SetMobjState(grenade, grenade->info->deathstate);
return false;
}
void A_GrenadeRing(mobj_t *actor)
{
INT32 bx, by, xl, xh, yl, yh;
const fixed_t explodedist = actor->info->painchance;
if (leveltime % 35 == 0)
S_StartSound(actor, actor->info->activesound);
// Use blockmap to check for nearby shootables
yh = (unsigned)(actor->y + explodedist - bmaporgy)>>MAPBLOCKSHIFT;
yl = (unsigned)(actor->y - explodedist - bmaporgy)>>MAPBLOCKSHIFT;
xh = (unsigned)(actor->x + explodedist - bmaporgx)>>MAPBLOCKSHIFT;
xl = (unsigned)(actor->x - explodedist - bmaporgx)>>MAPBLOCKSHIFT;
grenade = actor;
for (by = yl; by <= yh; by++)
for (bx = xl; bx <= xh; bx++)
P_BlockThingsIterator(bx, by, PIT_GrenadeRing);
}
//}
// Function: A_SetSolidSteam
//
// Description: Makes steam solid so it collides with the player to boost them.
@ -8001,6 +8073,149 @@ void A_ToggleFlameJet(mobj_t* actor)
}
}
//{ SRB2kart - A_RedShellChase and A_BobombExplode
void A_RedShellChase(mobj_t *actor)
{
INT32 c = 0;
INT32 stop;
player_t *player;
if (actor->tracer)
{
if (!actor->tracer->health)
{
P_SetTarget(&actor->tracer, NULL);
}
if (actor->tracer && (actor->tracer->health))
{
P_Thrust(actor, R_PointToAngle2(actor->x, actor->y, actor->tracer->x, actor->tracer->y), actor->info->speed);
return;
}
}
// first time init, this allow minimum lastlook changes
if (actor->lastlook == -1)
actor->lastlook = P_RandomFixed();
actor->lastlook %= MAXPLAYERS;
stop = (actor->lastlook - 1) & PLAYERSMASK;
if (actor->lastlook >= 0)
{
for (; ; actor->lastlook = (actor->lastlook + 1) & PLAYERSMASK)
{
if (!playeringame[actor->lastlook])
continue;
if (c++ == 2)
return;
player = &players[actor->lastlook];
if (!player->mo)
continue;
if (player->mo->health <= 0)
continue; // dead
if ((netgame || multiplayer) && player->spectator)
continue; // spectator
if (actor->target && actor->target->player)
{
if (player->mo == actor->target)
continue;
// Don't home in on teammates.
if (gametype == GT_CTF
&& actor->target->player->ctfteam == player->ctfteam)
continue;
if (gametype == GT_RACE) // Only in races, in match and CTF you should go after any nearby players
{
// USER TARGET
if (actor->target->player->kartstuff[k_position] != (player->kartstuff[k_position] + 1)) // Red Shells only go after the person directly ahead of you -Sryder
continue;
}
if (!(gametype == GT_RACE))
{
if (P_AproxDistance(P_AproxDistance(player->mo->x-actor->x,
player->mo->y-actor->y), player->mo->z-actor->z) > RING_DIST)
continue;
}
}
if ((gametype == GT_RACE) || (gametype != GT_RACE // If in match etc. only home in when you get close enough, in race etc. home in all the time
&& P_AproxDistance(P_AproxDistance(player->mo->x-actor->x,
player->mo->y-actor->y), player->mo->z-actor->z) < RING_DIST))
P_SetTarget(&actor->tracer, player->mo);
return;
// Moved to bottom so it doesn't not check the last player
// done looking
if (actor->lastlook == stop)
{
if (gametype == GT_RACE)
actor->lastlook = -2;
return;
}
}
}
return;
}
void A_BobombExplode(mobj_t *actor)
{
mobj_t *mo2;
thinker_t *th;
INT32 d;
INT32 locvar1 = var1;
mobjtype_t type;
type = (mobjtype_t)locvar1;
for (d = 0; d < 16; d++)
K_SpawnKartExplosion(actor->x, actor->y, actor->z, actor->info->painchance + 32*FRACUNIT, 32, type, d*(ANGLE_45/4), false, false); // 32 <-> 64
S_StartSound(actor, sfx_prloop);
for (th = thinkercap.next; th != &thinkercap; th = th->next)
{
if (th->function.acp1 != (actionf_p1)P_MobjThinker)
continue;
mo2 = (mobj_t *)th;
if (mo2 == actor) // Don't explode yourself! Endless loop!
continue;
if (P_AproxDistance(P_AproxDistance(mo2->x - actor->x, mo2->y - actor->y), mo2->z - actor->z) > actor->info->painchance)
continue;
if ((mo2->flags & MF_SHOOTABLE) && !(mo2->flags & MF_SCENERY))
{
actor->flags2 |= MF2_DEBRIS;
if (mo2->player) // Looks like we're going to have to need a seperate function for this too
K_ExplodePlayer(mo2->player, actor->target);
else
P_DamageMobj(mo2, actor, actor->target, 1);
continue;
}
}
return;
}
//}
// Function: A_OrbitNights
//
// Description: Used by Chaos Emeralds to orbit around Nights (aka Super Sonic.)

View File

@ -2988,7 +2988,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
if (!player->kartstuff[k_startimer] && player->kartstuff[k_growshrinktimer] <= 0)
{
// Start slipping!
P_SpinPlayerMobj(player->mo, source);
K_SpinPlayer(player, source);
// Start shrinking!
player->mo->destscale = 70;
@ -3000,7 +3000,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
player->kartstuff[k_growshrinktimer] = 2;
}
// Invincible or not, we still need this.
//P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_THUNDERSHIELD); // TODO: Add this
P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_LIGHTNING);
return true;
}
else if (damage == 64 && player == source->player)
@ -3010,8 +3010,8 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
if (damage == 65 && player->kartstuff[k_position] == 1)
{
// Just need to do this now! Being thrown upwards is done by the explosion.
//P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_THUNBERSHIELD); // TODO: Add this
//P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BLUEEXPLODE); // TODO: Add this
P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BLUELIGHTNING);
P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BLUEEXPLOSION);
return true;
}
else if (damage == 65 && player->kartstuff[k_position] > 1)
@ -3043,8 +3043,11 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
return false;
else
{
player->kartstuff[k_spinouttype] = 1;
K_SpinPlayer(player, source);
damage = player->mo->health - 1;
P_RingDamage(player, inflictor, source, damage);
player->mo->momx = player->mo->momy = 0;
}
/* // SRB2kart - don't need these
else if (metalrecording)

View File

@ -1484,7 +1484,7 @@ static void P_XYFriction(mobj_t *mo, fixed_t oldx, fixed_t oldy)
)
{
// if in a walking frame, stop moving
if (player->panim == PA_WALK)
if (player->panim == PA_WALK && player->kartstuff[k_spinouttimer] == 0)
P_SetPlayerMobjState(mo, S_KART_STND); // SRB2kart - was S_PLAY_STND
mo->momx = player->cmomx;
mo->momy = player->cmomy;
@ -1908,6 +1908,14 @@ void P_XYMovement(mobj_t *mo)
return;
#endif
//{ SRB2kart stuff
//if (mo->type == MT_SHELLITEM || mo->type == MT_REDSHELLITEM2 || (mo->type == MT_REDSHELLITEM && !mo->tracer))
// return;
if (mo->player && mo->player->kartstuff[k_spinouttimer] && mo->player->speed <= mo->player->normalspeed/4)
return;
//}
if (((!(mo->eflags & MFE_VERTICALFLIP) && mo->z > mo->floorz) || (mo->eflags & MFE_VERTICALFLIP && mo->z+mo->height < mo->ceilingz))
&& !(player && player->pflags & PF_SLIDING))
return; // no friction when airborne
@ -2671,7 +2679,8 @@ static void P_PlayerZMovement(mobj_t *mo)
goto nightsdone;
}
// Get up if you fell.
if (mo->state == &states[mo->info->painstate]) // SRB2kart
if ((mo->state == &states[mo->info->painstate] || (mo->state >= &states[S_KART_SPIN1] && mo->state <= &states[S_KART_SPIN8]))
&& mo->player->kartstuff[k_spinouttimer] == 0 && mo->player->kartstuff[k_squishedtimer] == 0) // SRB2kart
P_SetPlayerMobjState(mo, S_KART_STND);
#ifdef ESLOPE
@ -2760,7 +2769,8 @@ 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))
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->momx = mo->momx/2;
mo->momy = mo->momy/2;
@ -2774,26 +2784,54 @@ static void P_PlayerZMovement(mobj_t *mo)
mo->player->skidtime = TICRATE;
mo->tics = -1;
}
else if (mo->player->pflags & PF_JUMPED || (mo->player->pflags & (PF_SPINNING|PF_USEDOWN)) != (PF_SPINNING|PF_USEDOWN)
|| mo->player->powers[pw_tailsfly]) // SRB2kart
else if ((mo->player->pflags & PF_JUMPED || (mo->player->pflags & (PF_SPINNING|PF_USEDOWN)) != (PF_SPINNING|PF_USEDOWN)
|| mo->player->powers[pw_tailsfly]) && (mo->player->kartstuff[k_spinouttimer] == 0)) // SRB2kart
{
if (mo->player->cmomx || mo->player->cmomy)
ticcmd_t *cmd;
cmd = &mo->player->cmd;
// Standing frames - S_KART_STND S_KART_STND_L S_KART_STND_R
if (mo->player->speed == 0)
{
if (mo->player->speed >= FixedMul(mo->player->runspeed, mo->scale) && mo->player->panim != PA_RUN)
P_SetPlayerMobjState(mo, S_KART_RUN1);
else if ((mo->player->rmomx || mo->player->rmomy) && mo->player->panim != PA_WALK)
P_SetPlayerMobjState(mo, S_KART_WALK1);
else if (!mo->player->rmomx && !mo->player->rmomy && mo->player->panim != PA_IDLE)
if (cmd->buttons & BT_DRIFTRIGHT && !(mo->state == &states[S_KART_STND_R]))
P_SetPlayerMobjState(mo, S_KART_STND_R);
else if (cmd->buttons & BT_DRIFTLEFT && !(mo->state == &states[S_KART_STND_L]))
P_SetPlayerMobjState(mo, S_KART_STND_L);
else if (!(cmd->buttons & BT_DRIFTRIGHT || cmd->buttons & BT_DRIFTLEFT) && !(mo->state == &states[S_KART_STND]))
P_SetPlayerMobjState(mo, S_KART_STND);
}
else
// Drifting Left - S_KART_DRIFT_L1
else if (mo->player->kartstuff[k_drift] < 0 && P_IsObjectOnGround(mo))
{
if (mo->player->speed >= FixedMul(mo->player->runspeed, mo->scale) && mo->player->panim != PA_RUN)
if (!(mo->state == &states[S_KART_DRIFT_L1] || mo->state == &states[S_KART_DRIFT_L2]))
P_SetPlayerMobjState(mo, S_KART_DRIFT_L1);
}
// Drifting Right - S_KART_DRIFT_R1
else if (mo->player->kartstuff[k_drift] > 0 && P_IsObjectOnGround(mo))
{
if (!(mo->state == &states[S_KART_DRIFT_R1] || mo->state == &states[S_KART_DRIFT_R2]))
P_SetPlayerMobjState(mo, S_KART_DRIFT_R1);
}
// Run frames - S_KART_RUN1 S_KART_RUN_L1 S_KART_RUN_R1
else if (mo->player->speed > FixedMul(mo->player->runspeed, mo->scale))
{
if (cmd->buttons & BT_DRIFTRIGHT && !(mo->state == &states[S_KART_RUN_R1] || mo->state == &states[S_KART_RUN_R2]))
P_SetPlayerMobjState(mo, S_KART_RUN_R1);
else if (cmd->buttons & BT_DRIFTLEFT && !(mo->state == &states[S_KART_RUN_L1] || mo->state == &states[S_KART_RUN_L2]))
P_SetPlayerMobjState(mo, S_KART_RUN_L1);
else if (!(cmd->buttons & BT_DRIFTRIGHT || cmd->buttons & BT_DRIFTLEFT) && !(mo->state == &states[S_KART_RUN1] || mo->state == &states[S_KART_RUN2]))
P_SetPlayerMobjState(mo, S_KART_RUN1);
else if ((mo->momx || mo->momy) && mo->player->panim != PA_WALK)
}
// Walk frames - S_KART_WALK1 S_KART_WALK_L1 S_KART_WALK_R1
else if (mo->player->speed <= FixedMul(mo->player->runspeed, mo->scale))
{
if (cmd->buttons & BT_DRIFTRIGHT && !(mo->state == &states[S_KART_WALK_R1] || mo->state == &states[S_KART_WALK_R2]))
P_SetPlayerMobjState(mo, S_KART_WALK_R1);
else if (cmd->buttons & BT_DRIFTLEFT && !(mo->state == &states[S_KART_WALK_L1] || mo->state == &states[S_KART_WALK_L2]))
P_SetPlayerMobjState(mo, S_KART_WALK_L1);
else if (!(cmd->buttons & BT_DRIFTRIGHT || cmd->buttons & BT_DRIFTLEFT) && !(mo->state == &states[S_KART_WALK1] || mo->state == &states[S_KART_WALK2]))
P_SetPlayerMobjState(mo, S_KART_WALK1);
else if (!mo->momx && !mo->momy && mo->player->panim != PA_IDLE)
P_SetPlayerMobjState(mo, S_KART_STND);
}
}

View File

@ -4075,7 +4075,7 @@ DoneSection2:
if (player->mo->momz > 0)
break;
if (player->cmd.buttons & BT_USE)
if (player->cmd.buttons & BT_BRAKE)
break;
if (!(player->pflags & PF_SLIDING) && player->mo->state == &states[player->mo->info->painstate])

View File

@ -907,17 +907,20 @@ void P_GivePlayerRings(player_t *player, INT32 num_rings)
if (!G_IsSpecialStage(gamemap) || !useNightsSS)
player->totalring += num_rings;
//{ SRB2kart - rings don't really do anything, but we don't want the player spilling them later.
/*
// Can only get up to 9999 rings, sorry!
if (player->mo->health > 10000)
{
player->mo->health = 10000;
player->health = 10000;
}
else if (player->mo->health < 1)
else if (player->mo->health < 1)*/
{
player->mo->health = 1;
player->health = 1;
}
//}
// Now extra life bonuses are handled here instead of in P_MovePlayer, since why not?
if (!ultimatemode && !modeattacking && !G_IsSpecialStage(gamemap) && G_GametypeUsesLives())
@ -2705,7 +2708,7 @@ static void P_DoClimbing(player_t *player)
else if ((!(player->mo->momx || player->mo->momy || player->mo->momz) || !climb) && player->mo->state != &states[S_PLAY_CLIMB1])
P_SetPlayerMobjState(player->mo, S_PLAY_CLIMB1);
if (cmd->buttons & BT_USE && !(player->pflags & PF_JUMPSTASIS))
if (cmd->buttons & BT_BRAKE && !(player->pflags & PF_JUMPSTASIS))
{
player->climbing = 0;
player->pflags |= PF_JUMPED;
@ -3194,7 +3197,7 @@ static void P_DoFiring(player_t *player, ticcmd_t *cmd)
I_Assert(player != NULL);
I_Assert(!P_MobjWasRemoved(player->mo));
if (cmd->buttons & BT_ATTACK || cmd->buttons & BT_FIRENORMAL)
if (cmd->buttons & BT_ATTACK)
{
if (!(player->pflags & PF_ATTACKDOWN) && player->powers[pw_shield] & SH_FIREFLOWER && !player->climbing)
{
@ -3209,10 +3212,10 @@ static void P_DoFiring(player_t *player, ticcmd_t *cmd)
mobj_t *mo = NULL;
player->pflags |= PF_ATTACKDOWN;
if (cmd->buttons & BT_FIRENORMAL) // No powers, just a regular ring.
goto firenormal; //code repetition sucks.
//if (cmd->buttons & BT_FIRENORMAL) // No powers, just a regular ring.
// goto firenormal; //code repetition sucks.
// Bounce ring
else if (player->currentweapon == WEP_BOUNCE && player->powers[pw_bouncering])
if (player->currentweapon == WEP_BOUNCE && player->powers[pw_bouncering])
{
if (player->health <= 1)
return;
@ -3333,7 +3336,7 @@ static void P_DoFiring(player_t *player, ticcmd_t *cmd)
// No powers, just a regular ring.
else
{
firenormal:
//firenormal:
// Infinity ring was selected.
// Mystic wants this ONLY to happen specifically if it's selected,
// and to not be able to get around it EITHER WAY with firenormal.
@ -3572,6 +3575,9 @@ void P_DoJump(player_t *player, boolean soundandstate)
if (!player->jumpfactor)
return;
if (player->kartstuff[k_spinouttimer]) // SRB2kart
return;
if (player->climbing)
{
@ -3747,7 +3753,7 @@ static void P_DoSpinDash(player_t *player, ticcmd_t *cmd)
return;
#ifdef HAVE_BLUA
if (cmd->buttons & BT_USE)
if (cmd->buttons & BT_BRAKE)
{
if (LUAh_SpinSpecial(player))
return;
@ -3758,7 +3764,7 @@ static void P_DoSpinDash(player_t *player, ticcmd_t *cmd)
if ((player->charability2 == CA2_SPINDASH) && !(player->pflags & PF_SLIDING) && !player->exiting
&& !P_PlayerInPain(player)) // subsequent revs
{
if ((cmd->buttons & BT_USE) && player->speed < FixedMul(5<<FRACBITS, player->mo->scale) && !player->mo->momz && onground && !(player->pflags & PF_USEDOWN) && !(player->pflags & PF_SPINNING)
if ((cmd->buttons & BT_BRAKE) && player->speed < FixedMul(5<<FRACBITS, player->mo->scale) && !player->mo->momz && onground && !(player->pflags & PF_USEDOWN) && !(player->pflags & PF_SPINNING)
#ifdef ESLOPE
&& (!player->mo->standingslope || abs(player->mo->standingslope->zdelta) < FRACUNIT/2)
#endif
@ -3772,7 +3778,7 @@ static void P_DoSpinDash(player_t *player, ticcmd_t *cmd)
//P_SetPlayerMobjState(player->mo, S_PLAY_ATK1);
player->pflags |= PF_USEDOWN;
}
else if ((cmd->buttons & BT_USE) && (player->pflags & PF_STARTDASH))
else if ((cmd->buttons & BT_BRAKE) && (player->pflags & PF_STARTDASH))
{
player->dashspeed += FixedMul(FRACUNIT, player->mo->scale);
@ -3790,7 +3796,7 @@ static void P_DoSpinDash(player_t *player, ticcmd_t *cmd)
// If not moving up or down, and travelling faster than a speed of four while not holding
// down the spin button and not spinning.
// AKA Just go into a spin on the ground, you idiot. ;)
else if ((cmd->buttons & BT_USE || ((twodlevel || (player->mo->flags2 & MF2_TWOD)) && cmd->forwardmove < -20))
else if ((cmd->buttons & BT_BRAKE || ((twodlevel || (player->mo->flags2 & MF2_TWOD)) && cmd->forwardmove < -20))
&& !player->climbing && !player->mo->momz && onground && (player->speed > FixedMul(5<<FRACBITS, player->mo->scale)
#ifdef ESLOPE
|| (player->mo->standingslope && abs(player->mo->standingslope->zdelta) >= FRACUNIT/2)
@ -3929,7 +3935,7 @@ static void P_DoJumpStuff(player_t *player, ticcmd_t *cmd)
if (player->pflags & PF_JUMPSTASIS)
return;
if (cmd->buttons & BT_USE && !(player->pflags & PF_JUMPDOWN) && !player->exiting && !P_PlayerInPain(player))
if (cmd->buttons & BT_BRAKE && !(player->pflags & PF_JUMPDOWN) && !player->exiting && !P_PlayerInPain(player))
{
if (onground || player->climbing || player->pflags & (PF_CARRIED|PF_ITEMHANG|PF_ROPEHANG))
{}
@ -4533,7 +4539,7 @@ static void P_3dMovement(player_t *player)
cmd = &player->cmd;
if (player->exiting || player->pflags & PF_STASIS)
if (player->exiting || player->pflags & PF_STASIS || player->kartstuff[k_spinouttimer]) // pw_introcam?
{
cmd->forwardmove = cmd->sidemove = 0;
if (player->pflags & PF_GLIDING)
@ -4875,7 +4881,7 @@ static void P_SpectatorMovement(player_t *player)
if (cmd->buttons & BT_JUMP)
player->mo->z += FRACUNIT*16;
else if (cmd->buttons & BT_USE)
else if (cmd->buttons & BT_BRAKE)
player->mo->z -= FRACUNIT*16;
// Aiming needed for SEENAMES, etc.
@ -5916,8 +5922,8 @@ static void P_NiGHTSMovement(player_t *player)
// No more bumper braking
if (!player->bumpertime
&& ((cmd->buttons & (BT_CAMLEFT|BT_CAMRIGHT)) == (BT_CAMLEFT|BT_CAMRIGHT)
|| (cmd->buttons & BT_USE)))
&& ((cmd->buttons & (BT_FORWARD|BT_BACKWARD)) == (BT_FORWARD|BT_BACKWARD)
|| (cmd->buttons & BT_BRAKE)))
{
if (!(player->pflags & PF_SKIDDOWN))
S_StartSound(player->mo, sfx_ngskid);
@ -6477,6 +6483,23 @@ static void P_MovePlayer(player_t *player)
// MOVEMENT CODE //
//////////////////////
//{ SRB2kart slip net
if (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] == 0)
{
K_SpinPlayer(player, NULL); // Here just for in-level oil spills now
}
// If you have one but not the other, we should get rid of the one we have
else if (player->kartstuff[k_spinouttimer] == 0 && player->kartstuff[k_spinout] > 0)
player->kartstuff[k_spinout] = 0;
// If somehow the power has gotten larger than the timer, it should be lowered back to it
if (player->kartstuff[k_spinouttimer] > player->kartstuff[k_spinout])
player->kartstuff[k_spinouttimer] = player->kartstuff[k_spinout];
//}
if (twodlevel || player->mo->flags2 & MF2_TWOD) // 2d-level, so special control applies.
P_2dMovement(player);
else
@ -6530,11 +6553,11 @@ static void P_MovePlayer(player_t *player)
// Standing frames - S_KART_STND S_KART_STND_L S_KART_STND_R
if (player->speed == 0)
{
if (cmd->buttons & BT_WEAPONNEXT && !(player->mo->state == &states[S_KART_STND_R]))
if (cmd->buttons & BT_DRIFTRIGHT && !(player->mo->state == &states[S_KART_STND_R]))
P_SetPlayerMobjState(player->mo, S_KART_STND_R);
else if (cmd->buttons & BT_WEAPONPREV && !(player->mo->state == &states[S_KART_STND_L]))
else if (cmd->buttons & BT_DRIFTLEFT && !(player->mo->state == &states[S_KART_STND_L]))
P_SetPlayerMobjState(player->mo, S_KART_STND_L);
else if (!(cmd->buttons & BT_WEAPONNEXT || cmd->buttons & BT_WEAPONPREV) && !(player->mo->state == &states[S_KART_STND]))
else if (!(cmd->buttons & BT_DRIFTRIGHT || cmd->buttons & BT_DRIFTLEFT) && !(player->mo->state == &states[S_KART_STND]))
P_SetPlayerMobjState(player->mo, S_KART_STND);
}
// Drifting Left - S_KART_DRIFT_L1
@ -6552,21 +6575,21 @@ static void P_MovePlayer(player_t *player)
// Run frames - S_KART_RUN1 S_KART_RUN_L1 S_KART_RUN_R1
else if (player->speed > runspd)
{
if (cmd->buttons & BT_WEAPONNEXT && !(player->mo->state == &states[S_KART_RUN_R1] || player->mo->state == &states[S_KART_RUN_R2]))
if (cmd->buttons & BT_DRIFTRIGHT && !(player->mo->state == &states[S_KART_RUN_R1] || player->mo->state == &states[S_KART_RUN_R2]))
P_SetPlayerMobjState(player->mo, S_KART_RUN_R1);
else if (cmd->buttons & BT_WEAPONPREV && !(player->mo->state == &states[S_KART_RUN_L1] || player->mo->state == &states[S_KART_RUN_L2]))
else if (cmd->buttons & BT_DRIFTLEFT && !(player->mo->state == &states[S_KART_RUN_L1] || player->mo->state == &states[S_KART_RUN_L2]))
P_SetPlayerMobjState(player->mo, S_KART_RUN_L1);
else if (!(cmd->buttons & BT_WEAPONNEXT || cmd->buttons & BT_WEAPONPREV) && !(player->mo->state == &states[S_KART_RUN1] || player->mo->state == &states[S_KART_RUN2]))
else if (!(cmd->buttons & BT_DRIFTRIGHT || cmd->buttons & BT_DRIFTLEFT) && !(player->mo->state == &states[S_KART_RUN1] || player->mo->state == &states[S_KART_RUN2]))
P_SetPlayerMobjState(player->mo, S_KART_RUN1);
}
// Walk frames - S_KART_WALK1 S_KART_WALK_L1 S_KART_WALK_R1
else if (player->speed <= runspd)
{
if (cmd->buttons & BT_WEAPONNEXT && !(player->mo->state == &states[S_KART_WALK_R1] || player->mo->state == &states[S_KART_WALK_R2]))
if (cmd->buttons & BT_DRIFTRIGHT && !(player->mo->state == &states[S_KART_WALK_R1] || player->mo->state == &states[S_KART_WALK_R2]))
P_SetPlayerMobjState(player->mo, S_KART_WALK_R1);
else if (cmd->buttons & BT_WEAPONPREV && !(player->mo->state == &states[S_KART_WALK_L1] || player->mo->state == &states[S_KART_WALK_L2]))
else if (cmd->buttons & BT_DRIFTLEFT && !(player->mo->state == &states[S_KART_WALK_L1] || player->mo->state == &states[S_KART_WALK_L2]))
P_SetPlayerMobjState(player->mo, S_KART_WALK_L1);
else if (!(cmd->buttons & BT_WEAPONNEXT || cmd->buttons & BT_WEAPONPREV) && !(player->mo->state == &states[S_KART_WALK1] || player->mo->state == &states[S_KART_WALK2]))
else if (!(cmd->buttons & BT_DRIFTRIGHT || cmd->buttons & BT_DRIFTLEFT) && !(player->mo->state == &states[S_KART_WALK1] || player->mo->state == &states[S_KART_WALK2]))
P_SetPlayerMobjState(player->mo, S_KART_WALK1);
}
}
@ -6575,7 +6598,7 @@ static void P_MovePlayer(player_t *player)
// If your running animation is playing, and you're
// going too slow, switch back to the walking frames.
if (player->panim == PA_RUN && player->speed < runspd)
if (player->panim == PA_RUN && player->speed < runspd && player->kartstuff[k_spinouttimer] == 0)
P_SetPlayerMobjState(player->mo, S_KART_WALK1); // SRB2kart - was S_PLAY_RUN1
// If Springing, but travelling DOWNWARD, change back!
@ -6591,34 +6614,33 @@ static void P_MovePlayer(player_t *player)
//{ SRB2kart
// Engine Sounds.
/* // -- Need to load these sounds into game first
if (!player->exiting)
{
if (player->speed == 0 && onground && player->speed == 0 && leveltime % 6 == 0 && kartmode)
if (player->speed == 0 && onground && player->speed == 0 && leveltime % 6 == 0)
S_StartSound(player->mo, sfx_kart1);
if ((player->speed < runspd && player->speed != 0) && leveltime % 8 == 0 && kartmode)
if ((player->speed < runspd && player->speed != 0) && leveltime % 8 == 0)
S_StartSound(player->mo, sfx_kart2);
if ((player->speed > runspd) && leveltime % 8 == 0 && kartmode)
if ((player->speed > runspd) && leveltime % 8 == 0)
S_StartSound(player->mo, sfx_kart3);
// Drifting sound
if (kartmode)
{
// Leveltime being 50 might take a while at times. We'll start it up once, isntantly.
if ((player->powers[pw_drift] == 1 || player->powers[pw_drift] == -1) && onground && !S_SoundPlaying(NULL, sfx_mkdrft))
if ((player->kartstuff[k_drift] == 1 || player->kartstuff[k_drift] == -1) && onground && !S_SoundPlaying(NULL, sfx_mkdrft))
S_StartSound(player->mo, sfx_mkdrft);
// Start looping the sound now.
else if (leveltime % 50 == 0 && ((player->powers[pw_drift] == 1 || player->powers[pw_drift] == -1) && onground))
else if (leveltime % 50 == 0 && ((player->kartstuff[k_drift] == 1 || player->kartstuff[k_drift] == -1) && onground))
S_StartSound(player->mo, sfx_mkdrft);
// Ok, we'll stop now.
else if ((player->powers[pw_drift] == 0)
else if ((player->kartstuff[k_drift] == 0)
&& (player == &players[consoleplayer] || (splitscreen && player == &players[secondarydisplayplayer])))
S_StopSoundByID(player->mo, sfx_mkdrft);
}
}
*/
K_MoveKartPlayer(player, onground);
//}
@ -6829,7 +6851,7 @@ static void P_MovePlayer(player_t *player)
S_StartSound(player->mo, sfx_putput);
// Descend
if (cmd->buttons & BT_USE && !(player->pflags & PF_STASIS) && !player->exiting)
if (cmd->buttons & BT_BRAKE && !(player->pflags & PF_STASIS) && !player->exiting)
if (P_MobjFlip(player->mo)*player->mo->momz > -FixedMul(5*actionspd, player->mo->scale))
P_SetObjectMomZ(player->mo, -actionspd/2, true);
@ -6914,7 +6936,7 @@ static void P_MovePlayer(player_t *player)
{
fixed_t tweenvalue = max(abs(cmd->forwardmove), abs(cmd->sidemove));
if (tweenvalue < 10 && (cmd->buttons & (BT_CAMLEFT|BT_CAMRIGHT)) == (BT_CAMLEFT|BT_CAMRIGHT)) {
if (tweenvalue < 10 && (cmd->buttons & (BT_FORWARD|BT_BACKWARD)) == (BT_FORWARD|BT_BACKWARD)) {
tempangle = (cmd->angleturn << 16);
tweenvalue = 16;
}
@ -6957,11 +6979,11 @@ static void P_MovePlayer(player_t *player)
///////////////////////////
/* // SRB2kart - what's a shield? Never heard of it. Never happened. Nope.
if (cmd->buttons & BT_USE) // Spin button effects
if (cmd->buttons & BT_BRAKE) // Spin button effects
{
if (player->pflags & PF_JUMPED) // If the player is jumping
{
if (!(player->pflags & PF_USEDOWN)) // If the player is not holding down BT_USE
if (!(player->pflags & PF_USEDOWN)) // If the player is not holding down BT_BRAKE
{
// Jump shield activation
if (!P_PlayerInPain(player) // If the player is not in pain
@ -7059,7 +7081,7 @@ static void P_MovePlayer(player_t *player)
P_DoTeeter(player);
// Toss a flag
if (G_GametypeHasTeams() && (cmd->buttons & BT_TOSSFLAG) && !(player->powers[pw_super]) && !(player->tossdelay))
if (G_GametypeHasTeams() && (cmd->buttons & BT_SPECTATE) && !(player->powers[pw_super]) && !(player->tossdelay))
{
if (!(player->gotflag & (GF_REDFLAG|GF_BLUEFLAG)))
P_PlayerEmeraldBurst(player, true); // Toss emeralds
@ -7104,7 +7126,7 @@ static void P_MovePlayer(player_t *player)
P_DamageMobj(player->mo, NULL, NULL, 42000); // Respawn crushed spectators
else
{
P_SquishPlayerMobj(player->mo, NULL); // SRB2kart - we don't kill when squished, we squish when squished.
K_SquishPlayer(player, NULL); // SRB2kart - we don't kill when squished, we squish when squished.
/*
mobj_t *killer = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_NULL);
killer->threshold = 44; // Special flag that it was crushing which killed you.
@ -7373,7 +7395,7 @@ static void P_DoRopeHang(player_t *player)
player->mo->height = P_GetPlayerHeight(player);
if (player->cmd.buttons & BT_USE && !(player->pflags & PF_STASIS)) // Drop off of the rope
if (player->cmd.buttons & BT_BRAKE && !(player->pflags & PF_STASIS)) // Drop off of the rope
{
P_SetTarget(&player->mo->tracer, NULL);
@ -7780,7 +7802,7 @@ static void P_DeathThink(player_t *player)
// continue logic
if (!(netgame || multiplayer) && player->lives <= 0)
{
if (player->deadtimer > TICRATE && (cmd->buttons & BT_USE || cmd->buttons & BT_JUMP) && player->continues > 0)
if (player->deadtimer > TICRATE && (cmd->buttons & BT_BRAKE || cmd->buttons & BT_ACCELERATE || cmd->buttons & BT_JUMP) && player->continues > 0)
G_UseContinue();
else if (player->deadtimer >= gameovertics)
G_UseContinue(); // Even if we don't have one this handles ending the game
@ -8091,7 +8113,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
}
#ifdef REDSANALOG
if (P_AnalogMove(player) && (player->cmd.buttons & (BT_CAMLEFT|BT_CAMRIGHT)) == (BT_CAMLEFT|BT_CAMRIGHT)) {
if (P_AnalogMove(player) && (player->cmd.buttons & (BT_FORWARD|BT_BACKWARD)) == (BT_FORWARD|BT_BACKWARD)) {
camstill = true;
if (camspeed < 4*FRACUNIT/5)
@ -8148,9 +8170,9 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
if (!objectplacing && !(twodlevel || (mo->flags2 & MF2_TWOD)) && !(player->pflags & PF_NIGHTSMODE) && displayplayer == consoleplayer)
{
#ifdef REDSANALOG
if ((player->cmd.buttons & (BT_CAMLEFT|BT_CAMRIGHT)) == (BT_CAMLEFT|BT_CAMRIGHT)); else
if ((player->cmd.buttons & (BT_FORWARD|BT_BACKWARD)) == (BT_FORWARD|BT_BACKWARD)); else
#endif
if (player->cmd.buttons & BT_CAMLEFT)
if (player->cmd.buttons & BT_FORWARD)
{
if (thiscam == &camera)
{
@ -8169,7 +8191,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
: camrotate - 2);
}
}
else if (player->cmd.buttons & BT_CAMRIGHT)
else if (player->cmd.buttons & BT_BACKWARD)
{
if (thiscam == &camera)
{
@ -8992,7 +9014,7 @@ void P_PlayerThink(player_t *player)
if ((gametype == GT_RACE || gametype == GT_COMPETITION) && leveltime < 4*TICRATE)
{
cmd->buttons &= BT_USE; // Remove all buttons except BT_USE
cmd->buttons &= BT_BRAKE; // Remove all buttons except BT_BRAKE // TODO: ?
cmd->forwardmove = 0;
cmd->sidemove = 0;
}
@ -9132,7 +9154,7 @@ void P_PlayerThink(player_t *player)
// check for use
if (!(player->pflags & PF_NIGHTSMODE))
{
if (cmd->buttons & BT_USE)
if (cmd->buttons & BT_BRAKE)
player->pflags |= PF_USEDOWN;
else
player->pflags &= ~PF_USEDOWN;
@ -9345,6 +9367,7 @@ void P_PlayerAfterThink(player_t *player)
//player->mo->eflags &= ~MFE_VERTICALFLIP;
}
/* SRB2kart - don't need no weapon rings
if (!(player->pflags & PF_WPNDOWN))
{
if (cmd->buttons & BT_WEAPONNEXT)
@ -9455,6 +9478,7 @@ void P_PlayerAfterThink(player_t *player)
if (P_IsLocalPlayer(player) && (player->pflags & PF_WPNDOWN) && player->currentweapon != oldweapon)
S_StartSound(NULL, sfx_wepchg);
*/
/* // SRB2kart
if (player->pflags & PF_GLIDING)

View File

@ -465,6 +465,38 @@ sfxinfo_t S_sfx[NUMSFX] =
{"s3kdal", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"s3kdbs", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"s3kdbl", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
// SRB2kart
{"lkt1", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"lkt2", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"lkt3", true, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"kart1", false, 48, 16, -1, NULL, 0, -1, -1, LUMPERROR},
{"kart2", false, 48, 16, -1, NULL, 0, -1, -1, LUMPERROR},
{"kart3", false, 48, 16, -1, NULL, 0, -1, -1, LUMPERROR},
{"mlap", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"mush", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"star", true, 64, 16, -1, NULL, 0, -1, -1, LUMPERROR},
{"mega", true, 64, 16, -1, NULL, 0, -1, -1, LUMPERROR},
{"bomb", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"bomb2", true, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR},
{"peel", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"slip", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"fake", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"grnshl", true, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR},
{"redshl", true, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR},
{"shbrk", true, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR},
{"mkdrft", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"mkslid", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"mkitem", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"mkitem1", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"mkitem2", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"mkitem3", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"mkitem4", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"mkitem5", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"mkitem6", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"mkitem7", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"mkitem8", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR},
{"mkitemF", true, 72, 0, -1, NULL, 0, -1, -1, LUMPERROR},
// skin sounds free slots to add sounds at run time (Boris HACK!!!)
// initialized to NULL

View File

@ -529,6 +529,42 @@ typedef enum
sfx_s3kdbs,
sfx_s3kdbl,
sfx_lkt1,
sfx_lkt2,
sfx_lkt3,
sfx_kart1,
sfx_kart2,
sfx_kart3,
sfx_mlap,
sfx_mush,
sfx_star,
sfx_mega,
sfx_bomb,
sfx_bomb2,
sfx_peel,
sfx_slip,
sfx_fake,
sfx_grnshl,
sfx_redshl,
sfx_shbrk,
sfx_mkdrft,
sfx_mkslid,
sfx_mkitem,
sfx_mkitem1,
sfx_mkitem2,
sfx_mkitem3,
sfx_mkitem4,
sfx_mkitem5,
sfx_mkitem6,
sfx_mkitem7,
sfx_mkitem8,
sfx_mkitemF,
sfx_taunt1,
sfx_taunt2,
sfx_taunt3,
sfx_taunt4,
// free slots for S_AddSoundFx() at run-time --------------------
sfx_freeslot0,
//

View File

@ -68,6 +68,10 @@ extern fixed_t finetangent[FINEANGLES/2];
#define ANGLE_337h 0xF0000000
#define ANGLE_MAX 0xFFFFFFFF
// SRB2kart
#define ANGLE_120 0x53333333
#define ANGLE_240 0xA6666666
typedef UINT32 angle_t;
// To get a global angle from Cartesian coordinates, the coordinates are

View File

@ -685,7 +685,7 @@ void Y_Ticker(void)
return;
for (i = 0; i < MAXPLAYERS; i++)
if (playeringame[i] && (players[i].cmd.buttons & BT_USE))
if (playeringame[i] && (players[i].cmd.buttons & BT_BRAKE || players[i].cmd.buttons & BT_ACCELERATE))
skip = true;
// bonuses count down by 222 each tic
@ -748,7 +748,7 @@ void Y_Ticker(void)
return;
for (i = 0; i < MAXPLAYERS; i++)
if (playeringame[i] && (players[i].cmd.buttons & BT_USE))
if (playeringame[i] && (players[i].cmd.buttons & BT_BRAKE || players[i].cmd.buttons & BT_ACCELERATE))
skip = true;
if (tallydonetic != 0)