diff --git a/src/dehacked.c b/src/dehacked.c index c931287ed..ba09f5351 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -3125,10 +3125,6 @@ static actionpointer_t actionpointers[] = {{A_Explode}, "A_EXPLODE"}, {{A_Pain}, "A_PAIN"}, {{A_Fall}, "A_FALL"}, - {{A_MonitorPop}, "A_MONITORPOP"}, - {{A_GoldMonitorPop}, "A_GOLDMONITORPOP"}, - {{A_GoldMonitorRestore}, "A_GOLDMONITORRESTORE"}, - {{A_GoldMonitorSparkle}, "A_GOLDMONITORSPARKLE"}, {{A_Look}, "A_LOOK"}, {{A_Chase}, "A_CHASE"}, {{A_FaceStabChase}, "A_FACESTABCHASE"}, @@ -3158,7 +3154,6 @@ static actionpointer_t actionpointers[] = {{A_AttractChase}, "A_ATTRACTCHASE"}, {{A_DropMine}, "A_DROPMINE"}, {{A_FishJump}, "A_FISHJUMP"}, - {{A_ThrownRing}, "A_THROWNRING"}, {{A_SetSolidSteam}, "A_SETSOLIDSTEAM"}, {{A_UnsetSolidSteam}, "A_UNSETSOLIDSTEAM"}, {{A_OverlayThink}, "A_OVERLAYTHINK"}, @@ -3223,7 +3218,6 @@ static actionpointer_t actionpointers[] = {{A_VultureBlast}, "A_VULTUREBLAST"}, {{A_VultureFly}, "A_VULTUREFLY"}, {{A_SkimChase}, "A_SKIMCHASE"}, - {{A_1upThinker}, "A_1UPTHINKER"}, {{A_SkullAttack}, "A_SKULLATTACK"}, {{A_LobShot}, "A_LOBSHOT"}, {{A_FireShot}, "A_FIRESHOT"}, @@ -3357,7 +3351,6 @@ static actionpointer_t actionpointers[] = {{A_Boss5MakeJunk}, "A_BOSS5MAKEJUNK"}, {{A_LookForBetter}, "A_LOOKFORBETTER"}, {{A_Boss5BombExplode}, "A_BOSS5BOMBEXPLODE"}, - {{A_DustDevilThink}, "A_DUSTDEVILTHINK"}, {{A_TNTExplode}, "A_TNTEXPLODE"}, {{A_DebrisRandom}, "A_DEBRISRANDOM"}, {{A_TrainCameo}, "A_TRAINCAMEO"}, @@ -5306,48 +5299,6 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit // technically the player goes here but it's an infinite tic state "S_OBJPLACE_DUMMY", - // 1-Up Box Sprites overlay (uses player sprite) - "S_PLAY_BOX1", - "S_PLAY_BOX2", - "S_PLAY_ICON1", - "S_PLAY_ICON2", - "S_PLAY_ICON3", - - // Level end sign overlay (uses player sprite) - "S_PLAY_SIGN", - - // NiGHTS character (uses player sprite) - "S_PLAY_NIGHTS_TRANS1", - "S_PLAY_NIGHTS_TRANS2", - "S_PLAY_NIGHTS_TRANS3", - "S_PLAY_NIGHTS_TRANS4", - "S_PLAY_NIGHTS_TRANS5", - "S_PLAY_NIGHTS_TRANS6", - "S_PLAY_NIGHTS_STAND", - "S_PLAY_NIGHTS_FLOAT", - "S_PLAY_NIGHTS_FLY", - "S_PLAY_NIGHTS_DRILL", - "S_PLAY_NIGHTS_STUN", - "S_PLAY_NIGHTS_PULL", - "S_PLAY_NIGHTS_ATTACK", - - // c: - "S_TAILSOVERLAY_STAND", - "S_TAILSOVERLAY_0DEGREES", - "S_TAILSOVERLAY_PLUS30DEGREES", - "S_TAILSOVERLAY_PLUS60DEGREES", - "S_TAILSOVERLAY_MINUS30DEGREES", - "S_TAILSOVERLAY_MINUS60DEGREES", - "S_TAILSOVERLAY_RUN", - "S_TAILSOVERLAY_FLY", - "S_TAILSOVERLAY_TIRE", - "S_TAILSOVERLAY_PAIN", - "S_TAILSOVERLAY_GASP", - "S_TAILSOVERLAY_EDGE", - - // [: - "S_JETFUMEFLASH", - // Blue Crawla "S_POSS_STND", "S_POSS_RUN1", @@ -10502,8 +10453,8 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s "MT_CDTREEB", // Daytona Speedway - "MT_PINETREE", - "MT_PINETREE_SIDE", + "MT_DAYTONAPINETREE", + "MT_DAYTONAPINETREE_SIDE", // Egg Zeppelin "MT_EZZPROPELLER", diff --git a/src/doomdef.h b/src/doomdef.h index 107bf7a57..f46945e61 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -244,10 +244,8 @@ typedef enum { SKINCOLOR_NONE = 0, - // Greyscale ranges SKINCOLOR_WHITE, - SKINCOLOR_BONE, - SKINCOLOR_CLOUDY, + SKINCOLOR_SILVER, SKINCOLOR_GREY, SKINCOLOR_NICKEL, SKINCOLOR_BLACK, diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 991004d02..b8a0a0140 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -4667,7 +4667,13 @@ static void HWR_DrawSprites(void) { UINT32 i; boolean skipshadow = false; // skip shadow if it was drawn already for a linkdraw sprite encountered earlier in the list + +#ifdef BAD_MODEL_OPTIONS HWD.pfnSetSpecialState(HWD_SET_MODEL_LIGHTING, cv_glmodellighting.value); +#else + HWD.pfnSetSpecialState(HWD_SET_MODEL_LIGHTING, false); +#endif + for (i = 0; i < gl_visspritecount; i++) { gl_vissprite_t *spr = gl_vsprorder[i]; @@ -6088,8 +6094,11 @@ consvar_t cv_glcoronasize = {"gr_coronasize", "1", CV_SAVE|CV_FLOAT, 0, NULL, 0, #endif consvar_t cv_glmodels = {"gr_models", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; + +#ifdef BAD_MODEL_OPTIONS consvar_t cv_glmodelinterpolation = {"gr_modelinterpolation", "Sometimes", CV_SAVE, grmodelinterpolation_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_glmodellighting = {"gr_modellighting", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; +#endif consvar_t cv_glshearing = {"gr_shearing", "Off", CV_SAVE, grshearing_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; consvar_t cv_glspritebillboarding = {"gr_spritebillboarding", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; @@ -6130,8 +6139,11 @@ void HWR_AddCommands(void) CV_RegisterVar(&cv_glcoronas); #endif +#ifdef BAD_MODEL_OPTIONS CV_RegisterVar(&cv_glmodellighting); CV_RegisterVar(&cv_glmodelinterpolation); +#endif + CV_RegisterVar(&cv_glmodels); CV_RegisterVar(&cv_glskydome); diff --git a/src/hardware/hw_main.h b/src/hardware/hw_main.h index 53a9aef51..8f6d6e997 100644 --- a/src/hardware/hw_main.h +++ b/src/hardware/hw_main.h @@ -83,8 +83,17 @@ extern consvar_t cv_glcoronasize; extern consvar_t cv_glshaders; extern consvar_t cv_glmodels; + +// SRB2Kart: We don't like these options. +// Interpolation should be up to who animated the model. +// Lighting makes the modeler's intended texturing look funky. +//#define BAD_MODEL_OPTIONS + +#ifdef BAD_MODEL_OPTIONS extern consvar_t cv_glmodelinterpolation; extern consvar_t cv_glmodellighting; +#endif + extern consvar_t cv_glfiltermode; extern consvar_t cv_glanisotropicmode; extern consvar_t cv_fovchange; diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c index 7e3a7db25..e81a33ab8 100644 --- a/src/hardware/hw_md2.c +++ b/src/hardware/hw_md2.c @@ -1124,7 +1124,7 @@ static void HWR_GetBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, INT static boolean HWR_AllowModel(mobj_t *mobj) { // Signpost overlay. Not needed. - if (mobj->state-states == S_PLAY_SIGN) + if (mobj->state-states == S_KART_SIGN) return false; // Otherwise, render the model. @@ -1133,15 +1133,20 @@ static boolean HWR_AllowModel(mobj_t *mobj) static boolean HWR_CanInterpolateModel(mobj_t *mobj, model_t *model) { + // SRB2Kart: Interpoleration should ALWAYS be up to the modeler. +#ifdef BAD_MODEL_OPTIONS if (cv_glmodelinterpolation.value == 2) // Always interpolate return true; +#endif return model->interpolate[(mobj->frame & FF_FRAMEMASK)]; } static boolean HWR_CanInterpolateSprite2(modelspr2frames_t *spr2frame) { +#ifdef BAD_MODEL_OPTIONS if (cv_glmodelinterpolation.value == 2) // Always interpolate return true; +#endif return spr2frame->interpolate; } @@ -1472,7 +1477,11 @@ boolean HWR_DrawModel(gl_vissprite_t *spr) #ifdef USE_MODEL_NEXTFRAME #define INTERPOLERATION_LIMIT TICRATE/4 - if (cv_glmodelinterpolation.value && tics <= durs && tics <= INTERPOLERATION_LIMIT) + if ( +#ifdef BAD_MODEL_OPTIONS + cv_glmodelinterpolation.value && +#endif + tics <= durs && tics <= INTERPOLERATION_LIMIT) { if (durs > INTERPOLERATION_LIMIT) durs = INTERPOLERATION_LIMIT; @@ -1505,8 +1514,7 @@ boolean HWR_DrawModel(gl_vissprite_t *spr) } else { - if (spr->mobj->state->nextstate != S_NULL && states[spr->mobj->state->nextstate].sprite != SPR_NULL - && !(spr->mobj->player && (spr->mobj->state->nextstate == S_PLAY_WAIT) && spr->mobj->state == &states[S_PLAY_STND])) + if (spr->mobj->state->nextstate != S_NULL && states[spr->mobj->state->nextstate].sprite != SPR_NULL) nextFrame = (states[spr->mobj->state->nextstate].frame & FF_FRAMEMASK) % mod; } } diff --git a/src/info.c b/src/info.c index d0d3e24d3..a39105f1d 100644 --- a/src/info.c +++ b/src/info.c @@ -373,15 +373,18 @@ char sprnames[NUMSPRITES + 1][5] = "STEM", // Steam riser "BUMP", // Bumpers "BLON", // Balloons - "SPRY", // Yellow spring - "SPRR", // Red spring - "SPRB", // Blue spring - "YSPR", // Yellow Diagonal Spring - "RSPR", // Red Diagonal Spring - "BSPR", // Blue Diagonal Spring - "SSWY", // Yellow Side Spring - "SSWR", // Red Side Spring - "SSWB", // Blue Side Spring + "SPVY", // Yellow Vertical Spring + "SPVR", // Red Vertical Spring + "SPVB", // Blue Vertical Spring + "SPVG", // Grey Vertical Spring + "SPDY", // Yellow Diagonal Spring + "SPDR", // Red Diagonal Spring + "SPDB", // Blue Diagonal Spring + "SPDG", // Grey Diagonal Spring + "SPHY", // Yellow Horizontal Spring + "SPHR", // Red Horizontal Spring + "SPHB", // Blue Horizontal Spring + "SPHG", // Grey Horizontal Spring "BSTY", // Yellow Booster "BSTR", // Red Booster @@ -1767,17 +1770,17 @@ state_t states[NUMSTATES] = {SPR_NSPK, 3, 4, {NULL}, 0, 0, S_NULL}, // S_BOXSPARKLE4 {SPR_MSTV, 0, 1, {NULL}, 0, 0, S_SPAWNSTATE}, // S_BOX_FLICKER - {SPR_MSTV, 0, 4, {A_MonitorPop}, 0, 0, S_BOX_POP2}, // S_BOX_POP1 + {SPR_MSTV, 0, 4, {NULL}, 0, 0, S_BOX_POP2}, // S_BOX_POP1 {SPR_MSTV, 1, -1, {NULL}, 0, 0, S_NULL}, // S_BOX_POP2 {SPR_XLTV, 0, 1, {NULL}, 0, 0, S_SPAWNSTATE}, // S_GOLDBOX_FLICKER - {SPR_XLTV, 1, 89, {A_GoldMonitorPop}, 0, 0, S_GOLDBOX_OFF2}, // S_GOLDBOX_OFF1 - {SPR_XLTV, 2, 4, {A_PlayAttackSound}, 0, 0, S_GOLDBOX_OFF3}, // S_GOLDBOX_OFF2 + {SPR_XLTV, 1, 89, {NULL}, 0, 0, S_GOLDBOX_OFF2}, // S_GOLDBOX_OFF1 + {SPR_XLTV, 2, 4, {NULL}, 0, 0, S_GOLDBOX_OFF3}, // S_GOLDBOX_OFF2 {SPR_XLTV, 3, 4, {NULL}, 0, 0, S_GOLDBOX_OFF4}, // S_GOLDBOX_OFF3 {SPR_XLTV, 4, 4, {NULL}, 0, 0, S_GOLDBOX_OFF5}, // S_GOLDBOX_OFF4 {SPR_XLTV, 5, 2, {NULL}, 0, 0, S_GOLDBOX_OFF6}, // S_GOLDBOX_OFF5 {SPR_XLTV, 6, 2, {NULL}, 0, 0, S_GOLDBOX_OFF7}, // S_GOLDBOX_OFF6 - {SPR_XLTV, 6, 0, {A_GoldMonitorRestore}, 0, 0, S_SPAWNSTATE}, // S_GOLDBOX_OFF7 + {SPR_XLTV, 6, 0, {NULL}, 0, 0, S_SPAWNSTATE}, // S_GOLDBOX_OFF7 // Monitor States (one per box) {SPR_TVMY, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_MYSTERY_BOX @@ -1790,7 +1793,7 @@ state_t states[NUMSTATES] = {SPR_TVEL, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_ELEMENTAL_BOX {SPR_TVSS, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_SNEAKERS_BOX {SPR_TVIV, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_INVULN_BOX - {SPR_TV1U, 0, 2, {A_1upThinker}, 0, 0, S_BOX_FLICKER}, // S_1UP_BOX + {SPR_TV1U, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_1UP_BOX {SPR_TVEG, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_EGGMAN_BOX {SPR_TVMX, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_MIXUP_BOX {SPR_TVGV, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_GRAVITY_BOX @@ -1802,29 +1805,29 @@ state_t states[NUMSTATES] = {SPR_TVZP, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_THUNDERCOIN_BOX // Gold Repeat Monitor States (one per box) - {SPR_TVPI, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_PITY_GOLDBOX - {SPR_TVAT, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_ATTRACT_GOLDBOX - {SPR_TVFO, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_FORCE_GOLDBOX - {SPR_TVAR, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_ARMAGEDDON_GOLDBOX - {SPR_TVWW, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_WHIRLWIND_GOLDBOX - {SPR_TVEL, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_ELEMENTAL_GOLDBOX - {SPR_TVSS, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_SNEAKERS_GOLDBOX - {SPR_TVIV, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_INVULN_GOLDBOX - {SPR_TVEG, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_EGGMAN_GOLDBOX - {SPR_TVGV, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_GRAVITY_GOLDBOX - {SPR_TVFL, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_FLAMEAURA_GOLDBOX - {SPR_TVBB, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_BUBBLEWRAP_GOLDBOX - {SPR_TVZP, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_THUNDERCOIN_GOLDBOX + {SPR_TVPI, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_PITY_GOLDBOX + {SPR_TVAT, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_ATTRACT_GOLDBOX + {SPR_TVFO, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_FORCE_GOLDBOX + {SPR_TVAR, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_ARMAGEDDON_GOLDBOX + {SPR_TVWW, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_WHIRLWIND_GOLDBOX + {SPR_TVEL, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_ELEMENTAL_GOLDBOX + {SPR_TVSS, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_SNEAKERS_GOLDBOX + {SPR_TVIV, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_INVULN_GOLDBOX + {SPR_TVEG, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_EGGMAN_GOLDBOX + {SPR_TVGV, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_GRAVITY_GOLDBOX + {SPR_TVFL, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_FLAMEAURA_GOLDBOX + {SPR_TVBB, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_BUBBLEWRAP_GOLDBOX + {SPR_TVZP, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_THUNDERCOIN_GOLDBOX // Team Ring Boxes (these are special) {SPR_TRRI, 0, 2, {NULL}, 0, 0, S_RING_REDBOX2}, // S_RING_REDBOX1 {SPR_TRRI, 1, 1, {NULL}, 0, 0, S_RING_REDBOX1}, // S_RING_REDBOX2 - {SPR_TRRI, 1, 4, {A_MonitorPop}, 0, 0, S_REDBOX_POP2}, // S_REDBOX_POP1 + {SPR_TRRI, 1, 4, {NULL}, 0, 0, S_REDBOX_POP2}, // S_REDBOX_POP1 {SPR_TRRI, 2, -1, {NULL}, 0, 0, S_NULL}, // S_REDBOX_POP2 {SPR_TBRI, 0, 2, {NULL}, 0, 0, S_RING_BLUEBOX2}, // S_RING_BLUEBOX1 {SPR_TBRI, 1, 1, {NULL}, 0, 0, S_RING_BLUEBOX1}, // S_RING_BLUEBOX2 - {SPR_TBRI, 1, 4, {A_MonitorPop}, 0, 0, S_BLUEBOX_POP2}, // S_BLUEBOX_POP1 + {SPR_TBRI, 1, 4, {NULL}, 0, 0, S_BLUEBOX_POP2}, // S_BLUEBOX_POP1 {SPR_TBRI, 2, -1, {NULL}, 0, 0, S_NULL}, // S_BLUEBOX_POP2 // Box Icons -- 2 states each, animation and action @@ -2223,7 +2226,7 @@ state_t states[NUMSTATES] = {SPR_REMT, 1|FF_FULLBRIGHT, 1, {A_PlayActiveSound}, 0, 0, S_TNTBARREL_EXPL1}, // S_PROXIMITY_TNT_TRIGGER23 // Dust devil - {SPR_NULL, 0, 1, {A_DustDevilThink}, 0, 0, S_DUSTDEVIL}, //S_DUSTDEVIL + {SPR_NULL, 0, 1, {NULL}, 0, 0, S_DUSTDEVIL}, //S_DUSTDEVIL {SPR_TAZD, 1|FF_PAPERSPRITE|FF_TRANS70, 2 * TICRATE, {NULL}, 0, 0, S_DUSTLAYER2}, // S_DUSTLAYER1 {SPR_TAZD, 1|FF_PAPERSPRITE|FF_TRANS70, 5, {NULL}, 0, 0, S_DUSTLAYER3}, // S_DUSTLAYER2 {SPR_TAZD, 1|FF_PAPERSPRITE|FF_TRANS80, 5, {NULL}, 0, 0, S_DUSTLAYER4}, // S_DUSTLAYER3 @@ -3040,52 +3043,14 @@ state_t states[NUMSTATES] = {SPR_SPHG, 0, 1, {NULL}, 0, 0, S_GHORIZ4}, // S_GHORIZ3 {SPR_SPHG, 2, 4, {NULL}, 0, 0, S_GHORIZ1}, // S_GHORIZ4 - // Blue Diagonal Spring - {SPR_BSPR, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BDIAG1 - {SPR_BSPR, 1, 1, {A_Pain}, 0, 0, S_BDIAG3}, // S_BDIAG2 - {SPR_BSPR, 2, 1, {NULL}, 0, 0, S_BDIAG4}, // S_BDIAG3 - {SPR_BSPR, 3, 1, {NULL}, 0, 0, S_BDIAG5}, // S_BDIAG4 - {SPR_BSPR, 4, 1, {NULL}, 0, 0, S_BDIAG6}, // S_BDIAG5 - {SPR_BSPR, 3, 1, {NULL}, 0, 0, S_BDIAG7}, // S_BDIAG6 - {SPR_BSPR, 2, 1, {NULL}, 0, 0, S_BDIAG8}, // S_BDIAG7 - {SPR_BSPR, 1, 1, {NULL}, 0, 0, S_BDIAG1}, // S_BDIAG8 - - // Yellow Side Spring - {SPR_SSWY, 0, -1, {NULL}, 0, 0, S_NULL}, // S_YHORIZ1 - {SPR_SSWY, 1, 1, {A_Pain}, 0, 0, S_YHORIZ3}, // S_YHORIZ2 - {SPR_SSWY, 2, 1, {NULL}, 0, 0, S_YHORIZ4}, // S_YHORIZ3 - {SPR_SSWY, 3, 1, {NULL}, 0, 0, S_YHORIZ5}, // S_YHORIZ4 - {SPR_SSWY, 4, 1, {NULL}, 0, 0, S_YHORIZ6}, // S_YHORIZ5 - {SPR_SSWY, 3, 1, {NULL}, 0, 0, S_YHORIZ7}, // S_YHORIZ6 - {SPR_SSWY, 2, 1, {NULL}, 0, 0, S_YHORIZ8}, // S_YHORIZ7 - {SPR_SSWY, 1, 1, {NULL}, 0, 0, S_YHORIZ1}, // S_YHORIZ8 - - // Red Side Spring - {SPR_SSWR, 0, -1, {NULL}, 0, 0, S_NULL}, // S_RHORIZ1 - {SPR_SSWR, 1, 1, {A_Pain}, 0, 0, S_RHORIZ3}, // S_RHORIZ2 - {SPR_SSWR, 2, 1, {NULL}, 0, 0, S_RHORIZ4}, // S_RHORIZ3 - {SPR_SSWR, 3, 1, {NULL}, 0, 0, S_RHORIZ5}, // S_RHORIZ4 - {SPR_SSWR, 4, 1, {NULL}, 0, 0, S_RHORIZ6}, // S_RHORIZ5 - {SPR_SSWR, 3, 1, {NULL}, 0, 0, S_RHORIZ7}, // S_RHORIZ6 - {SPR_SSWR, 2, 1, {NULL}, 0, 0, S_RHORIZ8}, // S_RHORIZ7 - {SPR_SSWR, 1, 1, {NULL}, 0, 0, S_RHORIZ1}, // S_RHORIZ8 - - // Blue Side Spring - {SPR_SSWB, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BHORIZ1 - {SPR_SSWB, 1, 1, {A_Pain}, 0, 0, S_BHORIZ3}, // S_BHORIZ2 - {SPR_SSWB, 2, 1, {NULL}, 0, 0, S_BHORIZ4}, // S_BHORIZ3 - {SPR_SSWB, 3, 1, {NULL}, 0, 0, S_BHORIZ5}, // S_BHORIZ4 - {SPR_SSWB, 4, 1, {NULL}, 0, 0, S_BHORIZ6}, // S_BHORIZ5 - {SPR_SSWB, 3, 1, {NULL}, 0, 0, S_BHORIZ7}, // S_BHORIZ6 - {SPR_SSWB, 2, 1, {NULL}, 0, 0, S_BHORIZ8}, // S_BHORIZ7 - {SPR_SSWB, 1, 1, {NULL}, 0, 0, S_BHORIZ1}, // S_BHORIZ8 - // Boosters {SPR_NULL, 0, 1, {A_Pain}, 0, 0, S_INVISIBLE}, // S_BOOSTERSOUND + {SPR_BSTY, FF_ANIMATE, -1, {NULL}, 2, 1, S_NULL}, // S_YELLOWBOOSTERROLLER {SPR_BSTY, 3|FF_PAPERSPRITE|FF_ANIMATE, -1, {NULL}, 2, 3, S_NULL}, // S_YELLOWBOOSTERSEG_LEFT {SPR_BSTY, 6|FF_PAPERSPRITE|FF_ANIMATE, -1, {NULL}, 2, 3, S_NULL}, // S_YELLOWBOOSTERSEG_RIGHT {SPR_BSTY, 9|FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_YELLOWBOOSTERSEG_FACE + {SPR_BSTR, FF_ANIMATE, -1, {NULL}, 2, 1, S_NULL}, // S_REDBOOSTERROLLER {SPR_BSTR, 3|FF_PAPERSPRITE|FF_ANIMATE, -1, {NULL}, 2, 3, S_NULL}, // S_REDBOOSTERSEG_LEFT {SPR_BSTR, 6|FF_PAPERSPRITE|FF_ANIMATE, -1, {NULL}, 2, 3, S_NULL}, // S_REDBOOSTERSEG_RIGHT @@ -3234,13 +3199,13 @@ state_t states[NUMSTATES] = {SPR_LHRT, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_LHRT // Red Rings (thrown) - {SPR_RRNG, FF_FULLBRIGHT, 1, {A_ThrownRing}, 0, 0, S_RRNG2}, // S_RRNG1 - {SPR_RRNG, FF_FULLBRIGHT|1, 1, {A_ThrownRing}, 0, 0, S_RRNG3}, // S_RRNG2 - {SPR_RRNG, FF_FULLBRIGHT|2, 1, {A_ThrownRing}, 0, 0, S_RRNG4}, // S_RRNG3 - {SPR_RRNG, FF_FULLBRIGHT|3, 1, {A_ThrownRing}, 0, 0, S_RRNG5}, // S_RRNG4 - {SPR_RRNG, FF_FULLBRIGHT|4, 1, {A_ThrownRing}, 0, 0, S_RRNG6}, // S_RRNG5 - {SPR_RRNG, FF_FULLBRIGHT|5, 1, {A_ThrownRing}, 0, 0, S_RRNG7}, // S_RRNG6 - {SPR_RRNG, FF_FULLBRIGHT|6, 1, {A_ThrownRing}, 0, 0, S_RRNG1}, // S_RRNG7 + {SPR_RRNG, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_RRNG2}, // S_RRNG1 + {SPR_RRNG, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_RRNG3}, // S_RRNG2 + {SPR_RRNG, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_RRNG4}, // S_RRNG3 + {SPR_RRNG, FF_FULLBRIGHT|3, 1, {NULL}, 0, 0, S_RRNG5}, // S_RRNG4 + {SPR_RRNG, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_RRNG6}, // S_RRNG5 + {SPR_RRNG, FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_RRNG7}, // S_RRNG6 + {SPR_RRNG, FF_FULLBRIGHT|6, 1, {NULL}, 0, 0, S_RRNG1}, // S_RRNG7 // Weapon Ring Ammo {SPR_RNGB, FF_ANIMATE|FF_GLOBALANIM, -1, {NULL}, 34, 1, S_BOUNCERINGAMMO}, // S_BOUNCERINGAMMO @@ -3324,58 +3289,58 @@ state_t states[NUMSTATES] = {SPR_PIKG, 14, 1, {NULL}, 0, 0, S_GRENADEPICKUPFADE1}, // S_GRENADEPICKUPFADE8 // Thrown Weapon Rings - {SPR_RNGB, FF_FULLBRIGHT , 1, {A_ThrownRing}, 0, 0, S_THROWNBOUNCE2}, // S_THROWNBOUNCE1 - {SPR_RNGB, FF_FULLBRIGHT| 5, 1, {A_ThrownRing}, 0, 0, S_THROWNBOUNCE3}, // S_THROWNBOUNCE2 - {SPR_RNGB, FF_FULLBRIGHT|10, 1, {A_ThrownRing}, 0, 0, S_THROWNBOUNCE4}, // S_THROWNBOUNCE3 - {SPR_RNGB, FF_FULLBRIGHT|15, 1, {A_ThrownRing}, 0, 0, S_THROWNBOUNCE5}, // S_THROWNBOUNCE4 - {SPR_RNGB, FF_FULLBRIGHT|20, 1, {A_ThrownRing}, 0, 0, S_THROWNBOUNCE6}, // S_THROWNBOUNCE5 - {SPR_RNGB, FF_FULLBRIGHT|25, 1, {A_ThrownRing}, 0, 0, S_THROWNBOUNCE7}, // S_THROWNBOUNCE6 - {SPR_RNGB, FF_FULLBRIGHT|30, 1, {A_ThrownRing}, 0, 0, S_THROWNBOUNCE1}, // S_THROWNBOUNCE7 + {SPR_RNGB, FF_FULLBRIGHT , 1, {NULL}, 0, 0, S_THROWNBOUNCE2}, // S_THROWNBOUNCE1 + {SPR_RNGB, FF_FULLBRIGHT| 5, 1, {NULL}, 0, 0, S_THROWNBOUNCE3}, // S_THROWNBOUNCE2 + {SPR_RNGB, FF_FULLBRIGHT|10, 1, {NULL}, 0, 0, S_THROWNBOUNCE4}, // S_THROWNBOUNCE3 + {SPR_RNGB, FF_FULLBRIGHT|15, 1, {NULL}, 0, 0, S_THROWNBOUNCE5}, // S_THROWNBOUNCE4 + {SPR_RNGB, FF_FULLBRIGHT|20, 1, {NULL}, 0, 0, S_THROWNBOUNCE6}, // S_THROWNBOUNCE5 + {SPR_RNGB, FF_FULLBRIGHT|25, 1, {NULL}, 0, 0, S_THROWNBOUNCE7}, // S_THROWNBOUNCE6 + {SPR_RNGB, FF_FULLBRIGHT|30, 1, {NULL}, 0, 0, S_THROWNBOUNCE1}, // S_THROWNBOUNCE7 - {SPR_RNGI, FF_FULLBRIGHT , 1, {A_ThrownRing}, 0, 0, S_THROWNINFINITY2}, // S_THROWNINFINITY1 - {SPR_RNGI, FF_FULLBRIGHT| 5, 1, {A_ThrownRing}, 0, 0, S_THROWNINFINITY3}, // S_THROWNINFINITY2 - {SPR_RNGI, FF_FULLBRIGHT|10, 1, {A_ThrownRing}, 0, 0, S_THROWNINFINITY4}, // S_THROWNINFINITY3 - {SPR_RNGI, FF_FULLBRIGHT|15, 1, {A_ThrownRing}, 0, 0, S_THROWNINFINITY5}, // S_THROWNINFINITY4 - {SPR_RNGI, FF_FULLBRIGHT|20, 1, {A_ThrownRing}, 0, 0, S_THROWNINFINITY6}, // S_THROWNINFINITY5 - {SPR_RNGI, FF_FULLBRIGHT|25, 1, {A_ThrownRing}, 0, 0, S_THROWNINFINITY7}, // S_THROWNINFINITY6 - {SPR_RNGI, FF_FULLBRIGHT|30, 1, {A_ThrownRing}, 0, 0, S_THROWNINFINITY1}, // S_THROWNINFINITY7 + {SPR_RNGI, FF_FULLBRIGHT , 1, {NULL}, 0, 0, S_THROWNINFINITY2}, // S_THROWNINFINITY1 + {SPR_RNGI, FF_FULLBRIGHT| 5, 1, {NULL}, 0, 0, S_THROWNINFINITY3}, // S_THROWNINFINITY2 + {SPR_RNGI, FF_FULLBRIGHT|10, 1, {NULL}, 0, 0, S_THROWNINFINITY4}, // S_THROWNINFINITY3 + {SPR_RNGI, FF_FULLBRIGHT|15, 1, {NULL}, 0, 0, S_THROWNINFINITY5}, // S_THROWNINFINITY4 + {SPR_RNGI, FF_FULLBRIGHT|20, 1, {NULL}, 0, 0, S_THROWNINFINITY6}, // S_THROWNINFINITY5 + {SPR_RNGI, FF_FULLBRIGHT|25, 1, {NULL}, 0, 0, S_THROWNINFINITY7}, // S_THROWNINFINITY6 + {SPR_RNGI, FF_FULLBRIGHT|30, 1, {NULL}, 0, 0, S_THROWNINFINITY1}, // S_THROWNINFINITY7 - {SPR_TAUT, FF_FULLBRIGHT , 1, {A_ThrownRing}, 0, 0, S_THROWNAUTOMATIC2}, // S_THROWNAUTOMATIC1 - {SPR_TAUT, FF_FULLBRIGHT|1, 1, {A_ThrownRing}, 0, 0, S_THROWNAUTOMATIC3}, // S_THROWNAUTOMATIC2 - {SPR_TAUT, FF_FULLBRIGHT|2, 1, {A_ThrownRing}, 0, 0, S_THROWNAUTOMATIC4}, // S_THROWNAUTOMATIC3 - {SPR_TAUT, FF_FULLBRIGHT|3, 1, {A_ThrownRing}, 0, 0, S_THROWNAUTOMATIC5}, // S_THROWNAUTOMATIC4 - {SPR_TAUT, FF_FULLBRIGHT|4, 1, {A_ThrownRing}, 0, 0, S_THROWNAUTOMATIC6}, // S_THROWNAUTOMATIC5 - {SPR_TAUT, FF_FULLBRIGHT|5, 1, {A_ThrownRing}, 0, 0, S_THROWNAUTOMATIC7}, // S_THROWNAUTOMATIC6 - {SPR_TAUT, FF_FULLBRIGHT|6, 1, {A_ThrownRing}, 0, 0, S_THROWNAUTOMATIC1}, // S_THROWNAUTOMATIC7 + {SPR_TAUT, FF_FULLBRIGHT , 1, {NULL}, 0, 0, S_THROWNAUTOMATIC2}, // S_THROWNAUTOMATIC1 + {SPR_TAUT, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_THROWNAUTOMATIC3}, // S_THROWNAUTOMATIC2 + {SPR_TAUT, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_THROWNAUTOMATIC4}, // S_THROWNAUTOMATIC3 + {SPR_TAUT, FF_FULLBRIGHT|3, 1, {NULL}, 0, 0, S_THROWNAUTOMATIC5}, // S_THROWNAUTOMATIC4 + {SPR_TAUT, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_THROWNAUTOMATIC6}, // S_THROWNAUTOMATIC5 + {SPR_TAUT, FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_THROWNAUTOMATIC7}, // S_THROWNAUTOMATIC6 + {SPR_TAUT, FF_FULLBRIGHT|6, 1, {NULL}, 0, 0, S_THROWNAUTOMATIC1}, // S_THROWNAUTOMATIC7 - {SPR_RNGE, FF_FULLBRIGHT , 1, {A_ThrownRing}, 0, 0, S_THROWNEXPLOSION2}, // S_THROWNEXPLOSION1 - {SPR_RNGE, FF_FULLBRIGHT| 5, 1, {A_ThrownRing}, 0, 0, S_THROWNEXPLOSION3}, // S_THROWNEXPLOSION2 - {SPR_RNGE, FF_FULLBRIGHT|10, 1, {A_ThrownRing}, 0, 0, S_THROWNEXPLOSION4}, // S_THROWNEXPLOSION3 - {SPR_RNGE, FF_FULLBRIGHT|15, 1, {A_ThrownRing}, 0, 0, S_THROWNEXPLOSION5}, // S_THROWNEXPLOSION4 - {SPR_RNGE, FF_FULLBRIGHT|20, 1, {A_ThrownRing}, 0, 0, S_THROWNEXPLOSION6}, // S_THROWNEXPLOSION5 - {SPR_RNGE, FF_FULLBRIGHT|25, 1, {A_ThrownRing}, 0, 0, S_THROWNEXPLOSION7}, // S_THROWNEXPLOSION6 - {SPR_RNGE, FF_FULLBRIGHT|30, 1, {A_ThrownRing}, 0, 0, S_THROWNEXPLOSION1}, // S_THROWNEXPLOSION7 + {SPR_RNGE, FF_FULLBRIGHT , 1, {NULL}, 0, 0, S_THROWNEXPLOSION2}, // S_THROWNEXPLOSION1 + {SPR_RNGE, FF_FULLBRIGHT| 5, 1, {NULL}, 0, 0, S_THROWNEXPLOSION3}, // S_THROWNEXPLOSION2 + {SPR_RNGE, FF_FULLBRIGHT|10, 1, {NULL}, 0, 0, S_THROWNEXPLOSION4}, // S_THROWNEXPLOSION3 + {SPR_RNGE, FF_FULLBRIGHT|15, 1, {NULL}, 0, 0, S_THROWNEXPLOSION5}, // S_THROWNEXPLOSION4 + {SPR_RNGE, FF_FULLBRIGHT|20, 1, {NULL}, 0, 0, S_THROWNEXPLOSION6}, // S_THROWNEXPLOSION5 + {SPR_RNGE, FF_FULLBRIGHT|25, 1, {NULL}, 0, 0, S_THROWNEXPLOSION7}, // S_THROWNEXPLOSION6 + {SPR_RNGE, FF_FULLBRIGHT|30, 1, {NULL}, 0, 0, S_THROWNEXPLOSION1}, // S_THROWNEXPLOSION7 - {SPR_TGRE, FF_FULLBRIGHT , 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE2}, // S_THROWNGRENADE1 - {SPR_TGRE, FF_FULLBRIGHT| 1, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE3}, // S_THROWNGRENADE2 - {SPR_TGRE, FF_FULLBRIGHT| 2, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE4}, // S_THROWNGRENADE3 - {SPR_TGRE, FF_FULLBRIGHT| 3, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE5}, // S_THROWNGRENADE4 - {SPR_TGRE, FF_FULLBRIGHT| 4, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE6}, // S_THROWNGRENADE5 - {SPR_TGRE, FF_FULLBRIGHT| 5, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE7}, // S_THROWNGRENADE6 - {SPR_TGRE, FF_FULLBRIGHT| 6, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE8}, // S_THROWNGRENADE7 - {SPR_TGRE, FF_FULLBRIGHT| 7, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE9}, // S_THROWNGRENADE8 - {SPR_TGRE, FF_FULLBRIGHT| 8, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE10}, // S_THROWNGRENADE9 - {SPR_TGRE, FF_FULLBRIGHT| 9, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE11}, // S_THROWNGRENADE10 - {SPR_TGRE, FF_FULLBRIGHT|10, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE12}, // S_THROWNGRENADE11 - {SPR_TGRE, FF_FULLBRIGHT|11, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE13}, // S_THROWNGRENADE12 - {SPR_TGRE, FF_FULLBRIGHT|12, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE14}, // S_THROWNGRENADE13 - {SPR_TGRE, FF_FULLBRIGHT|13, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE15}, // S_THROWNGRENADE14 - {SPR_TGRE, FF_FULLBRIGHT|14, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE16}, // S_THROWNGRENADE15 - {SPR_TGRE, FF_FULLBRIGHT|15, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE17}, // S_THROWNGRENADE16 - {SPR_TGRE, FF_FULLBRIGHT|16, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE18}, // S_THROWNGRENADE17 - {SPR_TGRE, FF_FULLBRIGHT|17, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE1}, // S_THROWNGRENADE18 + {SPR_TGRE, FF_FULLBRIGHT , 1, {NULL}, 0, 0, S_THROWNGRENADE2}, // S_THROWNGRENADE1 + {SPR_TGRE, FF_FULLBRIGHT| 1, 1, {NULL}, 0, 0, S_THROWNGRENADE3}, // S_THROWNGRENADE2 + {SPR_TGRE, FF_FULLBRIGHT| 2, 1, {NULL}, 0, 0, S_THROWNGRENADE4}, // S_THROWNGRENADE3 + {SPR_TGRE, FF_FULLBRIGHT| 3, 1, {NULL}, 0, 0, S_THROWNGRENADE5}, // S_THROWNGRENADE4 + {SPR_TGRE, FF_FULLBRIGHT| 4, 1, {NULL}, 0, 0, S_THROWNGRENADE6}, // S_THROWNGRENADE5 + {SPR_TGRE, FF_FULLBRIGHT| 5, 1, {NULL}, 0, 0, S_THROWNGRENADE7}, // S_THROWNGRENADE6 + {SPR_TGRE, FF_FULLBRIGHT| 6, 1, {NULL}, 0, 0, S_THROWNGRENADE8}, // S_THROWNGRENADE7 + {SPR_TGRE, FF_FULLBRIGHT| 7, 1, {NULL}, 0, 0, S_THROWNGRENADE9}, // S_THROWNGRENADE8 + {SPR_TGRE, FF_FULLBRIGHT| 8, 1, {NULL}, 0, 0, S_THROWNGRENADE10}, // S_THROWNGRENADE9 + {SPR_TGRE, FF_FULLBRIGHT| 9, 1, {NULL}, 0, 0, S_THROWNGRENADE11}, // S_THROWNGRENADE10 + {SPR_TGRE, FF_FULLBRIGHT|10, 1, {NULL}, 0, 0, S_THROWNGRENADE12}, // S_THROWNGRENADE11 + {SPR_TGRE, FF_FULLBRIGHT|11, 1, {NULL}, 0, 0, S_THROWNGRENADE13}, // S_THROWNGRENADE12 + {SPR_TGRE, FF_FULLBRIGHT|12, 1, {NULL}, 0, 0, S_THROWNGRENADE14}, // S_THROWNGRENADE13 + {SPR_TGRE, FF_FULLBRIGHT|13, 1, {NULL}, 0, 0, S_THROWNGRENADE15}, // S_THROWNGRENADE14 + {SPR_TGRE, FF_FULLBRIGHT|14, 1, {NULL}, 0, 0, S_THROWNGRENADE16}, // S_THROWNGRENADE15 + {SPR_TGRE, FF_FULLBRIGHT|15, 1, {NULL}, 0, 0, S_THROWNGRENADE17}, // S_THROWNGRENADE16 + {SPR_TGRE, FF_FULLBRIGHT|16, 1, {NULL}, 0, 0, S_THROWNGRENADE18}, // S_THROWNGRENADE17 + {SPR_TGRE, FF_FULLBRIGHT|17, 1, {NULL}, 0, 0, S_THROWNGRENADE1}, // S_THROWNGRENADE18 - {SPR_TSCR, FF_FULLBRIGHT, 1, {A_ThrownRing}, 0, 0, S_THROWNSCATTER}, // S_THROWNSCATTER + {SPR_TSCR, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_THROWNSCATTER}, // S_THROWNSCATTER {SPR_NULL, 0, 1, {A_RingExplode}, 0, 0, S_XPLD1}, // S_RINGEXPLODE @@ -4621,8 +4586,8 @@ state_t states[NUMSTATES] = {SPR_CDBU, 2, -1, {NULL}, 0, 0, S_CDTREEBSP}, // S_CDTREEBSP // Daytona Speedway - {SPR_PINE, 1, -1, {NULL}, 0, 0, S_NULL}, // S_PINETREE - {SPR_PINE, FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_PINETREE_SIDE + {SPR_PINE, 1, -1, {NULL}, 0, 0, S_NULL}, // S_DAYTONAPINETREE + {SPR_PINE, FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_DAYTONAPINETREE_SIDE // Egg Zeppelin {SPR_PPLR, 0, -1, {NULL}, 0, 0, S_EZZPROPELLER}, // S_EZZPROPELLER @@ -7621,7 +7586,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = sfx_None, // painsound S_NULL, // meleestate S_NULL, // missilestate - S_PLAY_DEAD, // deathstate + S_KART_SPINOUT, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed @@ -8387,190 +8352,244 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = { // MT_YELLOWSPRING 550, // doomednum - S_YELLOWSPRING, // spawnstate + S_YELLOWSPRING1,// spawnstate 1000, // spawnhealth - S_NULL, // seestate + S_YELLOWSPRING2,// seestate sfx_None, // seesound - 0, // reactiontime + 8, // reactiontime sfx_None, // attacksound S_NULL, // painstate - 0, // painchance - sfx_spring, // painsound + SKINCOLOR_YELLOW, // painchance + sfx_s3kb1, // painsound S_NULL, // meleestate S_NULL, // missilestate S_NULL, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height + 48*FRACUNIT, // radius + 32*FRACUNIT, // height 0, // display offset - 20*FRACUNIT, // mass + 25*FRACUNIT, // mass 0, // damage sfx_None, // activesound - MF_SPRING, // flags + MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags S_YELLOWSPRING2 // raisestate }, { // MT_REDSPRING 551, // doomednum - S_REDSPRING, // spawnstate + S_REDSPRING1, // spawnstate 1000, // spawnhealth - S_NULL, // seestate + S_REDSPRING2, // seestate sfx_None, // seesound - 0, // reactiontime + 8, // reactiontime sfx_None, // attacksound S_NULL, // painstate - 0, // painchance - sfx_spring, // painsound + SKINCOLOR_RASPBERRY, // painchance + sfx_s3kb1, // painsound S_NULL, // meleestate S_NULL, // missilestate S_NULL, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height + 48*FRACUNIT, // radius + 32*FRACUNIT, // height 0, // display offset - 32*FRACUNIT, // mass + 40*FRACUNIT, // mass 0, // damage sfx_None, // activesound - MF_SPRING, // flags + MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags S_REDSPRING2 // raisestate }, { // MT_BLUESPRING 552, // doomednum - S_BLUESPRING, // spawnstate + S_BLUESPRING1, // spawnstate 1000, // spawnhealth - S_NULL, // seestate + S_BLUESPRING2, // seestate sfx_None, // seesound - 0, // reactiontime + 8, // reactiontime sfx_None, // attacksound S_NULL, // painstate - 0, // painchance - sfx_spring, // painsound + SKINCOLOR_PASTEL, // painchance + sfx_s3kb1, // painsound S_NULL, // meleestate S_NULL, // missilestate S_NULL, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed - 20*FRACUNIT, // radius - 16*FRACUNIT, // height + 48*FRACUNIT, // radius + 32*FRACUNIT, // height 0, // display offset - 11*FRACUNIT, // mass + 64*FRACUNIT, // mass 0, // damage sfx_None, // activesound - MF_SPRING, // flags + MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags S_BLUESPRING2 // raisestate }, - { // MT_YELLOWDIAG - 555, // doomednum - S_YDIAG1, // spawnstate - 1, // spawnhealth - S_NULL, // seestate + { // MT_GREYSPRING + 553, // doomednum + S_GREYSPRING1, // spawnstate + 1000, // spawnhealth + S_GREYSPRING2, // seestate sfx_None, // seesound - 0, // reactiontime + 8, // reactiontime sfx_None, // attacksound S_NULL, // painstate - 0, // painchance - sfx_spring, // painsound + SKINCOLOR_POPCORN, // painchance + sfx_s3kb1, // painsound S_NULL, // meleestate S_NULL, // missilestate S_NULL, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height + 48*FRACUNIT, // radius + 32*FRACUNIT, // height 0, // display offset - 20*FRACUNIT, // mass - 20*FRACUNIT, // damage + 15*FRACUNIT, // mass + 0, // damage sfx_None, // activesound - MF_SPRING, // flags + MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags + S_GREYSPRING2 // raisestate + }, + + { // MT_YELLOWDIAG + 554, // doomednum + S_YDIAG1, // spawnstate + 1, // spawnhealth + S_YDIAG2, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + SKINCOLOR_YELLOW, // painchance + sfx_s3kb1, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 48*FRACUNIT, // radius + 56*FRACUNIT, // height + 0, // display offset + 25*FRACUNIT, // mass + 25*FRACUNIT, // damage + sfx_None, // activesound + MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags S_YDIAG2 // raisestate }, { // MT_REDDIAG - 556, // doomednum + 555, // doomednum S_RDIAG1, // spawnstate 1, // spawnhealth - S_NULL, // seestate + S_RDIAG2, // seestate sfx_None, // seesound - 0, // reactiontime + 8, // reactiontime sfx_None, // attacksound S_NULL, // painstate - 0, // painchance - sfx_spring, // painsound + SKINCOLOR_RASPBERRY, // painchance + sfx_s3kb1, // painsound S_NULL, // meleestate S_NULL, // missilestate S_NULL, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height + 48*FRACUNIT, // radius + 56*FRACUNIT, // height 0, // display offset - 32*FRACUNIT, // mass - 32*FRACUNIT, // damage + 40*FRACUNIT, // mass + 40*FRACUNIT, // damage sfx_None, // activesound - MF_SPRING, // flags + MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags S_RDIAG2 // raisestate }, { // MT_BLUEDIAG - 557, // doomednum + 556, // doomednum S_BDIAG1, // spawnstate 1, // spawnhealth S_BDIAG2, // seestate sfx_None, // seesound - 0, // reactiontime + 8, // reactiontime sfx_None, // attacksound S_NULL, // painstate - 0, // painchance - sfx_spring, // painsound + SKINCOLOR_PASTEL, // painchance + sfx_s3kb1, // painsound S_NULL, // meleestate S_NULL, // missilestate S_NULL, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed - 16*FRACUNIT, // radius - 16*FRACUNIT, // height + 48*FRACUNIT, // radius + 56*FRACUNIT, // height 0, // display offset - 11*FRACUNIT, // mass - 11*FRACUNIT, // damage + 64*FRACUNIT, // mass + 64*FRACUNIT, // damage sfx_None, // activesound - MF_SPRING, // flags + MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags S_BDIAG2 // raisestate }, + { // MT_GREYDIAG + 557, // doomednum + S_GDIAG1, // spawnstate + 1, // spawnhealth + S_GDIAG2, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + SKINCOLOR_POPCORN, // painchance + sfx_s3kb1, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 48*FRACUNIT, // radius + 56*FRACUNIT, // height + 0, // display offset + 15*FRACUNIT, // mass + 15*FRACUNIT, // damage + sfx_None, // activesound + MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags + S_GDIAG2 // raisestate + }, + { // MT_YELLOWHORIZ 558, // doomednum S_YHORIZ1, // spawnstate 1, // spawnhealth - S_NULL, // seestate + S_YHORIZ2, // seestate sfx_None, // seesound - 0, // reactiontime + 8, // reactiontime sfx_None, // attacksound S_NULL, // painstate - 0, // painchance - sfx_spring, // painsound + SKINCOLOR_YELLOW, // painchance + sfx_s3kb1, // painsound S_NULL, // meleestate S_NULL, // missilestate S_NULL, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height + 48*FRACUNIT, // radius + 56*FRACUNIT, // height 0, // display offset 0, // mass - 36*FRACUNIT, // damage + 45*FRACUNIT, // damage sfx_None, // activesound - MF_SPRING|MF_NOGRAVITY, // flags + MF_SOLID|MF_SPRING|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags S_YHORIZ2 // raisestate }, @@ -8578,26 +8597,26 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 559, // doomednum S_RHORIZ1, // spawnstate 1, // spawnhealth - S_NULL, // seestate + S_RHORIZ2, // seestate sfx_None, // seesound - 0, // reactiontime + 8, // reactiontime sfx_None, // attacksound S_NULL, // painstate - 0, // painchance - sfx_spring, // painsound + SKINCOLOR_RASPBERRY, // painchance + sfx_s3kb1, // painsound S_NULL, // meleestate S_NULL, // missilestate S_NULL, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height + 48*FRACUNIT, // radius + 56*FRACUNIT, // height 0, // display offset 0, // mass 72*FRACUNIT, // damage sfx_None, // activesound - MF_SPRING|MF_NOGRAVITY, // flags + MF_SOLID|MF_SPRING|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags S_RHORIZ2 // raisestate }, @@ -8605,29 +8624,56 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 560, // doomednum S_BHORIZ1, // spawnstate 1, // spawnhealth - S_NULL, // seestate + S_BHORIZ2, // seestate sfx_None, // seesound - 0, // reactiontime + 8, // reactiontime sfx_None, // attacksound S_NULL, // painstate - 0, // painchance - sfx_spring, // painsound + SKINCOLOR_PASTEL, // painchance + sfx_s3kb1, // painsound S_NULL, // meleestate S_NULL, // missilestate S_NULL, // deathstate S_NULL, // xdeathstate sfx_None, // deathsound 0, // speed - 16*FRACUNIT, // radius - 32*FRACUNIT, // height + 48*FRACUNIT, // radius + 56*FRACUNIT, // height 0, // display offset 0, // mass - 11*FRACUNIT, // damage + 115*FRACUNIT, // damage sfx_None, // activesound - MF_SPRING|MF_NOGRAVITY, // flags + MF_SOLID|MF_SPRING|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags S_BHORIZ2 // raisestate }, + { // MT_GREYHORIZ + 561, // doomednum + S_GHORIZ1, // spawnstate + 1, // spawnhealth + S_GHORIZ2, // seestate + sfx_None, // seesound + 8, // reactiontime + sfx_None, // attacksound + S_NULL, // painstate + SKINCOLOR_POPCORN, // painchance + sfx_s3kb1, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate + S_NULL, // xdeathstate + sfx_None, // deathsound + 0, // speed + 48*FRACUNIT, // radius + 56*FRACUNIT, // height + 0, // display offset + 0, // mass + 27*FRACUNIT, // damage + sfx_None, // activesound + MF_SOLID|MF_SPRING|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags + S_GHORIZ2 // raisestate + }, + { // MT_BOOSTERSEG -1, // doomednum S_INVISIBLE, // spawnstate @@ -8770,18 +8816,18 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL, // seestate sfx_s3kb8, // seesound 8, // reactiontime - sfx_None, // attacksound - S_SIGNPLAYER, // painstate - MT_SPARK, // painchance - sfx_s3kb8, // painsound - S_EGGMANSIGN, // meleestate - S_CLEARSIGN, // missilestate - S_SIGNSTOP, // deathstate + sfx_s3k7e, // attacksound + S_NULL, // painstate + 0, // painchance + sfx_None, // painsound + S_NULL, // meleestate + S_NULL, // missilestate + S_NULL, // deathstate S_NULL, // xdeathstate - sfx_s3k64, // deathsound + sfx_None, // deathsound 8, // speed 8*FRACUNIT, // radius - 32*FRACUNIT, // height + 48*FRACUNIT, // height 0, // display offset 16, // mass 0, // damage @@ -8814,6 +8860,8 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 0, // damage sfx_None, // activesound MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_NOTHINK|MF_DONTENCOREMAP, // flags + S_NULL // raisestate + }, { // MT_SPIKEBALL 521, // doomednum @@ -9332,7 +9380,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = 409, // doomednum S_1UP_BOX, // spawnstate 1, // spawnhealth - S_PLAY_BOX1, // seestate + S_INVISIBLE, // seestate sfx_None, // seesound 8, // reactiontime sfx_None, // attacksound @@ -10277,7 +10325,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = -1, // doomednum S_1UP_ICON1, // spawnstate 1, // spawnhealth - S_PLAY_ICON1, // seestate + S_INVISIBLE, // seestate sfx_None, // seesound 8, // reactiontime sfx_None, // attacksound @@ -26438,9 +26486,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_PINETREE + { // MT_DAYTONAPINETREE 3204, // doomednum - S_PINETREE, // spawnstate + S_DAYTONAPINETREE, // spawnstate 1000, // spawnhealth S_NULL, // seestate sfx_None, // seesound @@ -26465,9 +26513,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = S_NULL // raisestate }, - { // MT_PINETREE_SIDE + { // MT_DAYTONAPINETREE_SIDE -1, // doomednum - S_PINETREE_SIDE,// spawnstate + S_DAYTONAPINETREE_SIDE,// spawnstate 1000, // spawnhealth S_NULL, // seestate sfx_None, // seesound @@ -28611,7 +28659,7 @@ skincolor_t skincolors[MAXSKINCOLORS] = { {"Super Silver 5", {0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x07, 0x09, 0x0b, 0x0d, 0x0f, 0x11, 0x13}, SKINCOLOR_BLACK, 5, V_GRAYMAP, false}, // SKINCOLOR_SUPERSILVER5 {"Super Red 1", {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xd0, 0xd1, 0xd1, 0xd2, 0xd2}, SKINCOLOR_CYAN, 15, 0, false}, // SKINCOLOR_SUPERRED1 - {"Super Red 2", {0x00, 0x00, 0x00, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd2, 0xd2, 0xd2, 0x20, 0x20, 0x21, 0x21}, SKINCOLOR_CYAN, 14, V_ROSYMAP, false}, // SKINCOLOR_SUPERRED2 + {"Super Red 2", {0x00, 0x00, 0x00, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd2, 0xd2, 0xd2, 0x20, 0x20, 0x21, 0x21}, SKINCOLOR_CYAN, 14, V_PINKMAP, false}, // SKINCOLOR_SUPERRED2 {"Super Red 3", {0x00, 0x00, 0xd0, 0xd0, 0xd1, 0xd1, 0xd2, 0xd2, 0x20, 0x20, 0x21, 0x21, 0x22, 0x22, 0x23, 0x23}, SKINCOLOR_CYAN, 13, V_REDMAP, false}, // SKINCOLOR_SUPERRED3 {"Super Red 4", {0x00, 0xd0, 0xd1, 0xd1, 0xd2, 0xd2, 0x20, 0x20, 0x21, 0x21, 0x22, 0x22, 0x23, 0x23, 0x24, 0x24}, SKINCOLOR_CYAN, 11, V_REDMAP, false}, // SKINCOLOR_SUPERRED4 {"Super Red 5", {0xd0, 0xd1, 0xd2, 0xd2, 0x20, 0x20, 0x21, 0x21, 0x22, 0x22, 0x23, 0x23, 0x24, 0x24, 0x25, 0x25}, SKINCOLOR_CYAN, 10, V_REDMAP, false}, // SKINCOLOR_SUPERRED5 @@ -28622,17 +28670,17 @@ skincolor_t skincolors[MAXSKINCOLORS] = { {"Super Orange 4", {0x00, 0xd0, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x44, 0x45, 0x46}, SKINCOLOR_SAPPHIRE, 4, V_ORANGEMAP, false}, // SKINCOLOR_SUPERORANGE4 {"Super Orange 5", {0xd0, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x44, 0x45, 0x46, 0x47}, SKINCOLOR_SAPPHIRE, 3, V_ORANGEMAP, false}, // SKINCOLOR_SUPERORANGE5 - {"Super Gold 1", {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x50, 0x51, 0x52, 0x53, 0x48}, SKINCOLOR_CORNFLOWER, 15, 0, false}, // SKINCOLOR_SUPERGOLD1 - {"Super Gold 2", {0x00, 0x50, 0x51, 0x52, 0x53, 0x53, 0x48, 0x48, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x40, 0x41}, SKINCOLOR_CORNFLOWER, 9, V_YELLOWMAP, false}, // SKINCOLOR_SUPERGOLD2 - {"Super Gold 3", {0x51, 0x52, 0x53, 0x53, 0x48, 0x48, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x40, 0x41, 0x42, 0x43}, SKINCOLOR_CORNFLOWER, 8, V_YELLOWMAP, false}, // SKINCOLOR_SUPERGOLD3 - {"Super Gold 4", {0x53, 0x48, 0x48, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46}, SKINCOLOR_CORNFLOWER, 8, V_YELLOWMAP, false}, // SKINCOLOR_SUPERGOLD4 - {"Super Gold 5", {0x48, 0x48, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47}, SKINCOLOR_CORNFLOWER, 8, V_YELLOWMAP, false}, // SKINCOLOR_SUPERGOLD5 + {"Super Gold 1", {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x50, 0x51, 0x52, 0x53, 0x48}, SKINCOLOR_PERIWINKLE, 15, 0, false}, // SKINCOLOR_SUPERGOLD1 + {"Super Gold 2", {0x00, 0x50, 0x51, 0x52, 0x53, 0x53, 0x48, 0x48, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x40, 0x41}, SKINCOLOR_PERIWINKLE, 9, V_YELLOWMAP, false}, // SKINCOLOR_SUPERGOLD2 + {"Super Gold 3", {0x51, 0x52, 0x53, 0x53, 0x48, 0x48, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x40, 0x41, 0x42, 0x43}, SKINCOLOR_PERIWINKLE, 8, V_YELLOWMAP, false}, // SKINCOLOR_SUPERGOLD3 + {"Super Gold 4", {0x53, 0x48, 0x48, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46}, SKINCOLOR_PERIWINKLE, 8, V_YELLOWMAP, false}, // SKINCOLOR_SUPERGOLD4 + {"Super Gold 5", {0x48, 0x48, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47}, SKINCOLOR_PERIWINKLE, 8, V_YELLOWMAP, false}, // SKINCOLOR_SUPERGOLD5 - {"Super Peridot 1", {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x58, 0x58, 0xbc, 0xbc, 0xbc}, SKINCOLOR_COBALT, 15, 0, false}, // SKINCOLOR_SUPERPERIDOT1 - {"Super Peridot 2", {0x00, 0x58, 0x58, 0x58, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe}, SKINCOLOR_COBALT, 4, V_PERIDOTMAP, false}, // SKINCOLOR_SUPERPERIDOT2 - {"Super Peridot 3", {0x58, 0x58, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbf, 0xbf}, SKINCOLOR_COBALT, 3, V_PERIDOTMAP, false}, // SKINCOLOR_SUPERPERIDOT3 - {"Super Peridot 4", {0x58, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbf, 0xbf, 0x5e, 0x5e, 0x5f}, SKINCOLOR_COBALT, 3, V_PERIDOTMAP, false}, // SKINCOLOR_SUPERPERIDOT4 - {"Super Peridot 5", {0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbf, 0xbf, 0x5e, 0x5e, 0x5f, 0x77}, SKINCOLOR_COBALT, 3, V_PERIDOTMAP, false}, // SKINCOLOR_SUPERPERIDOT5 + {"Super Peridot 1", {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x58, 0x58, 0xbc, 0xbc, 0xbc}, SKINCOLOR_BLUEBERRY, 15, 0, false}, // SKINCOLOR_SUPERPERIDOT1 + {"Super Peridot 2", {0x00, 0x58, 0x58, 0x58, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe}, SKINCOLOR_BLUEBERRY, 4, V_GREENMAP, false}, // SKINCOLOR_SUPERPERIDOT2 + {"Super Peridot 3", {0x58, 0x58, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbf, 0xbf}, SKINCOLOR_BLUEBERRY, 3, V_GREENMAP, false}, // SKINCOLOR_SUPERPERIDOT3 + {"Super Peridot 4", {0x58, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbf, 0xbf, 0x5e, 0x5e, 0x5f}, SKINCOLOR_BLUEBERRY, 3, V_GREENMAP, false}, // SKINCOLOR_SUPERPERIDOT4 + {"Super Peridot 5", {0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbf, 0xbf, 0x5e, 0x5e, 0x5f, 0x77}, SKINCOLOR_BLUEBERRY, 3, V_GREENMAP, false}, // SKINCOLOR_SUPERPERIDOT5 {"Super Sky 1", {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x81, 0x82, 0x83, 0x84}, SKINCOLOR_RUST, 15, 0, false}, // SKINCOLOR_SUPERSKY1 {"Super Sky 2", {0x00, 0x80, 0x81, 0x82, 0x83, 0x83, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x86, 0x86}, SKINCOLOR_RUST, 4, V_SKYMAP, false}, // SKINCOLOR_SUPERSKY2 diff --git a/src/info.h b/src/info.h index 6eb66c97d..2e7a855a4 100644 --- a/src/info.h +++ b/src/info.h @@ -27,10 +27,6 @@ void A_Explode(); void A_Pain(); void A_Fall(); -void A_MonitorPop(); -void A_GoldMonitorPop(); -void A_GoldMonitorRestore(); -void A_GoldMonitorSparkle(); void A_Look(); void A_Chase(); void A_FaceStabChase(); @@ -60,7 +56,6 @@ void A_ScoreRise(); // Rise the score logo void A_AttractChase(); // Ring Chase void A_DropMine(); // Drop Mine from Skim or Jetty-Syn Bomber void A_FishJump(); // Fish Jump -void A_ThrownRing(); // Sparkle trail for red ring void A_GrenadeRing(); // SRB2kart void A_SetSolidSteam(); void A_UnsetSolidSteam(); @@ -143,7 +138,6 @@ void A_LinedefExecute(); void A_PlaySeeSound(); void A_PlayAttackSound(); void A_PlayActiveSound(); -void A_1upThinker(); void A_BossZoom(); //Unused void A_Boss1Chase(); void A_Boss2Chase(); @@ -181,7 +175,7 @@ void A_ItemPop(); // SRB2kart void A_JawzChase(); // SRB2kart void A_JawzExplode(); // SRB2kart void A_SPBChase(); // SRB2kart -void A_MineExplode(); // SRB2kart +void A_SSMineExplode(); // SRB2kart void A_BallhogExplode(); // SRB2kart void A_LightningFollowPlayer(); // SRB2kart: Lightning shield effect player chasing void A_FZBoomFlash(); // SRB2kart @@ -191,7 +185,6 @@ void A_RoamingShadowThinker(); // SRB2kart: Roaming Shadow moving + attacking pl void A_MayonakaArrow(); //SRB2kart: midnight channel arrow sign void A_ReaperThinker(); //SRB2kart: mementos reaper void A_MementosTPParticles(); //SRB2kart: mementos teleporter particles. Man that's a lot of actions for my shite. -void A_FlameParticle(); // SRB2kart void A_FlameShieldPaper(); void A_OrbitNights(); void A_GhostMe(); @@ -276,7 +269,6 @@ void A_Boss5MakeItRain(); void A_Boss5MakeJunk(); void A_LookForBetter(); void A_Boss5BombExplode(); -void A_DustDevilThink(); void A_TNTExplode(); void A_DebrisRandom(); void A_TrainCameo(); diff --git a/src/k_battle.c b/src/k_battle.c index 6279a301d..740a41726 100644 --- a/src/k_battle.c +++ b/src/k_battle.c @@ -499,9 +499,9 @@ static void K_SetupMovingCapsule(mapthing_t *mt, mobj_t *mobj) thinker_t *th; // Find the inital target - for (th = thinkercap.next; th != &thinkercap; th = th->next) + for (th = thlist[THINK_MOBJ].next; th != &thlist[THINK_MOBJ]; th = th->next) { - if (th->function.acp1 != (actionf_p1)P_MobjThinker) // Not a mobj thinker + if (th->function.acp1 == (actionf_p1)P_RemoveThinkerDelayed) continue; mo2 = (mobj_t *)th; diff --git a/src/k_collide.c b/src/k_collide.c index 28c85506b..35db892b0 100644 --- a/src/k_collide.c +++ b/src/k_collide.c @@ -64,7 +64,7 @@ boolean K_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2) t2->z += t2->height; S_StartSound(t2, t2->info->deathsound); - P_KillMobj(t2, t1, t1); + P_KillMobj(t2, t1, t1, 0); P_SetObjectMomZ(t2, 8*FRACUNIT, false); P_InstaThrust(t2, R_PointToAngle2(t1->x, t1->y, t2->x, t2->y)+ANGLE_90, 16*FRACUNIT); @@ -77,7 +77,7 @@ boolean K_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2) { damageitem = true; // Bomb death - P_KillMobj(t2, t1, t1); + P_KillMobj(t2, t1, t1, 0); } else if (t2->flags & MF_SPRING && (t1->type != MT_ORBINAUT_SHIELD && t1->type != MT_JAWZ_SHIELD)) { @@ -100,7 +100,7 @@ boolean K_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2) t1->z += t1->height; S_StartSound(t1, t1->info->deathsound); - P_KillMobj(t1, t2, t2); + P_KillMobj(t1, t2, t2, 0); P_SetObjectMomZ(t1, 8*FRACUNIT, false); P_InstaThrust(t1, R_PointToAngle2(t2->x, t2->y, t1->x, t1->y)+ANGLE_90, 16*FRACUNIT); @@ -165,7 +165,7 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2) t2->z += t2->height; S_StartSound(t2, t2->info->deathsound); - P_KillMobj(t2, t1, t1); + P_KillMobj(t2, t1, t1, 0); P_SetObjectMomZ(t2, 8*FRACUNIT, false); P_InstaThrust(t2, R_PointToAngle2(t1->x, t1->y, t2->x, t2->y)+ANGLE_90, 16*FRACUNIT); @@ -190,7 +190,7 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2) t1->z += t1->height; S_StartSound(t1, t1->info->deathsound); - P_KillMobj(t1, t2, t2); + P_KillMobj(t1, t2, t2, 0); P_SetObjectMomZ(t1, 8*FRACUNIT, false); P_InstaThrust(t1, R_PointToAngle2(t2->x, t2->y, t1->x, t1->y)+ANGLE_90, 16*FRACUNIT); @@ -237,7 +237,7 @@ boolean K_EggItemCollide(mobj_t *t1, mobj_t *t2) { // Melt item S_StartSound(t2, sfx_s3k43); - P_KillMobj(t1, t2, t2); + P_KillMobj(t1, t2, t2, 0); return true; } else @@ -289,7 +289,7 @@ boolean K_MineCollide(mobj_t *t1, mobj_t *t2) // Bomb punting if ((t1->state >= &states[S_SSMINE1] && t1->state <= &states[S_SSMINE4]) || (t1->state >= &states[S_SSMINE_DEPLOY8] && t1->state <= &states[S_SSMINE_DEPLOY13])) - P_KillMobj(t1, t2, t2); + P_KillMobj(t1, t2, t2, 0); else K_PuntMine(t1, t2); } @@ -297,7 +297,7 @@ boolean K_MineCollide(mobj_t *t1, mobj_t *t2) || t2->type == MT_ORBINAUT_SHIELD || t2->type == MT_JAWZ_SHIELD) { // Bomb death - P_KillMobj(t1, t2, t2); + P_KillMobj(t1, t2, t2, 0); // Other Item Damage if (t2->eflags & MFE_VERTICALFLIP) @@ -306,7 +306,7 @@ boolean K_MineCollide(mobj_t *t1, mobj_t *t2) t2->z += t2->height; S_StartSound(t2, t2->info->deathsound); - P_KillMobj(t2, t1, t1); + P_KillMobj(t2, t1, t1, 0); P_SetObjectMomZ(t2, 8*FRACUNIT, false); P_InstaThrust(t2, R_PointToAngle2(t1->x, t1->y, t2->x, t2->y)+ANGLE_90, 16*FRACUNIT); @@ -314,7 +314,7 @@ boolean K_MineCollide(mobj_t *t1, mobj_t *t2) else if (t2->flags & MF_SHOOTABLE) { // Bomb death - P_KillMobj(t1, t2, t2); + P_KillMobj(t1, t2, t2, 0); // Shootable damage P_DamageMobj(t2, t1, t1->target, 1, 0); } @@ -359,14 +359,14 @@ boolean K_KitchenSinkCollide(mobj_t *t1, mobj_t *t2) HU_DoCEcho(va("%s\\was hit by a kitchen sink.\\\\\\\\", player_names[t2->player-players])); I_OutputMsg("%s was hit by a kitchen sink.\n", player_names[t2->player-players]); P_DamageMobj(t2, t1, t1->target, 1, DMG_INSTAKILL); - P_KillMobj(t1, t2, t2); + P_KillMobj(t1, t2, t2, 0); } else if (t2->flags & MF_SHOOTABLE) { // Shootable damage - P_KillMobj(t2, t2, t1->target); + P_KillMobj(t2, t2, t1->target, 0); // This item damage - P_KillMobj(t1, t2, t2); + P_KillMobj(t1, t2, t2, 0); } return true; @@ -394,7 +394,7 @@ boolean K_SMKIceBlockCollide(mobj_t *t1, mobj_t *t2) return false; if (t1->health) - P_KillMobj(t1, t2, t2); + P_KillMobj(t1, t2, t2, 0); /*if (t2->player && (t2->player->kartstuff[k_invincibilitytimer] > 0 || t2->player->kartstuff[k_growshrinktimer] > 0)) diff --git a/src/k_kart.c b/src/k_kart.c index 76caa85ef..8c7fc5ffd 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -4331,7 +4331,7 @@ killnext: banana->z += banana->height; S_StartSound(banana, banana->info->deathsound); - P_KillMobj(banana, inflictor, source); + P_KillMobj(banana, inflictor, source, 0); P_SetObjectMomZ(banana, 8*FRACUNIT, false); if (inflictor) @@ -4578,7 +4578,7 @@ void K_DropRocketSneaker(player_t *player) if (shoe->type != MT_ROCKETSNEAKER) return; //woah, not a rocketsneaker, bail! safeguard in case this gets used when you're holding non-rocketsneakers - shoe->flags2 &= ~MF2_DONTDRAW; + shoe->drawflags &= ~MFD_DONTDRAW; shoe->flags &= ~MF_NOGRAVITY; shoe->angle += ANGLE_45; @@ -4615,7 +4615,7 @@ void K_DropKitchenSink(player_t *player) if (player->mo->hnext->type != MT_SINK_SHIELD) return; //so we can just call this function regardless of what is being held - P_KillMobj(player->mo->hnext, NULL, NULL); + P_KillMobj(player->mo->hnext, NULL, NULL, 0); P_SetTarget(&player->mo->hnext, NULL); } diff --git a/src/k_waypoint.c b/src/k_waypoint.c index 7d119498a..e61c238d8 100644 --- a/src/k_waypoint.c +++ b/src/k_waypoint.c @@ -1999,23 +1999,23 @@ void K_AdjustWaypointsParameters (void) } for ( - th = thinkercap.next; - th != &thinkercap; - th = th->next + th = thlist[THINK_MOBJ].next; + th != &thlist[THINK_MOBJ]; + th = th->next ){ - if (th->function.acp1 == (actionf_p1)P_MobjThinker) - { - anchor = (const mobj_t *)th; + if (th->function.acp1 == (actionf_p1)P_RemoveThinkerDelayed) + continue; - if (anchor->type == MT_WAYPOINT_ANCHOR) - { - for ( - waypointmobj = waypointcap; - waypointmobj; - waypointmobj = waypointmobj->tracer - ){ - K_AnchorWaypointRadius(waypointmobj, anchor); - } + anchor = (const mobj_t *)th; + + if (anchor->type == MT_WAYPOINT_ANCHOR) + { + for ( + waypointmobj = waypointcap; + waypointmobj; + waypointmobj = waypointmobj->tracer + ){ + K_AnchorWaypointRadius(waypointmobj, anchor); } } } diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 2285b2732..e104fb1d4 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -621,7 +621,7 @@ static int lib_pSpawnLockOn(lua_State *L) { mobj_t *visual = P_SpawnMobj(lockon->x, lockon->y, lockon->z, MT_LOCKON); // positioning, flip handled in P_SceneryThinker P_SetTarget(&visual->target, lockon); - visual->flags2 |= MF2_DONTDRAW; + visual->drawflags |= MFD_DONTDRAW; P_SetMobjStateNF(visual, state); } return 0; @@ -1458,31 +1458,6 @@ static int lib_pEarthquake(lua_State *L) return 0; } -static int lib_pHomingAttack(lua_State *L) -{ - mobj_t *source = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ)); - mobj_t *enemy = *((mobj_t **)luaL_checkudata(L, 2, META_MOBJ)); - NOHUD - INLEVEL - if (!source || !enemy) - return LUA_ErrInvalid(L, "mobj_t"); - lua_pushboolean(L, P_HomingAttack(source, enemy)); - return 1; -} - -static int lib_pTelekinesis(lua_State *L) -{ - player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); - fixed_t thrust = luaL_checkfixed(L, 2); - fixed_t range = luaL_checkfixed(L, 3); - NOHUD - INLEVEL - if (!player) - return LUA_ErrInvalid(L, "player_t"); - P_Telekinesis(player, thrust, range); - return 0; -} - static int lib_pSwitchShield(lua_State *L) { player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); @@ -4083,9 +4058,6 @@ static luaL_Reg lib[] = { {"P_LookForEnemies",lib_pLookForEnemies}, {"P_NukeEnemies",lib_pNukeEnemies}, {"P_Earthquake",lib_pEarthquake}, - {"P_HomingAttack",lib_pHomingAttack}, - //{"P_SuperReady",lib_pSuperReady}, - {"P_Telekinesis",lib_pTelekinesis}, {"P_SwitchShield",lib_pSwitchShield}, // p_map diff --git a/src/lua_script.c b/src/lua_script.c index a812d7c18..fd61879eb 100644 --- a/src/lua_script.c +++ b/src/lua_script.c @@ -142,15 +142,6 @@ int LUA_PushGlobals(lua_State *L, const char *word) } else if (fastcmp(word,"maptol")) { lua_pushinteger(L, maptol); return 1; - } else if (fastcmp(word,"ultimatemode")) { - lua_pushboolean(L, ultimatemode != 0); - return 1; - } else if (fastcmp(word,"mariomode")) { - lua_pushboolean(L, mariomode != 0); - return 1; - } else if (fastcmp(word,"twodlevel")) { - lua_pushboolean(L, twodlevel != 0); - return 1; } else if (fastcmp(word,"circuitmap")) { lua_pushboolean(L, circuitmap); return 1; diff --git a/src/p_enemy.c b/src/p_enemy.c index fdcd3eb53..74741deed 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -103,11 +103,6 @@ void A_BossZoom(mobj_t *actor); void A_BossScream(mobj_t *actor); void A_Scream(mobj_t *actor); void A_Pain(mobj_t *actor); -void A_1upThinker(mobj_t *actor); -void A_MonitorPop(mobj_t *actor); -void A_GoldMonitorPop(mobj_t *actor); -void A_GoldMonitorRestore(mobj_t *actor); -void A_GoldMonitorSparkle(mobj_t *actor); void A_Explode(mobj_t *actor); void A_BossDeath(mobj_t *actor); void A_CustomPower(mobj_t *actor); @@ -128,7 +123,6 @@ void A_BubbleCheck(mobj_t *actor); void A_AttractChase(mobj_t *actor); void A_DropMine(mobj_t *actor); void A_FishJump(mobj_t *actor); -void A_ThrownRing(mobj_t *actor); void A_GrenadeRing(mobj_t *actor); void A_SetSolidSteam(mobj_t *actor); void A_UnsetSolidSteam(mobj_t *actor); @@ -209,7 +203,7 @@ void A_ItemPop(mobj_t *actor); // SRB2kart void A_JawzChase(mobj_t *actor); // SRB2kart void A_JawzExplode(mobj_t *actor); // SRB2kart void A_SPBChase(mobj_t *actor); // SRB2kart -void A_MineExplode(mobj_t *actor); // SRB2kart +void A_SSMineExplode(mobj_t *actor); // SRB2kart void A_BallhogExplode(mobj_t *actor); // SRB2kart void A_LightningFollowPlayer(mobj_t *actor); // SRB2kart void A_FZBoomFlash(mobj_t *actor); // SRB2kart @@ -219,7 +213,6 @@ void A_RoamingShadowThinker(mobj_t *actor); //SRB2kart void A_MayonakaArrow(mobj_t *actor); //SRB2kart void A_ReaperThinker(mobj_t *actor); //SRB2kart void A_MementosTPParticles(mobj_t *actor); //SRB2kart -void A_FlameParticle(mobj_t *actor); // SRB2kart void A_FlameShieldPaper(mobj_t *actor); // SRB2kart void A_OrbitNights(mobj_t *actor); void A_GhostMe(mobj_t *actor); @@ -308,7 +301,6 @@ void A_Boss5MakeItRain(mobj_t *actor); void A_Boss5MakeJunk(mobj_t *actor); void A_LookForBetter(mobj_t *actor); void A_Boss5BombExplode(mobj_t *actor); -void A_DustDevilThink(mobj_t *actor); void A_TNTExplode(mobj_t *actor); void A_DebrisRandom(mobj_t *actor); void A_TrainCameo(mobj_t *actor); @@ -540,10 +532,7 @@ boolean P_Move(mobj_t *actor, fixed_t speed) I_Assert(movedir < NUMDIRS); tryx = actor->x + FixedMul(speed*xspeed[movedir], actor->scale); - if (twodlevel || actor->flags2 & MF2_TWOD) - tryy = actor->y; - else - tryy = actor->y + FixedMul(speed*yspeed[movedir], actor->scale); + tryy = actor->y + FixedMul(speed*yspeed[movedir], actor->scale); if (actor->type == MT_SKIM && !P_WaterInSector(actor, tryx, tryy)) // bail out if sector lacks water return false; @@ -617,8 +606,6 @@ void P_NewChaseDir(mobj_t *actor) else d[1] = DI_NODIR; - if (twodlevel || actor->flags2 & MF2_TWOD) - d[2] = DI_NODIR; if (deltay < -FixedMul(10*FRACUNIT, actor->scale)) d[2] = DI_SOUTH; else if (deltay > FixedMul(10*FRACUNIT, actor->scale)) @@ -2833,10 +2820,10 @@ void A_Boss1Laser(mobj_t *actor) SKINCOLOR_SUPERRED3, SKINCOLOR_SUPERRED4, SKINCOLOR_SUPERRED5, - SKINCOLOR_FLAME, + SKINCOLOR_KETCHUP, SKINCOLOR_RED, SKINCOLOR_RED, - SKINCOLOR_FLAME, + SKINCOLOR_KETCHUP, SKINCOLOR_SUPERRED5, SKINCOLOR_SUPERRED4, SKINCOLOR_SUPERRED3, @@ -3406,281 +3393,6 @@ void A_Fall(mobj_t *actor) actor->extravalue2 = locvar1; } -#define LIVESBOXDISPLAYPLAYER // Use displayplayer instead of closest player - -// Function: A_1upThinker -// -// Description: Used by the 1up box to show the player's face. -// -// var1 = unused -// var2 = unused -// -void A_1upThinker(mobj_t *actor) -{ - INT32 i; - fixed_t dist = INT32_MAX; - fixed_t temp; - INT32 closestplayer = -1; - - if (LUA_CallAction("A_1upThinker", actor)) - return; - - for (i = 0; i < MAXPLAYERS; i++) - { - if (!playeringame[i] || players[i].bot || players[i].spectator) - continue; - - if (!players[i].mo) - continue; - - if ((netgame || multiplayer) && players[i].playerstate != PST_LIVE) - continue; - - temp = P_AproxDistance(players[i].mo->x-actor->x, players[i].mo->y-actor->y); - - if (temp < dist) - { - closestplayer = i; - dist = temp; - } - } - - if (closestplayer == -1 || skins[players[closestplayer].skin].sprites[SPR2_LIFE].numframes == 0) - { // Closest player not found (no players in game?? may be empty dedicated server!), or does not have correct sprite. - if (actor->tracer) - { - mobj_t *tracer = actor->tracer; - P_SetTarget(&actor->tracer, NULL); - P_RemoveMobj(tracer); - } - return; - } - - // We're using the overlay, so use the overlay 1up box (no text) - actor->sprite = SPR_TV1P; - - if (!actor->tracer) - { - P_SetTarget(&actor->tracer, P_SpawnMobj(actor->x, actor->y, actor->z, MT_OVERLAY)); - P_SetTarget(&actor->tracer->target, actor); - actor->tracer->skin = &skins[players[closestplayer].skin]; // required here to prevent spr2 default showing stand for a single frame - P_SetMobjState(actor->tracer, actor->info->seestate); - - // The overlay is going to be one tic early turning off and on - // because it's going to get its thinker run the frame we spawned it. - // So make it take one tic longer if it just spawned. - ++actor->tracer->tics; - } - - actor->tracer->color = players[closestplayer].mo->color; - actor->tracer->skin = &skins[players[closestplayer].skin]; -} - -// Function: A_MonitorPop -// -// Description: Used by monitors when they explode. -// -// var1 = unused -// var2 = unused -// -void A_MonitorPop(mobj_t *actor) -{ - mobjtype_t item = 0; - mobj_t *newmobj; - - if (LUA_CallAction("A_MonitorPop", actor)) - return; - - // Spawn the "pop" explosion. - if (actor->info->deathsound) - S_StartSound(actor, actor->info->deathsound); - P_SpawnMobjFromMobj(actor, 0, 0, actor->height/4, MT_EXPLODE); - - // We're dead now. De-solidify. - actor->health = 0; - P_UnsetThingPosition(actor); - actor->flags &= ~MF_SOLID; - actor->flags |= MF_NOCLIP; - P_SetThingPosition(actor); - - if (actor->info->damage == MT_UNKNOWN) - { - // MT_UNKNOWN is random. Because it's unknown to us... get it? - item = P_DoRandomBoxChances(); - - if (item == MT_NULL) - { - CONS_Alert(CONS_WARNING, M_GetText("All monitors turned off.\n")); - return; - } - } - else - item = actor->info->damage; - - if (item == 0) - { - CONS_Debug(DBG_GAMELOGIC, "Powerup item not defined in 'damage' field for A_MonitorPop\n"); - return; - } - - newmobj = P_SpawnMobjFromMobj(actor, 0, 0, 13*FRACUNIT, item); - P_SetTarget(&newmobj->target, actor->target); // Transfer target - - if (item == MT_1UP_ICON) - { - if (actor->tracer) // Remove the old lives icon. - P_RemoveMobj(actor->tracer); - - if (!newmobj->target - || !newmobj->target->player - || !newmobj->target->skin - || ((skin_t *)newmobj->target->skin)->sprites[SPR2_LIFE].numframes == 0) - {} // No lives icon for this player, use the default. - else - { // Spawn the lives icon. - mobj_t *livesico = P_SpawnMobjFromMobj(newmobj, 0, 0, 0, MT_OVERLAY); - P_SetTarget(&livesico->target, newmobj); - P_SetTarget(&newmobj->tracer, livesico); - - livesico->color = newmobj->target->player->mo->color; - livesico->skin = &skins[newmobj->target->player->skin]; - P_SetMobjState(livesico, newmobj->info->seestate); - - // We're using the overlay, so use the overlay 1up sprite (no text) - newmobj->sprite = SPR_TV1P; - } - } - - // Run a linedef executor immediately upon popping - // You may want to delay your effects by 18 tics to sync with the reward giving - if (actor->spawnpoint && actor->lastlook) - P_LinedefExecute(actor->lastlook, actor->target, NULL); -} - -// Function: A_GoldMonitorPop -// -// Description: Used by repeating monitors when they turn off. They don't really pop, but, you know... -// -// var1 = unused -// var2 = unused -// -void A_GoldMonitorPop(mobj_t *actor) -{ - mobjtype_t item = 0; - mobj_t *newmobj; - - if (LUA_CallAction("A_GoldMonitorPop", actor)) - return; - - // Don't spawn the "pop" explosion, because the monitor isn't broken. - if (actor->info->deathsound) - S_StartSound(actor, actor->info->deathsound); - //P_SpawnMobjFromMobj(actor, 0, 0, actor.height/4, MT_EXPLODE); - - // Remove our flags for a bit. - // Players can now stand on top of us. - P_UnsetThingPosition(actor); - actor->flags &= ~(MF_MONITOR|MF_SHOOTABLE); - P_SetThingPosition(actor); - - // Don't count this box in statistics. Sorry. - if (actor->target && actor->target->player) - --actor->target->player->numboxes; - actor->fuse = 0; // Don't let the monitor code screw us up. - - if (actor->info->damage == MT_UNKNOWN) - { - // MT_UNKNOWN is random. Because it's unknown to us... get it? - item = P_DoRandomBoxChances(); - - if (item == MT_NULL) - { - CONS_Alert(CONS_WARNING, M_GetText("All monitors turned off.\n")); - return; - } - } - else - item = actor->info->damage; - - if (item == 0) - { - CONS_Debug(DBG_GAMELOGIC, "Powerup item not defined in 'damage' field for A_GoldMonitorPop\n"); - return; - } - - // Note: the icon spawns 1 fracunit higher - newmobj = P_SpawnMobjFromMobj(actor, 0, 0, 14*FRACUNIT, item); - P_SetTarget(&newmobj->target, actor->target); // Transfer target - - if (item == MT_1UP_ICON) - { - if (actor->tracer) // Remove the old lives icon. - P_RemoveMobj(actor->tracer); - - if (!newmobj->target - || !newmobj->target->player - || !newmobj->target->skin - || ((skin_t *)newmobj->target->skin)->sprites[SPR2_LIFE].numframes == 0) - {} // No lives icon for this player, use the default. - else - { // Spawn the lives icon. - mobj_t *livesico = P_SpawnMobjFromMobj(newmobj, 0, 0, 0, MT_OVERLAY); - P_SetTarget(&livesico->target, newmobj); - P_SetTarget(&newmobj->tracer, livesico); - - livesico->color = newmobj->target->player->mo->color; - livesico->skin = &skins[newmobj->target->player->skin]; - P_SetMobjState(livesico, newmobj->info->seestate); - - // We're using the overlay, so use the overlay 1up sprite (no text) - newmobj->sprite = SPR_TV1P; - } - } - - // Run a linedef executor immediately upon popping - // You may want to delay your effects by 18 tics to sync with the reward giving - if (actor->spawnpoint && actor->lastlook) - P_LinedefExecute(actor->lastlook, actor->target, NULL); -} - -// Function: A_GoldMonitorRestore -// -// Description: A repeating monitor is coming back to life. Reset monitor flags, etc. -// -// var1 = unused -// var2 = unused -// -void A_GoldMonitorRestore(mobj_t *actor) -{ - if (LUA_CallAction("A_GoldMonitorRestore", actor)) - return; - - actor->flags |= MF_MONITOR|MF_SHOOTABLE; - actor->health = 1; // Just in case. -} - -// Function: A_GoldMonitorSparkle -// -// Description: Spawns the little sparkly effect around big monitors. Looks pretty, doesn't it? -// -// var1 = unused -// var2 = unused -// -void A_GoldMonitorSparkle(mobj_t *actor) -{ - fixed_t i, ngangle, xofs, yofs; - - if (LUA_CallAction("A_GoldMonitorSparkle", actor)) - return; - - ngangle = FixedAngle(((leveltime * 21) % 360) << FRACBITS); - xofs = FINESINE((ngangle>>ANGLETOFINESHIFT) & FINEMASK) * (actor->radius>>FRACBITS); - yofs = FINECOSINE((ngangle>>ANGLETOFINESHIFT) & FINEMASK) * (actor->radius>>FRACBITS); - - for (i = FRACUNIT*2; i <= FRACUNIT*3; i += FRACUNIT/2) - P_SetObjectMomZ(P_SpawnMobjFromMobj(actor, xofs, yofs, 0, MT_BOXSPARKLE), i, false); -} - // Function: A_Explode // // Description: Explodes an object, doing damage to any objects nearby. The target is used as the cause of the explosion. Damage value is used as explosion range. @@ -4100,9 +3812,7 @@ void A_Invincibility(mobj_t *actor) if (P_IsLocalPlayer(player) && !player->powers[pw_super]) { - if (mariomode) - G_GhostAddColor(INT32) (player - players), GHC_INVINCIBLE); - P_PlayJingle(player, (mariomode) ? JT_MINV : JT_INV); + P_PlayJingle(player, JT_INV); strlcpy(S_sfx[sfx_None].caption, "Invincibility", 14); S_StartCaption(sfx_None, -1, player->powers[pw_invulnerability]); } @@ -4134,10 +3844,8 @@ void A_SuperSneakers(mobj_t *actor) if (P_IsLocalPlayer(player) && !player->powers[pw_super]) { - if (S_SpeedMusic(0.0f) && (mapheaderinfo[gamemap-1]->levelflags & LF_SPEEDMUSIC)) + if (S_SpeedMusic(0.0f)) S_SpeedMusic(1.4f); - else - P_PlayJingle(player, JT_SHOES); strlcpy(S_sfx[sfx_None].caption, "Speed shoes", 12); S_StartCaption(sfx_None, -1, player->powers[pw_sneakers]); } @@ -4499,7 +4207,7 @@ void A_AttractChase(mobj_t *actor) sparkle->angle = (actor->target->angle + (offset>>1)) + (offset * actor->target->player->kartstuff[k_sparkleanim]); actor->target->player->kartstuff[k_sparkleanim] = (actor->target->player->kartstuff[k_sparkleanim]+1) % 20; - P_KillMobj(actor, actor->target, actor->target); + P_KillMobj(actor, actor->target, actor->target, 0); return; } else @@ -4732,170 +4440,6 @@ void A_FishJump(mobj_t *actor) P_SetMobjStateNF(actor, actor->info->meleestate); } -// Function:A_ThrownRing -// -// Description: Thinker for thrown rings/sparkle trail -// -// var1 = unused -// var2 = unused -// -void A_ThrownRing(mobj_t *actor) -{ - INT32 c = 0; - INT32 stop; - player_t *player; - fixed_t dist; - - if (LUA_CallAction("A_ThrownRing", actor)) - return; - - if (leveltime % (TICRATE/7) == 0) - { - mobj_t *ring = NULL; - - if (actor->flags2 & MF2_EXPLOSION) - { - if (actor->momx != 0 || actor->momy != 0) - ring = P_SpawnMobj(actor->x, actor->y, actor->z, MT_SMOKE); - // Else spawn nothing because it's totally stationary and constantly smoking would be weird -SH - } - else if (actor->flags2 & MF2_AUTOMATIC) - ring = P_SpawnGhostMobj(actor); - else if (!(actor->flags2 & MF2_RAILRING)) - ring = P_SpawnMobj(actor->x, actor->y, actor->z, MT_SPARK); - - if (ring) - { - /* - P_SetTarget(&ring->target, actor); - ring->color = actor->color; //copy color - */ - ring->destscale = actor->scale; - P_SetScale(ring, actor->scale); - } - } - - // A_GrenadeRing beeping lives once moooooore -SH - if (actor->type == MT_THROWNGRENADE && actor->fuse % TICRATE == 0) - S_StartSound(actor, actor->info->attacksound); - - // decrement bounce ring time - if (actor->flags2 & MF2_BOUNCERING) - { - if (actor->fuse) - actor->fuse--; - else { - P_RemoveMobj(actor); - return; - } - } - - // spilled rings (and thrown bounce) flicker before disappearing - if (leveltime & 1 && actor->fuse > 0 && actor->fuse < 2*TICRATE - && actor->type != MT_THROWNGRENADE) - actor->drawflags |= MFD_DONTDRAW; - else - actor->drawflags &= ~MFD_DONTDRAW; - - if (actor->tracer && actor->tracer->health <= 0) - P_SetTarget(&actor->tracer, NULL); - - // Updated homing ring special capability - // If you have a ring shield, all rings thrown - // at you become homing (except rail)! - if (actor->tracer) - { - // A non-homing ring getting attracted by a - // magnetic player. If he gets too far away, make - // sure to stop the attraction! - if ((!actor->tracer->health) || (actor->tracer->player && (actor->tracer->player->powers[pw_shield] & SH_PROTECTELECTRIC) - && P_AproxDistance(P_AproxDistance(actor->tracer->x-actor->x, - actor->tracer->y-actor->y), actor->tracer->z-actor->z) > FixedMul(RING_DIST/4, actor->tracer->scale))) - { - P_SetTarget(&actor->tracer, NULL); - } - - if (actor->tracer && (actor->tracer->health) - && (actor->tracer->player->powers[pw_shield] & SH_PROTECTELECTRIC))// Already found someone to follow. - { - const INT32 temp = actor->threshold; - actor->threshold = 32000; - P_HomingAttack(actor, actor->tracer); - actor->threshold = temp; - return; - } - } - - // first time init, this allow minimum lastlook changes - if (actor->lastlook < 0) - actor->lastlook = P_RandomByte(); - - actor->lastlook %= MAXPLAYERS; - - stop = (actor->lastlook - 1) & PLAYERSMASK; - - for (; ; actor->lastlook = (actor->lastlook + 1) & PLAYERSMASK) - { - // done looking - if (actor->lastlook == stop) - return; - - if (!playeringame[actor->lastlook]) - continue; - - if (c++ == 2) - return; - - player = &players[actor->lastlook]; - - if (!player->mo) - continue; - - if (player->mo->health <= 0) - continue; // dead - - if ((netgame || multiplayer) && player->spectator) - continue; // spectator - - if (actor->target && actor->target->player) - { - if (player->mo == actor->target) - continue; - - // Don't home in on teammates. - if ((gametyperules & GTR_TEAMS) - && actor->target->player->ctfteam == player->ctfteam) - continue; - - if (actor->target->player->kartstuff[k_position] < player->kartstuff[k_position]) // SRB2kart - Jawz only go after people ahead of you - continue; - - } - - dist = P_AproxDistance(P_AproxDistance(player->mo->x-actor->x, - player->mo->y-actor->y), player->mo->z-actor->z); - - // check distance - if (actor->flags2 & MF2_RAILRING) - { - if (dist > FixedMul(RING_DIST/2, player->mo->scale)) - continue; - } - else if (dist > FixedMul(RING_DIST, player->mo->scale)) - continue; - - // do this after distance check because it's more computationally expensive - if (!P_CheckSight(actor, player->mo)) - continue; // out of sight - - if (dist < FixedMul(2048*FRACUNIT, player->mo->scale)) - P_SetTarget(&actor->tracer, player->mo); - return; - } - - return; -} - //{ SRB2kart - A_GRENADERING static mobj_t *grenade; static fixed_t explodedist; @@ -4927,11 +4471,6 @@ static inline boolean PIT_GrenadeRing(mobj_t *thing) || ((gametyperules & GTR_BUMPERS) && thing->player && thing->player->kartstuff[k_bumper] <= 0 && thing->player->kartstuff[k_comebacktimer]))) return true; - if ((gametype == GT_CTF || gametype == GT_TEAMMATCH) - && !cv_friendlyfire.value && grenade->target->player && thing->player - && grenade->target->player->ctfteam == thing->player->ctfteam) // Don't blow up at your teammates, unless friendlyfire is on - return true; - // see if it went over / under if (grenade->z - explodedist > thing->z + thing->height) return true; // overhead @@ -5010,12 +4549,12 @@ static inline boolean PIT_MineExplode(mobj_t *thing) if (thing->player) // Looks like we're going to have to need a seperate function for this too K_ExplodePlayer(thing->player, grenade->target, grenade); else - P_DamageMobj(thing, grenade, grenade->target, 1); + P_DamageMobj(thing, grenade, grenade->target, 1, 0); return true; } -void A_MineExplode(mobj_t *actor) +void A_SSMineExplode(mobj_t *actor) { INT32 bx, by, xl, xh, yl, yh; INT32 d; @@ -5023,7 +4562,7 @@ void A_MineExplode(mobj_t *actor) mobjtype_t type; explodedist = FixedMul((3*actor->info->painchance)/2, mapobjectscale); - if (LUA_CallAction("A_MineExplode", actor)) + if (LUA_CallAction("A_SSMineExplode", actor)) return; if (actor->flags2 & MF2_DEBRIS) @@ -5669,12 +5208,7 @@ void A_MouseThink(mobj_t *actor) || (actor->eflags & MFE_VERTICALFLIP && actor->z + actor->height == actor->ceilingz)) && !actor->reactiontime) { - if (twodlevel || actor->flags2 & MF2_TWOD) - { - if (P_RandomChance(FRACUNIT/2)) - actor->angle += ANGLE_180; - } - else if (P_RandomChance(FRACUNIT/2)) + if (P_RandomChance(FRACUNIT/2)) actor->angle += ANGLE_90; else actor->angle -= ANGLE_90; @@ -6528,10 +6062,6 @@ void A_MixUp(mobj_t *actor) } //get this done first! - if (players[one].powers[pw_carry] == CR_MINECART && players[one].mo->tracer && !(P_MobjWasRemoved(players[one].mo->tracer))) - P_SetTarget(&players[one].mo->tracer->target, players[two].mo); - if (players[two].powers[pw_carry] == CR_MINECART && players[two].mo->tracer && !(P_MobjWasRemoved(players[two].mo->tracer))) - P_SetTarget(&players[two].mo->tracer->target, players[one].mo); tempthing = players[one].mo->tracer; P_SetTarget(&players[one].mo->tracer, players[two].mo->tracer); P_SetTarget(&players[two].mo->tracer, tempthing); @@ -6542,8 +6072,8 @@ void A_MixUp(mobj_t *actor) players[two].speed = transspeed; //set flags variables now but DON'T set them. - carry1 = (players[one].powers[pw_carry] == CR_PLAYER ? CR_NONE : players[one].powers[pw_carry]); - carry2 = (players[two].powers[pw_carry] == CR_PLAYER ? CR_NONE : players[two].powers[pw_carry]); + carry1 = players[one].powers[pw_carry]; + carry2 = players[two].powers[pw_carry]; x = players[one].mo->x; y = players[one].mo->y; @@ -6617,7 +6147,7 @@ void A_MixUp(mobj_t *actor) players[i].rmomx = players[i].rmomy = 1; players[i].cmomx = players[i].cmomy = 0; - transcarry[counter] = (players[i].powers[pw_carry] == CR_PLAYER ? CR_NONE : players[i].powers[pw_carry]); + transcarry[counter] = players[i].powers[pw_carry]; transspeed[counter] = players[i].speed; transtracer[counter] = players[i].mo->tracer; @@ -6669,8 +6199,6 @@ void A_MixUp(mobj_t *actor) //...carry after. same reasoning. players[i].powers[pw_carry] = transcarry[teleportfrom]; - if (transcarry[teleportfrom] == CR_MINECART && transtracer[teleportfrom] && !(P_MobjWasRemoved(transtracer[teleportfrom]))) - P_SetTarget(&transtracer[teleportfrom]->target, players[i].mo); teleported[i] = true; counter++; @@ -7091,17 +6619,6 @@ void A_Boss7Chase(mobj_t *actor) } } - if (actor->health <= actor->info->damage - && actor->target - && actor->target->player - && (actor->target->player->powers[pw_carry] == CR_GENERIC)) - { - A_FaceTarget(actor); - P_SetMobjState(actor, S_BLACKEGG_SHOOT1); - actor->movecount = TICRATE + P_RandomByte()/2; - return; - } - if (actor->reactiontime) actor->reactiontime--; @@ -8893,7 +8410,7 @@ void A_BossJetFume(mobj_t *actor) P_SetScale(filler, (filler->destscale = actor->scale/3)); if (actor->eflags & MFE_VERTICALFLIP) filler->flags2 |= MF2_OBJECTFLIP; - filler->color = SKINCOLOR_ICY; + filler->color = SKINCOLOR_CYAN; filler->colorized = true; } else if (locvar1 == 3) // Boss 4 jet flame @@ -9978,7 +9495,7 @@ void A_RandomShadowFrame(mobj_t *actor) && P_IsObjectOnGround(actor->target) && actor->z == actor->target->z) { - P_DamageMobj(actor->target, actor, actor, 1); + P_DamageMobj(actor->target, actor, actor, 1, 0); P_InstaThrust(actor->target, actor->angle, 16<target->x, actor->target->y, actor->target->z, MT_THOK); P_SetMobjStateNF(fire, S_QUICKBOOM1); @@ -10023,7 +9540,7 @@ void A_RoamingShadowThinker(mobj_t *actor) { // send them flying and spawn the WIND! P_InstaThrust(actor->target, 0, 0); - P_DamageMobj(actor->target, actor, actor, 1); + P_DamageMobj(actor->target, actor, actor, 1, 0); P_SetObjectMomZ(actor->target, 16<target, sfx_wind1); @@ -10103,16 +9620,16 @@ void A_MementosTPParticles(mobj_t *actor) particle->frame = 0; particle->color = ((i%2) ? (SKINCOLOR_RED) : (SKINCOLOR_BLACK)); particle->destscale = 1; - P_HomingAttack(particle, actor); + //P_HomingAttack(particle, actor); // Really now, Lat... } // Although this is mostly used to spawn particles, we will also save the OTHER teleport inside actor->target. That way teleporting doesn't require a thinker iteration. // Doesn't seem like much given the small amount of mobjs this map has but heh. if (!actor->target) { - for (th = thinkercap.next; th != &thinkercap; th = th->next) + for (th = thlist[THINK_MOBJ].next; th != &thlist[THINK_MOBJ]; th = th->next) { - if (th->function.acp1 != (actionf_p1)P_MobjThinker) + if (th->function.acp1 == (actionf_p1)P_RemoveThinkerDelayed) continue; mo2 = (mobj_t *)th; @@ -10209,9 +9726,9 @@ void A_ReaperThinker(mobj_t *actor) } // We have no target and oughta find one, so let's scan through thinkers for a waypoint of angle 0, or something. - for (th = thinkercap.next; th != &thinkercap; th = th->next) + for (th = thlist[THINK_MOBJ].next; th != &thlist[THINK_MOBJ]; th = th->next) { - if (th->function.acp1 != (actionf_p1)P_MobjThinker) + if (th->function.acp1 == (actionf_p1)P_RemoveThinkerDelayed) continue; mo2 = (mobj_t *)th; @@ -10269,15 +9786,14 @@ void A_ReaperThinker(mobj_t *actor) // Waypoint behavior. if (actor->target->type == MT_REAPERWAYPOINT) { - if (R_PointToDist2(actor->x, actor->y, actor->target->x, actor->target->y) < 22<target, NULL); // remove target so we can default back to first waypoint if things go ham. // If we reach close to a waypoint, then we should go to the NEXT one. - for (th = thinkercap.next; th != &thinkercap; th = th->next) + for (th = thlist[THINK_MOBJ].next; th != &thlist[THINK_MOBJ]; th = th->next) { - if (th->function.acp1 != (actionf_p1)P_MobjThinker) + if (th->function.acp1 == (actionf_p1)P_RemoveThinkerDelayed) continue; mo2 = (mobj_t *)th; @@ -10309,22 +9825,6 @@ void A_ReaperThinker(mobj_t *actor) } } -void A_FlameParticle(mobj_t *actor) -{ - fixed_t rad = actor->radius>>FRACBITS, hei = actor->radius>>FRACBITS; - mobj_t *par; - - if (LUA_CallAction("A_FlameParticle", actor)) - return; - - par = P_SpawnMobj( - actor->x + (P_RandomRange(-rad, rad)<y + (P_RandomRange(-rad, rad)<z + (P_RandomRange(hei/2, hei)<info->painchance); - par->momz = actor->scale<<1; -} - void A_FlameShieldPaper(mobj_t *actor) { INT32 framea = 0; @@ -12601,16 +12101,16 @@ void P_InternalFlickySetColor(mobj_t *actor, UINT8 extrainfo) SKINCOLOR_RED, SKINCOLOR_CYAN, SKINCOLOR_BLUE, - SKINCOLOR_VAPOR, + SKINCOLOR_PASTEL, SKINCOLOR_PURPLE, - SKINCOLOR_BUBBLEGUM, - SKINCOLOR_NEON, + SKINCOLOR_VIOLET, + SKINCOLOR_FUCHSIA, SKINCOLOR_BLACK, SKINCOLOR_BEIGE, SKINCOLOR_LAVENDER, SKINCOLOR_RUBY, - SKINCOLOR_SALMON, - SKINCOLOR_SUNSET, + SKINCOLOR_BLOSSOM, + SKINCOLOR_SUNSLAM, SKINCOLOR_ORANGE, SKINCOLOR_YELLOW, }; @@ -14308,155 +13808,6 @@ void A_Boss5BombExplode(mobj_t *actor) quake.radius = 20*actor->radius; } -static mobj_t *dustdevil; - -static boolean PIT_DustDevilLaunch(mobj_t *thing) -{ - player_t *player = thing->player; - - if (!player) - return true; - - if (player->powers[pw_carry] != CR_DUSTDEVIL && (player->powers[pw_ignorelatch] & (1<<15))) - return true; - - if (abs(thing->x - dustdevil->x) > dustdevil->radius || abs(thing->y - dustdevil->y) > dustdevil->radius) - return true; - - if (thing->z + thing->height >= dustdevil->z && dustdevil->z + dustdevil->height >= thing->z) { - fixed_t pos = thing->z - dustdevil->z; - fixed_t thrust = max(FixedDiv(pos, dustdevil->height) * 20, 8 * FRACUNIT); - angle_t fa = R_PointToAngle2(thing->x, thing->y, dustdevil->x, dustdevil->y) >> ANGLETOFINESHIFT; - fixed_t c = FINECOSINE(fa); - fixed_t s = FINESINE(fa); - fixed_t thresh = dustdevil->scale * 20; - - //Player in the swirl part. - if (dustdevil->height - pos > thresh) - { - fixed_t dist = FixedHypot(thing->x - dustdevil->x, thing->y - dustdevil->y); - fixed_t dragamount = player->speed; - fixed_t x, y; - - if (player->powers[pw_nocontrol] == 0) - { - P_ResetPlayer(player); - A_PlayActiveSound(dustdevil); - } - player->powers[pw_carry] = CR_DUSTDEVIL; - player->powers[pw_nocontrol] = 2; - P_SetTarget(&thing->tracer, dustdevil); - P_SetPlayerMobjState(thing, S_PLAY_PAIN); - - if (dist > dragamount) - { - x = thing->x + FixedMul(c, dragamount); - y = thing->y + FixedMul(s, dragamount); - } - else - { - x = dustdevil->x; - y = dustdevil->y; - } - P_TryMove(thing, x - thing->momx, y - thing->momy, true); - } - else - { //Player on the top of the tornado. - P_ResetPlayer(player); - thing->z = dustdevil->z + dustdevil->height; - thrust = 20 * FRACUNIT; - player->powers[pw_carry] = CR_NONE; - player->powers[pw_nocontrol] = 0; - P_SetTarget(&thing->tracer, NULL); - S_StartSound(thing, sfx_wdjump); - P_SetPlayerMobjState(thing, S_PLAY_FALL); - } - - thing->momz = thrust; - } - - return true; -} - -// Function: A_DustDevilThink -// -// Description: Thinker for the dust devil. -// -// var1 = unused -// var2 = unused -// -void A_DustDevilThink(mobj_t *actor) -{ - fixed_t scale = actor->scale; - mobj_t *layer = actor->tracer; - INT32 bx, by, xl, xh, yl, yh; - fixed_t radius = actor->radius; - - if (LUA_CallAction("A_DustDevilThink", actor)) - return; - - //Chained thinker for the spiralling dust column. - while (layer && !P_MobjWasRemoved(layer)) { - angle_t fa = layer->angle >> ANGLETOFINESHIFT; - P_TeleportMove(layer, layer->x + 5 * FixedMul(scale, FINECOSINE(fa)), layer->y + 5 * FixedMul(scale, FINESINE(fa)), layer->z); - layer->scale = scale; - layer->angle += ANG10 / 2; - layer->momx = actor->momx; - layer->momy = actor->momy; - layer = layer->tracer; - } - - //Spawn random dust around the column on the base. - if (P_IsObjectOnGround(actor)) { - angle_t dustang = ((P_RandomRange(0, 7)*ANGLE_45)>>ANGLETOFINESHIFT) & FINEMASK; - mobj_t *dust = P_SpawnMobj(actor->x + 96 * FixedMul(scale, FINECOSINE(dustang)), actor->y + 96 * FixedMul(scale, FINESINE(dustang)), actor->z, MT_ARIDDUST); - P_SetMobjState(dust, dust->info->spawnstate + P_RandomRange(0, 2)); - dust->destscale = scale * 3; - P_SetScale(dust, dust->destscale); - } - - actor->extravalue1++; - if (actor->extravalue1 == 12) { - size_t i = 0; - actor->extravalue1 = 0; - - //Create a set of items for the rising dust column - for (; i <= 3; i++) { - fixed_t fa = (ANGLE_90*i) >> ANGLETOFINESHIFT; - fixed_t px = actor->x + 70 * FixedMul(scale, FINECOSINE(fa)); - fixed_t py = actor->y + 70 * FixedMul(scale, FINESINE(fa)); - fixed_t pz = actor->z; - - layer = P_SpawnMobj(px, py, pz, MT_DUSTLAYER); - layer->momz = 5 * scale; - layer->angle = ANGLE_90 + ANGLE_90*i; - layer->extravalue1 = TICRATE * 3; - - //Chain them - P_SetTarget(&layer->tracer, actor->tracer); - P_SetTarget(&actor->tracer, layer); - } - } - - //The physics are handled here. - yh = (unsigned)(actor->y + radius - bmaporgy) >> MAPBLOCKSHIFT; - yl = (unsigned)(actor->y - radius - bmaporgy) >> MAPBLOCKSHIFT; - xh = (unsigned)(actor->x + radius - bmaporgx) >> MAPBLOCKSHIFT; - xl = (unsigned)(actor->x - radius - bmaporgx) >> MAPBLOCKSHIFT; - - BMBOUNDFIX(xl, xh, yl, yh); - - dustdevil = actor; - - for (bx = xl; bx <= xh; bx++) - for (by = yl; by <= yh; by++) - P_BlockThingsIterator(bx, by, PIT_DustDevilLaunch); - - //Whirlwind sound effect. - if (leveltime % 70 == 0) - S_StartSound(actor, sfx_s3kcel); -} - // stuff used by A_TNTExplode static mobj_t *barrel; static fixed_t exploderadius; @@ -15338,7 +14689,7 @@ void A_RolloutRock(mobj_t *actor) if (!(actor->flags & MF_PUSHABLE) || (actor->movecount != 1)) // if being ridden or haven't moved, don't disappear actor->fuse = actor->info->painchance; else if (actor->fuse < 2*TICRATE) - actor->flags2 ^= MF2_DONTDRAW; + actor->drawflags ^= MFD_DONTDRAW; } diff --git a/src/p_inter.c b/src/p_inter.c index 05809b174..851908aad 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -268,7 +268,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) special->momx = special->momy = special->momz = 0; P_SetTarget(&special->target, toucher); - P_KillMobj(special, toucher, toucher); + P_KillMobj(special, toucher, toucher, 0); break; case MT_KARMAHITBOX: if (!special->target->player) @@ -463,7 +463,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck) || player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_flamedash] > 0) { - P_KillMobj(special, toucher, toucher); + P_KillMobj(special, toucher, toucher, 0); return; } @@ -772,10 +772,10 @@ void P_CheckTimeLimit(void) P_RespawnBattleBoxes(); // FORCE THESE TO BE RESPAWNED FOR THIS!!!!!!! // Find us an item box to center on. - for (th = thinkercap.next; th != &thinkercap; th = th->next) + for (th = thlist[THINK_MOBJ].next; th != &thlist[THINK_MOBJ]; th = th->next) { mobj_t *thismo; - if (th->function.acp1 != (actionf_p1)P_MobjThinker) + if (th->function.acp1 == (actionf_p1)P_RemoveThinkerDelayed) continue; thismo = (mobj_t *)th; @@ -1457,7 +1457,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget mobj_t *cur = target->hnext; while (cur && !P_MobjWasRemoved(cur)) { - P_KillMobj(cur, inflictor, source); + P_KillMobj(cur, inflictor, source, 0); cur = cur->hnext; } } @@ -1651,7 +1651,7 @@ static void P_KillPlayer(player_t *player, mobj_t *source, INT32 damage) P_ResetPlayer(player); if (!player->spectator) - player->mo->flags2 &= ~MF2_DONTDRAW; + player->mo->drawflags &= ~MFD_DONTDRAW; P_SetPlayerMobjState(player->mo, player->mo->info->deathstate); @@ -1708,7 +1708,7 @@ void P_RemoveShield(player_t *player) } else { // Second layer shields - if (((player->powers[pw_shield] & SH_STACK) == SH_FIREFLOWER) && !(player->powers[pw_super] || (mariomode && player->powers[pw_invulnerability]))) + if (((player->powers[pw_shield] & SH_STACK) == SH_FIREFLOWER) && !player->powers[pw_super]) { player->mo->color = player->skincolor; G_GhostAddColor((INT32) (player - players), GHC_NORMAL); diff --git a/src/p_local.h b/src/p_local.h index 0eaa047b7..a4b65da85 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -57,10 +57,6 @@ #define AIMINGTOSLOPE(aiming) FINESINE((aiming>>ANGLETOFINESHIFT) & FINEMASK) -#define twodlevel (maptol & TOL_2D) - -#define mariomode (maptol & TOL_MARIO) - #define P_GetPlayerViewHeight(player) (41*player->mo->height/48) typedef enum @@ -208,7 +204,6 @@ void P_DoTimeOver(player_t *player); void P_InstaThrust(mobj_t *mo, angle_t angle, fixed_t move); fixed_t P_ReturnThrustX(mobj_t *mo, angle_t angle, fixed_t move); fixed_t P_ReturnThrustY(mobj_t *mo, angle_t angle, fixed_t move); -void P_InstaThrustEvenIn2D(mobj_t *mo, angle_t angle, fixed_t move); mobj_t *P_LookForFocusTarget(player_t *player, mobj_t *exclude, SINT8 direction, UINT8 lockonflags); diff --git a/src/p_map.c b/src/p_map.c index 05c4a6c46..2b2a54d14 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -362,7 +362,7 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object) // Horizontal speed is used as a minimum thrust, not a direct replacement finalSpeed = max(objectSpeed, finalSpeed); - P_InstaThrustEvenIn2D(object, finalAngle, finalSpeed); + P_InstaThrust(object, finalAngle, finalSpeed); } // Re-solidify @@ -425,15 +425,6 @@ static void P_DoFanAndGasJet(mobj_t *spring, mobj_t *object) // limit the speed if too high if (flipval*object->momz > FixedMul(speed, spring->scale)) object->momz = flipval*FixedMul(speed, spring->scale); - - /* // SRB2kart - don't need state change - if (p && !p->powers[pw_tailsfly]) // doesn't reset anim for Tails' flight - { - P_ResetPlayer(p); - if (p->panim != PA_FALL) - P_SetPlayerMobjState(object, S_PLAY_FALL); - } - */ break; case MT_STEAM: // Steam if (zdist > FixedMul(16*FRACUNIT, spring->scale)) @@ -452,15 +443,6 @@ static void P_DoFanAndGasJet(mobj_t *spring, mobj_t *object) } else object->momz = flipval*FixedMul(speed, FixedSqrt(FixedMul(spring->scale, object->scale))); // scale the speed with both objects' scales, just like with springs! - - /* // SRB2kart - don't need state change - if (p) - { - P_ResetPlayer(p); - if (p->panim != PA_FALL) - P_SetPlayerMobjState(object, S_PLAY_FALL); - } - */ break; default: break; @@ -1321,7 +1303,7 @@ static boolean PIT_CheckThing(mobj_t *thing) if (thing->type == MT_FAN || thing->type == MT_STEAM) P_DoFanAndGasJet(thing, tmthing); - else if (thing->flags & MF_SPRING && tmthing->player->powers[pw_carry] != CR_MINECART) + else if (thing->flags & MF_SPRING) { if ( thing->z <= tmthing->z + tmthing->height && tmthing->z <= thing->z + thing->height) @@ -1415,9 +1397,9 @@ static boolean PIT_CheckThing(mobj_t *thing) || tmthing->player->kartstuff[k_growshrinktimer] > 0) { if (thing->type == MT_BLUEROBRA_JOINT) - P_KillMobj(thing->target, tmthing, tmthing); + P_KillMobj(thing->target, tmthing, tmthing, 0); else - P_KillMobj(thing, tmthing, tmthing); + P_KillMobj(thing, tmthing, tmthing, 0); return true; } else @@ -1440,7 +1422,7 @@ static boolean PIT_CheckThing(mobj_t *thing) if (tmthing->player->kartstuff[k_invincibilitytimer] > 0 || tmthing->player->kartstuff[k_growshrinktimer] > 0) { - P_KillMobj(thing, tmthing, tmthing); + P_KillMobj(thing, tmthing, tmthing, 0); return true; // kill } @@ -1471,7 +1453,7 @@ static boolean PIT_CheckThing(mobj_t *thing) if (tmthing->player->kartstuff[k_invincibilitytimer] > 0 || tmthing->player->kartstuff[k_growshrinktimer] > 0) { - P_KillMobj(thing, tmthing, tmthing); + P_KillMobj(thing, tmthing, tmthing, 0); return true; } @@ -2299,47 +2281,38 @@ boolean P_TryCameraMove(fixed_t x, fixed_t y, camera_t *thiscam) { subsector_t *s = R_PointInSubsector(x, y); boolean retval = true; - boolean itsatwodlevel = false; + UINT8 i; floatok = false; - if (twodlevel) - itsatwodlevel = true; - else + for (i = 0; i <= r_splitscreen; i++) { - for (i = 0; i <= r_splitscreen; i++) + if (thiscam == &camera[i]) { - if (thiscam == &camera[i] && players[displayplayers[i]].mo - && (players[displayplayers[i]].mo->flags2 & MF2_TWOD)) - { - itsatwodlevel = true; - break; - } + // i is now splitscreen cam num + break; } } - if (!itsatwodlevel && players[displayplayers[0]].mo) + if (players[displayplayers[i]].mo) { fixed_t tryx = thiscam->x; fixed_t tryy = thiscam->y; - for (i = 0; i <= r_splitscreen; i++) - { #ifndef NOCLIPCAM - if ((thiscam == &camera[i] && (players[displayplayers[i]].pflags & PF_NOCLIP)) || (leveltime < introtime)) // Noclipping player camera noclips too!! + if ((players[displayplayers[i]].pflags & PF_NOCLIP) || (leveltime < introtime)) // Noclipping player camera noclips too!! #else - if (thiscam == &camera[i] && !(players[displayplayers[i]].pflags & PF_GAMETYPEOVER)) // Time Over should not clip through walls + if (!(players[displayplayers[i]].pflags & PF_GAMETYPEOVER)) // Time Over should not clip through walls #endif - { - floatok = true; - thiscam->floorz = thiscam->z; - thiscam->ceilingz = thiscam->z + thiscam->height; - thiscam->x = x; - thiscam->y = y; - thiscam->subsector = s; - return true; - } + { + floatok = true; + thiscam->floorz = thiscam->z; + thiscam->ceilingz = thiscam->z + thiscam->height; + thiscam->x = x; + thiscam->y = y; + thiscam->subsector = s; + return true; } do { @@ -2907,7 +2880,6 @@ static boolean P_ThingHeightClip(mobj_t *thing) ffloor_t *oldceilingrover = thing->ceilingrover; boolean onfloor = P_IsObjectOnGround(thing);//(thing->z <= thing->floorz); ffloor_t *rover = NULL; - boolean bouncing; boolean hitfloor = false; if (thing->flags & MF_NOCLIPHEIGHT) @@ -2931,9 +2903,7 @@ static boolean P_ThingHeightClip(mobj_t *thing) if (tmfloorz > oldfloorz+thing->height) return true; - bouncing = thing->player && thing->state-states == S_PLAY_BOUNCE_LANDING && P_IsObjectOnGround(thing); - - if ((onfloor || bouncing) && !(thing->flags & MF_NOGRAVITY) && floormoved) + if (onfloor && !(thing->flags & MF_NOGRAVITY) && floormoved) { rover = (thing->eflags & MFE_VERTICALFLIP) ? oldceilingrover : oldfloorrover; @@ -2941,7 +2911,7 @@ static boolean P_ThingHeightClip(mobj_t *thing) // If ~FF_EXISTS, don't set mobj Z. if (!rover || ((rover->flags & FF_EXISTS) && (rover->flags & FF_SOLID))) { - hitfloor = bouncing; + hitfloor = false; if (thing->eflags & MFE_VERTICALFLIP) thing->pmomz = thing->ceilingz - (thing->z + thing->height); else @@ -3646,16 +3616,8 @@ stairstep: P_HitSlideLine(bestslideline); // clip the moves - if ((twodlevel || (mo->flags2 & MF2_TWOD)) && mo->player) - { - mo->momx = tmxmove; - tmymove = 0; - } - else - { - mo->momx = tmxmove; - mo->momy = tmymove; - } + mo->momx = tmxmove; + mo->momy = tmymove; do { if (tmxmove > mo->radius) { @@ -3943,15 +3905,9 @@ static boolean PIT_RadiusAttack(mobj_t *thing) if (thing == bombspot) // ignore the bomb itself (Deton fix) return true; - if (bombsource && thing->type == bombsource->type && !(bombdamagetype & DMG_CANHURTSELF)) // ignore the type of guys who dropped the bomb (Jetty-Syn Bomber or Skim can bomb eachother, but not themselves.) + if (bombsource && thing->type == bombsource->type && (bombdamagetype & DMG_CANTHURTSELF)) // ignore the type of guys who dropped the bomb (Jetty-Syn Bomber or Skim can bomb eachother, but not themselves.) return true; - if (thing->type == MT_MINUS && !(thing->flags & (MF_SPECIAL|MF_SHOOTABLE)) && !bombsightcheck) - thing->flags = (thing->flags & ~MF_NOCLIPTHING)|MF_SPECIAL|MF_SHOOTABLE; - - if (thing->type == MT_EGGGUARD && thing->tracer) //nuke Egg Guard's shield! - P_KillMobj(thing->tracer, bombspot, bombsource, bombdamagetype); - if ((thing->flags & (MF_MONITOR|MF_SHOOTABLE)) != MF_SHOOTABLE) return true; diff --git a/src/p_mobj.c b/src/p_mobj.c index 1ea915ef8..15de3e2ef 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1522,7 +1522,7 @@ void P_XYMovement(mobj_t *mo) { // This Item Damage S_StartSound(mo, mo->info->deathsound); - P_KillMobj(mo, NULL, NULL); + P_KillMobj(mo, NULL, NULL, 0); P_SetObjectMomZ(mo, 8*FRACUNIT, false); P_InstaThrust(mo, R_PointToAngle2(mo->x, mo->y, mo->x + xmove, mo->y + ymove)+ANGLE_90, 16*FRACUNIT); @@ -1560,7 +1560,7 @@ void P_XYMovement(mobj_t *mo) { // This Item Damage S_StartSound(mo, mo->info->deathsound); - P_KillMobj(mo, NULL, NULL); + P_KillMobj(mo, NULL, NULL, 0); P_SetObjectMomZ(mo, 8*FRACUNIT, false); P_InstaThrust(mo, R_PointToAngle2(mo->x, mo->y, mo->x + xmove, mo->y + ymove)+ANGLE_90, 16*FRACUNIT); @@ -2720,10 +2720,6 @@ void P_PlayerZMovement(mobj_t *mo) if (CheckForMarioBlocks) P_CheckMarioBlocks(mo); - // hit the ceiling - if (mariomode) - S_StartSound(mo, sfx_mario1); - if (!mo->player->climbing) mo->momz = 0; } @@ -3324,8 +3320,6 @@ void P_CalcChasePostImg(player_t *player, camera_t *thiscam) // Process the mobj-ish required functions of the camera boolean P_CameraThinker(player_t *player, camera_t *thiscam, boolean resetcalled) { - boolean itsatwodlevel = false; - P_CalcChasePostImg(player, thiscam); if (thiscam->momx || thiscam->momy) @@ -3377,9 +3371,8 @@ boolean P_CameraThinker(player_t *player, camera_t *thiscam, boolean resetcalled thiscam->z += thiscam->momz + player->mo->pmomz; } - if (itsatwodlevel - || (thiscam->ceilingz - thiscam->z < thiscam->height - && thiscam->ceilingz >= thiscam->z)) + if (thiscam->ceilingz - thiscam->z < thiscam->height + && thiscam->ceilingz >= thiscam->z) { thiscam->ceilingz = thiscam->z + thiscam->height; thiscam->floorz = thiscam->z; @@ -4677,9 +4670,9 @@ static void P_Boss5Thinker(mobj_t *mobj) { if (mobj->flags2 & MF2_FRET && (leveltime & 1) && mobj->state != &states[S_FANG_PAIN1] && mobj->state != &states[S_FANG_PAIN2]) - mobj->flags2 |= MF2_DONTDRAW; + mobj->drawflags |= MFD_DONTDRAW; else - mobj->flags2 &= ~MF2_DONTDRAW; + mobj->drawflags &= ~MFD_DONTDRAW; } if (mobj->state == &states[S_FANG_BOUNCE3] @@ -6265,7 +6258,7 @@ void P_MaceRotate(mobj_t *center, INT32 baserot, INT32 baseprevrot) #if 0 // toaster's testing flashie! if (!(mobj->movecount & 1) && !(leveltime & TICRATE)) // I had a brainfart and the flashing isn't exactly what I expected it to be, but it's actually much more useful. - mobj->flags2 ^= MF2_DONTDRAW; + mobj->drawflags ^= MFD_DONTDRAW; #endif P_SetThingPosition(mobj); @@ -6665,9 +6658,9 @@ static void P_MaceSceneryThink(mobj_t *mobj) { ref->eflags = (((ref->flags & MF_NOTHINK) ? 0 : 1) | ((ref->flags & MF_NOCLIPTHING) ? 0 : 2) - | ((ref->flags2 & MF2_DONTDRAW) ? 0 : 4)); // oh my god this is nasty. + | ((ref->drawflags & MFD_DONTDRAW) ? 0 : 4)); // oh my god this is nasty. ref->flags |= MF_NOTHINK|MF_NOCLIPTHING; - ref->flags2 |= MF2_DONTDRAW; + ref->drawflags |= MFD_DONTDRAW; ref->momx = ref->momy = ref->momz = 0; } @@ -6687,7 +6680,7 @@ static void P_MaceSceneryThink(mobj_t *mobj) if (ref->eflags & 2) ref->flags &= ~MF_NOCLIPTHING; if (ref->eflags & 4) - ref->flags2 &= ~MF2_DONTDRAW; + ref->drawflags &= ~MFD_DONTDRAW; ref->eflags = 0; // le sign } @@ -6851,7 +6844,7 @@ static void P_MobjSceneryThink(mobj_t *mobj) switch (mobj->type) { case MT_BOSSJUNK: - mobj->flags2 ^= MF2_DONTDRAW; + mobj->drawflags ^= MFD_DONTDRAW; break; case MT_MACEPOINT: case MT_CHAINMACEPOINT: @@ -7071,7 +7064,7 @@ static void P_MobjSceneryThink(mobj_t *mobj) return; } - mobj->flags2 &= ~MF2_DONTDRAW; + mobj->drawflags &= ~MFD_DONTDRAW; mobj->x = mobj->target->x; mobj->y = mobj->target->y; @@ -7262,30 +7255,7 @@ static void P_MobjSceneryThink(mobj_t *mobj) offz = mobj->target->height / 5; } - if (mobj->target->eflags & MFE_DRAWONLYFORP1) // groooooaann... - mobj->eflags |= MFE_DRAWONLYFORP1; - else - mobj->eflags &= ~MFE_DRAWONLYFORP1; - - if (mobj->target->eflags & MFE_DRAWONLYFORP2) - mobj->eflags |= MFE_DRAWONLYFORP2; - else - mobj->eflags &= ~MFE_DRAWONLYFORP2; - - if (mobj->target->eflags & MFE_DRAWONLYFORP3) - mobj->eflags |= MFE_DRAWONLYFORP3; - else - mobj->eflags &= ~MFE_DRAWONLYFORP3; - - if (mobj->target->eflags & MFE_DRAWONLYFORP4) - mobj->eflags |= MFE_DRAWONLYFORP4; - else - mobj->eflags &= ~MFE_DRAWONLYFORP4; - - if (mobj->target->flags2 & MF2_DONTDRAW) - mobj->flags2 |= MF2_DONTDRAW; - else - mobj->flags2 &= ~MF2_DONTDRAW; + mobj->drawflags = (mobj->target->drawflags & MFD_DONTDRAW); if (mobj->target->eflags & MFE_VERTICALFLIP) offz += 4*FRACUNIT; @@ -7343,12 +7313,12 @@ static void P_MobjSceneryThink(mobj_t *mobj) mobj->color = mobj->target->color; K_MatchGenericExtraFlags(mobj, mobj->target); - if (((gametyperules & GTR_CIRCUIT) || mobj->target->player->kartstuff[k_bumper] <= 0) + if ((G_RaceGametype() || mobj->target->player->kartstuff[k_bumper] <= 0) #if 1 // Set to 0 to test without needing to host || (P_IsDisplayPlayer(mobj->target->player)) #endif ) - mobj->flags2 |= MF2_DONTDRAW; + mobj->drawflags |= MFD_DONTDRAW; P_UnsetThingPosition(mobj); mobj->x = mobj->target->x; @@ -7367,12 +7337,12 @@ static void P_MobjSceneryThink(mobj_t *mobj) if (!(mobj->target->eflags & MFE_VERTICALFLIP)) { - mobj->z = mobj->target->z + mobj->target->height + (16*mobj->target->scale); + mobj->z = mobj->target->z + P_GetPlayerHeight(mobj->target->player) + (16*mobj->target->scale); mobj->eflags &= ~MFE_VERTICALFLIP; } else { - mobj->z = mobj->target->z - mobj->target->height - (16*mobj->target->scale); + mobj->z = mobj->target->z - P_GetPlayerHeight(mobj->target->player) - (16*mobj->target->scale); mobj->eflags |= MFE_VERTICALFLIP; } P_SetThingPosition(mobj); @@ -7398,7 +7368,7 @@ static void P_MobjSceneryThink(mobj_t *mobj) mobj->tracer->colorized = false; } - if (!(mobj->flags2 & MF2_DONTDRAW)) + if (!(mobj->drawflags & MFD_DONTDRAW)) { const INT32 numberdisplaymin = ((mobj->target->player->kartstuff[k_itemtype] == KITEM_ORBINAUT) ? 5 : 2); @@ -7408,7 +7378,7 @@ static void P_MobjSceneryThink(mobj_t *mobj) P_SetMobjState(mobj, S_PLAYERARROW_BOX); mobj->tracer->sprite = SPR_ITEM; mobj->tracer->frame = FF_FULLBRIGHT|(((mobj->target->player->kartstuff[k_itemroulette] % (13*3)) / 3) + 1); - mobj->tracer->flags2 &= ~MF2_DONTDRAW; + mobj->tracer->drawflags &= ~MFD_DONTDRAW; } else if (mobj->target->player->kartstuff[k_stolentimer] > 0) { @@ -7416,16 +7386,16 @@ static void P_MobjSceneryThink(mobj_t *mobj) mobj->tracer->sprite = SPR_ITEM; mobj->tracer->frame = FF_FULLBRIGHT|KITEM_HYUDORO; if (leveltime & 2) - mobj->tracer->flags2 &= ~MF2_DONTDRAW; + mobj->tracer->drawflags &= ~MFD_DONTDRAW; else - mobj->tracer->flags2 |= MF2_DONTDRAW; + mobj->tracer->drawflags |= MFD_DONTDRAW; } else if ((mobj->target->player->kartstuff[k_stealingtimer] > 0) && (leveltime & 2)) { P_SetMobjState(mobj, S_PLAYERARROW_BOX); mobj->tracer->sprite = SPR_ITEM; mobj->tracer->frame = FF_FULLBRIGHT|KITEM_HYUDORO; - mobj->tracer->flags2 &= ~MF2_DONTDRAW; + mobj->tracer->drawflags &= ~MFD_DONTDRAW; } else if (mobj->target->player->kartstuff[k_eggmanexplode] > 1) { @@ -7433,9 +7403,9 @@ static void P_MobjSceneryThink(mobj_t *mobj) mobj->tracer->sprite = SPR_ITEM; mobj->tracer->frame = FF_FULLBRIGHT|KITEM_EGGMAN; if (leveltime & 1) - mobj->tracer->flags2 &= ~MF2_DONTDRAW; + mobj->tracer->drawflags &= ~MFD_DONTDRAW; else - mobj->tracer->flags2 |= MF2_DONTDRAW; + mobj->tracer->drawflags |= MFD_DONTDRAW; } else if (mobj->target->player->kartstuff[k_rocketsneakertimer] > 1) { @@ -7444,9 +7414,9 @@ static void P_MobjSceneryThink(mobj_t *mobj) mobj->tracer->sprite = SPR_ITEM; mobj->tracer->frame = FF_FULLBRIGHT|KITEM_ROCKETSNEAKER; if (leveltime & 1) - mobj->tracer->flags2 &= ~MF2_DONTDRAW; + mobj->tracer->drawflags &= ~MFD_DONTDRAW; else - mobj->tracer->flags2 |= MF2_DONTDRAW; + mobj->tracer->drawflags |= MFD_DONTDRAW; } else if (mobj->target->player->kartstuff[k_itemtype] && mobj->target->player->kartstuff[k_itemamount] > 0) { @@ -7475,12 +7445,12 @@ static void P_MobjSceneryThink(mobj_t *mobj) if (mobj->target->player->kartstuff[k_itemheld]) { if (leveltime & 1) - mobj->tracer->flags2 &= ~MF2_DONTDRAW; + mobj->tracer->drawflags &= ~MFD_DONTDRAW; else - mobj->tracer->flags2 |= MF2_DONTDRAW; + mobj->tracer->drawflags |= MFD_DONTDRAW; } else - mobj->tracer->flags2 &= ~MF2_DONTDRAW; + mobj->tracer->drawflags &= ~MFD_DONTDRAW; } else { @@ -7521,7 +7491,7 @@ static void P_MobjSceneryThink(mobj_t *mobj) mobj->movecount = 0; } else - mobj->tracer->flags2 |= MF2_DONTDRAW; + mobj->tracer->drawflags |= MFD_DONTDRAW; } else if (mobj->health > 0) { @@ -7544,10 +7514,10 @@ static void P_MobjSceneryThink(mobj_t *mobj) return; } - if (mobj->tracer->flags2 & MF2_DONTDRAW) - mobj->flags2 |= MF2_DONTDRAW; + if (mobj->tracer->drawflags & MFD_DONTDRAW) + mobj->drawflags |= MFD_DONTDRAW; else - mobj->flags2 &= ~MF2_DONTDRAW; + mobj->drawflags &= ~MFD_DONTDRAW; P_UnsetThingPosition(mobj); mobj->x = mobj->target->x; @@ -7564,12 +7534,12 @@ static void P_MobjSceneryThink(mobj_t *mobj) if (!(mobj->target->eflags & MFE_VERTICALFLIP)) { - mobj->z = mobj->target->z + mobj->target->height + (16*mobj->target->scale) + (64*scale); + mobj->z = mobj->target->z + (P_GetPlayerHeight(mobj->target->player)) + (16*mobj->target->scale) + (64*scale); mobj->eflags &= ~MFE_VERTICALFLIP; } else { - mobj->z = mobj->target->z - mobj->target->height - (16*mobj->target->scale) - (64*scale); + mobj->z = mobj->target->z - (P_GetPlayerHeight(mobj->target->player)) - (16*mobj->target->scale) - (64*scale); mobj->eflags |= MFE_VERTICALFLIP; } P_SetThingPosition(mobj); @@ -7598,28 +7568,8 @@ static void P_MobjSceneryThink(mobj_t *mobj) mobj->eflags |= MFE_VERTICALFLIP; if (mobj->tics > 0) - mobj->flags2 ^= MF2_DONTDRAW; + mobj->drawflags ^= MFD_DONTDRAW; break; - case MT_FOLLOWER: - // small thinker for follower: - // We cleanse ourselves from existence if our target player doesn't exist for whatever reason. (generally players leaving) - if (!mobj->target || P_MobjWasRemoved(mobj->target) || !mobj->target->player || mobj->target->player->spectator || mobj->target->player->followerskin < 0) - { - // Remove possible hnext list (bubble) - mobj_t *bub = mobj->hnext; - mobj_t *tmp; - - while (bub && !P_MobjWasRemoved(bub)) - { - tmp = bub->hnext; - P_RemoveMobj(bub); - bub = tmp; - } - - P_RemoveMobj(mobj); - } - - return; case MT_VWREF: case MT_VWREB: { @@ -7828,7 +7778,7 @@ static boolean P_MobjDeadThink(mobj_t *mobj) if (!mobj->fuse) { S_StartSound(mobj, sfx_s3k77); - mobj->flags2 |= MF2_DONTDRAW; + mobj->drawflags |= MFD_DONTDRAW; mobj->fuse = TICRATE; } return false; @@ -7851,7 +7801,7 @@ static boolean P_MobjDeadThink(mobj_t *mobj) mobj->reactiontime--; break; case MT_EGGSHIELD: - mobj->flags2 ^= MF2_DONTDRAW; + mobj->drawflags ^= MFD_DONTDRAW; break; case MT_EGGTRAP: // Egg Capsule animal release if (mobj->fuse > 0)// && mobj->fuse < TICRATE-(TICRATE/7)) @@ -7899,7 +7849,7 @@ static boolean P_MobjDeadThink(mobj_t *mobj) /// \todo Actually go ahead and remove mobj completely, and fix any bugs and crashes doing this creates. Chasecam should stop moving, and F12 should never return to it. mobj->momz = 0; if (mobj->player) - mobj->flags2 |= MF2_DONTDRAW; + mobj->drawflags |= MFD_DONTDRAW; else // safe to remove, nobody's going to complain! { P_RemoveMobj(mobj); @@ -7952,7 +7902,7 @@ static boolean P_MobjDeadThink(mobj_t *mobj) case MT_ORBINAUT_SHIELD: case MT_BANANA_SHIELD: case MT_EGGMANITEM_SHIELD: - mobj->flags2 ^= MF2_DONTDRAW; + mobj->drawflags ^= MFD_DONTDRAW; break; case MT_JAWZ: case MT_JAWZ_DUD: @@ -7960,7 +7910,7 @@ static boolean P_MobjDeadThink(mobj_t *mobj) P_SetMobjState(mobj, mobj->info->xdeathstate); // fallthru case MT_JAWZ_SHIELD: - mobj->flags2 ^= MF2_DONTDRAW; + mobj->drawflags ^= MFD_DONTDRAW; break; case MT_SSMINE: case MT_SPBEXPLOSION: @@ -7980,7 +7930,7 @@ static boolean P_MobjDeadThink(mobj_t *mobj) return; case MT_CDUFO: if (mobj->fuse > TICRATE) - mobj->flags2 ^= MF2_DONTDRAW; // only by good fortune does this end with it having MF2_DONTDRAW... don't touch! + mobj->drawflags ^= MFD_DONTDRAW; // only by good fortune does this end with it having MFD_DONTDRAW... don't touch! break; case MT_SMK_PIPE: if (mobj->flags2 & MF2_AMBUSH) @@ -7989,7 +7939,7 @@ static boolean P_MobjDeadThink(mobj_t *mobj) P_SetMobjStateNF(mobj, mobj->info->spawnstate); /* FALLTHRU */ case MT_SMK_MOLE: - mobj->flags2 ^= MF2_DONTDRAW; + mobj->drawflags ^= MFD_DONTDRAW; if (P_IsObjectOnGround(mobj)) { P_RemoveMobj(mobj); @@ -8010,7 +7960,7 @@ static boolean P_MobjDeadThink(mobj_t *mobj) mobj->frame &= (~FF_FULLBRIGHT); } - mobj->flags2 ^= MF2_DONTDRAW; + mobj->drawflags ^= MFD_DONTDRAW; if (P_IsObjectOnGround(mobj)) { P_RemoveMobj(mobj); @@ -8596,15 +8546,62 @@ static boolean P_MobjRegularThink(mobj_t *mobj) return; } - mobj->angle = mobj->target->angle; - P_TeleportMove(mobj, mobj->target->x + P_ReturnThrustX(mobj, mobj->angle+ANGLE_180, mobj->target->radius), - mobj->target->y + P_ReturnThrustY(mobj, mobj->angle+ANGLE_180, mobj->target->radius), mobj->target->z); + //mobj->angle = mobj->target->angle; + { + angle_t angle = R_PointToAngle2(0, 0, mobj->target->momx, mobj->target->momy); + fixed_t nudge; + + mobj->angle = angle; + + if (( mobj->fuse & 1 )) + { + nudge = 4*mobj->target->radius; + } + else + { + nudge = 2*mobj->target->radius; + /* rotate the papersprite frames to see the flat angle */ + mobj->angle += ANGLE_90; + } + + P_TeleportMove(mobj, + mobj->target->x + P_ReturnThrustX(mobj, angle + ANGLE_180, nudge), + mobj->target->y + P_ReturnThrustY(mobj, angle + ANGLE_180, nudge), + mobj->target->z); + } P_SetScale(mobj, mobj->target->scale); - mobj->flags2 ^= MF2_DONTDRAW; #ifdef HWRENDER mobj->modeltilt = mobj->target->modeltilt; #endif + if (mobj->fuse <= 16) + { + mobj->color = SKINCOLOR_KETCHUP; + /* don't draw papersprite frames after blue boost */ + mobj->drawflags ^= MFD_DONTDRAW; + } + else if (mobj->fuse <= 32) + mobj->color = SKINCOLOR_SAPPHIRE; + else if (mobj->fuse > 32) + mobj->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); + + switch (mobj->extravalue1) + { + case 3:/* rainbow boost */ + /* every 20 tics, bang! */ + if (( 120 - mobj->fuse ) % 10 == 0) + { + K_SpawnDriftBoostClip(mobj->target->player); + S_StartSound(mobj->target, sfx_s3k77); + } + break; + + case 2:/* blue boost */ + if (mobj->fuse == 16)/* to red*/ + K_SpawnDriftBoostClip(mobj->target->player); + break; + } + { player_t *p = NULL; if (mobj->target->target && mobj->target->target->player) @@ -8647,10 +8644,9 @@ static boolean P_MobjRegularThink(mobj_t *mobj) if (p) { - if (p->kartstuff[k_sneakertimer] > mobj->movecount - || p->kartstuff[k_levelbooster] > mobj->movecount) + if (p->kartstuff[k_sneakertimer] > mobj->movecount) P_SetMobjState(mobj, S_BOOSTFLAME); - mobj->movecount = max(p->kartstuff[k_sneakertimer], p->kartstuff[k_levelbooster]); + mobj->movecount = p->kartstuff[k_sneakertimer]; } } @@ -8720,7 +8716,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj) K_MatchGenericExtraFlags(mobj, mobj->target); if (leveltime & 1) - mobj->flags2 |= MF2_DONTDRAW; + mobj->drawflags |= MFD_DONTDRAW; } break; case MT_PLAYERRETICULE: @@ -8732,7 +8728,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj) P_TeleportMove(mobj, mobj->target->x, mobj->target->y, mobj->target->z); break; case MT_INSTASHIELDB: - mobj->flags2 ^= MF2_DONTDRAW; + mobj->drawflags ^= MFD_DONTDRAW; K_MatchGenericExtraFlags(mobj, mobj->target); /* FALLTHRU */ case MT_INSTASHIELDA: @@ -8845,14 +8841,14 @@ static boolean P_MobjRegularThink(mobj_t *mobj) mobj->angle = ang; if (leveltime & 1) - mobj->flags2 |= MF2_DONTDRAW; + mobj->drawflags |= MFD_DONTDRAW; if (trans >= NUMTRANSMAPS) - mobj->flags2 |= MF2_DONTDRAW; + mobj->drawflags |= MFD_DONTDRAW; else if (trans == 0) - mobj->frame = (mobj->frame & ~FF_TRANSMASK); + mobj->drawflags = (mobj->drawflags & ~MFD_TRANSMASK); else - mobj->frame = (mobj->frame & ~FF_TRANSMASK)|(trans << FF_TRANSSHIFT); + mobj->drawflags = (mobj->drawflags & ~MFD_TRANSMASK)|(trans << MFD_TRANSSHIFT); } break; case MT_THUNDERSHIELD: @@ -8919,7 +8915,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj) P_SetMobjState(mobj, S_BUBBLESHIELDBLOWUP); mobj->angle += ANGLE_22h; - mobj->flags2 &= ~MF2_SHADOW; + mobj->drawflags &= ~MFD_SHADOW; scale += (blow * (3*scale)) / bubbletime; mobj->frame = (states[S_BUBBLESHIELDBLOWUP].frame + mobj->extravalue1); @@ -8989,9 +8985,9 @@ static boolean P_MobjRegularThink(mobj_t *mobj) else { if (mobj->target->player->kartstuff[k_bubblecool] && ((curstate-S_BUBBLESHIELD1) & 1)) - mobj->flags2 |= MF2_SHADOW; + mobj->drawflags |= MFD_SHADOW; else - mobj->flags2 &= ~MF2_SHADOW; + mobj->drawflags &= ~MFD_SHADOW; } } @@ -9153,18 +9149,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj) if (!mobj->extravalue2) { - if (mobj->eflags & MFE_VERTICALFLIP) - mobj->z -= mobj->height; - else - mobj->z += mobj->height; - - S_StartSound(mobj, mobj->info->deathsound); - P_SetObjectMomZ(mobj, 8*FRACUNIT, false); - P_InstaThrust(mobj, R_PointToAngle2(mobj->target->x, mobj->target->y, mobj->x, mobj->y)+ANGLE_90, 16*FRACUNIT); - mobj->momx += mobj->target->momx; - mobj->momy += mobj->target->momy; - mobj->momz += mobj->target->momz; - mobj->extravalue2 = 1; + K_DropRocketSneaker(mobj->target->player); } else if (P_IsObjectOnGround(mobj)) { @@ -9178,7 +9163,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj) statenum_t state = (mobj->state-states); if (!mobj->target || !mobj->target->health || !mobj->target->player || mobj->target->player->spectator - || ((gametyperules & GTR_CIRCUIT) || mobj->target->player->kartstuff[k_bumper])) + || (G_RaceGametype() || mobj->target->player->kartstuff[k_bumper])) { P_RemoveMobj(mobj); return; @@ -9204,9 +9189,9 @@ static boolean P_MobjRegularThink(mobj_t *mobj) if (state < S_PLAYERBOMB1 || state > S_PLAYERBOMB20) P_SetMobjState(mobj, S_PLAYERBOMB1); if (mobj->target->player->kartstuff[k_comebacktimer] < TICRATE && (leveltime & 1)) - mobj->flags2 &= ~MF2_DONTDRAW; + mobj->drawflags &= ~MFD_DONTDRAW; else - mobj->flags2 |= MF2_DONTDRAW; + mobj->drawflags |= MFD_DONTDRAW; } else { @@ -9221,9 +9206,9 @@ static boolean P_MobjRegularThink(mobj_t *mobj) P_SetMobjState(mobj, S_PLAYERFAKE1); if (mobj->target->player->powers[pw_flashing] && (leveltime & 1)) - mobj->flags2 |= MF2_DONTDRAW; + mobj->drawflags |= MFD_DONTDRAW; else - mobj->flags2 &= ~MF2_DONTDRAW; + mobj->drawflags &= ~MFD_DONTDRAW; } // Update mobj antigravity status: @@ -9253,10 +9238,10 @@ static boolean P_MobjRegularThink(mobj_t *mobj) cur->colorized = true; K_FlipFromObject(cur, mobj->target); - if (mobj->flags2 & MF2_DONTDRAW) - cur->flags2 |= MF2_DONTDRAW; + if (mobj->drawflags & MFD_DONTDRAW) + cur->drawflags |= MFD_DONTDRAW; else - cur->flags2 &= ~MF2_DONTDRAW; + cur->drawflags &= ~MFD_DONTDRAW; cur = cur->hnext; } @@ -9363,8 +9348,8 @@ static boolean P_MobjRegularThink(mobj_t *mobj) { if (newcolor != SKINCOLOR_NONE) { - cur->color = skincolors[newcolor].invcolor; - cur->frame = states[S_SIGN_FACE].frame + skincolors[newcolor].invshade; + cur->color = KartColor_Opposite[newcolor*2]; + cur->frame = states[S_SIGN_FACE].frame + KartColor_Opposite[newcolor*2+1]; } } else if (cur->state == &states[S_PLAY_SIGN]) @@ -9848,7 +9833,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj) if (mobj->flags2 & MF2_AMBUSH) { mobj->colorized = true; - mobj->color = K_RainbowColor(leveltime); + mobj->color = (1 + (leveltime % (MAXSKINCOLORS-1))); mobj->frame |= FF_FULLBRIGHT; } else @@ -10295,9 +10280,9 @@ static boolean P_MobjRegularThink(mobj_t *mobj) } } case MT_RANDOMITEM: - if ((gametyperules & GTR_BUMPERS) && mobj->threshold == 70) + if (G_BattleGametype() && mobj->threshold == 70) { - mobj->color = K_RainbowColor(leveltime); + mobj->color = (UINT8)(1 + (leveltime % (MAXSKINCOLORS-1))); mobj->colorized = true; if (battleovertime.enabled) @@ -10336,455 +10321,6 @@ static boolean P_MobjRegularThink(mobj_t *mobj) mobj->colorized = false; } break; - case MT_ORBINAUT_SHIELD: // Kart orbit/trail items - case MT_JAWZ_SHIELD: - case MT_BANANA_SHIELD: - case MT_SSMINE_SHIELD: - case MT_EGGMANITEM_SHIELD: - case MT_SINK_SHIELD: - if ((mobj->health > 0 - && (!mobj->target || !mobj->target->player || mobj->target->player->health <= 0 || mobj->target->player->spectator)) - || (mobj->health <= 0 && P_IsObjectOnGround(mobj)) - || P_CheckDeathPitCollide(mobj)) // When in death state - { - P_RemoveMobj(mobj); - return; - } - break; - case MT_SMOLDERING: - if (leveltime % 2 == 0) - { - fixed_t x = P_RandomRange(-35, 35)*mobj->scale; - fixed_t y = P_RandomRange(-35, 35)*mobj->scale; - fixed_t z = P_RandomRange(0, 70)*mobj->scale; - mobj_t *smoke = P_SpawnMobj(mobj->x + x, mobj->y + y, mobj->z + z, MT_SMOKE); - P_SetMobjState(smoke, S_OPAQUESMOKE1); - K_MatchGenericExtraFlags(smoke, mobj); - smoke->scale = mobj->scale * 2; - smoke->destscale = mobj->scale * 6; - smoke->momz = P_RandomRange(4, 9)*FRACUNIT*P_MobjFlip(smoke); - } - break; - case MT_BOOMPARTICLE: - { - fixed_t x = P_RandomRange(-16, 16)*mobj->scale; - fixed_t y = P_RandomRange(-16, 16)*mobj->scale; - fixed_t z = P_RandomRange(0, 32)*mobj->scale*P_MobjFlip(mobj); - if (leveltime % 2 == 0) - { - mobj_t *smoke = P_SpawnMobj(mobj->x + x, mobj->y + y, mobj->z + z, MT_BOSSEXPLODE); - K_MatchGenericExtraFlags(smoke, mobj); - P_SetMobjState(smoke, S_QUICKBOOM1); - smoke->scale = mobj->scale/2; - smoke->destscale = mobj->scale; - smoke->color = mobj->color; - } - else - { - mobj_t *smoke = P_SpawnMobj(mobj->x + x, mobj->y + y, mobj->z + z, MT_SMOKE); - P_SetMobjState(smoke, S_OPAQUESMOKE1); - K_MatchGenericExtraFlags(smoke, mobj); - smoke->scale = mobj->scale; - smoke->destscale = mobj->scale*2; - } - if (mobj->tics <= TICRATE) - { - mobj->destscale = FixedDiv(mobj->scale, 100*FRACUNIT); - } - } - break; - case MT_BATTLEBUMPER: - if (mobj->health > 0 && mobj->target && mobj->target->player - && mobj->target->player->health > 0 && !mobj->target->player->spectator) - { - fixed_t rad = 32*mobj->target->scale; - fixed_t offz; - angle_t ang, diff; - - if (!((mobj->target->player-players) & 1)) - ang = (FixedAngle(mobj->info->speed) * -1); - else - ang = FixedAngle(mobj->info->speed); - - if (mobj->target->player->kartstuff[k_bumper] <= 1) - diff = 0; - else - diff = FixedAngle(360*FRACUNIT/mobj->target->player->kartstuff[k_bumper]); - - ang = (ang*leveltime) + (diff * (mobj->threshold-1)); - - // If the player is on the ceiling, then flip your items as well. - if (mobj->target->eflags & MFE_VERTICALFLIP) - { - mobj->eflags |= MFE_VERTICALFLIP; - offz = mobj->target->height / 2; - } - else - { - mobj->eflags &= ~MFE_VERTICALFLIP; - offz = mobj->target->height / 5; - } - - if (mobj->target->eflags & MFE_DRAWONLYFORP1) // groooooaann... - mobj->eflags |= MFE_DRAWONLYFORP1; - else - mobj->eflags &= ~MFE_DRAWONLYFORP1; - - if (mobj->target->eflags & MFE_DRAWONLYFORP2) - mobj->eflags |= MFE_DRAWONLYFORP2; - else - mobj->eflags &= ~MFE_DRAWONLYFORP2; - - if (mobj->target->eflags & MFE_DRAWONLYFORP3) - mobj->eflags |= MFE_DRAWONLYFORP3; - else - mobj->eflags &= ~MFE_DRAWONLYFORP3; - - if (mobj->target->eflags & MFE_DRAWONLYFORP4) - mobj->eflags |= MFE_DRAWONLYFORP4; - else - mobj->eflags &= ~MFE_DRAWONLYFORP4; - - if (mobj->target->flags2 & MF2_DONTDRAW) - mobj->flags2 |= MF2_DONTDRAW; - else - mobj->flags2 &= ~MF2_DONTDRAW; - - if (mobj->target->eflags & MFE_VERTICALFLIP) - offz += 4*FRACUNIT; - else - offz -= 4*FRACUNIT; - - if (mobj->tracer && mobj->tracer->player && mobj->tracer->player->mo - && mobj->tracer->player->health > 0 && !mobj->tracer->player->spectator) // STOLEN - mobj->color = mobj->tracer->player->skincolor; // don't do star flashing for stolen bumpers - else - mobj->color = mobj->target->color; // but do so if it belongs to you :B - - if (mobj->target->player->kartstuff[k_bumper] < 2) - P_SetMobjState(mobj, S_BATTLEBUMPER3); - else if (mobj->target->player->kartstuff[k_bumper] < 3) - P_SetMobjState(mobj, S_BATTLEBUMPER2); - else - P_SetMobjState(mobj, S_BATTLEBUMPER1); - - // Shrink your items if the player shrunk too. - mobj->scale = mobj->target->scale; - - P_UnsetThingPosition(mobj); - { - const angle_t fa = ang>>ANGLETOFINESHIFT; - mobj->x = mobj->target->x + FixedMul(FINECOSINE(fa), rad); - mobj->y = mobj->target->y + FixedMul(FINESINE(fa), rad); - mobj->z = mobj->target->z + offz; - P_SetThingPosition(mobj); - } - - // Was this so hard? - if (mobj->target->player->kartstuff[k_bumper] <= mobj->threshold) - { - P_RemoveMobj(mobj); - return; - } - } - else if ((mobj->health > 0 - && (!mobj->target || !mobj->target->player || !mobj->target->player->mo || mobj->target->player->health <= 0 || mobj->target->player->spectator)) - || (mobj->health <= 0 && P_IsObjectOnGround(mobj)) - || P_CheckDeathPitCollide(mobj)) // When in death state - { - P_RemoveMobj(mobj); - return; - } - break; - case MT_PLAYERARROW: - if (mobj->target && mobj->target->health - && mobj->target->player && !mobj->target->player->spectator - && mobj->target->player->health && mobj->target->player->playerstate != PST_DEAD - /*&& players[displayplayers[0]].mo && !players[displayplayers[0]].spectator*/) - { - fixed_t scale = 3*mobj->target->scale; - mobj->color = mobj->target->color; - K_MatchGenericExtraFlags(mobj, mobj->target); - - if (((gametyperules & GTR_CIRCUIT) || mobj->target->player->kartstuff[k_bumper] <= 0) -#if 1 // Set to 0 to test without needing to host - || (P_IsDisplayPlayer(mobj->target->player)) -#endif - ) - mobj->flags2 |= MF2_DONTDRAW; - - P_UnsetThingPosition(mobj); - mobj->x = mobj->target->x; - mobj->y = mobj->target->y; - - mobj->angle = R_PointToAngle(mobj->x, mobj->y) + ANGLE_90; // literally only happened because i wanted to ^L^R the SPR_ITEM's - - if (!r_splitscreen && players[displayplayers[0]].mo) - { - scale = mobj->target->scale + FixedMul(FixedDiv(abs(P_AproxDistance(players[displayplayers[0]].mo->x-mobj->target->x, - players[displayplayers[0]].mo->y-mobj->target->y)), RING_DIST), mobj->target->scale); - if (scale > 16*mobj->target->scale) - scale = 16*mobj->target->scale; - } - mobj->destscale = scale; - - if (!(mobj->target->eflags & MFE_VERTICALFLIP)) - { - mobj->z = mobj->target->z + mobj->target->height + (16*mobj->target->scale); - mobj->eflags &= ~MFE_VERTICALFLIP; - } - else - { - mobj->z = mobj->target->z - mobj->target->height - (16*mobj->target->scale); - mobj->eflags |= MFE_VERTICALFLIP; - } - P_SetThingPosition(mobj); - - if (!mobj->tracer) - { - mobj_t *overlay = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_OVERLAY); - P_SetTarget(&mobj->tracer, overlay); - P_SetTarget(&mobj->tracer->target, mobj); - P_SetMobjState(mobj->tracer, S_PLAYERARROW_ITEM); - P_SetScale(mobj->tracer, (mobj->tracer->destscale = mobj->scale)); - } - - // Do this in an easy way - if (mobj->target->player->kartstuff[k_itemroulette]) - { - mobj->tracer->color = mobj->target->player->skincolor; - mobj->tracer->colorized = true; - } - else - { - mobj->tracer->color = SKINCOLOR_NONE; - mobj->tracer->colorized = false; - } - - if (!(mobj->flags2 & MF2_DONTDRAW)) - { - const INT32 numberdisplaymin = ((mobj->target->player->kartstuff[k_itemtype] == KITEM_ORBINAUT) ? 5 : 2); - - // Set it to use the correct states for its condition - if (mobj->target->player->kartstuff[k_itemroulette]) - { - P_SetMobjState(mobj, S_PLAYERARROW_BOX); - mobj->tracer->sprite = SPR_ITEM; - mobj->tracer->frame = FF_FULLBRIGHT|(((mobj->target->player->kartstuff[k_itemroulette] % (13*3)) / 3) + 1); - mobj->tracer->flags2 &= ~MF2_DONTDRAW; - } - else if (mobj->target->player->kartstuff[k_stolentimer] > 0) - { - P_SetMobjState(mobj, S_PLAYERARROW_BOX); - mobj->tracer->sprite = SPR_ITEM; - mobj->tracer->frame = FF_FULLBRIGHT|KITEM_HYUDORO; - if (leveltime & 2) - mobj->tracer->flags2 &= ~MF2_DONTDRAW; - else - mobj->tracer->flags2 |= MF2_DONTDRAW; - } - else if ((mobj->target->player->kartstuff[k_stealingtimer] > 0) && (leveltime & 2)) - { - P_SetMobjState(mobj, S_PLAYERARROW_BOX); - mobj->tracer->sprite = SPR_ITEM; - mobj->tracer->frame = FF_FULLBRIGHT|KITEM_HYUDORO; - mobj->tracer->flags2 &= ~MF2_DONTDRAW; - } - else if (mobj->target->player->kartstuff[k_eggmanexplode] > 1) - { - P_SetMobjState(mobj, S_PLAYERARROW_BOX); - mobj->tracer->sprite = SPR_ITEM; - mobj->tracer->frame = FF_FULLBRIGHT|KITEM_EGGMAN; - if (leveltime & 1) - mobj->tracer->flags2 &= ~MF2_DONTDRAW; - else - mobj->tracer->flags2 |= MF2_DONTDRAW; - } - else if (mobj->target->player->kartstuff[k_rocketsneakertimer] > 1) - { - //itembar = mobj->target->player->kartstuff[k_rocketsneakertimer]; -- not today satan - P_SetMobjState(mobj, S_PLAYERARROW_BOX); - mobj->tracer->sprite = SPR_ITEM; - mobj->tracer->frame = FF_FULLBRIGHT|KITEM_ROCKETSNEAKER; - if (leveltime & 1) - mobj->tracer->flags2 &= ~MF2_DONTDRAW; - else - mobj->tracer->flags2 |= MF2_DONTDRAW; - } - else if (mobj->target->player->kartstuff[k_itemtype] && mobj->target->player->kartstuff[k_itemamount] > 0) - { - P_SetMobjState(mobj, S_PLAYERARROW_BOX); - - switch (mobj->target->player->kartstuff[k_itemtype]) - { - case KITEM_ORBINAUT: - mobj->tracer->sprite = SPR_ITMO; - mobj->tracer->frame = FF_FULLBRIGHT|(min(mobj->target->player->kartstuff[k_itemamount]-1, 3)); - break; - case KITEM_INVINCIBILITY: - mobj->tracer->sprite = SPR_ITMI; - mobj->tracer->frame = FF_FULLBRIGHT|((leveltime % (7*3)) / 3); - break; - case KITEM_SAD: - mobj->tracer->sprite = SPR_ITEM; - mobj->tracer->frame = FF_FULLBRIGHT; - break; - default: - mobj->tracer->sprite = SPR_ITEM; - mobj->tracer->frame = FF_FULLBRIGHT|(mobj->target->player->kartstuff[k_itemtype]); - break; - } - - if (mobj->target->player->kartstuff[k_itemheld]) - { - if (leveltime & 1) - mobj->tracer->flags2 &= ~MF2_DONTDRAW; - else - mobj->tracer->flags2 |= MF2_DONTDRAW; - } - else - mobj->tracer->flags2 &= ~MF2_DONTDRAW; - } - else - { - P_SetMobjState(mobj, S_PLAYERARROW); - P_SetMobjState(mobj->tracer, S_PLAYERARROW_ITEM); - } - - mobj->tracer->destscale = scale; - - if (mobj->target->player->kartstuff[k_itemamount] >= numberdisplaymin - && mobj->target->player->kartstuff[k_itemamount] <= 10) // Meh, too difficult to support greater than this; convert this to a decent HUD object and then maybe :V - { - mobj_t *number = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_OVERLAY); - mobj_t *numx = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_OVERLAY); - - P_SetTarget(&number->target, mobj); - P_SetMobjState(number, S_PLAYERARROW_NUMBER); - P_SetScale(number, mobj->scale); - number->destscale = scale; - number->frame = FF_FULLBRIGHT|(mobj->target->player->kartstuff[k_itemamount]); - - P_SetTarget(&numx->target, mobj); - P_SetMobjState(numx, S_PLAYERARROW_X); - P_SetScale(numx, mobj->scale); - numx->destscale = scale; - } - - if (K_IsPlayerWanted(mobj->target->player) && mobj->movecount != 1) - { - mobj_t *wanted = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_PLAYERWANTED); - P_SetTarget(&wanted->target, mobj->target); - P_SetTarget(&wanted->tracer, mobj); - P_SetScale(wanted, mobj->scale); - wanted->destscale = scale; - mobj->movecount = 1; - } - else if (!K_IsPlayerWanted(mobj->target->player)) - mobj->movecount = 0; - } - else - mobj->tracer->flags2 |= MF2_DONTDRAW; - } - else if (mobj->health > 0) - { - P_KillMobj(mobj, NULL, NULL); - return; - } - break; - case MT_PLAYERWANTED: - if (mobj->target && mobj->target->health && mobj->tracer - && mobj->target->player && !mobj->target->player->spectator - && mobj->target->player->health && mobj->target->player->playerstate != PST_DEAD - && players[g_localplayers[0]].mo && !players[g_localplayers[0]].spectator) - { - fixed_t scale = 3*mobj->target->scale; - - if (!K_IsPlayerWanted(mobj->target->player)) - { - mobj->tracer->movecount = 0; - P_RemoveMobj(mobj); - return; - } - - if (mobj->tracer->flags2 & MF2_DONTDRAW) - mobj->flags2 |= MF2_DONTDRAW; - else - mobj->flags2 &= ~MF2_DONTDRAW; - - P_UnsetThingPosition(mobj); - mobj->x = mobj->target->x; - mobj->y = mobj->target->y; - - if (!r_splitscreen && players[displayplayers[0]].mo) - { - scale = mobj->target->scale + FixedMul(FixedDiv(abs(P_AproxDistance(players[displayplayers[0]].mo->x-mobj->target->x, - players[displayplayers[0]].mo->y-mobj->target->y)), RING_DIST), mobj->target->scale); - if (scale > 16*mobj->target->scale) - scale = 16*mobj->target->scale; - } - mobj->destscale = scale; - - if (!(mobj->target->eflags & MFE_VERTICALFLIP)) - { - mobj->z = mobj->target->z + mobj->target->height + (16*mobj->target->scale) + (64*scale); - mobj->eflags &= ~MFE_VERTICALFLIP; - } - else - { - mobj->z = mobj->target->z - mobj->target->height - (16*mobj->target->scale) - (64*scale); - mobj->eflags |= MFE_VERTICALFLIP; - } - P_SetThingPosition(mobj); - } - else if (mobj->health > 0) - { - P_KillMobj(mobj, NULL, NULL); - return; - } - break; - case MT_PETSMOKER: - if (!(leveltime % 10)) - { - mobj_t *smok = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_PETSMOKE); - if (mobj->spawnpoint && mobj->spawnpoint->options & MTF_OBJECTSPECIAL) - P_SetMobjStateNF(smok, smok->info->painstate); // same function, diff sprite - } - break; - case MT_BATTLECAPSULE_PIECE: - if (mobj->extravalue2) - mobj->frame |= FF_VERTICALFLIP; - else - mobj->frame &= ~FF_VERTICALFLIP; - - if (mobj->flags2 & MF2_OBJECTFLIP) - mobj->eflags |= MFE_VERTICALFLIP; - - if (mobj->tics > 0) - mobj->flags2 ^= MF2_DONTDRAW; - break; - case MT_FIREDITEM: - if (mobj->target && !P_MobjWasRemoved(mobj->target)) - { - fixed_t x, y, z; - if (mobj->movecount) - { - x = mobj->target->x + P_ReturnThrustX(mobj->target, mobj->target->angle + mobj->movedir, mobj->target->radius + mobj->radius); - y = mobj->target->y + P_ReturnThrustY(mobj->target, mobj->target->angle + mobj->movedir, mobj->target->radius + mobj->radius); - z = mobj->target->z + mobj->target->height/3; - } - else - { - x = mobj->target->x; - y = mobj->target->y; - z = mobj->target->z + (80*mapobjectscale); - } - if (mobj->target->eflags & MFE_VERTICALFLIP) - z += mobj->target->height - FixedMul(mobj->target->scale, mobj->height); - - P_TeleportMove(mobj, x, y, z); - } - break; default: // check mobj against possible water content, before movement code P_MobjCheckWater(mobj); @@ -10936,10 +10472,10 @@ static void P_FlagFuseThink(mobj_t *mobj) static boolean P_FuseThink(mobj_t *mobj) { if (mobj->type == MT_SNAPPER_HEAD || mobj->type == MT_SNAPPER_LEG || mobj->type == MT_MINECARTSEG) - mobj->flags2 ^= MF2_DONTDRAW; + mobj->drawflags ^= MFD_DONTDRAW; if (mobj->fuse <= TICRATE && ((mobj->type == MT_RANDOMITEM && mobj->threshold == 69) || mobj->type == MT_EGGMANITEM || mobj->type == MT_FALLINGROCK)) - mobj->flags2 ^= MF2_DONTDRAW; + mobj->drawflags ^= MFD_DONTDRAW; mobj->fuse--; @@ -11008,7 +10544,7 @@ static boolean P_FuseThink(mobj_t *mobj) P_SpawnMobj(newmobj->x, newmobj->y, newmobj->z, MT_EXPLODE); // poof into existance // Transfer flags2 (strongbox, objectflip) - newmobj->flags2 = mobj->flags2 & ~MF2_DONTDRAW; + newmobj->flags2 = mobj->flags2; if (mobj->threshold == 70) newmobj->threshold = 70; } @@ -11166,7 +10702,7 @@ void P_MobjThinker(mobj_t *mobj) || mobj->type == MT_BALLHOG) { S_StartSound(mobj, mobj->info->deathsound); - P_KillMobj(mobj, NULL, NULL); + P_KillMobj(mobj, NULL, NULL, 0); } else { @@ -11177,7 +10713,7 @@ void P_MobjThinker(mobj_t *mobj) mobj->z += mobj->height; S_StartSound(mobj, mobj->info->deathsound); - P_KillMobj(mobj, NULL, NULL); + P_KillMobj(mobj, NULL, NULL, 0); P_SetObjectMomZ(mobj, 8*FRACUNIT, false); P_InstaThrust(mobj, R_PointToAngle2(0, 0, mobj->momx, mobj->momy) + ANGLE_90, 16*FRACUNIT); @@ -11365,16 +10901,6 @@ void P_PushableThinker(mobj_t *mobj) if (mobj->flags & MF_PUSHABLE && !(mobj->momx || mobj->momy)) P_TryMove(mobj, mobj->x, mobj->y, true); - if (mobj->type == MT_MINECART && mobj->health) - { - // If player is ded, remove this minecart - if (!mobj->target || P_MobjWasRemoved(mobj->target) || !mobj->target->health || !mobj->target->player || mobj->target->player->powers[pw_carry] != CR_MINECART) - { - P_KillMobj(mobj, NULL, NULL, 0); - return; - } - } - if (mobj->fuse == 1) // it would explode in the MobjThinker code { mobj_t *spawnmo; @@ -11989,7 +11515,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) case MT_RUSTYLAMP_ORANGE: P_SpawnMobj(mobj->x, mobj->y, mobj->z + (69*mobj->scale), MT_MARBLELIGHT); break; - case MT_PINETREE: + case MT_DAYTONAPINETREE: { angle_t diff = FixedAngle((360/mobj->info->mass)*FRACUNIT); UINT8 i; @@ -11998,7 +11524,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type) { angle_t ang = i * diff; mobj_t *side = P_SpawnMobj(mobj->x + FINECOSINE((ang>>ANGLETOFINESHIFT) & FINEMASK), - mobj->y + FINESINE((ang>>ANGLETOFINESHIFT) & FINEMASK), mobj->z, MT_PINETREE_SIDE); + mobj->y + FINESINE((ang>>ANGLETOFINESHIFT) & FINEMASK), mobj->z, MT_DAYTONAPINETREE_SIDE); side->angle = ang; side->target = mobj; side->threshold = i; @@ -12573,12 +12099,12 @@ void P_RespawnBattleBoxes(void) if (!(gametyperules & GTR_BUMPERS)) return; - for (th = thinkercap.next; th != &thinkercap; th = th->next) + for (th = thlist[THINK_MOBJ].next; th != &thlist[THINK_MOBJ]; th = th->next) { mobj_t *box; mobj_t *newmobj; - if (th->function.acp1 != (actionf_p1)P_MobjThinker) // not a mobj + if (th->function.acp1 == (actionf_p1)P_RemoveThinkerDelayed) continue; box = (mobj_t *)th; @@ -14295,7 +13821,7 @@ static mobj_t *P_SpawnMobjFromMapThing(mapthing_t *mthing, fixed_t x, fixed_t y, // Final set of not being able to draw nightsitems. if (mobj->flags & MF_NIGHTSITEM) - mobj->flags2 |= MF2_DONTDRAW; + mobj->drawflags |= MFD_DONTDRAW; return mobj; } diff --git a/src/p_spec.c b/src/p_spec.c index d61254b00..b2e79cf82 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -4011,7 +4011,7 @@ static void P_SetupSignObject(mobj_t *sign, mobj_t *pmo) cur->hnext = P_SpawnMobj(sign->x, sign->y, sign->z, MT_SIGN_PIECE); P_SetTarget(&cur->hnext->target, sign); cur->hnext->skin = pmo->skin; - P_SetMobjState(cur->hnext, S_PLAY_SIGN); + P_SetMobjState(cur->hnext, S_KART_SIGN); cur->hnext->extravalue1 = 7; cur->hnext->extravalue2 = 0; @@ -4909,15 +4909,7 @@ DoneSection2: player->powers[pw_carry] = CR_ZOOMTUBE; player->speed = speed; - player->pflags |= PF_SPINNING; - player->pflags &= ~(PF_JUMPED|PF_NOJUMPDAMAGE|PF_GLIDING|PF_BOUNCING|PF_SLIDING|PF_CANCARRY); - player->climbing = 0; - - if (player->mo->state-states != S_PLAY_ROLL) - { - P_SetPlayerMobjState(player->mo, S_PLAY_ROLL); - S_StartSound(player->mo, sfx_spin); - } + player->pflags &= ~(PF_SLIDING); } break; diff --git a/src/p_telept.c b/src/p_telept.c index 5296fc4ee..c353a1e0c 100644 --- a/src/p_telept.c +++ b/src/p_telept.c @@ -140,20 +140,11 @@ boolean P_Teleport(mobj_t *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle // don't run in place after a teleport if (!dontstopmove) { - INT32 p; - // Search for any players you might be carrying, so you can get them off before they end up being taken with you! - for (p = 0; p < MAXPLAYERS; p++) - if (playeringame[p] && players[p].mo && players[p].powers[pw_carry] == CR_PLAYER && players[p].mo->tracer == thing) - { - players[p].powers[pw_carry] = CR_NONE; - P_SetTarget(&players[p].mo->tracer, NULL); - break; - } thing->player->cmomx = thing->player->cmomy = 0; thing->player->rmomx = thing->player->rmomy = 0; thing->player->speed = 0; P_ResetPlayer(thing->player); - P_SetPlayerMobjState(thing, S_KART_STILL1); // SRB2kart - was S_PLAY_STND + P_SetPlayerMobjState(thing, S_KART_STILL); // SRB2kart - was S_PLAY_STND thing->reactiontime = TICRATE/2; // don't move for about half a second thing->player->drawangle = angle; diff --git a/src/p_user.c b/src/p_user.c index 3591acc1c..f3311628e 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -107,21 +107,11 @@ void P_Thrust(mobj_t *mo, angle_t angle, fixed_t move) { angle >>= ANGLETOFINESHIFT; - mo->momx += FixedMul(move, FINECOSINE(angle)); - - if (!(twodlevel || (mo->flags2 & MF2_TWOD))) - mo->momy += FixedMul(move, FINESINE(angle)); -} - -#if 0 -static inline void P_ThrustEvenIn2D(mobj_t *mo, angle_t angle, fixed_t move) -{ - angle >>= ANGLETOFINESHIFT; - mo->momx += FixedMul(move, FINECOSINE(angle)); mo->momy += FixedMul(move, FINESINE(angle)); } +#if 0 static inline void P_VectorInstaThrust(fixed_t xa, fixed_t xb, fixed_t xc, fixed_t ya, fixed_t yb, fixed_t yc, fixed_t za, fixed_t zb, fixed_t zc, fixed_t momentum, mobj_t *mo) { @@ -165,17 +155,7 @@ void P_InstaThrust(mobj_t *mo, angle_t angle, fixed_t move) angle >>= ANGLETOFINESHIFT; mo->momx = FixedMul(move, FINECOSINE(angle)); - - if (!(twodlevel || (mo->flags2 & MF2_TWOD))) - mo->momy = FixedMul(move,FINESINE(angle)); -} - -void P_InstaThrustEvenIn2D(mobj_t *mo, angle_t angle, fixed_t move) -{ - angle >>= ANGLETOFINESHIFT; - - mo->momx = FixedMul(move, FINECOSINE(angle)); - mo->momy = FixedMul(move, FINESINE(angle)); + mo->momy = FixedMul(move,FINESINE(angle)); } // Returns a location (hard to explain - go see how it is used) @@ -349,7 +329,7 @@ void P_GiveEmerald(boolean spawnObj) if (i == pnum) continue; - emmo->flags2 |= MF2_DONTDRAW; + emmo->flags2 |= MFD_DONTDRAW; } } } @@ -463,7 +443,7 @@ boolean P_PlayerInPain(player_t *player) if (!(player->pflags & PF_SLIDING) && player->mo->state == &states[player->mo->info->painstate] && player->powers[pw_flashing]) return true; - if (player->mo->state == &states[S_PLAY_STUN]) + if (player->mo->state == &states[S_KART_SQUISH]) return true; return false; @@ -559,8 +539,6 @@ void P_PlayLivesJingle(player_t *player) if (use1upSound || cv_1upsound.value) S_StartSound(NULL, sfx_oneup); - else if (mariomode) - S_StartSound(NULL, sfx_marioa); else { P_PlayJingle(player, JT_1UP); @@ -2434,28 +2412,18 @@ void P_MovePlayer(player_t *player) K_DriftDustHandling(player->mo); // Crush test... - if ((player->mo->ceilingz - player->mo->floorz < player->mo->height) - && !(player->mo->flags & MF_NOCLIP)) + if ((player->mo->ceilingz - player->mo->floorz < player->mo->height) && !(player->mo->flags & MF_NOCLIP)) { - /* // SRB2kart - no, we're not making the playerspin - if ((player->charability2 == CA2_SPINDASH) && !(player->pflags & PF_SPINNING)) + if ((netgame || multiplayer) && player->spectator) + P_DamageMobj(player->mo, NULL, NULL, 1, DMG_SPECTATOR); // Respawn crushed spectators + else { - player->pflags |= PF_SPINNING; - P_SetPlayerMobjState(player->mo, S_PLAY_ROLL); + K_SquishPlayer(player, NULL, NULL); // SRB2kart - we don't kill when squished, we squish when squished. + // P_DamageMobj(player->mo, NULL, NULL, 1, DMG_CRUSHED); } - else */if (player->mo->ceilingz - player->mo->floorz < player->mo->height) - { - if ((netgame || multiplayer) && player->spectator) - P_DamageMobj(player->mo, NULL, NULL, 1, DMG_SPECTATOR); // Respawn crushed spectators - else - { - K_SquishPlayer(player, NULL, NULL); // SRB2kart - we don't kill when squished, we squish when squished. - // P_DamageMobj(player->mo, NULL, NULL, 1, DMG_CRUSHED); - } - if (player->playerstate == PST_DEAD) - return; - } + if (player->playerstate == PST_DEAD) + return; } #ifdef FLOORSPLATS @@ -3728,7 +3696,7 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall if (player->playerstate != PST_DEAD && !((player->pflags & PF_NIGHTSMODE) && player->exiting)) angle += (focusaiming < ANGLE_180 ? focusaiming/2 : InvAngle(InvAngle(focusaiming)/2)); // overcomplicated version of '((signed)focusaiming)/2;' - if (twodlevel || (mo->flags2 & MF2_TWOD) || (!camstill && !timeover)) // Keep the view still... + if (!camstill && !timeover) // Keep the view still... { G_ClipAimingPitch((INT32 *)&angle); @@ -4750,9 +4718,7 @@ void P_PlayerThink(player_t *player) player->powers[pw_ignorelatch] = 0; //pw_super acts as a timer now - if (player->powers[pw_super] - && (player->mo->state < &states[S_PLAY_SUPER_TRANS1] - || player->mo->state > &states[S_PLAY_SUPER_TRANS6])) + if (player->powers[pw_super]) player->powers[pw_super]++; // Flash player after being hit. @@ -4884,7 +4850,7 @@ void P_PlayerAfterThink(player_t *player) // spectator invisibility and nogravity. if ((netgame || multiplayer) && player->spectator) { - player->mo->flags2 |= MF2_DONTDRAW; + player->mo->drawflags |= MFD_DONTDRAW; player->mo->flags |= MF_NOGRAVITY; } diff --git a/src/s_sound.c b/src/s_sound.c index 2833a9272..8c0f0ad00 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -914,67 +914,6 @@ void S_StartSound(const void *origin, sfxenum_t sfx_id) if (S_SoundDisabled()) return; - if (mariomode) // Sounds change in Mario mode! - { - switch (sfx_id) - { -// case sfx_altow1: -// case sfx_altow2: -// case sfx_altow3: -// case sfx_altow4: -// sfx_id = sfx_mario8; -// break; - case sfx_thok: - case sfx_wepfir: - sfx_id = sfx_mario7; - break; - case sfx_pop: - sfx_id = sfx_mario5; - break; - case sfx_jump: - sfx_id = sfx_mario6; - break; - case sfx_shield: - case sfx_wirlsg: - case sfx_forcsg: - case sfx_elemsg: - case sfx_armasg: - case sfx_attrsg: - case sfx_s3k3e: - case sfx_s3k3f: - case sfx_s3k41: - sfx_id = sfx_mario3; - break; - case sfx_itemup: - sfx_id = sfx_mario4; - break; -// case sfx_tink: -// sfx_id = sfx_mario1; -// break; -// case sfx_cgot: -// sfx_id = sfx_mario9; -// break; -// case sfx_lose: -// sfx_id = sfx_mario2; -// break; - default: - break; - } - } - if (maptol & TOL_XMAS) // Some sounds change for xmas - { - switch (sfx_id) - { - case sfx_ideya: - case sfx_nbmper: - case sfx_ncitem: - case sfx_ngdone: - ++sfx_id; - default: - break; - } - } - // the volume is handled 8 bits #ifdef HW3SOUND if (hws_mode != HWS_DEFAULT_MODE)