mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-05-10 10:51:42 +00:00
Some more minor comeback tweaks
- Comeback players are now 1 speed with -20 friction - Bombing gives 2 karma now - Item players should no longer be able to be hit - Attempted to fix instances of trying to bomb someone while they can't be touched causing you to lose all your karma and start a console message saying you're back in the game, despite not rewarding a balloon - Fixed a few places where kartspeed & kartweight were being read as fixed point numbers, despite being UINT8's - Fixed up kartstuff Lua support more, functions properly now
This commit is contained in:
parent
81c723b9b5
commit
a2767fe341
10 changed files with 162 additions and 64 deletions
|
|
@ -8021,6 +8021,20 @@ static powertype_t get_power(const char *word)
|
||||||
return pw_invulnerability;
|
return pw_invulnerability;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static kartstufftype_t get_kartstuff(const char *word)
|
||||||
|
{ // Returns the vlaue of k_ enumerations
|
||||||
|
kartstufftype_t i;
|
||||||
|
if (*word >= '0' && *word <= '9')
|
||||||
|
return atoi(word);
|
||||||
|
if (fastncmp("K_",word,2))
|
||||||
|
word += 2; // take off the k_
|
||||||
|
for (i = 0; i < NUMKARTSTUFF; i++)
|
||||||
|
if (fastcmp(word, KARTSTUFF_LIST[i]))
|
||||||
|
return i;
|
||||||
|
deh_warning("Couldn't find power named 'k_%s'",word);
|
||||||
|
return k_position;
|
||||||
|
}
|
||||||
|
|
||||||
/// \todo Make ANY of this completely over-the-top math craziness obey the order of operations.
|
/// \todo Make ANY of this completely over-the-top math craziness obey the order of operations.
|
||||||
static fixed_t op_mul(fixed_t a, fixed_t b) { return a*b; }
|
static fixed_t op_mul(fixed_t a, fixed_t b) { return a*b; }
|
||||||
static fixed_t op_div(fixed_t a, fixed_t b) { return a/b; }
|
static fixed_t op_div(fixed_t a, fixed_t b) { return a/b; }
|
||||||
|
|
@ -8611,8 +8625,8 @@ static inline int lib_getenum(lua_State *L)
|
||||||
}
|
}
|
||||||
return luaL_error(L, "power '%s' could not be found.\n", word);
|
return luaL_error(L, "power '%s' could not be found.\n", word);
|
||||||
}
|
}
|
||||||
else if (!mathlib && fastncmp("k_",word,3)) {
|
else if (!mathlib && fastncmp("k_",word,2)) {
|
||||||
p = word+3;
|
p = word+2;
|
||||||
for (i = 0; i < NUMKARTSTUFF; i++)
|
for (i = 0; i < NUMKARTSTUFF; i++)
|
||||||
if (fasticmp(p, KARTSTUFF_LIST[i])) {
|
if (fasticmp(p, KARTSTUFF_LIST[i])) {
|
||||||
lua_pushinteger(L, i);
|
lua_pushinteger(L, i);
|
||||||
|
|
@ -8620,8 +8634,8 @@ static inline int lib_getenum(lua_State *L)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if (mathlib && fastncmp("K_",word,3)) { // SOCs are ALL CAPS!
|
else if (mathlib && fastncmp("K_",word,2)) { // SOCs are ALL CAPS!
|
||||||
p = word+3;
|
p = word+2;
|
||||||
for (i = 0; i < NUMKARTSTUFF; i++)
|
for (i = 0; i < NUMKARTSTUFF; i++)
|
||||||
if (fastcmp(p, KARTSTUFF_LIST[i])) {
|
if (fastcmp(p, KARTSTUFF_LIST[i])) {
|
||||||
lua_pushinteger(L, i);
|
lua_pushinteger(L, i);
|
||||||
|
|
|
||||||
86
src/k_kart.c
86
src/k_kart.c
|
|
@ -1629,7 +1629,9 @@ fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower)
|
||||||
fixed_t k_speed = 150;
|
fixed_t k_speed = 150;
|
||||||
fixed_t g_cc = FRACUNIT;
|
fixed_t g_cc = FRACUNIT;
|
||||||
fixed_t xspd = 3072; // 4.6875 aka 3/64
|
fixed_t xspd = 3072; // 4.6875 aka 3/64
|
||||||
|
UINT8 kartspeed = player->kartspeed;
|
||||||
fixed_t finalspeed;
|
fixed_t finalspeed;
|
||||||
|
|
||||||
switch (K_GetKartCC())
|
switch (K_GetKartCC())
|
||||||
{
|
{
|
||||||
case 50:
|
case 50:
|
||||||
|
|
@ -1643,7 +1645,10 @@ fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
k_speed += player->kartspeed*3; // 153 - 177
|
if (gametype != GT_RACE && player->kartstuff[k_balloon] <= 0)
|
||||||
|
kartspeed = 1;
|
||||||
|
|
||||||
|
k_speed += kartspeed*3; // 153 - 177
|
||||||
|
|
||||||
finalspeed = FixedMul(FixedMul(k_speed<<14, g_cc), player->mo->scale);
|
finalspeed = FixedMul(FixedMul(k_speed<<14, g_cc), player->mo->scale);
|
||||||
|
|
||||||
|
|
@ -1655,9 +1660,13 @@ fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower)
|
||||||
fixed_t K_GetKartAccel(player_t *player)
|
fixed_t K_GetKartAccel(player_t *player)
|
||||||
{
|
{
|
||||||
fixed_t k_accel = 32; // 36;
|
fixed_t k_accel = 32; // 36;
|
||||||
|
UINT8 kartspeed = player->kartspeed;
|
||||||
|
|
||||||
//k_accel += 3 * (9 - player->kartspeed); // 36 - 60
|
if (gametype != GT_RACE && player->kartstuff[k_balloon] <= 0)
|
||||||
k_accel += 4 * (9 - player->kartspeed); // 32 - 64
|
kartspeed = 1;
|
||||||
|
|
||||||
|
//k_accel += 3 * (9 - kartspeed); // 36 - 60
|
||||||
|
k_accel += 4 * (9 - kartspeed); // 32 - 64
|
||||||
|
|
||||||
return FixedMul(k_accel, K_GetKartBoostPower(player, false));
|
return FixedMul(k_accel, K_GetKartBoostPower(player, false));
|
||||||
}
|
}
|
||||||
|
|
@ -1714,7 +1723,7 @@ void K_SpinPlayer(player_t *player, mobj_t *source)
|
||||||
|
|
||||||
if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0)
|
if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0)
|
||||||
|| player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0
|
|| player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0
|
||||||
|| (gametype != GT_RACE && (player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer])))
|
|| (gametype != GT_RACE && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (source && source != player->mo && source->player && !source->player->kartstuff[k_sounds])
|
if (source && source != player->mo && source->player && !source->player->kartstuff[k_sounds])
|
||||||
|
|
@ -1777,8 +1786,8 @@ void K_SquishPlayer(player_t *player, mobj_t *source)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || player->kartstuff[k_startimer] > 0
|
if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || player->kartstuff[k_startimer] > 0
|
||||||
|| player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0
|
|| player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0
|
||||||
|| (gametype != GT_RACE && (player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer])))
|
|| (gametype != GT_RACE && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
player->kartstuff[k_mushroomtimer] = 0;
|
player->kartstuff[k_mushroomtimer] = 0;
|
||||||
|
|
@ -1822,7 +1831,7 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju
|
||||||
|
|
||||||
if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0)
|
if (player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0)
|
||||||
|| player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0
|
|| player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0
|
||||||
|| (gametype != GT_RACE && (player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer])))
|
|| (gametype != GT_RACE && ((player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]) || player->kartstuff[k_comebackmode] == 1)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
player->mo->momz = 18*FRACUNIT;
|
player->mo->momz = 18*FRACUNIT;
|
||||||
|
|
@ -1870,7 +1879,7 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void K_StealBalloon(player_t *player, player_t *victim)
|
void K_StealBalloon(player_t *player, player_t *victim, boolean force)
|
||||||
{
|
{
|
||||||
INT32 newballoon;
|
INT32 newballoon;
|
||||||
angle_t newangle, diff;
|
angle_t newangle, diff;
|
||||||
|
|
@ -1883,17 +1892,25 @@ void K_StealBalloon(player_t *player, player_t *victim)
|
||||||
if (player->health <= 0 || victim->health <= 0)
|
if (player->health <= 0 || victim->health <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (victim->kartstuff[k_balloon] <= 0) // || player->kartstuff[k_balloon] >= cv_kartballoons.value+2
|
if (force)
|
||||||
return;
|
;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (victim->kartstuff[k_balloon] <= 0) // || player->kartstuff[k_balloon] >= cv_kartballoons.value+2
|
||||||
|
return;
|
||||||
|
|
||||||
if ((player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0)
|
if ((player->powers[pw_flashing] > 0 || player->kartstuff[k_squishedtimer] > 0 || (player->kartstuff[k_spinouttimer] > 0 && player->kartstuff[k_spinout] > 0)
|
||||||
|| player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0
|
|| player->kartstuff[k_startimer] > 0 || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_bootimer] > 0
|
||||||
|| (player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]))
|
|| (player->kartstuff[k_balloon] <= 0 && player->kartstuff[k_comebacktimer]))
|
||||||
|| (victim->powers[pw_flashing] > 0 || victim->kartstuff[k_squishedtimer] > 0 || (victim->kartstuff[k_spinouttimer] > 0 && victim->kartstuff[k_spinout] > 0)
|
|| (victim->powers[pw_flashing] > 0 || victim->kartstuff[k_squishedtimer] > 0 || (victim->kartstuff[k_spinouttimer] > 0 && victim->kartstuff[k_spinout] > 0)
|
||||||
|| victim->kartstuff[k_startimer] > 0 || victim->kartstuff[k_growshrinktimer] > 0 || victim->kartstuff[k_bootimer] > 0))
|
|| victim->kartstuff[k_startimer] > 0 || victim->kartstuff[k_growshrinktimer] > 0 || victim->kartstuff[k_bootimer] > 0))
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//CONS_Printf(M_GetText("%s stole a balloon from %s!\n"), player_names[player-players], player_names[victim-players]);
|
if (player->kartstuff[k_balloon] <= 0)
|
||||||
|
CONS_Printf(M_GetText("%s is back in the game!\n"), player_names[player-players]);
|
||||||
|
else
|
||||||
|
CONS_Printf(M_GetText("%s stole a balloon from %s!\n"), player_names[player-players], player_names[victim-players]);
|
||||||
|
|
||||||
newballoon = player->kartstuff[k_balloon];
|
newballoon = player->kartstuff[k_balloon];
|
||||||
if (newballoon <= 1)
|
if (newballoon <= 1)
|
||||||
|
|
@ -1920,8 +1937,8 @@ void K_StealBalloon(player_t *player, player_t *victim)
|
||||||
P_SetMobjState(newmo, S_BATTLEBALLOON1);
|
P_SetMobjState(newmo, S_BATTLEBALLOON1);
|
||||||
|
|
||||||
player->kartstuff[k_balloon]++;
|
player->kartstuff[k_balloon]++;
|
||||||
|
player->kartstuff[k_comebackpoints] = 0;
|
||||||
player->powers[pw_flashing] = K_GetKartFlashing(player);
|
player->powers[pw_flashing] = K_GetKartFlashing(player);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2627,9 +2644,15 @@ INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue)
|
||||||
|
|
||||||
static void K_KartDrift(player_t *player, boolean onground)
|
static void K_KartDrift(player_t *player, boolean onground)
|
||||||
{
|
{
|
||||||
|
UINT8 kartspeed = player->kartspeed;
|
||||||
|
fixed_t dsone, dstwo;
|
||||||
|
|
||||||
|
if (gametype != GT_RACE && player->kartstuff[k_balloon] <= 0)
|
||||||
|
kartspeed = 1;
|
||||||
|
|
||||||
// IF YOU CHANGE THESE: MAKE SURE YOU UPDATE THE SAME VALUES IN p_mobjc, "case MT_DRIFT:"
|
// IF YOU CHANGE THESE: MAKE SURE YOU UPDATE THE SAME VALUES IN p_mobjc, "case MT_DRIFT:"
|
||||||
fixed_t dsone = 26*4 + player->kartspeed*2 + (9 - player->kartweight);
|
dsone = 26*4 + kartspeed*2 + (9 - player->kartweight);
|
||||||
fixed_t dstwo = dsone*2;
|
dstwo = dsone*2;
|
||||||
|
|
||||||
// Drifting is actually straffing + automatic turning.
|
// Drifting is actually straffing + automatic turning.
|
||||||
// Holding the Jump button will enable drifting.
|
// Holding the Jump button will enable drifting.
|
||||||
|
|
@ -3461,9 +3484,28 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
|
|
||||||
// Friction
|
// Friction
|
||||||
if (player->speed > 0 && cmd->forwardmove == 0 && player->mo->friction == 59392)
|
if (player->speed > 0 && cmd->forwardmove == 0 && player->mo->friction == 59392)
|
||||||
player->mo->friction += 4608;
|
player->mo->friction += 4608;
|
||||||
if (player->speed > 0 && cmd->forwardmove < 0 && player->mo->friction == 59392)
|
if (player->speed > 0 && cmd->forwardmove < 0 && player->mo->friction == 59392)
|
||||||
player->mo->friction += 1608;
|
player->mo->friction += 1608;
|
||||||
|
if (gametype != GT_RACE && player->kartstuff[k_balloon] <= 0)
|
||||||
|
{
|
||||||
|
player->mo->friction += 1228;
|
||||||
|
|
||||||
|
if (player->mo->friction > FRACUNIT)
|
||||||
|
player->mo->friction = FRACUNIT;
|
||||||
|
if (player->mo->friction < 0)
|
||||||
|
player->mo->friction = 0;
|
||||||
|
|
||||||
|
player->mo->movefactor = FixedDiv(ORIG_FRICTION, player->mo->friction);
|
||||||
|
|
||||||
|
if (player->mo->movefactor < FRACUNIT)
|
||||||
|
player->mo->movefactor = 19*player->mo->movefactor - 18*FRACUNIT;
|
||||||
|
else
|
||||||
|
player->mo->movefactor = FRACUNIT; //player->mo->movefactor = ((player->mo->friction - 0xDB34)*(0xA))/0x80;
|
||||||
|
|
||||||
|
if (player->mo->movefactor < 32)
|
||||||
|
player->mo->movefactor = 32;
|
||||||
|
}
|
||||||
|
|
||||||
K_KartDrift(player, onground);
|
K_KartDrift(player, onground);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd);
|
||||||
void K_SpinPlayer(player_t *player, mobj_t *source);
|
void K_SpinPlayer(player_t *player, mobj_t *source);
|
||||||
void K_SquishPlayer(player_t *player, mobj_t *source);
|
void K_SquishPlayer(player_t *player, mobj_t *source);
|
||||||
void K_ExplodePlayer(player_t *player, mobj_t *source);
|
void K_ExplodePlayer(player_t *player, mobj_t *source);
|
||||||
void K_StealBalloon(player_t *player, player_t *victim);
|
void K_StealBalloon(player_t *player, player_t *victim, boolean force);
|
||||||
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, 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, mobj_t *source);
|
||||||
void K_SpawnDriftTrail(player_t *player);
|
void K_SpawnDriftTrail(player_t *player);
|
||||||
void K_DoMushroom(player_t *player, boolean doPFlag, boolean startboost);
|
void K_DoMushroom(player_t *player, boolean doPFlag, boolean startboost);
|
||||||
|
|
|
||||||
|
|
@ -2057,12 +2057,13 @@ static int lib_kStealBalloon(lua_State *L)
|
||||||
{
|
{
|
||||||
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
|
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
|
||||||
player_t *victim = *((player_t **)luaL_checkudata(L, 2, META_PLAYER));
|
player_t *victim = *((player_t **)luaL_checkudata(L, 2, META_PLAYER));
|
||||||
|
boolean force = luaL_checkboolean(L, 3);
|
||||||
NOHUD
|
NOHUD
|
||||||
if (!player)
|
if (!player)
|
||||||
return LUA_ErrInvalid(L, "player_t");
|
return LUA_ErrInvalid(L, "player_t");
|
||||||
if (!victim)
|
if (!victim)
|
||||||
return LUA_ErrInvalid(L, "player_t");
|
return LUA_ErrInvalid(L, "player_t");
|
||||||
K_StealBalloon(player, victim);
|
K_StealBalloon(player, victim, force);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -412,10 +412,14 @@ static int player_set(lua_State *L)
|
||||||
else if (fastcmp(field,"dashtime"))
|
else if (fastcmp(field,"dashtime"))
|
||||||
plr->dashtime = (INT32)luaL_checkinteger(L, 3);
|
plr->dashtime = (INT32)luaL_checkinteger(L, 3);
|
||||||
// SRB2kart
|
// SRB2kart
|
||||||
|
else if (fastcmp(field,"kartstuff"))
|
||||||
|
return NOSET;
|
||||||
|
else if (fastcmp(field,"frameangle"))
|
||||||
|
plr->frameangle = luaL_checkangle(L, 3);
|
||||||
else if (fastcmp(field,"kartspeed"))
|
else if (fastcmp(field,"kartspeed"))
|
||||||
plr->kartspeed = (UINT8)luaL_checkfixed(L, 3);
|
plr->kartspeed = (UINT8)luaL_checkinteger(L, 3);
|
||||||
else if (fastcmp(field,"kartweight"))
|
else if (fastcmp(field,"kartweight"))
|
||||||
plr->kartweight = (UINT8)luaL_checkfixed(L, 3);
|
plr->kartweight = (UINT8)luaL_checkinteger(L, 3);
|
||||||
//
|
//
|
||||||
else if (fastcmp(field,"normalspeed"))
|
else if (fastcmp(field,"normalspeed"))
|
||||||
plr->normalspeed = luaL_checkfixed(L, 3);
|
plr->normalspeed = luaL_checkfixed(L, 3);
|
||||||
|
|
@ -670,6 +674,38 @@ static int power_len(lua_State *L)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// kartstuff, ks -> kartstuff[ks]
|
||||||
|
static int kartstuff_get(lua_State *L)
|
||||||
|
{
|
||||||
|
INT32 *kartstuff = *((INT32 **)luaL_checkudata(L, 1, META_KARTSTUFF));
|
||||||
|
kartstufftype_t ks = luaL_checkinteger(L, 2);
|
||||||
|
if (ks >= NUMKARTSTUFF)
|
||||||
|
return luaL_error(L, LUA_QL("kartstufftype_t") " cannot be %u", ks);
|
||||||
|
lua_pushinteger(L, kartstuff[ks]);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// kartstuff, ks, value -> kartstuff[ks] = value
|
||||||
|
static int kartstuff_set(lua_State *L)
|
||||||
|
{
|
||||||
|
INT32 *kartstuff = *((INT32 **)luaL_checkudata(L, 1, META_KARTSTUFF));
|
||||||
|
kartstufftype_t ks = luaL_checkinteger(L, 2);
|
||||||
|
INT32 i = (INT32)luaL_checkinteger(L, 3);
|
||||||
|
if (ks >= NUMKARTSTUFF)
|
||||||
|
return luaL_error(L, LUA_QL("kartstufftype_t") " cannot be %u", ks);
|
||||||
|
if (hud_running)
|
||||||
|
return luaL_error(L, "Do not alter player_t in HUD rendering code!");
|
||||||
|
kartstuff[ks] = i;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// #kartstuff -> NUMKARTSTUFF
|
||||||
|
static int kartstuff_len(lua_State *L)
|
||||||
|
{
|
||||||
|
lua_pushinteger(L, NUMKARTSTUFF);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
#define NOFIELD luaL_error(L, LUA_QL("ticcmd_t") " has no field named " LUA_QS, field)
|
#define NOFIELD luaL_error(L, LUA_QL("ticcmd_t") " has no field named " LUA_QS, field)
|
||||||
|
|
||||||
static int ticcmd_get(lua_State *L)
|
static int ticcmd_get(lua_State *L)
|
||||||
|
|
@ -747,6 +783,17 @@ int LUA_PlayerLib(lua_State *L)
|
||||||
lua_setfield(L, -2, "__len");
|
lua_setfield(L, -2, "__len");
|
||||||
lua_pop(L,1);
|
lua_pop(L,1);
|
||||||
|
|
||||||
|
luaL_newmetatable(L, META_KARTSTUFF);
|
||||||
|
lua_pushcfunction(L, kartstuff_get);
|
||||||
|
lua_setfield(L, -2, "__index");
|
||||||
|
|
||||||
|
lua_pushcfunction(L, kartstuff_set);
|
||||||
|
lua_setfield(L, -2, "__newindex");
|
||||||
|
|
||||||
|
lua_pushcfunction(L, kartstuff_len);
|
||||||
|
lua_setfield(L, -2, "__len");
|
||||||
|
lua_pop(L,1);
|
||||||
|
|
||||||
luaL_newmetatable(L, META_TICCMD);
|
luaL_newmetatable(L, META_TICCMD);
|
||||||
lua_pushcfunction(L, ticcmd_get);
|
lua_pushcfunction(L, ticcmd_get);
|
||||||
lua_setfield(L, -2, "__index");
|
lua_setfield(L, -2, "__index");
|
||||||
|
|
|
||||||
|
|
@ -165,10 +165,10 @@ static int skin_get(lua_State *L)
|
||||||
break;
|
break;
|
||||||
// SRB2kart
|
// SRB2kart
|
||||||
case skin_kartspeed:
|
case skin_kartspeed:
|
||||||
lua_pushfixed(L, skin->kartspeed);
|
lua_pushinteger(L, skin->kartspeed);
|
||||||
break;
|
break;
|
||||||
case skin_kartweight:
|
case skin_kartweight:
|
||||||
lua_pushfixed(L, skin->kartweight);
|
lua_pushinteger(L, skin->kartweight);
|
||||||
break;
|
break;
|
||||||
//
|
//
|
||||||
case skin_normalspeed:
|
case skin_normalspeed:
|
||||||
|
|
|
||||||
|
|
@ -433,11 +433,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||||
CONS_Printf(M_GetText("%s gave an item to %s.\n"), player_names[special->tracer->player-players], player_names[player-players]);
|
CONS_Printf(M_GetText("%s gave an item to %s.\n"), player_names[special->tracer->player-players], player_names[player-players]);
|
||||||
|
|
||||||
if (special->tracer->player->kartstuff[k_comebackpoints] >= 3)
|
if (special->tracer->player->kartstuff[k_comebackpoints] >= 3)
|
||||||
{
|
K_StealBalloon(special->tracer->player, player, true);
|
||||||
K_StealBalloon(special->tracer->player, player);
|
|
||||||
special->tracer->player->kartstuff[k_comebackpoints] = 0;
|
|
||||||
CONS_Printf(M_GetText("%s is back in the game!\n"), player_names[special->tracer->player-players]);
|
|
||||||
}
|
|
||||||
|
|
||||||
special->tracer->player->kartstuff[k_comebacktimer] = comebacktime;
|
special->tracer->player->kartstuff[k_comebacktimer] = comebacktime;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
28
src/p_map.c
28
src/p_map.c
|
|
@ -1647,15 +1647,11 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
{
|
{
|
||||||
if (tmthing->player->kartstuff[k_balloon] > 0)
|
if (tmthing->player->kartstuff[k_balloon] > 0)
|
||||||
{
|
{
|
||||||
thing->player->kartstuff[k_comebackpoints]++;
|
thing->player->kartstuff[k_comebackpoints] += 2;
|
||||||
CONS_Printf(M_GetText("%s bombed %s!\n"), player_names[thing->player-players], player_names[tmthing->player-players]);
|
CONS_Printf(M_GetText("%s bombed %s!\n"), player_names[thing->player-players], player_names[tmthing->player-players]);
|
||||||
|
|
||||||
if (thing->player->kartstuff[k_comebackpoints] >= 3)
|
if (thing->player->kartstuff[k_comebackpoints] >= 3)
|
||||||
{
|
K_StealBalloon(thing->player, tmthing->player, true);
|
||||||
K_StealBalloon(thing->player, tmthing->player);
|
|
||||||
thing->player->kartstuff[k_comebackpoints] = 0;
|
|
||||||
CONS_Printf(M_GetText("%s is back in the game!\n"), player_names[thing->player-players]);
|
|
||||||
}
|
|
||||||
|
|
||||||
K_ExplodePlayer(tmthing->player, thing);
|
K_ExplodePlayer(tmthing->player, thing);
|
||||||
|
|
||||||
|
|
@ -1664,15 +1660,11 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
}
|
}
|
||||||
else if (thing->player->kartstuff[k_balloon] > 0)
|
else if (thing->player->kartstuff[k_balloon] > 0)
|
||||||
{
|
{
|
||||||
tmthing->player->kartstuff[k_comebackpoints]++;
|
tmthing->player->kartstuff[k_comebackpoints] += 2;
|
||||||
CONS_Printf(M_GetText("%s bombed %s!\n"), player_names[tmthing->player-players], player_names[thing->player-players]);
|
CONS_Printf(M_GetText("%s bombed %s!\n"), player_names[tmthing->player-players], player_names[thing->player-players]);
|
||||||
|
|
||||||
if (tmthing->player->kartstuff[k_comebackpoints] >= 3)
|
if (tmthing->player->kartstuff[k_comebackpoints] >= 3)
|
||||||
{
|
K_StealBalloon(tmthing->player, thing->player, true);
|
||||||
K_StealBalloon(tmthing->player, thing->player);
|
|
||||||
thing->player->kartstuff[k_comebackpoints] = 0;
|
|
||||||
CONS_Printf(M_GetText("%s is back in the game!\n"), player_names[tmthing->player-players]);
|
|
||||||
}
|
|
||||||
|
|
||||||
K_ExplodePlayer(thing->player, tmthing);
|
K_ExplodePlayer(thing->player, tmthing);
|
||||||
|
|
||||||
|
|
@ -1687,9 +1679,8 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
K_KartBouncing(tmthing, thing, true);
|
K_KartBouncing(tmthing, thing, true);
|
||||||
if (gametype != GT_RACE && tmthing->player->kartstuff[k_feather] & 2)
|
if (gametype != GT_RACE && tmthing->player->kartstuff[k_feather] & 2)
|
||||||
{
|
{
|
||||||
K_StealBalloon(tmthing->player, thing->player);
|
K_StealBalloon(tmthing->player, thing->player, false);
|
||||||
K_SpinPlayer(thing->player, tmthing);
|
K_SpinPlayer(thing->player, tmthing);
|
||||||
CONS_Printf(M_GetText("%s stole a balloon from %s!\n"), player_names[tmthing->player-players], player_names[thing->player-players]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (P_IsObjectOnGround(tmthing) && thing->momz < 0)
|
else if (P_IsObjectOnGround(tmthing) && thing->momz < 0)
|
||||||
|
|
@ -1697,9 +1688,8 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
K_KartBouncing(thing, tmthing, true);
|
K_KartBouncing(thing, tmthing, true);
|
||||||
if (gametype != GT_RACE && thing->player->kartstuff[k_feather] & 2)
|
if (gametype != GT_RACE && thing->player->kartstuff[k_feather] & 2)
|
||||||
{
|
{
|
||||||
K_StealBalloon(thing->player, tmthing->player);
|
K_StealBalloon(thing->player, tmthing->player, false);
|
||||||
K_SpinPlayer(tmthing->player, thing);
|
K_SpinPlayer(tmthing->player, thing);
|
||||||
CONS_Printf(M_GetText("%s stole a balloon from %s!\n"), player_names[thing->player-players], player_names[tmthing->player-players]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -1709,15 +1699,13 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
{
|
{
|
||||||
if (thing->player->kartstuff[k_mushroomtimer] && !(tmthing->player->kartstuff[k_mushroomtimer]))
|
if (thing->player->kartstuff[k_mushroomtimer] && !(tmthing->player->kartstuff[k_mushroomtimer]))
|
||||||
{
|
{
|
||||||
K_StealBalloon(thing->player, tmthing->player);
|
K_StealBalloon(thing->player, tmthing->player, false);
|
||||||
K_SpinPlayer(tmthing->player, thing);
|
K_SpinPlayer(tmthing->player, thing);
|
||||||
CONS_Printf(M_GetText("%s stole a balloon from %s!\n"), player_names[thing->player-players], player_names[tmthing->player-players]);
|
|
||||||
}
|
}
|
||||||
else if (tmthing->player->kartstuff[k_mushroomtimer] && !(thing->player->kartstuff[k_mushroomtimer]))
|
else if (tmthing->player->kartstuff[k_mushroomtimer] && !(thing->player->kartstuff[k_mushroomtimer]))
|
||||||
{
|
{
|
||||||
K_StealBalloon(tmthing->player, thing->player);
|
K_StealBalloon(tmthing->player, thing->player, false);
|
||||||
K_SpinPlayer(thing->player, tmthing);
|
K_SpinPlayer(thing->player, tmthing);
|
||||||
CONS_Printf(M_GetText("%s stole a balloon from %s!\n"), player_names[tmthing->player-players], player_names[thing->player-players]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
20
src/p_mobj.c
20
src/p_mobj.c
|
|
@ -6459,15 +6459,25 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
//{ SRB2kart mobs
|
//{ SRB2kart mobs
|
||||||
case MT_DRIFT:
|
case MT_DRIFT:
|
||||||
{
|
{
|
||||||
fixed_t dsone = 26*4 + mobj->target->player->kartspeed*2 + (9 - mobj->target->player->kartweight);
|
if (mobj->target && mobj->target->player && mobj->target->player->mo && mobj->target->player->health > 0 && !mobj->target->player->spectator)
|
||||||
fixed_t dstwo = dsone*2;
|
|
||||||
|
|
||||||
if ((mobj->target && mobj->target->player && mobj->target->player->mo && mobj->target->player->health > 0 && !mobj->target->player->spectator)
|
|
||||||
&& (mobj->type == MT_DRIFT && mobj->target->player->kartstuff[k_driftcharge] >= dsone))
|
|
||||||
{
|
{
|
||||||
|
UINT8 kartspeed = mobj->target->player->kartspeed;
|
||||||
|
fixed_t dsone, dstwo;
|
||||||
INT32 HEIGHT;
|
INT32 HEIGHT;
|
||||||
fixed_t radius;
|
fixed_t radius;
|
||||||
|
|
||||||
|
if (gametype != GT_RACE && mobj->target->player->kartstuff[k_balloon] <= 0)
|
||||||
|
kartspeed = 1;
|
||||||
|
|
||||||
|
dsone = 26*4 + kartspeed*2 + (9 - mobj->target->player->kartweight);
|
||||||
|
dstwo = dsone*2;
|
||||||
|
|
||||||
|
if (mobj->target->player->kartstuff[k_driftcharge] < dsone)
|
||||||
|
{
|
||||||
|
P_RemoveMobj(mobj);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (mobj->target->player->kartstuff[k_bootimer] > 0)
|
if (mobj->target->player->kartstuff[k_bootimer] > 0)
|
||||||
{
|
{
|
||||||
if ((mobj->target->player == &players[displayplayer] || (splitscreen && mobj->target->player == &players[secondarydisplayplayer]))
|
if ((mobj->target->player == &players[displayplayer] || (splitscreen && mobj->target->player == &players[secondarydisplayplayer]))
|
||||||
|
|
|
||||||
|
|
@ -91,8 +91,8 @@ typedef struct
|
||||||
fixed_t maxdash;
|
fixed_t maxdash;
|
||||||
|
|
||||||
// SRB2kart
|
// SRB2kart
|
||||||
UINT8 kartspeed; // Normal ground
|
UINT8 kartspeed;
|
||||||
UINT8 kartweight; // Normal ground
|
UINT8 kartweight;
|
||||||
//
|
//
|
||||||
|
|
||||||
fixed_t normalspeed; // Normal ground
|
fixed_t normalspeed; // Normal ground
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue