mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-03-22 02:41:56 +00:00
Balloon revamp
Supports arbitrary balloon counts now
This commit is contained in:
parent
4fce06d80e
commit
cc01d2c3f0
8 changed files with 132 additions and 285 deletions
|
@ -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_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_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}};
|
||||
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_kartcc;
|
||||
extern consvar_t cv_kartballoons;
|
||||
extern consvar_t cv_kartfrantic;
|
||||
extern consvar_t cv_speedometer;
|
||||
|
||||
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_SINKTRAIL",
|
||||
|
||||
"MT_BATTLEBALLOON1", // Battle Mode balloon stuff
|
||||
"MT_BATTLEBALLOON2",
|
||||
"MT_BATTLEBALLOON3",
|
||||
"MT_BATTLEBALLOON4",
|
||||
"MT_BATTLEBALLOON5",
|
||||
"MT_BATTLEBALLOON", // Battle Mode balloon
|
||||
|
||||
"MT_LAKITU",
|
||||
|
||||
|
|
110
src/info.c
110
src/info.c
|
@ -15139,115 +15139,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_BATTLEBALLOON1
|
||||
-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
|
||||
{ // MT_BATTLEBALLOON
|
||||
-1, // doomednum
|
||||
S_BATTLEBALLOON1,// spawnstate
|
||||
1000, // spawnhealth
|
||||
|
|
|
@ -3977,11 +3977,7 @@ typedef enum mobj_type
|
|||
MT_SINK, // Kitchen Sink Stuff
|
||||
MT_SINKTRAIL,
|
||||
|
||||
MT_BATTLEBALLOON1, // Battle Mode balloons
|
||||
MT_BATTLEBALLOON2,
|
||||
MT_BATTLEBALLOON3,
|
||||
MT_BATTLEBALLOON4,
|
||||
MT_BATTLEBALLOON5,
|
||||
MT_BATTLEBALLOON, // Battle Mode balloons
|
||||
|
||||
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_kartballoons);
|
||||
CV_RegisterVar(&cv_kartfrantic);
|
||||
CV_RegisterVar(&cv_speedometer);
|
||||
CV_RegisterVar(&cv_collideminimum);
|
||||
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.
|
||||
|
||||
if (cv_kartfrantic.value) // Stupid items
|
||||
{
|
||||
pdis = (13*pdis/14); // multiply...
|
||||
pdis += distvar; // then set everyone back another place...
|
||||
}
|
||||
|
||||
if (gametype == GT_MATCH
|
||||
|| gametype == GT_TEAMMATCH
|
||||
|| 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_driftboost] = 0;
|
||||
|
||||
if (gametype == GT_MATCH)
|
||||
if (gametype != GT_RACE)
|
||||
{
|
||||
if (player->kartstuff[k_balloon] & 16)
|
||||
player->kartstuff[k_balloon] &= ~16;
|
||||
else if (player->kartstuff[k_balloon] & 8)
|
||||
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;
|
||||
player->kartstuff[k_balloon]--;
|
||||
|
||||
if (player->kartstuff[k_balloon] <= 0)
|
||||
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)
|
||||
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_driftboost] = 0;
|
||||
|
||||
if (gametype == GT_MATCH)
|
||||
if (gametype != GT_RACE)
|
||||
{
|
||||
if (player->kartstuff[k_balloon] & 16)
|
||||
player->kartstuff[k_balloon] &= ~16;
|
||||
else if (player->kartstuff[k_balloon] & 8)
|
||||
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;
|
||||
player->kartstuff[k_balloon]--;
|
||||
|
||||
if (player->kartstuff[k_balloon] <= 0)
|
||||
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)
|
||||
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_driftboost] = 0;
|
||||
|
||||
if (gametype == GT_MATCH)
|
||||
if (gametype != GT_RACE)
|
||||
{
|
||||
if (player->kartstuff[k_balloon] & 16)
|
||||
player->kartstuff[k_balloon] &= ~16;
|
||||
else if (player->kartstuff[k_balloon] & 8)
|
||||
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;
|
||||
player->kartstuff[k_balloon]--;
|
||||
|
||||
if (player->kartstuff[k_balloon] <= 0)
|
||||
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)
|
||||
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;
|
||||
}
|
||||
|
||||
/*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)
|
||||
{
|
||||
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;
|
||||
else if (target->type == MT_TRIPLEBANANASHIELD3 && 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)
|
||||
target->target->player->kartstuff[k_balloon] &= ~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;
|
||||
else if (target->type == MT_BATTLEBALLOON && target->target->player->kartstuff[k_balloon] >= target->threshold)
|
||||
target->target->player->kartstuff[k_triplebanana] = target->threshold-1;
|
||||
}
|
||||
//
|
||||
|
||||
|
@ -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]));
|
||||
}*/
|
||||
|
||||
if (player->kartstuff[k_balloon])
|
||||
if (gametype != GT_RACE)
|
||||
{
|
||||
if (player->kartstuff[k_balloon] & 16)
|
||||
player->kartstuff[k_balloon] &= ~16;
|
||||
else if (player->kartstuff[k_balloon] & 8)
|
||||
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;
|
||||
player->kartstuff[k_balloon]--;
|
||||
|
||||
if (player->kartstuff[k_balloon] <= 0)
|
||||
CONS_Printf(M_GetText("%s lost all of their balloons!\n"), player_names[player-players]);
|
||||
|
||||
K_CheckBalloons();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
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_TRIPLEBANANASHIELD2:
|
||||
case MT_TRIPLEBANANASHIELD3:
|
||||
case MT_BATTLEBALLOON1:
|
||||
case MT_BATTLEBALLOON2:
|
||||
case MT_BATTLEBALLOON3:
|
||||
case MT_BATTLEBALLOON4:
|
||||
case MT_BATTLEBALLOON5:
|
||||
case MT_BATTLEBALLOON:
|
||||
if (mobj->health > 0 && mobj->target && mobj->target->player && mobj->target->player->mo
|
||||
&& 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)
|
||||
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;
|
||||
else
|
||||
radius = 56*mobj->target->scale;
|
||||
|
@ -6603,10 +6599,8 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
//mobj->angle += FixedAngle(12*FRACUNIT); // mobj's actual speed.
|
||||
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_BATTLEBALLOON1 || mobj->type == MT_BATTLEBALLOON2 || mobj->type == MT_BATTLEBALLOON3
|
||||
|| mobj->type == MT_BATTLEBALLOON4 || mobj->type == MT_BATTLEBALLOON5)
|
||||
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->type == MT_BATTLEBALLOON)
|
||||
if ((mobj->type == MT_BATTLEBALLOON) && !((mobj->target->player-players) & 1))
|
||||
mobj->angle -= FixedAngle(mobj->info->speed);
|
||||
else
|
||||
mobj->angle += FixedAngle(mobj->info->speed);
|
||||
|
@ -6629,14 +6623,13 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
HEIGHT = mobj->target->height / 5;
|
||||
}
|
||||
|
||||
if (mobj->type == MT_BATTLEBALLOON1 || mobj->type == MT_BATTLEBALLOON2 || mobj->type == MT_BATTLEBALLOON3
|
||||
|| mobj->type == MT_BATTLEBALLOON4 || mobj->type == MT_BATTLEBALLOON5)
|
||||
if (mobj->type == MT_BATTLEBALLOON)
|
||||
{
|
||||
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);
|
||||
else if (!(mobj->target->player->kartstuff[k_balloon] & 4))
|
||||
else if (mobj->target->player->kartstuff[k_balloon] == 2)
|
||||
P_SetMobjState(mobj, S_BATTLEBALLOON2);
|
||||
|
||||
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_BOMBSHIELD && !(mobj->target->player->kartstuff[k_bobomb] & 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_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)))
|
||||
|| (mobj->type == MT_BATTLEBALLOON && (mobj->target->player->kartstuff[k_balloon] <= mobj->threshold)))
|
||||
{
|
||||
P_RemoveMobj(mobj);
|
||||
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_REDITEM: case MT_REDSHIELD: case MT_REDITEMDUD:
|
||||
case MT_TRIPLEREDSHIELD1: case MT_TRIPLEREDSHIELD2: case MT_TRIPLEREDSHIELD3:
|
||||
case MT_BATTLEBALLOON1: case MT_BATTLEBALLOON2: case MT_BATTLEBALLOON3:
|
||||
case MT_BATTLEBALLOON4: case MT_BATTLEBALLOON5: case MT_FIREBALL:
|
||||
case MT_BATTLEBALLOON: case MT_FIREBALL:
|
||||
case MT_FAKEITEM: case MT_FAKESHIELD:
|
||||
case MT_BOMBITEM: case MT_BOMBSHIELD:
|
||||
P_SpawnShadowMobj(mobj);
|
||||
|
@ -9414,98 +9402,31 @@ void P_SpawnPlayer(INT32 playernum)
|
|||
|
||||
if (gametype != GT_RACE && (leveltime < 1 || p->kartstuff[k_balloon] > 0)) // srb2kart
|
||||
{
|
||||
INT32 i;
|
||||
angle_t newangle, diff;
|
||||
fixed_t newx;
|
||||
fixed_t newy;
|
||||
mobj_t *mo, *mo2, *mo3, *mo4, *mo5;
|
||||
mobj_t *mo;
|
||||
|
||||
if (leveltime < 1) // Start of the map?
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
p->kartstuff[k_balloon] = cv_kartballoons.value; // Reset those balloons!
|
||||
|
||||
newangle = mobj->angle;
|
||||
diff = FixedAngle(360*FRACUNIT/cv_kartballoons.value);
|
||||
newx = mobj->x + P_ReturnThrustX(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);
|
||||
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)
|
||||
for (i = 0; i < cv_kartballoons.value; i++)
|
||||
{
|
||||
mo2 = P_SpawnMobj(newx, newy, mobj->z, MT_BATTLEBALLOON2);
|
||||
mo2->threshold = 10;
|
||||
P_SetTarget(&mo2->target, mobj);
|
||||
mo2->angle = diff;
|
||||
mo2->color = mobj->color;
|
||||
mo = P_SpawnMobj(newx, newy, mobj->z, MT_BATTLEBALLOON);
|
||||
mo->threshold = i;
|
||||
P_SetTarget(&mo->target, mobj);
|
||||
mo->angle = (diff * (i-1));
|
||||
mo->color = mobj->color;
|
||||
if (mobj->flags2 & MF2_DONTDRAW)
|
||||
mo2->flags2 |= MF2_DONTDRAW;
|
||||
mo->flags2 |= MF2_DONTDRAW;
|
||||
else
|
||||
mo2->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;
|
||||
mo->flags2 &= ~MF2_DONTDRAW;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue