mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
SF_MACHINE. Currently only changes drowning, but could do more.
* Electric sparks coming off entire body instead of bubbles coming out mouth * Different sounds. * Different icons. These sprites are currently local only, but I'll be doing a lot of asset updating this evening since Rob asked me to so it won't be long until you can get them.
This commit is contained in:
parent
0f79e9ea3b
commit
f757fb3545
8 changed files with 114 additions and 31 deletions
|
|
@ -43,7 +43,7 @@ typedef enum
|
||||||
SF_NOJUMPDAMAGE = 1<<8, // Don't damage enemies, etc whilst jumping?
|
SF_NOJUMPDAMAGE = 1<<8, // Don't damage enemies, etc whilst jumping?
|
||||||
SF_STOMPDAMAGE = 1<<9, // Always damage enemies, etc by landing on them, no matter your vunerability?
|
SF_STOMPDAMAGE = 1<<9, // Always damage enemies, etc by landing on them, no matter your vunerability?
|
||||||
SF_MARIODAMAGE = SF_NOJUMPDAMAGE|SF_STOMPDAMAGE, // The Mario method of being able to damage enemies, etc.
|
SF_MARIODAMAGE = SF_NOJUMPDAMAGE|SF_STOMPDAMAGE, // The Mario method of being able to damage enemies, etc.
|
||||||
SF_NOMIDDLESTART = 1<<10, // Some animations can randomly start you halfway through. Disable this?
|
SF_MACHINE = 1<<10, // Beep boop. Are you a robot?
|
||||||
} skinflags_t;
|
} skinflags_t;
|
||||||
|
|
||||||
//Primary and secondary skin abilities
|
//Primary and secondary skin abilities
|
||||||
|
|
|
||||||
|
|
@ -5552,6 +5552,8 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
|
|
||||||
"S_POP1", // Extra Large bubble goes POP!
|
"S_POP1", // Extra Large bubble goes POP!
|
||||||
|
|
||||||
|
"S_WATERZAP",
|
||||||
|
|
||||||
"S_FOG1",
|
"S_FOG1",
|
||||||
"S_FOG2",
|
"S_FOG2",
|
||||||
"S_FOG3",
|
"S_FOG3",
|
||||||
|
|
@ -5593,6 +5595,13 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_FOUR1",
|
"S_FOUR1",
|
||||||
"S_FIVE1",
|
"S_FIVE1",
|
||||||
|
|
||||||
|
"S_ZERO2",
|
||||||
|
"S_ONE2",
|
||||||
|
"S_TWO2",
|
||||||
|
"S_THREE2",
|
||||||
|
"S_FOUR2",
|
||||||
|
"S_FIVE2",
|
||||||
|
|
||||||
// Tag Sign
|
// Tag Sign
|
||||||
"S_TTAG1",
|
"S_TTAG1",
|
||||||
|
|
||||||
|
|
@ -6501,6 +6510,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
||||||
"MT_SMALLBUBBLE", // small bubble
|
"MT_SMALLBUBBLE", // small bubble
|
||||||
"MT_MEDIUMBUBBLE", // medium bubble
|
"MT_MEDIUMBUBBLE", // medium bubble
|
||||||
"MT_EXTRALARGEBUBBLE", // extra large bubble
|
"MT_EXTRALARGEBUBBLE", // extra large bubble
|
||||||
|
"MT_WATERZAP",
|
||||||
"MT_TFOG",
|
"MT_TFOG",
|
||||||
"MT_SEED",
|
"MT_SEED",
|
||||||
"MT_PARTICLE",
|
"MT_PARTICLE",
|
||||||
|
|
@ -7146,7 +7156,7 @@ struct {
|
||||||
{"SF_NOJUMPDAMAGE",SF_NOJUMPDAMAGE},
|
{"SF_NOJUMPDAMAGE",SF_NOJUMPDAMAGE},
|
||||||
{"SF_STOMPDAMAGE",SF_STOMPDAMAGE},
|
{"SF_STOMPDAMAGE",SF_STOMPDAMAGE},
|
||||||
{"SF_MARIODAMAGE",SF_MARIODAMAGE},
|
{"SF_MARIODAMAGE",SF_MARIODAMAGE},
|
||||||
{"SF_NOMIDDLESTART",SF_NOMIDDLESTART},
|
{"SF_MACHINE",SF_MACHINE},
|
||||||
|
|
||||||
// Character abilities!
|
// Character abilities!
|
||||||
// Primary
|
// Primary
|
||||||
|
|
|
||||||
|
|
@ -387,6 +387,7 @@ light_t *t_lspr[NUMSPRITES] =
|
||||||
&lspr[NOLIGHT], // SPR_BUBN
|
&lspr[NOLIGHT], // SPR_BUBN
|
||||||
&lspr[NOLIGHT], // SPR_BUBM
|
&lspr[NOLIGHT], // SPR_BUBM
|
||||||
&lspr[NOLIGHT], // SPR_POPP
|
&lspr[NOLIGHT], // SPR_POPP
|
||||||
|
&lspr[SUPERSPARK_L], // SPR_WZAP
|
||||||
&lspr[SUPERSPARK_L], // SPR_TFOG
|
&lspr[SUPERSPARK_L], // SPR_TFOG
|
||||||
&lspr[NIGHTSLIGHT_L], // SPR_SEED // Sonic CD flower seed
|
&lspr[NIGHTSLIGHT_L], // SPR_SEED // Sonic CD flower seed
|
||||||
&lspr[NOLIGHT], // SPR_PRTL
|
&lspr[NOLIGHT], // SPR_PRTL
|
||||||
|
|
|
||||||
54
src/info.c
54
src/info.c
|
|
@ -45,15 +45,15 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
"ELEM","FORC","PITY","IVSP","SSPK","GOAL","BIRD","BUNY","MOUS","CHIC",
|
"ELEM","FORC","PITY","IVSP","SSPK","GOAL","BIRD","BUNY","MOUS","CHIC",
|
||||||
"COWZ","RBRD","SPRY","SPRR","SPRB","YSPR","RSPR","SSWY","SSWR","SSWB",
|
"COWZ","RBRD","SPRY","SPRR","SPRB","YSPR","RSPR","SSWY","SSWR","SSWB",
|
||||||
"RAIN","SNO1","SPLH","SPLA","SMOK","BUBP","BUBO","BUBN","BUBM","POPP",
|
"RAIN","SNO1","SPLH","SPLA","SMOK","BUBP","BUBO","BUBN","BUBM","POPP",
|
||||||
"TFOG","SEED","PRTL","SCOR","DRWN","TTAG","GFLG","RRNG","RNGB","RNGR",
|
"WZAP","TFOG","SEED","PRTL","SCOR","DRWN","TTAG","GFLG","RRNG","RNGB",
|
||||||
"RNGI","RNGA","RNGE","RNGS","RNGG","PIKB","PIKR","PIKA","PIKE","PIKS",
|
"RNGR","RNGI","RNGA","RNGE","RNGS","RNGG","PIKB","PIKR","PIKA","PIKE",
|
||||||
"PIKG","TAUT","TGRE","TSCR","COIN","CPRK","GOOM","BGOM","FFWR","FBLL",
|
"PIKS","PIKG","TAUT","TGRE","TSCR","COIN","CPRK","GOOM","BGOM","FFWR",
|
||||||
"SHLL","PUMA","HAMM","KOOP","BFLM","MAXE","MUS1","MUS2","TOAD","NDRN",
|
"FBLL","SHLL","PUMA","HAMM","KOOP","BFLM","MAXE","MUS1","MUS2","TOAD",
|
||||||
"SUPE","SUPZ","NDRL","NSPK","NBMP","HOOP","NSCR","NPRU","CAPS","SUPT",
|
"NDRN","SUPE","SUPZ","NDRL","NSPK","NBMP","HOOP","NSCR","NPRU","CAPS",
|
||||||
"SPRK","BOM1","BOM2","BOM3","BOM4","ROIA","ROIB","ROIC","ROID","ROIE",
|
"SUPT","SPRK","BOM1","BOM2","BOM3","BOM4","ROIA","ROIB","ROIC","ROID",
|
||||||
"ROIF","ROIG","ROIH","ROII","ROIJ","ROIK","ROIL","ROIM","ROIN","ROIO",
|
"ROIE","ROIF","ROIG","ROIH","ROII","ROIJ","ROIK","ROIL","ROIM","ROIN",
|
||||||
"ROIP","BBAL","GWLG","GWLR","SRBA","SRBB","SRBC","SRBD","SRBE","SRBF",
|
"ROIO","ROIP","BBAL","GWLG","GWLR","SRBA","SRBB","SRBC","SRBD","SRBE",
|
||||||
"SRBG","SRBH","SRBI","SRBJ","SRBK","SRBL","SRBM","SRBN","SRBO",
|
"SRBF","SRBG","SRBH","SRBI","SRBJ","SRBK","SRBL","SRBM","SRBN","SRBO",
|
||||||
};
|
};
|
||||||
|
|
||||||
char spr2names[NUMPLAYERSPRITES][5] =
|
char spr2names[NUMPLAYERSPRITES][5] =
|
||||||
|
|
@ -1936,6 +1936,8 @@ state_t states[NUMSTATES] =
|
||||||
// Extra Large Bubble goes POP!
|
// Extra Large Bubble goes POP!
|
||||||
{SPR_POPP, 0, 16, {NULL}, 0, 0, S_NULL}, // S_POP1
|
{SPR_POPP, 0, 16, {NULL}, 0, 0, S_NULL}, // S_POP1
|
||||||
|
|
||||||
|
{SPR_WZAP, FF_TRANS10|FF_ANIMATE|FF_MIDDLESTARTCHANCE, 4, {NULL}, 3, 2, S_NULL}, // S_WATERZAP
|
||||||
|
|
||||||
{SPR_TFOG, FF_FULLBRIGHT|FF_TRANS50, 2, {NULL}, 0, 0, S_FOG2}, // S_FOG1
|
{SPR_TFOG, FF_FULLBRIGHT|FF_TRANS50, 2, {NULL}, 0, 0, S_FOG2}, // S_FOG1
|
||||||
{SPR_TFOG, FF_FULLBRIGHT|FF_TRANS50|1, 2, {NULL}, 0, 0, S_FOG3}, // S_FOG2
|
{SPR_TFOG, FF_FULLBRIGHT|FF_TRANS50|1, 2, {NULL}, 0, 0, S_FOG3}, // S_FOG2
|
||||||
{SPR_TFOG, FF_FULLBRIGHT|FF_TRANS50|2, 2, {NULL}, 0, 0, S_FOG4}, // S_FOG3
|
{SPR_TFOG, FF_FULLBRIGHT|FF_TRANS50|2, 2, {NULL}, 0, 0, S_FOG4}, // S_FOG3
|
||||||
|
|
@ -1978,6 +1980,13 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_DRWN, 4, 40, {NULL}, 0, 0, S_NULL}, // S_FOUR1
|
{SPR_DRWN, 4, 40, {NULL}, 0, 0, S_NULL}, // S_FOUR1
|
||||||
{SPR_DRWN, 5, 40, {NULL}, 0, 0, S_NULL}, // S_FIVE1
|
{SPR_DRWN, 5, 40, {NULL}, 0, 0, S_NULL}, // S_FIVE1
|
||||||
|
|
||||||
|
{SPR_DRWN, 6, 40, {NULL}, 0, 0, S_NULL}, // S_ZERO2
|
||||||
|
{SPR_DRWN, 7, 40, {NULL}, 0, 0, S_NULL}, // S_ONE2
|
||||||
|
{SPR_DRWN, 8, 40, {NULL}, 0, 0, S_NULL}, // S_TWO2
|
||||||
|
{SPR_DRWN, 9, 40, {NULL}, 0, 0, S_NULL}, // S_THREE2
|
||||||
|
{SPR_DRWN, 10, 40, {NULL}, 0, 0, S_NULL}, // S_FOUR2
|
||||||
|
{SPR_DRWN, 11, 40, {NULL}, 0, 0, S_NULL}, // S_FIVE2
|
||||||
|
|
||||||
{SPR_TTAG, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_NULL}, // S_TTAG1
|
{SPR_TTAG, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_NULL}, // S_TTAG1
|
||||||
|
|
||||||
// CTF Sign
|
// CTF Sign
|
||||||
|
|
@ -10514,6 +10523,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // MT_WATERZAP
|
||||||
|
-1, // doomednum
|
||||||
|
S_WATERZAP, // 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
|
||||||
|
8, // speed
|
||||||
|
4*FRACUNIT, // radius
|
||||||
|
4*FRACUNIT, // height
|
||||||
|
0, // display offset
|
||||||
|
16, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOGRAVITY|MF_SCENERY, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
{ // MT_TFOG
|
{ // MT_TFOG
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_FOG1, // spawnstate
|
S_FOG1, // spawnstate
|
||||||
|
|
|
||||||
11
src/info.h
11
src/info.h
|
|
@ -463,6 +463,7 @@ typedef enum sprite
|
||||||
SPR_BUBN, // Large bubble
|
SPR_BUBN, // Large bubble
|
||||||
SPR_BUBM, // Extra Large (would you like fries with that?) bubble
|
SPR_BUBM, // Extra Large (would you like fries with that?) bubble
|
||||||
SPR_POPP, // Extra Large bubble goes POP!
|
SPR_POPP, // Extra Large bubble goes POP!
|
||||||
|
SPR_WZAP,
|
||||||
SPR_TFOG, // Teleport Fog
|
SPR_TFOG, // Teleport Fog
|
||||||
SPR_SEED, // Sonic CD flower seed
|
SPR_SEED, // Sonic CD flower seed
|
||||||
SPR_PRTL, // Particle (for fans, etc.)
|
SPR_PRTL, // Particle (for fans, etc.)
|
||||||
|
|
@ -2434,6 +2435,8 @@ typedef enum state
|
||||||
|
|
||||||
S_POP1, // Extra Large bubble goes POP!
|
S_POP1, // Extra Large bubble goes POP!
|
||||||
|
|
||||||
|
S_WATERZAP,
|
||||||
|
|
||||||
S_FOG1,
|
S_FOG1,
|
||||||
S_FOG2,
|
S_FOG2,
|
||||||
S_FOG3,
|
S_FOG3,
|
||||||
|
|
@ -2475,6 +2478,13 @@ typedef enum state
|
||||||
S_FOUR1,
|
S_FOUR1,
|
||||||
S_FIVE1,
|
S_FIVE1,
|
||||||
|
|
||||||
|
S_ZERO2,
|
||||||
|
S_ONE2,
|
||||||
|
S_TWO2,
|
||||||
|
S_THREE2,
|
||||||
|
S_FOUR2,
|
||||||
|
S_FIVE2,
|
||||||
|
|
||||||
// Tag Sign
|
// Tag Sign
|
||||||
S_TTAG1,
|
S_TTAG1,
|
||||||
|
|
||||||
|
|
@ -3401,6 +3411,7 @@ typedef enum mobj_type
|
||||||
MT_SMALLBUBBLE, // small bubble
|
MT_SMALLBUBBLE, // small bubble
|
||||||
MT_MEDIUMBUBBLE, // medium bubble
|
MT_MEDIUMBUBBLE, // medium bubble
|
||||||
MT_EXTRALARGEBUBBLE, // extra large bubble
|
MT_EXTRALARGEBUBBLE, // extra large bubble
|
||||||
|
MT_WATERZAP,
|
||||||
MT_TFOG,
|
MT_TFOG,
|
||||||
MT_SEED,
|
MT_SEED,
|
||||||
MT_PARTICLE,
|
MT_PARTICLE,
|
||||||
|
|
|
||||||
|
|
@ -2261,7 +2261,10 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
||||||
target->momx = target->momy = target->momz = 0;
|
target->momx = target->momy = target->momz = 0;
|
||||||
if (damagetype == DMG_DROWNED) // drowned
|
if (damagetype == DMG_DROWNED) // drowned
|
||||||
{
|
{
|
||||||
S_StartSound(target, sfx_drown);
|
if (target->player->charflags & SF_MACHINE)
|
||||||
|
S_StartSound(target, sfx_fizzle);
|
||||||
|
else
|
||||||
|
S_StartSound(target, sfx_drown);
|
||||||
// Don't jump up when drowning
|
// Don't jump up when drowning
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -489,7 +489,7 @@ boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state)
|
||||||
}
|
}
|
||||||
else if (mobj->sprite2 != spr2)
|
else if (mobj->sprite2 != spr2)
|
||||||
{
|
{
|
||||||
if ((st->frame & FF_MIDDLESTARTCHANCE) && !(player->charflags & SF_NOMIDDLESTART) && numframes && P_RandomChance(FRACUNIT/2))
|
if ((st->frame & FF_MIDDLESTARTCHANCE) && numframes && P_RandomChance(FRACUNIT/2))
|
||||||
frame = numframes/2;
|
frame = numframes/2;
|
||||||
else
|
else
|
||||||
frame = 0;
|
frame = 0;
|
||||||
|
|
@ -609,7 +609,7 @@ boolean P_SetMobjState(mobj_t *mobj, statenum_t state)
|
||||||
}
|
}
|
||||||
else if (mobj->sprite2 != spr2)
|
else if (mobj->sprite2 != spr2)
|
||||||
{
|
{
|
||||||
if ((st->frame & FF_MIDDLESTARTCHANCE) && !(skin->flags & SF_NOMIDDLESTART) && numframes && P_RandomChance(FRACUNIT/2))
|
if ((st->frame & FF_MIDDLESTARTCHANCE) && numframes && P_RandomChance(FRACUNIT/2))
|
||||||
frame = numframes/2;
|
frame = numframes/2;
|
||||||
else
|
else
|
||||||
frame = 0;
|
frame = 0;
|
||||||
|
|
|
||||||
56
src/p_user.c
56
src/p_user.c
|
|
@ -2018,9 +2018,15 @@ static void P_CheckUnderwaterAndSpaceTimer(player_t *player)
|
||||||
|
|
||||||
mobj_t *numbermobj = P_SpawnMobj(player->mo->x, player->mo->y, height, MT_DROWNNUMBERS);
|
mobj_t *numbermobj = P_SpawnMobj(player->mo->x, player->mo->y, height, MT_DROWNNUMBERS);
|
||||||
|
|
||||||
timeleft /= (2*TICRATE); // To be strictly accurate it'd need to be ((timeleft/TICRATE) - 1)/2, but integer division rounds down for us
|
timeleft /= (2*TICRATE); // To be strictly accurate it'd need to be (((timeleft - 1)/TICRATE) - 1)/2, but integer division rounds down for us
|
||||||
|
|
||||||
S_StartSound(player->mo, sfx_dwnind);
|
if (player->charflags & SF_MACHINE)
|
||||||
|
{
|
||||||
|
S_StartSound(player->mo, sfx_buzz1);
|
||||||
|
timeleft += 6;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
S_StartSound(player->mo, sfx_dwnind);
|
||||||
|
|
||||||
if (timeleft) // Don't waste time setting the state if the time is 0.
|
if (timeleft) // Don't waste time setting the state if the time is 0.
|
||||||
P_SetMobjState(numbermobj, numbermobj->info->spawnstate+timeleft);
|
P_SetMobjState(numbermobj, numbermobj->info->spawnstate+timeleft);
|
||||||
|
|
@ -2059,11 +2065,9 @@ static void P_CheckUnderwaterAndSpaceTimer(player_t *player)
|
||||||
// Underwater audio cues
|
// Underwater audio cues
|
||||||
if (P_IsLocalPlayer(player) && !player->bot)
|
if (P_IsLocalPlayer(player) && !player->bot)
|
||||||
{
|
{
|
||||||
if (player->powers[pw_underwater] == 25*TICRATE + 1)
|
if ((player->powers[pw_underwater] == 25*TICRATE + 1)
|
||||||
S_StartSound(NULL, sfx_wtrdng);
|
|| (player->powers[pw_underwater] == 20*TICRATE + 1)
|
||||||
else if (player->powers[pw_underwater] == 20*TICRATE + 1)
|
|| (player->powers[pw_underwater] == 15*TICRATE + 1))
|
||||||
S_StartSound(NULL, sfx_wtrdng);
|
|
||||||
else if (player->powers[pw_underwater] == 15*TICRATE + 1)
|
|
||||||
S_StartSound(NULL, sfx_wtrdng);
|
S_StartSound(NULL, sfx_wtrdng);
|
||||||
|
|
||||||
if (player->powers[pw_underwater] == 11*TICRATE + 1
|
if (player->powers[pw_underwater] == 11*TICRATE + 1
|
||||||
|
|
@ -2141,21 +2145,39 @@ static void P_CheckInvincibilityTimer(player_t *player)
|
||||||
//
|
//
|
||||||
static void P_DoBubbleBreath(player_t *player)
|
static void P_DoBubbleBreath(player_t *player)
|
||||||
{
|
{
|
||||||
fixed_t zh;
|
fixed_t x = player->mo->x;
|
||||||
|
fixed_t y = player->mo->y;
|
||||||
|
fixed_t z = player->mo->z;
|
||||||
mobj_t *bubble = NULL;
|
mobj_t *bubble = NULL;
|
||||||
|
|
||||||
if (player->mo->eflags & MFE_VERTICALFLIP)
|
|
||||||
zh = player->mo->z + player->mo->height - FixedDiv(player->mo->height,5*(FRACUNIT/4));
|
|
||||||
else
|
|
||||||
zh = player->mo->z + FixedDiv(player->mo->height,5*(FRACUNIT/4));
|
|
||||||
|
|
||||||
if (!(player->mo->eflags & MFE_UNDERWATER) || ((player->powers[pw_shield] & SH_NOSTACK) == SH_ELEMENTAL && !(player->pflags & PF_NIGHTSMODE)) || player->spectator)
|
if (!(player->mo->eflags & MFE_UNDERWATER) || ((player->powers[pw_shield] & SH_NOSTACK) == SH_ELEMENTAL && !(player->pflags & PF_NIGHTSMODE)) || player->spectator)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (P_RandomChance(FRACUNIT/16))
|
if (player->charflags & SF_MACHINE)
|
||||||
bubble = P_SpawnMobj(player->mo->x, player->mo->y, zh, MT_SMALLBUBBLE);
|
{
|
||||||
else if (P_RandomChance(3*FRACUNIT/256))
|
if (P_RandomChance((128-(player->powers[pw_underwater]/4))*FRACUNIT/256))
|
||||||
bubble = P_SpawnMobj(player->mo->x, player->mo->y, zh, MT_MEDIUMBUBBLE);
|
{
|
||||||
|
fixed_t rad = player->mo->radius>>FRACBITS;
|
||||||
|
x += (P_RandomRange(rad, -rad)<<FRACBITS);
|
||||||
|
y += (P_RandomRange(rad, -rad)<<FRACBITS);
|
||||||
|
z += (P_RandomKey(player->mo->height>>FRACBITS)<<FRACBITS);
|
||||||
|
bubble = P_SpawnMobj(x, y, z, MT_WATERZAP);
|
||||||
|
S_StartSound(bubble, sfx_beelec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (player->mo->eflags & MFE_VERTICALFLIP)
|
||||||
|
z += player->mo->height - FixedDiv(player->mo->height,5*(FRACUNIT/4));
|
||||||
|
else
|
||||||
|
z += FixedDiv(player->mo->height,5*(FRACUNIT/4));
|
||||||
|
|
||||||
|
if (P_RandomChance(FRACUNIT/16))
|
||||||
|
bubble = P_SpawnMobj(x, y, z, MT_SMALLBUBBLE);
|
||||||
|
else if (P_RandomChance(3*FRACUNIT/256))
|
||||||
|
bubble = P_SpawnMobj(x, y, z, MT_MEDIUMBUBBLE);
|
||||||
|
}
|
||||||
|
|
||||||
if (bubble)
|
if (bubble)
|
||||||
{
|
{
|
||||||
bubble->threshold = 42;
|
bubble->threshold = 42;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue