* 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:
toasterbabe 2017-01-01 16:24:47 +00:00
parent df88d888e6
commit 3f92a2305a
8 changed files with 66 additions and 83 deletions

View file

@ -101,7 +101,6 @@ extern consvar_t cv_recycler;
extern consvar_t cv_itemfinder; extern consvar_t cv_itemfinder;
extern consvar_t cv_inttime, cv_advancemap, cv_playersforexit; extern consvar_t cv_inttime, cv_advancemap, cv_playersforexit;
extern consvar_t cv_soniccd;
extern consvar_t cv_match_scoring; extern consvar_t cv_match_scoring;
extern consvar_t cv_overtime; extern consvar_t cv_overtime;
extern consvar_t cv_startinglives; extern consvar_t cv_startinglives;

View file

@ -1014,7 +1014,7 @@ static const struct {
{"CANARY", MT_FLICKY_16}, {"CANARY", MT_FLICKY_16},
{"a", 0}, // End of normal flickies - a lower case character so will never fastcmp valid with uppercase tmp {"a", 0}, // End of normal flickies - a lower case character so will never fastcmp valid with uppercase tmp
//{"FLICKER", MT_FLICKER}, //{"FLICKER", MT_FLICKER},
{"SEED", MT_SEED},//MT_CDSEED}, {"SEED", MT_SEED},
{NULL, 0} {NULL, 0}
}; };

View file

@ -4728,7 +4728,7 @@ void G_BeginRecording(void)
// Don't do it. // Don't do it.
WRITEFIXED(demo_p, player->jumpfactor); WRITEFIXED(demo_p, player->jumpfactor);
// Save netvar data (SONICCD, etc) // Save netvar data
CV_SaveNetVars(&demo_p); CV_SaveNetVars(&demo_p);
memset(&oldcmd,0,sizeof(oldcmd)); memset(&oldcmd,0,sizeof(oldcmd));

View file

@ -2522,7 +2522,7 @@ state_t states[NUMSTATES] =
{SPR_TFOG, FF_FULLBRIGHT|FF_TRANS50|13, 2, {NULL}, 0, 0, S_NULL}, // S_FOG14 {SPR_TFOG, FF_FULLBRIGHT|FF_TRANS50|13, 2, {NULL}, 0, 0, S_NULL}, // S_FOG14
// Flower Seed // 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 // Particle sprite
{SPR_PRTL, FF_FULLBRIGHT|FF_TRANS70, 2*TICRATE, {NULL}, 0, 0, S_NULL}, // S_PARTICLE {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 4, // mass
0, // damage 0, // damage
sfx_None, // activesound sfx_None, // activesound
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_SCENERY, // flags MF_NOBLOCKMAP|MF_SCENERY, // flags
S_NULL // raisestate S_NULL // raisestate
}, },

View file

@ -10352,9 +10352,7 @@ mobj_t *P_InternalFlickySpawn(mobj_t *actor, mobjtype_t flickytype, fixed_t momz
{ {
mobj_t *flicky; mobj_t *flicky;
if (cv_soniccd.value) if (!flickytype)
flickytype = MT_SEED; // MT_CDSEED
else if (!flickytype)
{ {
if (!mapheaderinfo[gamemap-1] || !mapheaderinfo[gamemap-1]->numFlickies) // No mapheader, no shoes, no service. if (!mapheaderinfo[gamemap-1] || !mapheaderinfo[gamemap-1]->numFlickies) // No mapheader, no shoes, no service.
return NULL; 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 = P_SpawnMobjFromMobj(actor, 0, 0, 0, flickytype);
flicky->angle = actor->angle; flicky->angle = actor->angle;
if (flickytype == MT_SEED)
flicky->z += (actor->height - flicky->height)/2;
if (actor->eflags & MFE_UNDERWATER) if (actor->eflags & MFE_UNDERWATER)
momz = FixedDiv(momz, FixedSqrt(3*FRACUNIT)); momz = FixedDiv(momz, FixedSqrt(3*FRACUNIT));

View file

@ -2266,67 +2266,62 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
&& target->flags & MF_ENEMY) && target->flags & MF_ENEMY)
{ {
mobjtype_t item; mobjtype_t item;
if (cv_soniccd.value) INT32 prandom;
item = MT_SEED;
else 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_BLUECRAWLA:
{ case MT_JETTBOMBER:
case MT_REDCRAWLA: case MT_GFZFISH:
case MT_GOLDBUZZ: item = MT_FLICKY_01/*MT_BIRD*/;
case MT_SKIM: break;
case MT_UNIDUS:
item = MT_FLICKY_02/*MT_BUNNY*/;
break;
case MT_BLUECRAWLA: case MT_JETTGUNNER:
case MT_JETTBOMBER: case MT_CRAWLACOMMANDER:
case MT_GFZFISH: case MT_REDBUZZ:
item = MT_FLICKY_01/*MT_BIRD*/; case MT_DETON:
break; item = MT_FLICKY_12/*MT_MOUSE*/;
break;
case MT_JETTGUNNER: case MT_GSNAPPER:
case MT_CRAWLACOMMANDER: case MT_EGGGUARD:
case MT_REDBUZZ: case MT_SPRINGSHELL:
case MT_DETON: item = MT_FLICKY_11/*MT_COW*/;
item = MT_FLICKY_12/*MT_MOUSE*/; break;
break;
case MT_GSNAPPER: case MT_MINUS:
case MT_EGGGUARD: case MT_VULTURE:
case MT_SPRINGSHELL: case MT_POINTY:
item = MT_FLICKY_11/*MT_COW*/; case MT_YELLOWSHELL:
break; item = MT_FLICKY_03/*MT_CHICKEN*/;
break;
case MT_MINUS: case MT_AQUABUZZ:
case MT_VULTURE: item = MT_FLICKY_01/*MT_REDBIRD*/;
case MT_POINTY: break;
case MT_YELLOWSHELL:
item = MT_FLICKY_03/*MT_CHICKEN*/;
break;
case MT_AQUABUZZ: default:
item = MT_FLICKY_01/*MT_REDBIRD*/; if (target->info->doomednum)
break; prandom = target->info->doomednum%5; // "Random" animal for new enemies.
else
prandom = P_RandomKey(5); // No placable object, just use a random number.
default: switch(prandom)
if (target->info->doomednum) {
prandom = target->info->doomednum%5; // "Random" animal for new enemies. default: item = MT_FLICKY_02/*MT_BUNNY*/; break;
else case 1: item = MT_FLICKY_01/*MT_BIRD*/; break;
prandom = P_RandomKey(5); // No placable object, just use a random number. case 2: item = MT_FLICKY_12/*MT_MOUSE*/; break;
case 3: item = MT_FLICKY_11/*MT_COW*/; break;
switch(prandom) case 4: item = MT_FLICKY_03/*MT_CHICKEN*/; break;
{ }
default: item = MT_FLICKY_02/*MT_BUNNY*/; break; 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); mo = P_SpawnMobj(target->x, target->y, target->z + (target->height / 2) - FixedMul(mobjinfo[item].height / 2, target->scale), item);

View file

@ -3482,17 +3482,14 @@ static boolean P_SceneryZMovement(mobj_t *mo)
if ((!(mo->eflags & MFE_VERTICALFLIP) && mo->z <= mo->floorz) if ((!(mo->eflags & MFE_VERTICALFLIP) && mo->z <= mo->floorz)
|| (mo->eflags & MFE_VERTICALFLIP && mo->z+mo->height >= mo->ceilingz)) || (mo->eflags & MFE_VERTICALFLIP && mo->z+mo->height >= mo->ceilingz))
{ {
// DO NOT use random numbers here. mobjtype_t flowertype = ((P_RandomChance(FRACUNIT/2)) ? MT_GFZFLOWER1 : MT_GFZFLOWER3);
// SonicCD mode is console togglable and mobj_t *flower = P_SpawnMobjFromMobj(mo, 0, 0, 0, flowertype);
// affects demos. if (flower)
UINT8 rltime = (leveltime & 4); {
P_SetScale(flower, mo->scale/16);
if (!rltime) flower->destscale = mo->scale;
P_SpawnMobj(mo->x, mo->y, mo->floorz, MT_GFZFLOWER3); flower->scalespeed = mo->scale/8;
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);
P_RemoveMobj(mo); P_RemoveMobj(mo);
return false; return false;
@ -7049,7 +7046,8 @@ void P_MobjThinker(mobj_t *mobj)
} }
break; break;
case MT_SEED: 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; break;
case MT_ROCKCRUMBLE1: case MT_ROCKCRUMBLE1:
case MT_ROCKCRUMBLE2: case MT_ROCKCRUMBLE2:

View file

@ -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_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_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_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_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_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}; 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_gravity);
CV_RegisterVar(&cv_tailspickup); CV_RegisterVar(&cv_tailspickup);
CV_RegisterVar(&cv_soniccd);
CV_RegisterVar(&cv_allowmlook); CV_RegisterVar(&cv_allowmlook);
CV_RegisterVar(&cv_homremoval); CV_RegisterVar(&cv_homremoval);
CV_RegisterVar(&cv_flipcam); CV_RegisterVar(&cv_flipcam);