mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Delete respawn command, put Ring shooter on Y
This commit is contained in:
parent
f9317b265e
commit
668d832ca1
10 changed files with 87 additions and 111 deletions
|
|
@ -92,7 +92,6 @@ static void Got_PickVotecmd(UINT8 **cp, INT32 playernum);
|
|||
static void Got_RequestAddfilecmd(UINT8 **cp, INT32 playernum);
|
||||
static void Got_Addfilecmd(UINT8 **cp, INT32 playernum);
|
||||
static void Got_Pause(UINT8 **cp, INT32 playernum);
|
||||
static void Got_Respawn(UINT8 **cp, INT32 playernum);
|
||||
static void Got_RandomSeed(UINT8 **cp, INT32 playernum);
|
||||
static void Got_RunSOCcmd(UINT8 **cp, INT32 playernum);
|
||||
static void Got_Teamchange(UINT8 **cp, INT32 playernum);
|
||||
|
|
@ -177,7 +176,6 @@ static void Command_ListWADS_f(void);
|
|||
static void Command_ListDoomednums_f(void);
|
||||
static void Command_RunSOC(void);
|
||||
static void Command_Pause(void);
|
||||
static void Command_Respawn(void);
|
||||
|
||||
static void Command_Version_f(void);
|
||||
#ifdef UPDATE_ALERT
|
||||
|
|
@ -606,7 +604,6 @@ const char *netxcmdnames[MAXNETXCMD - 1] =
|
|||
"RUNSOC", // XD_RUNSOC
|
||||
"REQADDFILE", // XD_REQADDFILE
|
||||
"SETMOTD", // XD_SETMOTD
|
||||
"RESPAWN", // XD_RESPAWN
|
||||
"DEMOTED", // XD_DEMOTED
|
||||
"LUACMD", // XD_LUACMD
|
||||
"LUAVAR", // XD_LUAVAR
|
||||
|
|
@ -664,7 +661,6 @@ void D_RegisterServerCommands(void)
|
|||
RegisterNetXCmd(XD_ADDFILE, Got_Addfilecmd);
|
||||
RegisterNetXCmd(XD_REQADDFILE, Got_RequestAddfilecmd);
|
||||
RegisterNetXCmd(XD_PAUSE, Got_Pause);
|
||||
RegisterNetXCmd(XD_RESPAWN, Got_Respawn);
|
||||
RegisterNetXCmd(XD_RUNSOC, Got_RunSOCcmd);
|
||||
RegisterNetXCmd(XD_LUACMD, Got_Luacmd);
|
||||
RegisterNetXCmd(XD_LUAFILE, Got_LuaFile);
|
||||
|
|
@ -711,7 +707,6 @@ void D_RegisterServerCommands(void)
|
|||
|
||||
COM_AddCommand("runsoc", Command_RunSOC);
|
||||
COM_AddCommand("pause", Command_Pause);
|
||||
COM_AddCommand("respawn", Command_Respawn);
|
||||
|
||||
COM_AddCommand("gametype", Command_ShowGametype_f);
|
||||
COM_AddCommand("version", Command_Version_f);
|
||||
|
|
@ -3316,64 +3311,6 @@ static void Got_Pause(UINT8 **cp, INT32 playernum)
|
|||
G_ResetAllDeviceRumbles();
|
||||
}
|
||||
|
||||
// Command for stuck characters in netgames, griefing, etc.
|
||||
static void Command_Respawn(void)
|
||||
{
|
||||
UINT8 buf[4];
|
||||
UINT8 *cp = buf;
|
||||
|
||||
|
||||
|
||||
if (!(gamestate == GS_LEVEL || gamestate == GS_INTERMISSION || gamestate == GS_VOTING))
|
||||
{
|
||||
CONS_Printf(M_GetText("You must be in a level to use this.\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (players[consoleplayer].mo && !P_IsObjectOnGround(players[consoleplayer].mo)) // KART: Nice try, but no, you won't be cheesing spb anymore.
|
||||
{
|
||||
CONS_Printf(M_GetText("You must be on the floor to use this.\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
// todo: this probably isnt necessary anymore with v2
|
||||
if (players[consoleplayer].mo && (P_PlayerInPain(&players[consoleplayer]) || spbplace == players[consoleplayer].position)) // KART: Nice try, but no, you won't be cheesing spb anymore (x2)
|
||||
{
|
||||
CONS_Printf(M_GetText("Nice try.\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
WRITEINT32(cp, consoleplayer);
|
||||
SendNetXCmd(XD_RESPAWN, &buf, 4);
|
||||
}
|
||||
|
||||
static void Got_Respawn(UINT8 **cp, INT32 playernum)
|
||||
{
|
||||
INT32 respawnplayer = READINT32(*cp);
|
||||
|
||||
// You can't respawn someone else. Nice try, there.
|
||||
if (respawnplayer != playernum || P_PlayerInPain(&players[respawnplayer]) || spbplace == players[respawnplayer].position) // srb2kart: "|| (!(gametyperules & GTR_CIRCUIT))"
|
||||
{
|
||||
CONS_Alert(CONS_WARNING, M_GetText("Illegal respawn command received from %s\n"), player_names[playernum]);
|
||||
if (server)
|
||||
SendKick(playernum, KICK_MSG_CON_FAIL);
|
||||
return;
|
||||
}
|
||||
|
||||
if (players[respawnplayer].mo)
|
||||
{
|
||||
// incase the above checks were modified to allow sending a respawn on these occasions:
|
||||
if (!P_IsObjectOnGround(players[respawnplayer].mo))
|
||||
return;
|
||||
|
||||
if (K_PlayerEBrake(&players[respawnplayer]))
|
||||
K_SpawnRingShooter(&players[respawnplayer]);
|
||||
else
|
||||
P_DamageMobj(players[respawnplayer].mo, NULL, NULL, 1, DMG_DEATHPIT);
|
||||
demo_extradata[playernum] |= DXD_RESPAWN;
|
||||
}
|
||||
}
|
||||
|
||||
/** Deals with an ::XD_RANDOMSEED message in a netgame.
|
||||
* These messages set the position of the random number LUT and are crucial to
|
||||
* correct synchronization.
|
||||
|
|
|
|||
|
|
@ -158,28 +158,27 @@ typedef enum
|
|||
XD_RUNSOC, // 15
|
||||
XD_REQADDFILE, // 16
|
||||
XD_SETMOTD, // 17
|
||||
XD_RESPAWN, // 18
|
||||
XD_DEMOTED, // 19
|
||||
XD_LUACMD, // 20
|
||||
XD_LUAVAR, // 21
|
||||
XD_LUAFILE, // 22
|
||||
XD_DEMOTED, // 18
|
||||
XD_LUACMD, // 19
|
||||
XD_LUAVAR, // 20
|
||||
XD_LUAFILE, // 21
|
||||
|
||||
// SRB2Kart
|
||||
XD_SETUPVOTE, // 23
|
||||
XD_MODIFYVOTE, // 24
|
||||
XD_PICKVOTE, // 25
|
||||
XD_REMOVEPLAYER,// 26
|
||||
XD_PARTYINVITE, // 27
|
||||
XD_ACCEPTPARTYINVITE, // 28
|
||||
XD_LEAVEPARTY, // 29
|
||||
XD_CANCELPARTYINVITE, // 30
|
||||
XD_CHEAT, // 31
|
||||
XD_ADDBOT, // 32
|
||||
XD_DISCORD, // 33
|
||||
XD_PLAYSOUND, // 34
|
||||
XD_SCHEDULETASK, // 35
|
||||
XD_SCHEDULECLEAR, // 36
|
||||
XD_AUTOMATE, // 37
|
||||
XD_SETUPVOTE, // 22
|
||||
XD_MODIFYVOTE, // 23
|
||||
XD_PICKVOTE, // 24
|
||||
XD_REMOVEPLAYER,// 25
|
||||
XD_PARTYINVITE, // 26
|
||||
XD_ACCEPTPARTYINVITE, // 27
|
||||
XD_LEAVEPARTY, // 28
|
||||
XD_CANCELPARTYINVITE, // 29
|
||||
XD_CHEAT, // 30
|
||||
XD_ADDBOT, // 31
|
||||
XD_DISCORD, // 32
|
||||
XD_PLAYSOUND, // 33
|
||||
XD_SCHEDULETASK, // 34
|
||||
XD_SCHEDULECLEAR, // 35
|
||||
XD_AUTOMATE, // 36
|
||||
|
||||
MAXNETXCMD
|
||||
} netxcmd_t;
|
||||
|
|
|
|||
|
|
@ -35,13 +35,15 @@ typedef enum
|
|||
BT_BRAKE = 1<<3, // Brake
|
||||
BT_ATTACK = 1<<4, // Use Item
|
||||
BT_LOOKBACK = 1<<5, // Look Backward
|
||||
BT_RESPAWN = 1<<6, // Respawn
|
||||
BT_VOTE = 1<<7, // Vote
|
||||
|
||||
BT_EBRAKEMASK = (BT_ACCELERATE|BT_BRAKE),
|
||||
BT_SPINDASHMASK = (BT_ACCELERATE|BT_BRAKE|BT_DRIFT),
|
||||
|
||||
// free: 1<<6 to 1<<12
|
||||
// free: 1<<8 to 1<<12
|
||||
|
||||
// Lua garbage
|
||||
// Lua garbage, replace with freeslottable buttons some day
|
||||
BT_LUAA = 1<<13,
|
||||
BT_LUAB = 1<<14,
|
||||
BT_LUAC = 1<<15,
|
||||
|
|
|
|||
|
|
@ -353,14 +353,6 @@ void G_ReadDemoExtraData(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
if (extradata & DXD_RESPAWN)
|
||||
{
|
||||
if (players[p].mo)
|
||||
{
|
||||
// Is this how this should work..?
|
||||
P_DamageMobj(players[p].mo, NULL, NULL, 1, DMG_DEATHPIT);
|
||||
}
|
||||
}
|
||||
if (extradata & DXD_WEAPONPREF)
|
||||
{
|
||||
WeaponPref_Parse(&demobuf.p, p);
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ extern UINT8 demo_writerng;
|
|||
#define DXD_NAME 0x08 // name changed
|
||||
#define DXD_COLOR 0x10 // color changed
|
||||
#define DXD_FOLLOWER 0x20 // follower was changed
|
||||
#define DXD_RESPAWN 0x40 // "respawn" command in console
|
||||
|
||||
#define DXD_WEAPONPREF 0x80 // netsynced playsim settings were changed
|
||||
|
||||
#define DXD_PST_PLAYING 0x01
|
||||
|
|
|
|||
12
src/g_game.c
12
src/g_game.c
|
|
@ -1340,6 +1340,18 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
|||
cmd->buttons |= BT_LOOKBACK;
|
||||
}
|
||||
|
||||
// respawn
|
||||
if (G_PlayerInputDown(forplayer, gc_respawn, 0))
|
||||
{
|
||||
cmd->buttons |= BT_RESPAWN;
|
||||
}
|
||||
|
||||
// mp general function button
|
||||
if (G_PlayerInputDown(forplayer, gc_vote, 0))
|
||||
{
|
||||
cmd->buttons |= BT_VOTE;
|
||||
}
|
||||
|
||||
// lua buttons a thru c
|
||||
if (G_PlayerInputDown(forplayer, gc_luaa, 0)) { cmd->buttons |= BT_LUAA; }
|
||||
if (G_PlayerInputDown(forplayer, gc_luab, 0)) { cmd->buttons |= BT_LUAB; }
|
||||
|
|
|
|||
|
|
@ -91,13 +91,13 @@ typedef enum
|
|||
|
||||
// alias gameplay controls
|
||||
gc_accel = gc_a,
|
||||
gc_brake = gc_x,
|
||||
gc_drift = gc_r,
|
||||
|
||||
gc_item = gc_l,
|
||||
gc_spindash = gc_c,
|
||||
|
||||
gc_lookback = gc_b,
|
||||
gc_spindash = gc_c,
|
||||
gc_brake = gc_x,
|
||||
gc_respawn = gc_y,
|
||||
gc_vote = gc_z,
|
||||
gc_item = gc_l,
|
||||
gc_drift = gc_r,
|
||||
} gamecontrols_e;
|
||||
|
||||
// mouse values are used once
|
||||
|
|
|
|||
44
src/k_kart.c
44
src/k_kart.c
|
|
@ -11387,6 +11387,15 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
{
|
||||
player->pflags &= ~PF_AIRFAILSAFE;
|
||||
}
|
||||
|
||||
if (K_AllowRingShooter(player) == true)
|
||||
{
|
||||
if ((cmd->buttons & BT_RESPAWN)
|
||||
&& !(player->oldcmd.buttons & BT_RESPAWN))
|
||||
{
|
||||
K_SpawnRingShooter(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void K_CheckSpectateStatus(void)
|
||||
|
|
@ -11775,6 +11784,31 @@ boolean K_Cooperative(void)
|
|||
|
||||
//}
|
||||
|
||||
boolean K_AllowRingShooter(player_t *player)
|
||||
{
|
||||
const fixed_t minSpeed = 6 * player->mo->scale;
|
||||
|
||||
if (player->respawn.state != RESPAWNST_NONE
|
||||
&& player->respawn.init == true)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (player->drift == 0
|
||||
&& player->justbumped == 0
|
||||
&& player->spindashboost == 0
|
||||
&& player->nocontrol == 0
|
||||
&& player->fastfall == 0
|
||||
&& player->speed < minSpeed
|
||||
&& P_PlayerInPain(player) == false
|
||||
&& P_IsObjectOnGround(player->mo) == true)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// I've tried to reduce redundancy as much as I can,
|
||||
// but check P_UpdateRingShooterParts if you edit this
|
||||
void K_SpawnRingShooter(player_t *player)
|
||||
|
|
@ -11792,7 +11826,7 @@ void K_SpawnRingShooter(player_t *player)
|
|||
K_FlipFromObject(base, mo);
|
||||
P_SetTarget(&base->target, mo);
|
||||
P_SetScale(base, base->destscale = FixedMul(base->destscale, scale));
|
||||
P_InitAngle(base, mo->angle);
|
||||
base->angle = mo->angle;
|
||||
base->scalespeed = FRACUNIT/2;
|
||||
base->extravalue1 = FRACUNIT; // horizontal scale
|
||||
base->extravalue2 = 0; // vertical scale
|
||||
|
|
@ -11818,7 +11852,7 @@ void K_SpawnRingShooter(player_t *player)
|
|||
part = part->hprev;
|
||||
P_SetTarget(&part->target, base);
|
||||
|
||||
P_InitAngle(part, base->angle - i * ANGLE_45);
|
||||
part->angle = base->angle - i * ANGLE_45;
|
||||
P_SetMobjState(part, S_RINGSHOOTER_NIPPLES);
|
||||
part->frame += frameNum;
|
||||
part->flags |= MF_NOTHINK;
|
||||
|
|
@ -11849,7 +11883,7 @@ void K_SpawnRingShooter(player_t *player)
|
|||
frameNum++;
|
||||
frameNum ^= FF_HORIZONTALFLIP;
|
||||
angle -= ANGLE_90;
|
||||
P_InitAngle(part, angle);
|
||||
part->angle = angle;
|
||||
part->frame += frameNum;
|
||||
part->extravalue1 = part->x - refNipple->x;
|
||||
part->extravalue2 = part->y - refNipple->y;
|
||||
|
|
@ -11861,7 +11895,7 @@ void K_SpawnRingShooter(player_t *player)
|
|||
part = P_SpawnMobjFromMobj(base, offset.x, offset.y, 0, MT_RINGSHOOTER_SCREEN);
|
||||
P_SetTarget(&base->tracer, part);
|
||||
P_SetTarget(&part->target, base);
|
||||
P_InitAngle(part, base->angle - ANGLE_45);
|
||||
part->angle = base->angle - ANGLE_45;
|
||||
part->extravalue1 = part->x - refNipple->x;
|
||||
part->extravalue2 = part->y - refNipple->y;
|
||||
part->flags |= MF_NOTHINK;
|
||||
|
|
@ -11873,7 +11907,7 @@ void K_SpawnRingShooter(player_t *player)
|
|||
P_SetTarget(&part->tracer, P_SpawnMobjFromMobj(part, 0, 0, 0, MT_OVERLAY));
|
||||
P_SetTarget(&part->tracer->target, part);
|
||||
part = part->tracer;
|
||||
P_InitAngle(part, part->target->angle);
|
||||
part->angle = part->target->angle;
|
||||
P_SetMobjState(part, S_RINGSHOOTER_NUMBERBACK + i);
|
||||
part->renderflags |= RF_DONTDRAW;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -189,6 +189,7 @@ boolean K_IsSPBInGame(void);
|
|||
void K_KartEbrakeVisuals(player_t *p);
|
||||
void K_HandleDirectionalInfluence(player_t *player);
|
||||
fixed_t K_DefaultPlayerRadius(player_t *player);
|
||||
boolean K_AllowRingShooter(player_t *player);
|
||||
void K_SpawnRingShooter(player_t *player);
|
||||
|
||||
// sound stuff for lua
|
||||
|
|
|
|||
|
|
@ -22,11 +22,10 @@ menuitem_t OPTIONS_ProfileControls[] = {
|
|||
{IT_CONTROL, "X", "Brake / Back",
|
||||
"PR_BTX", {.routine = M_ProfileSetControl}, gc_x, 0},
|
||||
|
||||
// @TODO What does this do???
|
||||
{IT_CONTROL, "Y", "N/A ?",
|
||||
{IT_CONTROL, "Y", "Respawn",
|
||||
"PR_BTY", {.routine = M_ProfileSetControl}, gc_y, 0},
|
||||
|
||||
{IT_CONTROL, "Z", "N/A ?",
|
||||
{IT_CONTROL, "Z", "Multiplayer quick-chat / quick-vote",
|
||||
"PR_BTZ", {.routine = M_ProfileSetControl}, gc_z, 0},
|
||||
|
||||
{IT_CONTROL, "L", "Use item",
|
||||
|
|
@ -62,13 +61,13 @@ menuitem_t OPTIONS_ProfileControls[] = {
|
|||
{IT_CONTROL, "RECORD LOSSLESS", "Record a pixel perfect GIF.",
|
||||
NULL, {.routine = M_ProfileSetControl}, gc_startlossless, 0},
|
||||
|
||||
{IT_CONTROL, "OPEN CHAT", "Opens chatbox in online games.",
|
||||
{IT_CONTROL, "OPEN CHAT", "Opens full keyboard chatting for online games.",
|
||||
NULL, {.routine = M_ProfileSetControl}, gc_talk, 0},
|
||||
|
||||
{IT_CONTROL, "OPEN TEAM CHAT", "Do we even have team gamemodes?",
|
||||
{IT_CONTROL, "OPEN TEAM CHAT", "Opens team-only full chat for online games.",
|
||||
NULL, {.routine = M_ProfileSetControl}, gc_teamtalk, 0},
|
||||
|
||||
{IT_CONTROL, "SHOW RANKINGS", "Show mid-game rankings.",
|
||||
{IT_CONTROL, "SHOW RANKINGS", "Display the current rankings mid-game.",
|
||||
NULL, {.routine = M_ProfileSetControl}, gc_rankings, 0},
|
||||
|
||||
{IT_CONTROL, "OPEN CONSOLE", "Opens the developer options console.",
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue