parent
4fce06d80e
commit
cc01d2c3f0
|
@ -316,8 +316,9 @@ consvar_t cv_lightning = {"lightning", "On", CV_NETVAR|CV_CHEAT, CV_OnOff,
|
||||||
|
|
||||||
consvar_t cv_karthud = {"karthud", "Default", CV_SAVE|CV_CALL, karthud_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_karthud = {"karthud", "Default", CV_SAVE|CV_CALL, karthud_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
consvar_t cv_kartcc = {"kartcc", "100cc", CV_NETVAR, kartcc_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_kartcc = {"kartcc", "100cc", CV_NETVAR, kartcc_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
static CV_PossibleValue_t kartballoons_cons_t[] = {{1, "MIN"}, {5, "MAX"}, {0, NULL}};
|
static CV_PossibleValue_t kartballoons_cons_t[] = {{1, "MIN"}, {99, "MAX"}, {0, NULL}};
|
||||||
consvar_t cv_kartballoons = {"kartballoons", "3", CV_NETVAR, kartballoons_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_kartballoons = {"kartballoons", "3", CV_NETVAR, kartballoons_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
consvar_t cv_kartfrantic = {"kartfrantic", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
static CV_PossibleValue_t speedometer_cons_t[] = {{0, "Off"}, {1, "Kilometers"}, {2, "Miles"}, {3, "Fracunits"}, {0, NULL}};
|
static CV_PossibleValue_t speedometer_cons_t[] = {{0, "Off"}, {1, "Kilometers"}, {2, "Miles"}, {3, "Fracunits"}, {0, NULL}};
|
||||||
consvar_t cv_speedometer = {"speedometer", "Kilometers", CV_SAVE, speedometer_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // use tics in display
|
consvar_t cv_speedometer = {"speedometer", "Kilometers", CV_SAVE, speedometer_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // use tics in display
|
||||||
|
|
||||||
|
|
|
@ -107,6 +107,7 @@ extern consvar_t cv_blueshell, cv_jaws, cv_fireflower, cv_tripleredshell, cv_lig
|
||||||
extern consvar_t cv_karthud;
|
extern consvar_t cv_karthud;
|
||||||
extern consvar_t cv_kartcc;
|
extern consvar_t cv_kartcc;
|
||||||
extern consvar_t cv_kartballoons;
|
extern consvar_t cv_kartballoons;
|
||||||
|
extern consvar_t cv_kartfrantic;
|
||||||
extern consvar_t cv_speedometer;
|
extern consvar_t cv_speedometer;
|
||||||
|
|
||||||
extern consvar_t cv_collideminimum;
|
extern consvar_t cv_collideminimum;
|
||||||
|
|
|
@ -6985,11 +6985,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
||||||
"MT_SINK", // Kitchen Sink Stuff
|
"MT_SINK", // Kitchen Sink Stuff
|
||||||
"MT_SINKTRAIL",
|
"MT_SINKTRAIL",
|
||||||
|
|
||||||
"MT_BATTLEBALLOON1", // Battle Mode balloon stuff
|
"MT_BATTLEBALLOON", // Battle Mode balloon
|
||||||
"MT_BATTLEBALLOON2",
|
|
||||||
"MT_BATTLEBALLOON3",
|
|
||||||
"MT_BATTLEBALLOON4",
|
|
||||||
"MT_BATTLEBALLOON5",
|
|
||||||
|
|
||||||
"MT_LAKITU",
|
"MT_LAKITU",
|
||||||
|
|
||||||
|
|
110
src/info.c
110
src/info.c
|
@ -15139,115 +15139,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
{ // MT_BATTLEBALLOON1
|
{ // MT_BATTLEBALLOON
|
||||||
-1, // doomednum
|
|
||||||
S_BATTLEBALLOON1,// spawnstate
|
|
||||||
1000, // spawnhealth
|
|
||||||
S_NULL, // seestate
|
|
||||||
sfx_None, // seesound
|
|
||||||
8, // reactiontime
|
|
||||||
sfx_None, // attacksound
|
|
||||||
S_NULL, // painstate
|
|
||||||
0, // painchance
|
|
||||||
sfx_None, // painsound
|
|
||||||
S_NULL, // meleestate
|
|
||||||
S_NULL, // missilestate
|
|
||||||
S_NULL, // deathstate
|
|
||||||
S_NULL, // xdeathstate
|
|
||||||
sfx_None, // deathsound
|
|
||||||
5*FRACUNIT, // speed
|
|
||||||
8*FRACUNIT, // radius
|
|
||||||
16*FRACUNIT, // height
|
|
||||||
0, // display offset
|
|
||||||
100, // mass
|
|
||||||
1, // damage
|
|
||||||
sfx_None, // activesound
|
|
||||||
MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags
|
|
||||||
S_NULL // raisestate
|
|
||||||
},
|
|
||||||
|
|
||||||
{ // MT_BATTLEBALLOON2
|
|
||||||
-1, // doomednum
|
|
||||||
S_BATTLEBALLOON1,// spawnstate
|
|
||||||
1000, // spawnhealth
|
|
||||||
S_NULL, // seestate
|
|
||||||
sfx_None, // seesound
|
|
||||||
8, // reactiontime
|
|
||||||
sfx_None, // attacksound
|
|
||||||
S_NULL, // painstate
|
|
||||||
0, // painchance
|
|
||||||
sfx_None, // painsound
|
|
||||||
S_NULL, // meleestate
|
|
||||||
S_NULL, // missilestate
|
|
||||||
S_NULL, // deathstate
|
|
||||||
S_NULL, // xdeathstate
|
|
||||||
sfx_None, // deathsound
|
|
||||||
5*FRACUNIT, // speed
|
|
||||||
8*FRACUNIT, // radius
|
|
||||||
16*FRACUNIT, // height
|
|
||||||
0, // display offset
|
|
||||||
100, // mass
|
|
||||||
1, // damage
|
|
||||||
sfx_None, // activesound
|
|
||||||
MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags
|
|
||||||
S_NULL // raisestate
|
|
||||||
},
|
|
||||||
|
|
||||||
{ // MT_BATTLEBALLOON3
|
|
||||||
-1, // doomednum
|
|
||||||
S_BATTLEBALLOON1,// spawnstate
|
|
||||||
1000, // spawnhealth
|
|
||||||
S_NULL, // seestate
|
|
||||||
sfx_None, // seesound
|
|
||||||
8, // reactiontime
|
|
||||||
sfx_None, // attacksound
|
|
||||||
S_NULL, // painstate
|
|
||||||
0, // painchance
|
|
||||||
sfx_None, // painsound
|
|
||||||
S_NULL, // meleestate
|
|
||||||
S_NULL, // missilestate
|
|
||||||
S_NULL, // deathstate
|
|
||||||
S_NULL, // xdeathstate
|
|
||||||
sfx_None, // deathsound
|
|
||||||
5*FRACUNIT, // speed
|
|
||||||
8*FRACUNIT, // radius
|
|
||||||
16*FRACUNIT, // height
|
|
||||||
0, // display offset
|
|
||||||
100, // mass
|
|
||||||
1, // damage
|
|
||||||
sfx_None, // activesound
|
|
||||||
MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags
|
|
||||||
S_NULL // raisestate
|
|
||||||
},
|
|
||||||
|
|
||||||
{ // MT_BATTLEBALLOON4
|
|
||||||
-1, // doomednum
|
|
||||||
S_BATTLEBALLOON1,// spawnstate
|
|
||||||
1000, // spawnhealth
|
|
||||||
S_NULL, // seestate
|
|
||||||
sfx_None, // seesound
|
|
||||||
8, // reactiontime
|
|
||||||
sfx_None, // attacksound
|
|
||||||
S_NULL, // painstate
|
|
||||||
0, // painchance
|
|
||||||
sfx_None, // painsound
|
|
||||||
S_NULL, // meleestate
|
|
||||||
S_NULL, // missilestate
|
|
||||||
S_NULL, // deathstate
|
|
||||||
S_NULL, // xdeathstate
|
|
||||||
sfx_None, // deathsound
|
|
||||||
5*FRACUNIT, // speed
|
|
||||||
8*FRACUNIT, // radius
|
|
||||||
16*FRACUNIT, // height
|
|
||||||
0, // display offset
|
|
||||||
100, // mass
|
|
||||||
1, // damage
|
|
||||||
sfx_None, // activesound
|
|
||||||
MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY, // flags
|
|
||||||
S_NULL // raisestate
|
|
||||||
},
|
|
||||||
|
|
||||||
{ // MT_BATTLEBALLOON5
|
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_BATTLEBALLOON1,// spawnstate
|
S_BATTLEBALLOON1,// spawnstate
|
||||||
1000, // spawnhealth
|
1000, // spawnhealth
|
||||||
|
|
|
@ -3977,11 +3977,7 @@ typedef enum mobj_type
|
||||||
MT_SINK, // Kitchen Sink Stuff
|
MT_SINK, // Kitchen Sink Stuff
|
||||||
MT_SINKTRAIL,
|
MT_SINKTRAIL,
|
||||||
|
|
||||||
MT_BATTLEBALLOON1, // Battle Mode balloons
|
MT_BATTLEBALLOON, // Battle Mode balloons
|
||||||
MT_BATTLEBALLOON2,
|
|
||||||
MT_BATTLEBALLOON3,
|
|
||||||
MT_BATTLEBALLOON4,
|
|
||||||
MT_BATTLEBALLOON5,
|
|
||||||
|
|
||||||
MT_LAKITU,
|
MT_LAKITU,
|
||||||
|
|
||||||
|
|
142
src/k_kart.c
142
src/k_kart.c
|
@ -303,6 +303,7 @@ void K_RegisterKartStuff(void)
|
||||||
|
|
||||||
CV_RegisterVar(&cv_kartcc);
|
CV_RegisterVar(&cv_kartcc);
|
||||||
CV_RegisterVar(&cv_kartballoons);
|
CV_RegisterVar(&cv_kartballoons);
|
||||||
|
CV_RegisterVar(&cv_kartfrantic);
|
||||||
CV_RegisterVar(&cv_speedometer);
|
CV_RegisterVar(&cv_speedometer);
|
||||||
CV_RegisterVar(&cv_collideminimum);
|
CV_RegisterVar(&cv_collideminimum);
|
||||||
CV_RegisterVar(&cv_collidesoundnum);
|
CV_RegisterVar(&cv_collidesoundnum);
|
||||||
|
@ -987,6 +988,12 @@ static void K_KartItemRouletteByDistance(player_t *player, ticcmd_t *cmd)
|
||||||
|
|
||||||
player->kartstuff[k_itemclose] = 0; // Reset the item window closer.
|
player->kartstuff[k_itemclose] = 0; // Reset the item window closer.
|
||||||
|
|
||||||
|
if (cv_kartfrantic.value) // Stupid items
|
||||||
|
{
|
||||||
|
pdis = (13*pdis/14); // multiply...
|
||||||
|
pdis += distvar; // then set everyone back another place...
|
||||||
|
}
|
||||||
|
|
||||||
if (gametype == GT_MATCH
|
if (gametype == GT_MATCH
|
||||||
|| gametype == GT_TEAMMATCH
|
|| gametype == GT_TEAMMATCH
|
||||||
|| gametype == GT_CTF) useodds = 0; // Battle Mode
|
|| gametype == GT_CTF) useodds = 0; // Battle Mode
|
||||||
|
@ -1636,23 +1643,12 @@ void K_SpinPlayer(player_t *player, mobj_t *source)
|
||||||
player->kartstuff[k_mushroomtimer] = 0;
|
player->kartstuff[k_mushroomtimer] = 0;
|
||||||
player->kartstuff[k_driftboost] = 0;
|
player->kartstuff[k_driftboost] = 0;
|
||||||
|
|
||||||
if (gametype == GT_MATCH)
|
if (gametype != GT_RACE)
|
||||||
{
|
{
|
||||||
if (player->kartstuff[k_balloon] & 16)
|
player->kartstuff[k_balloon]--;
|
||||||
player->kartstuff[k_balloon] &= ~16;
|
|
||||||
else if (player->kartstuff[k_balloon] & 8)
|
if (player->kartstuff[k_balloon] <= 0)
|
||||||
player->kartstuff[k_balloon] &= ~8;
|
|
||||||
else if (player->kartstuff[k_balloon] & 4)
|
|
||||||
player->kartstuff[k_balloon] &= ~4;
|
|
||||||
else if (player->kartstuff[k_balloon] & 2)
|
|
||||||
player->kartstuff[k_balloon] &= ~2;
|
|
||||||
else if (player->kartstuff[k_balloon] & 1)
|
|
||||||
{
|
|
||||||
player->kartstuff[k_balloon] &= ~1;
|
|
||||||
CONS_Printf(M_GetText("%s lost all of their balloons!\n"), player_names[player-players]);
|
CONS_Printf(M_GetText("%s lost all of their balloons!\n"), player_names[player-players]);
|
||||||
//P_DamageMobj(player->mo, NULL, NULL, 10000);
|
|
||||||
//return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (source && source->player && player != source->player)
|
if (source && source->player && player != source->player)
|
||||||
P_AddPlayerScore(source->player, 1);
|
P_AddPlayerScore(source->player, 1);
|
||||||
|
@ -1701,23 +1697,12 @@ void K_SquishPlayer(player_t *player, mobj_t *source)
|
||||||
player->kartstuff[k_mushroomtimer] = 0;
|
player->kartstuff[k_mushroomtimer] = 0;
|
||||||
player->kartstuff[k_driftboost] = 0;
|
player->kartstuff[k_driftboost] = 0;
|
||||||
|
|
||||||
if (gametype == GT_MATCH)
|
if (gametype != GT_RACE)
|
||||||
{
|
{
|
||||||
if (player->kartstuff[k_balloon] & 16)
|
player->kartstuff[k_balloon]--;
|
||||||
player->kartstuff[k_balloon] &= ~16;
|
|
||||||
else if (player->kartstuff[k_balloon] & 8)
|
if (player->kartstuff[k_balloon] <= 0)
|
||||||
player->kartstuff[k_balloon] &= ~8;
|
|
||||||
else if (player->kartstuff[k_balloon] & 4)
|
|
||||||
player->kartstuff[k_balloon] &= ~4;
|
|
||||||
else if (player->kartstuff[k_balloon] & 2)
|
|
||||||
player->kartstuff[k_balloon] &= ~2;
|
|
||||||
else if (player->kartstuff[k_balloon] & 1)
|
|
||||||
{
|
|
||||||
player->kartstuff[k_balloon] &= ~1;
|
|
||||||
CONS_Printf(M_GetText("%s lost all of their balloons!\n"), player_names[player-players]);
|
CONS_Printf(M_GetText("%s lost all of their balloons!\n"), player_names[player-players]);
|
||||||
//P_DamageMobj(player->mo, NULL, NULL, 10000);
|
|
||||||
//return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (source && source->player && player != source->player)
|
if (source && source->player && player != source->player)
|
||||||
P_AddPlayerScore(source->player, 1);
|
P_AddPlayerScore(source->player, 1);
|
||||||
|
@ -1755,23 +1740,12 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju
|
||||||
player->kartstuff[k_mushroomtimer] = 0;
|
player->kartstuff[k_mushroomtimer] = 0;
|
||||||
player->kartstuff[k_driftboost] = 0;
|
player->kartstuff[k_driftboost] = 0;
|
||||||
|
|
||||||
if (gametype == GT_MATCH)
|
if (gametype != GT_RACE)
|
||||||
{
|
{
|
||||||
if (player->kartstuff[k_balloon] & 16)
|
player->kartstuff[k_balloon]--;
|
||||||
player->kartstuff[k_balloon] &= ~16;
|
|
||||||
else if (player->kartstuff[k_balloon] & 8)
|
if (player->kartstuff[k_balloon] <= 0)
|
||||||
player->kartstuff[k_balloon] &= ~8;
|
|
||||||
else if (player->kartstuff[k_balloon] & 4)
|
|
||||||
player->kartstuff[k_balloon] &= ~4;
|
|
||||||
else if (player->kartstuff[k_balloon] & 2)
|
|
||||||
player->kartstuff[k_balloon] &= ~2;
|
|
||||||
else if (player->kartstuff[k_balloon] & 1)
|
|
||||||
{
|
|
||||||
player->kartstuff[k_balloon] &= ~1;
|
|
||||||
CONS_Printf(M_GetText("%s lost all of their balloons!\n"), player_names[player-players]);
|
CONS_Printf(M_GetText("%s lost all of their balloons!\n"), player_names[player-players]);
|
||||||
//P_DamageMobj(player->mo, NULL, NULL, 10000);
|
|
||||||
//return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (source && source->player && player != source->player)
|
if (source && source->player && player != source->player)
|
||||||
P_AddPlayerScore(source->player, 1);
|
P_AddPlayerScore(source->player, 1);
|
||||||
|
@ -1801,6 +1775,84 @@ 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) source;
|
||||||
|
if (gametype == GT_RACE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (player->health <= 0 || victim->health <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (player == victim)
|
||||||
|
return;
|
||||||
|
|
||||||
|
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_bootaketimer] > 0 || player->kartstuff[k_balloon] >= 3)
|
||||||
|
|| (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_bootaketimer] > 0 || victim->kartstuff[k_balloon] <= 0))
|
||||||
|
return;
|
||||||
|
|
||||||
|
victim->kartstuff[k_mushroomtimer] = 0;
|
||||||
|
victim->kartstuff[k_driftboost] = 0;
|
||||||
|
|
||||||
|
CONS_Printf(M_GetText("%s stole a balloon from %s!\n"), player_names[player-players], player_names[victim-players]);
|
||||||
|
|
||||||
|
player->kartstuff[k_balloon]++;
|
||||||
|
|
||||||
|
{
|
||||||
|
angle_t newangle, diff;
|
||||||
|
fixed_t newx;
|
||||||
|
fixed_t newy;
|
||||||
|
mobj_t *mo;
|
||||||
|
|
||||||
|
newangle = player->mo->angle;
|
||||||
|
diff = FixedAngle(360*FRACUNIT/cv_kartballoons.value);
|
||||||
|
newx = player->mo->x + P_ReturnThrustX(player->mo, newangle + ANGLE_180, 64*FRACUNIT);
|
||||||
|
newy = player->mo->y + P_ReturnThrustY(player->mo, newangle + ANGLE_180, 64*FRACUNIT);
|
||||||
|
|
||||||
|
mo = P_SpawnMobj(newx, newy, player->mo->z, MT_BATTLEBALLOON);
|
||||||
|
mo->threshold = 10;
|
||||||
|
P_SetTarget(&mo->target, player->mo);
|
||||||
|
P_SetTarget(&mo->tracer, victim->mo);
|
||||||
|
mo->angle = 0;
|
||||||
|
mo->color = player->mo->color;
|
||||||
|
if (player->mo->flags2 & MF2_DONTDRAW)
|
||||||
|
mo->flags2 |= MF2_DONTDRAW;
|
||||||
|
else
|
||||||
|
mo->flags2 &= ~MF2_DONTDRAW;
|
||||||
|
}
|
||||||
|
|
||||||
|
victim->kartstuff[k_balloon]--;
|
||||||
|
|
||||||
|
if (victim->kartstuff[k_balloon] <= 0)
|
||||||
|
CONS_Printf(M_GetText("%s lost all of their balloons!\n"), player_names[victim-players]);
|
||||||
|
|
||||||
|
P_AddPlayerScore(player, 1);
|
||||||
|
K_CheckBalloons();
|
||||||
|
|
||||||
|
player->kartstuff[k_spinouttype] = 1;
|
||||||
|
player->kartstuff[k_spinouttimer] = 2*TICRATE+(TICRATE/2);
|
||||||
|
player->kartstuff[k_spinout] = player->kartstuff[k_spinouttimer];
|
||||||
|
|
||||||
|
player->powers[pw_flashing] = flashingtics;
|
||||||
|
|
||||||
|
if (!(player->mo->state >= &states[S_KART_SPIN1] && player->mo->state <= &states[S_KART_SPIN8]))
|
||||||
|
P_SetPlayerMobjState(player->mo, S_KART_SPIN1);
|
||||||
|
|
||||||
|
player->kartstuff[k_spinouttype] = 0;
|
||||||
|
|
||||||
|
P_PlayRinglossSound(player->mo);
|
||||||
|
|
||||||
|
if (P_IsLocalPlayer(player))
|
||||||
|
{
|
||||||
|
quake.intensity = 64*FRACUNIT;
|
||||||
|
quake.time = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}*/
|
||||||
|
|
||||||
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_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 *mobj;
|
mobj_t *mobj;
|
||||||
|
|
|
@ -2019,16 +2019,8 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source)
|
||||||
target->target->player->kartstuff[k_triplebanana] &= ~2;
|
target->target->player->kartstuff[k_triplebanana] &= ~2;
|
||||||
else if (target->type == MT_TRIPLEBANANASHIELD3 && target->target->player->kartstuff[k_triplebanana] & 4)
|
else if (target->type == MT_TRIPLEBANANASHIELD3 && target->target->player->kartstuff[k_triplebanana] & 4)
|
||||||
target->target->player->kartstuff[k_triplebanana] &= ~4;
|
target->target->player->kartstuff[k_triplebanana] &= ~4;
|
||||||
else if (target->type == MT_BATTLEBALLOON1 && target->target->player->kartstuff[k_balloon] & 1)
|
else if (target->type == MT_BATTLEBALLOON && target->target->player->kartstuff[k_balloon] >= target->threshold)
|
||||||
target->target->player->kartstuff[k_balloon] &= ~1;
|
target->target->player->kartstuff[k_triplebanana] = target->threshold-1;
|
||||||
else if (target->type == MT_BATTLEBALLOON2 && target->target->player->kartstuff[k_balloon] & 2)
|
|
||||||
target->target->player->kartstuff[k_balloon] &= ~2;
|
|
||||||
else if (target->type == MT_BATTLEBALLOON3 && target->target->player->kartstuff[k_balloon] & 4)
|
|
||||||
target->target->player->kartstuff[k_balloon] &= ~4;
|
|
||||||
else if (target->type == MT_BATTLEBALLOON4 && target->target->player->kartstuff[k_balloon] & 8)
|
|
||||||
target->target->player->kartstuff[k_balloon] &= ~8;
|
|
||||||
else if (target->type == MT_BATTLEBALLOON5 && target->target->player->kartstuff[k_balloon] & 16)
|
|
||||||
target->target->player->kartstuff[k_balloon] &= ~16;
|
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
|
||||||
|
@ -2751,18 +2743,14 @@ static void P_KillPlayer(player_t *player, mobj_t *source, INT32 damage)
|
||||||
HU_DoCEcho(va("%s\\is no longer super.\\\\\\\\", player_names[player-players]));
|
HU_DoCEcho(va("%s\\is no longer super.\\\\\\\\", player_names[player-players]));
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
if (player->kartstuff[k_balloon])
|
if (gametype != GT_RACE)
|
||||||
{
|
{
|
||||||
if (player->kartstuff[k_balloon] & 16)
|
player->kartstuff[k_balloon]--;
|
||||||
player->kartstuff[k_balloon] &= ~16;
|
|
||||||
else if (player->kartstuff[k_balloon] & 8)
|
if (player->kartstuff[k_balloon] <= 0)
|
||||||
player->kartstuff[k_balloon] &= ~8;
|
CONS_Printf(M_GetText("%s lost all of their balloons!\n"), player_names[player-players]);
|
||||||
else if (player->kartstuff[k_balloon] & 4)
|
|
||||||
player->kartstuff[k_balloon] &= ~4;
|
K_CheckBalloons();
|
||||||
else if (player->kartstuff[k_balloon] & 2)
|
|
||||||
player->kartstuff[k_balloon] &= ~2;
|
|
||||||
else if (player->kartstuff[k_balloon] & 1)
|
|
||||||
player->kartstuff[k_balloon] &= ~1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
119
src/p_mobj.c
119
src/p_mobj.c
|
@ -6582,11 +6582,7 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
case MT_TRIPLEBANANASHIELD1:
|
case MT_TRIPLEBANANASHIELD1:
|
||||||
case MT_TRIPLEBANANASHIELD2:
|
case MT_TRIPLEBANANASHIELD2:
|
||||||
case MT_TRIPLEBANANASHIELD3:
|
case MT_TRIPLEBANANASHIELD3:
|
||||||
case MT_BATTLEBALLOON1:
|
case MT_BATTLEBALLOON:
|
||||||
case MT_BATTLEBALLOON2:
|
|
||||||
case MT_BATTLEBALLOON3:
|
|
||||||
case MT_BATTLEBALLOON4:
|
|
||||||
case MT_BATTLEBALLOON5:
|
|
||||||
if (mobj->health > 0 && mobj->target && mobj->target->player && mobj->target->player->mo
|
if (mobj->health > 0 && mobj->target && mobj->target->player && mobj->target->player->mo
|
||||||
&& mobj->target->player->health > 0 && !mobj->target->player->spectator)
|
&& mobj->target->player->health > 0 && !mobj->target->player->spectator)
|
||||||
{
|
{
|
||||||
|
@ -6595,7 +6591,7 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
|
|
||||||
if (mobj->type == MT_BANANASHIELD || mobj->type == MT_TRIPLEBANANASHIELD1 || mobj->type == MT_TRIPLEBANANASHIELD2 || mobj->type == MT_TRIPLEBANANASHIELD3)
|
if (mobj->type == MT_BANANASHIELD || mobj->type == MT_TRIPLEBANANASHIELD1 || mobj->type == MT_TRIPLEBANANASHIELD2 || mobj->type == MT_TRIPLEBANANASHIELD3)
|
||||||
radius = 64*mobj->target->scale;
|
radius = 64*mobj->target->scale;
|
||||||
else if (mobj->type == MT_BATTLEBALLOON1 || mobj->type == MT_BATTLEBALLOON2 || mobj->type == MT_BATTLEBALLOON3 || mobj->type == MT_BATTLEBALLOON4 || mobj->type == MT_BATTLEBALLOON5)
|
else if (mobj->type == MT_BATTLEBALLOON)
|
||||||
radius = 32*mobj->target->scale;
|
radius = 32*mobj->target->scale;
|
||||||
else
|
else
|
||||||
radius = 56*mobj->target->scale;
|
radius = 56*mobj->target->scale;
|
||||||
|
@ -6603,10 +6599,8 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
//mobj->angle += FixedAngle(12*FRACUNIT); // mobj's actual speed.
|
//mobj->angle += FixedAngle(12*FRACUNIT); // mobj's actual speed.
|
||||||
if (mobj->type == MT_TRIPLEGREENSHIELD1 || mobj->type == MT_TRIPLEGREENSHIELD2 || mobj->type == MT_TRIPLEGREENSHIELD3
|
if (mobj->type == MT_TRIPLEGREENSHIELD1 || mobj->type == MT_TRIPLEGREENSHIELD2 || mobj->type == MT_TRIPLEGREENSHIELD3
|
||||||
|| mobj->type == MT_TRIPLEREDSHIELD1 || mobj->type == MT_TRIPLEREDSHIELD2 || mobj->type == MT_TRIPLEREDSHIELD3
|
|| mobj->type == MT_TRIPLEREDSHIELD1 || mobj->type == MT_TRIPLEREDSHIELD2 || mobj->type == MT_TRIPLEREDSHIELD3
|
||||||
|| mobj->type == MT_BATTLEBALLOON1 || mobj->type == MT_BATTLEBALLOON2 || mobj->type == MT_BATTLEBALLOON3
|
|| mobj->type == MT_BATTLEBALLOON)
|
||||||
|| mobj->type == MT_BATTLEBALLOON4 || mobj->type == MT_BATTLEBALLOON5)
|
if ((mobj->type == MT_BATTLEBALLOON) && !((mobj->target->player-players) & 1))
|
||||||
if ((mobj->type == MT_BATTLEBALLOON1 || mobj->type == MT_BATTLEBALLOON2 || mobj->type == MT_BATTLEBALLOON3
|
|
||||||
|| mobj->type == MT_BATTLEBALLOON4 || mobj->type == MT_BATTLEBALLOON5) && !((mobj->target->player-players) & 1))
|
|
||||||
mobj->angle -= FixedAngle(mobj->info->speed);
|
mobj->angle -= FixedAngle(mobj->info->speed);
|
||||||
else
|
else
|
||||||
mobj->angle += FixedAngle(mobj->info->speed);
|
mobj->angle += FixedAngle(mobj->info->speed);
|
||||||
|
@ -6629,14 +6623,13 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
HEIGHT = mobj->target->height / 5;
|
HEIGHT = mobj->target->height / 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mobj->type == MT_BATTLEBALLOON1 || mobj->type == MT_BATTLEBALLOON2 || mobj->type == MT_BATTLEBALLOON3
|
if (mobj->type == MT_BATTLEBALLOON)
|
||||||
|| mobj->type == MT_BATTLEBALLOON4 || mobj->type == MT_BATTLEBALLOON5)
|
|
||||||
{
|
{
|
||||||
mobj->color = mobj->target->color;
|
mobj->color = mobj->target->color;
|
||||||
|
|
||||||
if (!(mobj->target->player->kartstuff[k_balloon] & 2))
|
if (mobj->target->player->kartstuff[k_balloon] <= 1)
|
||||||
P_SetMobjState(mobj, S_BATTLEBALLOON3);
|
P_SetMobjState(mobj, S_BATTLEBALLOON3);
|
||||||
else if (!(mobj->target->player->kartstuff[k_balloon] & 4))
|
else if (mobj->target->player->kartstuff[k_balloon] == 2)
|
||||||
P_SetMobjState(mobj, S_BATTLEBALLOON2);
|
P_SetMobjState(mobj, S_BATTLEBALLOON2);
|
||||||
|
|
||||||
if (mobj->target->flags2 & MF2_DONTDRAW)
|
if (mobj->target->flags2 & MF2_DONTDRAW)
|
||||||
|
@ -6677,11 +6670,7 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
|| (mobj->type == MT_TRIPLEBANANASHIELD3 && !(mobj->target->player->kartstuff[k_triplebanana] & 4))
|
|| (mobj->type == MT_TRIPLEBANANASHIELD3 && !(mobj->target->player->kartstuff[k_triplebanana] & 4))
|
||||||
|| (mobj->type == MT_BOMBSHIELD && !(mobj->target->player->kartstuff[k_bobomb] & 1))
|
|| (mobj->type == MT_BOMBSHIELD && !(mobj->target->player->kartstuff[k_bobomb] & 1))
|
||||||
|| (mobj->type == MT_FAKESHIELD && !(mobj->target->player->kartstuff[k_fakeitem] & 1))
|
|| (mobj->type == MT_FAKESHIELD && !(mobj->target->player->kartstuff[k_fakeitem] & 1))
|
||||||
|| (mobj->type == MT_BATTLEBALLOON1 && !(mobj->target->player->kartstuff[k_balloon] & 1))
|
|| (mobj->type == MT_BATTLEBALLOON && (mobj->target->player->kartstuff[k_balloon] <= mobj->threshold)))
|
||||||
|| (mobj->type == MT_BATTLEBALLOON2 && !(mobj->target->player->kartstuff[k_balloon] & 2))
|
|
||||||
|| (mobj->type == MT_BATTLEBALLOON3 && !(mobj->target->player->kartstuff[k_balloon] & 4))
|
|
||||||
|| (mobj->type == MT_BATTLEBALLOON4 && !(mobj->target->player->kartstuff[k_balloon] & 8))
|
|
||||||
|| (mobj->type == MT_BATTLEBALLOON5 && !(mobj->target->player->kartstuff[k_balloon] & 16)))
|
|
||||||
{
|
{
|
||||||
P_RemoveMobj(mobj);
|
P_RemoveMobj(mobj);
|
||||||
return;
|
return;
|
||||||
|
@ -8555,8 +8544,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
||||||
case MT_TRIPLEGREENSHIELD1: case MT_TRIPLEGREENSHIELD2: case MT_TRIPLEGREENSHIELD3:
|
case MT_TRIPLEGREENSHIELD1: case MT_TRIPLEGREENSHIELD2: case MT_TRIPLEGREENSHIELD3:
|
||||||
case MT_REDITEM: case MT_REDSHIELD: case MT_REDITEMDUD:
|
case MT_REDITEM: case MT_REDSHIELD: case MT_REDITEMDUD:
|
||||||
case MT_TRIPLEREDSHIELD1: case MT_TRIPLEREDSHIELD2: case MT_TRIPLEREDSHIELD3:
|
case MT_TRIPLEREDSHIELD1: case MT_TRIPLEREDSHIELD2: case MT_TRIPLEREDSHIELD3:
|
||||||
case MT_BATTLEBALLOON1: case MT_BATTLEBALLOON2: case MT_BATTLEBALLOON3:
|
case MT_BATTLEBALLOON: case MT_FIREBALL:
|
||||||
case MT_BATTLEBALLOON4: case MT_BATTLEBALLOON5: case MT_FIREBALL:
|
|
||||||
case MT_FAKEITEM: case MT_FAKESHIELD:
|
case MT_FAKEITEM: case MT_FAKESHIELD:
|
||||||
case MT_BOMBITEM: case MT_BOMBSHIELD:
|
case MT_BOMBITEM: case MT_BOMBSHIELD:
|
||||||
P_SpawnShadowMobj(mobj);
|
P_SpawnShadowMobj(mobj);
|
||||||
|
@ -9414,98 +9402,31 @@ void P_SpawnPlayer(INT32 playernum)
|
||||||
|
|
||||||
if (gametype != GT_RACE && (leveltime < 1 || p->kartstuff[k_balloon] > 0)) // srb2kart
|
if (gametype != GT_RACE && (leveltime < 1 || p->kartstuff[k_balloon] > 0)) // srb2kart
|
||||||
{
|
{
|
||||||
|
INT32 i;
|
||||||
angle_t newangle, diff;
|
angle_t newangle, diff;
|
||||||
fixed_t newx;
|
fixed_t newx;
|
||||||
fixed_t newy;
|
fixed_t newy;
|
||||||
mobj_t *mo, *mo2, *mo3, *mo4, *mo5;
|
mobj_t *mo;
|
||||||
|
|
||||||
if (leveltime < 1) // Start of the map?
|
if (leveltime < 1) // Start of the map?
|
||||||
{
|
p->kartstuff[k_balloon] = cv_kartballoons.value; // Reset those balloons!
|
||||||
p->kartstuff[k_balloon] = 0; // Reset those balloons!
|
|
||||||
switch (cv_kartballoons.value)
|
|
||||||
{
|
|
||||||
case 5:
|
|
||||||
p->kartstuff[k_balloon] |= 0x16;
|
|
||||||
case 4: // Fallthru's are intentional
|
|
||||||
p->kartstuff[k_balloon] |= 0x08;
|
|
||||||
case 3:
|
|
||||||
p->kartstuff[k_balloon] |= 0x04;
|
|
||||||
case 2:
|
|
||||||
p->kartstuff[k_balloon] |= 0x02;
|
|
||||||
case 1:
|
|
||||||
p->kartstuff[k_balloon] |= 0x01;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
p->kartstuff[k_balloon] = 0x01|0x02|0x04; // 3 balloons
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
newangle = mobj->angle;
|
newangle = mobj->angle;
|
||||||
diff = FixedAngle(360*FRACUNIT/cv_kartballoons.value);
|
diff = FixedAngle(360*FRACUNIT/cv_kartballoons.value);
|
||||||
newx = mobj->x + P_ReturnThrustX(mobj, newangle + ANGLE_180, 64*FRACUNIT);
|
newx = mobj->x + P_ReturnThrustX(mobj, newangle + ANGLE_180, 64*FRACUNIT);
|
||||||
newy = mobj->y + P_ReturnThrustY(mobj, newangle + ANGLE_180, 64*FRACUNIT);
|
newy = mobj->y + P_ReturnThrustY(mobj, newangle + ANGLE_180, 64*FRACUNIT);
|
||||||
|
|
||||||
mo = P_SpawnMobj(newx, newy, mobj->z, MT_BATTLEBALLOON1);
|
for (i = 0; i < cv_kartballoons.value; i++)
|
||||||
mo->threshold = 10;
|
|
||||||
P_SetTarget(&mo->target, mobj);
|
|
||||||
mo->angle = 0;
|
|
||||||
mo->color = mobj->color;
|
|
||||||
if (mobj->flags2 & MF2_DONTDRAW)
|
|
||||||
mo->flags2 |= MF2_DONTDRAW;
|
|
||||||
else
|
|
||||||
mo->flags2 &= ~MF2_DONTDRAW;
|
|
||||||
|
|
||||||
if (p->kartstuff[k_balloon] & 2)
|
|
||||||
{
|
{
|
||||||
mo2 = P_SpawnMobj(newx, newy, mobj->z, MT_BATTLEBALLOON2);
|
mo = P_SpawnMobj(newx, newy, mobj->z, MT_BATTLEBALLOON);
|
||||||
mo2->threshold = 10;
|
mo->threshold = i;
|
||||||
P_SetTarget(&mo2->target, mobj);
|
P_SetTarget(&mo->target, mobj);
|
||||||
mo2->angle = diff;
|
mo->angle = (diff * (i-1));
|
||||||
mo2->color = mobj->color;
|
mo->color = mobj->color;
|
||||||
if (mobj->flags2 & MF2_DONTDRAW)
|
if (mobj->flags2 & MF2_DONTDRAW)
|
||||||
mo2->flags2 |= MF2_DONTDRAW;
|
mo->flags2 |= MF2_DONTDRAW;
|
||||||
else
|
else
|
||||||
mo2->flags2 &= ~MF2_DONTDRAW;
|
mo->flags2 &= ~MF2_DONTDRAW;
|
||||||
}
|
|
||||||
|
|
||||||
if (p->kartstuff[k_balloon] & 4)
|
|
||||||
{
|
|
||||||
mo3 = P_SpawnMobj(newx, newy, mobj->z, MT_BATTLEBALLOON3);
|
|
||||||
mo3->threshold = 10;
|
|
||||||
P_SetTarget(&mo3->target, mobj);
|
|
||||||
mo3->angle = diff*2;
|
|
||||||
mo3->color = mobj->color;
|
|
||||||
if (mobj->flags2 & MF2_DONTDRAW)
|
|
||||||
mo3->flags2 |= MF2_DONTDRAW;
|
|
||||||
else
|
|
||||||
mo3->flags2 &= ~MF2_DONTDRAW;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p->kartstuff[k_balloon] & 8)
|
|
||||||
{
|
|
||||||
mo4 = P_SpawnMobj(newx, newy, mobj->z, MT_BATTLEBALLOON4);
|
|
||||||
mo4->threshold = 10;
|
|
||||||
P_SetTarget(&mo4->target, mobj);
|
|
||||||
mo4->angle = diff*3;
|
|
||||||
mo4->color = mobj->color;
|
|
||||||
if (mobj->flags2 & MF2_DONTDRAW)
|
|
||||||
mo4->flags2 |= MF2_DONTDRAW;
|
|
||||||
else
|
|
||||||
mo4->flags2 &= ~MF2_DONTDRAW;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p->kartstuff[k_balloon] & 16)
|
|
||||||
{
|
|
||||||
mo5 = P_SpawnMobj(newx, newy, mobj->z, MT_BATTLEBALLOON5);
|
|
||||||
mo5->threshold = 10;
|
|
||||||
P_SetTarget(&mo5->target, mobj);
|
|
||||||
mo5->angle = diff*4;
|
|
||||||
mo5->color = mobj->color;
|
|
||||||
if (mobj->flags2 & MF2_DONTDRAW)
|
|
||||||
mo5->flags2 |= MF2_DONTDRAW;
|
|
||||||
else
|
|
||||||
mo5->flags2 &= ~MF2_DONTDRAW;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue