mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-03-12 22:02:12 +00:00
* Modified MT_SEED to have aesthetically nicer behaviour.
* Removed Soniccd command, as flicky selection involves a P_RandomKey call - this messes with replays and demos.
This commit is contained in:
parent
df88d888e6
commit
3f92a2305a
8 changed files with 66 additions and 83 deletions
|
@ -101,7 +101,6 @@ extern consvar_t cv_recycler;
|
|||
extern consvar_t cv_itemfinder;
|
||||
|
||||
extern consvar_t cv_inttime, cv_advancemap, cv_playersforexit;
|
||||
extern consvar_t cv_soniccd;
|
||||
extern consvar_t cv_match_scoring;
|
||||
extern consvar_t cv_overtime;
|
||||
extern consvar_t cv_startinglives;
|
||||
|
|
|
@ -1014,7 +1014,7 @@ static const struct {
|
|||
{"CANARY", MT_FLICKY_16},
|
||||
{"a", 0}, // End of normal flickies - a lower case character so will never fastcmp valid with uppercase tmp
|
||||
//{"FLICKER", MT_FLICKER},
|
||||
{"SEED", MT_SEED},//MT_CDSEED},
|
||||
{"SEED", MT_SEED},
|
||||
{NULL, 0}
|
||||
};
|
||||
|
||||
|
|
|
@ -4728,7 +4728,7 @@ void G_BeginRecording(void)
|
|||
// Don't do it.
|
||||
WRITEFIXED(demo_p, player->jumpfactor);
|
||||
|
||||
// Save netvar data (SONICCD, etc)
|
||||
// Save netvar data
|
||||
CV_SaveNetVars(&demo_p);
|
||||
|
||||
memset(&oldcmd,0,sizeof(oldcmd));
|
||||
|
|
|
@ -2522,7 +2522,7 @@ state_t states[NUMSTATES] =
|
|||
{SPR_TFOG, FF_FULLBRIGHT|FF_TRANS50|13, 2, {NULL}, 0, 0, S_NULL}, // S_FOG14
|
||||
|
||||
// Flower Seed
|
||||
{SPR_SEED, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_SEED
|
||||
{SPR_SEED, FF_FULLBRIGHT|FF_ANIMATE, -1, {NULL}, 2, 2, S_NULL}, // S_SEED
|
||||
|
||||
// Particle sprite
|
||||
{SPR_PRTL, FF_FULLBRIGHT|FF_TRANS70, 2*TICRATE, {NULL}, 0, 0, S_NULL}, // S_PARTICLE
|
||||
|
@ -11867,7 +11867,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
4, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_SCENERY, // flags
|
||||
MF_NOBLOCKMAP|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
|
|
|
@ -10352,9 +10352,7 @@ mobj_t *P_InternalFlickySpawn(mobj_t *actor, mobjtype_t flickytype, fixed_t momz
|
|||
{
|
||||
mobj_t *flicky;
|
||||
|
||||
if (cv_soniccd.value)
|
||||
flickytype = MT_SEED; // MT_CDSEED
|
||||
else if (!flickytype)
|
||||
if (!flickytype)
|
||||
{
|
||||
if (!mapheaderinfo[gamemap-1] || !mapheaderinfo[gamemap-1]->numFlickies) // No mapheader, no shoes, no service.
|
||||
return NULL;
|
||||
|
@ -10365,17 +10363,12 @@ mobj_t *P_InternalFlickySpawn(mobj_t *actor, mobjtype_t flickytype, fixed_t momz
|
|||
}
|
||||
}
|
||||
|
||||
if (flickytype == MT_SEED) // MT_CDSEED
|
||||
{
|
||||
flicky = P_SpawnMobj(actor->x, actor->y, actor->z + (actor->height / 2) - FixedMul(mobjinfo[flickytype].height / 2, actor->scale), flickytype);
|
||||
flicky->destscale = actor->scale;
|
||||
P_SetScale(flicky, flicky->destscale);
|
||||
return flicky;
|
||||
}
|
||||
|
||||
flicky = P_SpawnMobjFromMobj(actor, 0, 0, 0, flickytype);
|
||||
flicky->angle = actor->angle;
|
||||
|
||||
if (flickytype == MT_SEED)
|
||||
flicky->z += (actor->height - flicky->height)/2;
|
||||
|
||||
if (actor->eflags & MFE_UNDERWATER)
|
||||
momz = FixedDiv(momz, FixedSqrt(3*FRACUNIT));
|
||||
|
||||
|
|
101
src/p_inter.c
101
src/p_inter.c
|
@ -2266,67 +2266,62 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
|||
&& target->flags & MF_ENEMY)
|
||||
{
|
||||
mobjtype_t item;
|
||||
if (cv_soniccd.value)
|
||||
item = MT_SEED;
|
||||
else
|
||||
INT32 prandom;
|
||||
|
||||
switch (target->type)
|
||||
{
|
||||
INT32 prandom;
|
||||
case MT_REDCRAWLA:
|
||||
case MT_GOLDBUZZ:
|
||||
case MT_SKIM:
|
||||
case MT_UNIDUS:
|
||||
item = MT_FLICKY_02/*MT_BUNNY*/;
|
||||
break;
|
||||
|
||||
switch (target->type)
|
||||
{
|
||||
case MT_REDCRAWLA:
|
||||
case MT_GOLDBUZZ:
|
||||
case MT_SKIM:
|
||||
case MT_UNIDUS:
|
||||
item = MT_FLICKY_02/*MT_BUNNY*/;
|
||||
break;
|
||||
case MT_BLUECRAWLA:
|
||||
case MT_JETTBOMBER:
|
||||
case MT_GFZFISH:
|
||||
item = MT_FLICKY_01/*MT_BIRD*/;
|
||||
break;
|
||||
|
||||
case MT_BLUECRAWLA:
|
||||
case MT_JETTBOMBER:
|
||||
case MT_GFZFISH:
|
||||
item = MT_FLICKY_01/*MT_BIRD*/;
|
||||
break;
|
||||
case MT_JETTGUNNER:
|
||||
case MT_CRAWLACOMMANDER:
|
||||
case MT_REDBUZZ:
|
||||
case MT_DETON:
|
||||
item = MT_FLICKY_12/*MT_MOUSE*/;
|
||||
break;
|
||||
|
||||
case MT_JETTGUNNER:
|
||||
case MT_CRAWLACOMMANDER:
|
||||
case MT_REDBUZZ:
|
||||
case MT_DETON:
|
||||
item = MT_FLICKY_12/*MT_MOUSE*/;
|
||||
break;
|
||||
case MT_GSNAPPER:
|
||||
case MT_EGGGUARD:
|
||||
case MT_SPRINGSHELL:
|
||||
item = MT_FLICKY_11/*MT_COW*/;
|
||||
break;
|
||||
|
||||
case MT_GSNAPPER:
|
||||
case MT_EGGGUARD:
|
||||
case MT_SPRINGSHELL:
|
||||
item = MT_FLICKY_11/*MT_COW*/;
|
||||
break;
|
||||
case MT_MINUS:
|
||||
case MT_VULTURE:
|
||||
case MT_POINTY:
|
||||
case MT_YELLOWSHELL:
|
||||
item = MT_FLICKY_03/*MT_CHICKEN*/;
|
||||
break;
|
||||
|
||||
case MT_MINUS:
|
||||
case MT_VULTURE:
|
||||
case MT_POINTY:
|
||||
case MT_YELLOWSHELL:
|
||||
item = MT_FLICKY_03/*MT_CHICKEN*/;
|
||||
break;
|
||||
case MT_AQUABUZZ:
|
||||
item = MT_FLICKY_01/*MT_REDBIRD*/;
|
||||
break;
|
||||
|
||||
case MT_AQUABUZZ:
|
||||
item = MT_FLICKY_01/*MT_REDBIRD*/;
|
||||
break;
|
||||
default:
|
||||
if (target->info->doomednum)
|
||||
prandom = target->info->doomednum%5; // "Random" animal for new enemies.
|
||||
else
|
||||
prandom = P_RandomKey(5); // No placable object, just use a random number.
|
||||
|
||||
default:
|
||||
if (target->info->doomednum)
|
||||
prandom = target->info->doomednum%5; // "Random" animal for new enemies.
|
||||
else
|
||||
prandom = P_RandomKey(5); // No placable object, just use a random number.
|
||||
|
||||
switch(prandom)
|
||||
{
|
||||
default: item = MT_FLICKY_02/*MT_BUNNY*/; break;
|
||||
case 1: item = MT_FLICKY_01/*MT_BIRD*/; break;
|
||||
case 2: item = MT_FLICKY_12/*MT_MOUSE*/; break;
|
||||
case 3: item = MT_FLICKY_11/*MT_COW*/; break;
|
||||
case 4: item = MT_FLICKY_03/*MT_CHICKEN*/; break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
switch(prandom)
|
||||
{
|
||||
default: item = MT_FLICKY_02/*MT_BUNNY*/; break;
|
||||
case 1: item = MT_FLICKY_01/*MT_BIRD*/; break;
|
||||
case 2: item = MT_FLICKY_12/*MT_MOUSE*/; break;
|
||||
case 3: item = MT_FLICKY_11/*MT_COW*/; break;
|
||||
case 4: item = MT_FLICKY_03/*MT_CHICKEN*/; break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
mo = P_SpawnMobj(target->x, target->y, target->z + (target->height / 2) - FixedMul(mobjinfo[item].height / 2, target->scale), item);
|
||||
|
|
22
src/p_mobj.c
22
src/p_mobj.c
|
@ -3482,17 +3482,14 @@ static boolean P_SceneryZMovement(mobj_t *mo)
|
|||
if ((!(mo->eflags & MFE_VERTICALFLIP) && mo->z <= mo->floorz)
|
||||
|| (mo->eflags & MFE_VERTICALFLIP && mo->z+mo->height >= mo->ceilingz))
|
||||
{
|
||||
// DO NOT use random numbers here.
|
||||
// SonicCD mode is console togglable and
|
||||
// affects demos.
|
||||
UINT8 rltime = (leveltime & 4);
|
||||
|
||||
if (!rltime)
|
||||
P_SpawnMobj(mo->x, mo->y, mo->floorz, MT_GFZFLOWER3);
|
||||
else if (rltime == 2)
|
||||
P_SpawnMobj(mo->x, mo->y, mo->floorz, MT_GFZFLOWER2);
|
||||
else
|
||||
P_SpawnMobj(mo->x, mo->y, mo->floorz, MT_GFZFLOWER1);
|
||||
mobjtype_t flowertype = ((P_RandomChance(FRACUNIT/2)) ? MT_GFZFLOWER1 : MT_GFZFLOWER3);
|
||||
mobj_t *flower = P_SpawnMobjFromMobj(mo, 0, 0, 0, flowertype);
|
||||
if (flower)
|
||||
{
|
||||
P_SetScale(flower, mo->scale/16);
|
||||
flower->destscale = mo->scale;
|
||||
flower->scalespeed = mo->scale/8;
|
||||
}
|
||||
|
||||
P_RemoveMobj(mo);
|
||||
return false;
|
||||
|
@ -7049,7 +7046,8 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
}
|
||||
break;
|
||||
case MT_SEED:
|
||||
mobj->momz = mobj->info->speed;
|
||||
if (P_MobjFlip(mobj)*mobj->momz < mobj->info->speed)
|
||||
mobj->momz = P_MobjFlip(mobj)*mobj->info->speed;
|
||||
break;
|
||||
case MT_ROCKCRUMBLE1:
|
||||
case MT_ROCKCRUMBLE2:
|
||||
|
|
|
@ -148,7 +148,6 @@ consvar_t cv_flipcam2 = {"flipcam2", "No", CV_SAVE|CV_CALL|CV_NOINIT, CV_YesNo,
|
|||
consvar_t cv_shadow = {"shadow", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_shadowoffs = {"offsetshadows", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_skybox = {"skybox", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_soniccd = {"soniccd", "Off", CV_NETVAR, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_allowmlook = {"allowmlook", "Yes", CV_NETVAR, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_showhud = {"showhud", "Yes", CV_CALL, CV_YesNo, R_SetViewSize, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_translucenthud = {"translucenthud", "10", CV_SAVE, translucenthud_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
@ -1424,7 +1423,6 @@ void R_RegisterEngineStuff(void)
|
|||
{
|
||||
CV_RegisterVar(&cv_gravity);
|
||||
CV_RegisterVar(&cv_tailspickup);
|
||||
CV_RegisterVar(&cv_soniccd);
|
||||
CV_RegisterVar(&cv_allowmlook);
|
||||
CV_RegisterVar(&cv_homremoval);
|
||||
CV_RegisterVar(&cv_flipcam);
|
||||
|
|
Loading…
Reference in a new issue