From 3f92a2305abf25e2f9bdd6620f8cdf351f4217a6 Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Sun, 1 Jan 2017 16:24:47 +0000 Subject: [PATCH] * 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. --- src/d_netcmd.h | 1 - src/dehacked.c | 2 +- src/g_game.c | 2 +- src/info.c | 4 +- src/p_enemy.c | 15 ++------ src/p_inter.c | 101 +++++++++++++++++++++++-------------------------- src/p_mobj.c | 22 +++++------ src/r_main.c | 2 - 8 files changed, 66 insertions(+), 83 deletions(-) diff --git a/src/d_netcmd.h b/src/d_netcmd.h index c090699f1..e1f8c5eee 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -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; diff --git a/src/dehacked.c b/src/dehacked.c index 34558df19..6d52f95cb 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -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} }; diff --git a/src/g_game.c b/src/g_game.c index c5488e0b7..5e04af496 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -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)); diff --git a/src/info.c b/src/info.c index 822c27d76..613320503 100644 --- a/src/info.c +++ b/src/info.c @@ -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 }, diff --git a/src/p_enemy.c b/src/p_enemy.c index 10c42d61e..097d1448b 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -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)); diff --git a/src/p_inter.c b/src/p_inter.c index 544825340..54badc299 100644 --- a/src/p_inter.c +++ b/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); diff --git a/src/p_mobj.c b/src/p_mobj.c index a33fac7ff..4d0a26a63 100644 --- a/src/p_mobj.c +++ b/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: diff --git a/src/r_main.c b/src/r_main.c index b05e37b53..945647c4a 100644 --- a/src/r_main.c +++ b/src/r_main.c @@ -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);