Make it past p_mobj

This commit is contained in:
Sally Coolatta 2020-08-14 20:48:06 -04:00
parent bc868d8c60
commit 5a6263c36b
22 changed files with 567 additions and 1870 deletions

View file

@ -3125,10 +3125,6 @@ static actionpointer_t actionpointers[] =
{{A_Explode}, "A_EXPLODE"}, {{A_Explode}, "A_EXPLODE"},
{{A_Pain}, "A_PAIN"}, {{A_Pain}, "A_PAIN"},
{{A_Fall}, "A_FALL"}, {{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_Look}, "A_LOOK"},
{{A_Chase}, "A_CHASE"}, {{A_Chase}, "A_CHASE"},
{{A_FaceStabChase}, "A_FACESTABCHASE"}, {{A_FaceStabChase}, "A_FACESTABCHASE"},
@ -3158,7 +3154,6 @@ static actionpointer_t actionpointers[] =
{{A_AttractChase}, "A_ATTRACTCHASE"}, {{A_AttractChase}, "A_ATTRACTCHASE"},
{{A_DropMine}, "A_DROPMINE"}, {{A_DropMine}, "A_DROPMINE"},
{{A_FishJump}, "A_FISHJUMP"}, {{A_FishJump}, "A_FISHJUMP"},
{{A_ThrownRing}, "A_THROWNRING"},
{{A_SetSolidSteam}, "A_SETSOLIDSTEAM"}, {{A_SetSolidSteam}, "A_SETSOLIDSTEAM"},
{{A_UnsetSolidSteam}, "A_UNSETSOLIDSTEAM"}, {{A_UnsetSolidSteam}, "A_UNSETSOLIDSTEAM"},
{{A_OverlayThink}, "A_OVERLAYTHINK"}, {{A_OverlayThink}, "A_OVERLAYTHINK"},
@ -3223,7 +3218,6 @@ static actionpointer_t actionpointers[] =
{{A_VultureBlast}, "A_VULTUREBLAST"}, {{A_VultureBlast}, "A_VULTUREBLAST"},
{{A_VultureFly}, "A_VULTUREFLY"}, {{A_VultureFly}, "A_VULTUREFLY"},
{{A_SkimChase}, "A_SKIMCHASE"}, {{A_SkimChase}, "A_SKIMCHASE"},
{{A_1upThinker}, "A_1UPTHINKER"},
{{A_SkullAttack}, "A_SKULLATTACK"}, {{A_SkullAttack}, "A_SKULLATTACK"},
{{A_LobShot}, "A_LOBSHOT"}, {{A_LobShot}, "A_LOBSHOT"},
{{A_FireShot}, "A_FIRESHOT"}, {{A_FireShot}, "A_FIRESHOT"},
@ -3357,7 +3351,6 @@ static actionpointer_t actionpointers[] =
{{A_Boss5MakeJunk}, "A_BOSS5MAKEJUNK"}, {{A_Boss5MakeJunk}, "A_BOSS5MAKEJUNK"},
{{A_LookForBetter}, "A_LOOKFORBETTER"}, {{A_LookForBetter}, "A_LOOKFORBETTER"},
{{A_Boss5BombExplode}, "A_BOSS5BOMBEXPLODE"}, {{A_Boss5BombExplode}, "A_BOSS5BOMBEXPLODE"},
{{A_DustDevilThink}, "A_DUSTDEVILTHINK"},
{{A_TNTExplode}, "A_TNTEXPLODE"}, {{A_TNTExplode}, "A_TNTEXPLODE"},
{{A_DebrisRandom}, "A_DEBRISRANDOM"}, {{A_DebrisRandom}, "A_DEBRISRANDOM"},
{{A_TrainCameo}, "A_TRAINCAMEO"}, {{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 // technically the player goes here but it's an infinite tic state
"S_OBJPLACE_DUMMY", "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 // Blue Crawla
"S_POSS_STND", "S_POSS_STND",
"S_POSS_RUN1", "S_POSS_RUN1",
@ -10502,8 +10453,8 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_CDTREEB", "MT_CDTREEB",
// Daytona Speedway // Daytona Speedway
"MT_PINETREE", "MT_DAYTONAPINETREE",
"MT_PINETREE_SIDE", "MT_DAYTONAPINETREE_SIDE",
// Egg Zeppelin // Egg Zeppelin
"MT_EZZPROPELLER", "MT_EZZPROPELLER",

View file

@ -244,10 +244,8 @@ typedef enum
{ {
SKINCOLOR_NONE = 0, SKINCOLOR_NONE = 0,
// Greyscale ranges
SKINCOLOR_WHITE, SKINCOLOR_WHITE,
SKINCOLOR_BONE, SKINCOLOR_SILVER,
SKINCOLOR_CLOUDY,
SKINCOLOR_GREY, SKINCOLOR_GREY,
SKINCOLOR_NICKEL, SKINCOLOR_NICKEL,
SKINCOLOR_BLACK, SKINCOLOR_BLACK,

View file

@ -4667,7 +4667,13 @@ static void HWR_DrawSprites(void)
{ {
UINT32 i; UINT32 i;
boolean skipshadow = false; // skip shadow if it was drawn already for a linkdraw sprite encountered earlier in the list 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); 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++) for (i = 0; i < gl_visspritecount; i++)
{ {
gl_vissprite_t *spr = gl_vsprorder[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 #endif
consvar_t cv_glmodels = {"gr_models", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; 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_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}; 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_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}; 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); CV_RegisterVar(&cv_glcoronas);
#endif #endif
#ifdef BAD_MODEL_OPTIONS
CV_RegisterVar(&cv_glmodellighting); CV_RegisterVar(&cv_glmodellighting);
CV_RegisterVar(&cv_glmodelinterpolation); CV_RegisterVar(&cv_glmodelinterpolation);
#endif
CV_RegisterVar(&cv_glmodels); CV_RegisterVar(&cv_glmodels);
CV_RegisterVar(&cv_glskydome); CV_RegisterVar(&cv_glskydome);

View file

@ -83,8 +83,17 @@ extern consvar_t cv_glcoronasize;
extern consvar_t cv_glshaders; extern consvar_t cv_glshaders;
extern consvar_t cv_glmodels; 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_glmodelinterpolation;
extern consvar_t cv_glmodellighting; extern consvar_t cv_glmodellighting;
#endif
extern consvar_t cv_glfiltermode; extern consvar_t cv_glfiltermode;
extern consvar_t cv_glanisotropicmode; extern consvar_t cv_glanisotropicmode;
extern consvar_t cv_fovchange; extern consvar_t cv_fovchange;

View file

@ -1124,7 +1124,7 @@ static void HWR_GetBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, INT
static boolean HWR_AllowModel(mobj_t *mobj) static boolean HWR_AllowModel(mobj_t *mobj)
{ {
// Signpost overlay. Not needed. // Signpost overlay. Not needed.
if (mobj->state-states == S_PLAY_SIGN) if (mobj->state-states == S_KART_SIGN)
return false; return false;
// Otherwise, render the model. // 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) 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 if (cv_glmodelinterpolation.value == 2) // Always interpolate
return true; return true;
#endif
return model->interpolate[(mobj->frame & FF_FRAMEMASK)]; return model->interpolate[(mobj->frame & FF_FRAMEMASK)];
} }
static boolean HWR_CanInterpolateSprite2(modelspr2frames_t *spr2frame) static boolean HWR_CanInterpolateSprite2(modelspr2frames_t *spr2frame)
{ {
#ifdef BAD_MODEL_OPTIONS
if (cv_glmodelinterpolation.value == 2) // Always interpolate if (cv_glmodelinterpolation.value == 2) // Always interpolate
return true; return true;
#endif
return spr2frame->interpolate; return spr2frame->interpolate;
} }
@ -1472,7 +1477,11 @@ boolean HWR_DrawModel(gl_vissprite_t *spr)
#ifdef USE_MODEL_NEXTFRAME #ifdef USE_MODEL_NEXTFRAME
#define INTERPOLERATION_LIMIT TICRATE/4 #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) if (durs > INTERPOLERATION_LIMIT)
durs = INTERPOLERATION_LIMIT; durs = INTERPOLERATION_LIMIT;
@ -1505,8 +1514,7 @@ boolean HWR_DrawModel(gl_vissprite_t *spr)
} }
else else
{ {
if (spr->mobj->state->nextstate != S_NULL && states[spr->mobj->state->nextstate].sprite != SPR_NULL 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]))
nextFrame = (states[spr->mobj->state->nextstate].frame & FF_FRAMEMASK) % mod; nextFrame = (states[spr->mobj->state->nextstate].frame & FF_FRAMEMASK) % mod;
} }
} }

View file

@ -373,15 +373,18 @@ char sprnames[NUMSPRITES + 1][5] =
"STEM", // Steam riser "STEM", // Steam riser
"BUMP", // Bumpers "BUMP", // Bumpers
"BLON", // Balloons "BLON", // Balloons
"SPRY", // Yellow spring "SPVY", // Yellow Vertical Spring
"SPRR", // Red spring "SPVR", // Red Vertical Spring
"SPRB", // Blue spring "SPVB", // Blue Vertical Spring
"YSPR", // Yellow Diagonal Spring "SPVG", // Grey Vertical Spring
"RSPR", // Red Diagonal Spring "SPDY", // Yellow Diagonal Spring
"BSPR", // Blue Diagonal Spring "SPDR", // Red Diagonal Spring
"SSWY", // Yellow Side Spring "SPDB", // Blue Diagonal Spring
"SSWR", // Red Side Spring "SPDG", // Grey Diagonal Spring
"SSWB", // Blue Side Spring "SPHY", // Yellow Horizontal Spring
"SPHR", // Red Horizontal Spring
"SPHB", // Blue Horizontal Spring
"SPHG", // Grey Horizontal Spring
"BSTY", // Yellow Booster "BSTY", // Yellow Booster
"BSTR", // Red Booster "BSTR", // Red Booster
@ -1767,17 +1770,17 @@ state_t states[NUMSTATES] =
{SPR_NSPK, 3, 4, {NULL}, 0, 0, S_NULL}, // S_BOXSPARKLE4 {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, 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_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, 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, 1, 89, {NULL}, 0, 0, S_GOLDBOX_OFF2}, // S_GOLDBOX_OFF1
{SPR_XLTV, 2, 4, {A_PlayAttackSound}, 0, 0, S_GOLDBOX_OFF3}, // S_GOLDBOX_OFF2 {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, 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, 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, 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, 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) // Monitor States (one per box)
{SPR_TVMY, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_MYSTERY_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_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_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_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_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_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 {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 {SPR_TVZP, 0, 2, {NULL}, 0, 0, S_BOX_FLICKER}, // S_THUNDERCOIN_BOX
// Gold Repeat Monitor States (one per box) // Gold Repeat Monitor States (one per box)
{SPR_TVPI, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_PITY_GOLDBOX {SPR_TVPI, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_PITY_GOLDBOX
{SPR_TVAT, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_ATTRACT_GOLDBOX {SPR_TVAT, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_ATTRACT_GOLDBOX
{SPR_TVFO, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_FORCE_GOLDBOX {SPR_TVFO, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_FORCE_GOLDBOX
{SPR_TVAR, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_ARMAGEDDON_GOLDBOX {SPR_TVAR, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_ARMAGEDDON_GOLDBOX
{SPR_TVWW, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_WHIRLWIND_GOLDBOX {SPR_TVWW, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_WHIRLWIND_GOLDBOX
{SPR_TVEL, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_ELEMENTAL_GOLDBOX {SPR_TVEL, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_ELEMENTAL_GOLDBOX
{SPR_TVSS, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_SNEAKERS_GOLDBOX {SPR_TVSS, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_SNEAKERS_GOLDBOX
{SPR_TVIV, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_INVULN_GOLDBOX {SPR_TVIV, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_INVULN_GOLDBOX
{SPR_TVEG, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_EGGMAN_GOLDBOX {SPR_TVEG, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_EGGMAN_GOLDBOX
{SPR_TVGV, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_GRAVITY_GOLDBOX {SPR_TVGV, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_GRAVITY_GOLDBOX
{SPR_TVFL, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_FLAMEAURA_GOLDBOX {SPR_TVFL, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_FLAMEAURA_GOLDBOX
{SPR_TVBB, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_BUBBLEWRAP_GOLDBOX {SPR_TVBB, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_BUBBLEWRAP_GOLDBOX
{SPR_TVZP, 1, 2, {A_GoldMonitorSparkle}, 0, 0, S_GOLDBOX_FLICKER}, // S_THUNDERCOIN_GOLDBOX {SPR_TVZP, 1, 2, {NULL}, 0, 0, S_GOLDBOX_FLICKER}, // S_THUNDERCOIN_GOLDBOX
// Team Ring Boxes (these are special) // Team Ring Boxes (these are special)
{SPR_TRRI, 0, 2, {NULL}, 0, 0, S_RING_REDBOX2}, // S_RING_REDBOX1 {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, 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_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, 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, 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 {SPR_TBRI, 2, -1, {NULL}, 0, 0, S_NULL}, // S_BLUEBOX_POP2
// Box Icons -- 2 states each, animation and action // 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 {SPR_REMT, 1|FF_FULLBRIGHT, 1, {A_PlayActiveSound}, 0, 0, S_TNTBARREL_EXPL1}, // S_PROXIMITY_TNT_TRIGGER23
// Dust devil // 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, 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_TRANS70, 5, {NULL}, 0, 0, S_DUSTLAYER3}, // S_DUSTLAYER2
{SPR_TAZD, 1|FF_PAPERSPRITE|FF_TRANS80, 5, {NULL}, 0, 0, S_DUSTLAYER4}, // S_DUSTLAYER3 {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, 0, 1, {NULL}, 0, 0, S_GHORIZ4}, // S_GHORIZ3
{SPR_SPHG, 2, 4, {NULL}, 0, 0, S_GHORIZ1}, // S_GHORIZ4 {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 // Boosters
{SPR_NULL, 0, 1, {A_Pain}, 0, 0, S_INVISIBLE}, // S_BOOSTERSOUND {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, 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, 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, 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_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, 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, 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 {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 {SPR_LHRT, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_LHRT
// Red Rings (thrown) // Red Rings (thrown)
{SPR_RRNG, FF_FULLBRIGHT, 1, {A_ThrownRing}, 0, 0, S_RRNG2}, // S_RRNG1 {SPR_RRNG, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_RRNG2}, // S_RRNG1
{SPR_RRNG, FF_FULLBRIGHT|1, 1, {A_ThrownRing}, 0, 0, S_RRNG3}, // S_RRNG2 {SPR_RRNG, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_RRNG3}, // S_RRNG2
{SPR_RRNG, FF_FULLBRIGHT|2, 1, {A_ThrownRing}, 0, 0, S_RRNG4}, // S_RRNG3 {SPR_RRNG, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_RRNG4}, // S_RRNG3
{SPR_RRNG, FF_FULLBRIGHT|3, 1, {A_ThrownRing}, 0, 0, S_RRNG5}, // S_RRNG4 {SPR_RRNG, FF_FULLBRIGHT|3, 1, {NULL}, 0, 0, S_RRNG5}, // S_RRNG4
{SPR_RRNG, FF_FULLBRIGHT|4, 1, {A_ThrownRing}, 0, 0, S_RRNG6}, // S_RRNG5 {SPR_RRNG, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_RRNG6}, // S_RRNG5
{SPR_RRNG, FF_FULLBRIGHT|5, 1, {A_ThrownRing}, 0, 0, S_RRNG7}, // S_RRNG6 {SPR_RRNG, FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_RRNG7}, // S_RRNG6
{SPR_RRNG, FF_FULLBRIGHT|6, 1, {A_ThrownRing}, 0, 0, S_RRNG1}, // S_RRNG7 {SPR_RRNG, FF_FULLBRIGHT|6, 1, {NULL}, 0, 0, S_RRNG1}, // S_RRNG7
// Weapon Ring Ammo // Weapon Ring Ammo
{SPR_RNGB, FF_ANIMATE|FF_GLOBALANIM, -1, {NULL}, 34, 1, S_BOUNCERINGAMMO}, // S_BOUNCERINGAMMO {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 {SPR_PIKG, 14, 1, {NULL}, 0, 0, S_GRENADEPICKUPFADE1}, // S_GRENADEPICKUPFADE8
// Thrown Weapon Rings // Thrown Weapon Rings
{SPR_RNGB, FF_FULLBRIGHT , 1, {A_ThrownRing}, 0, 0, S_THROWNBOUNCE2}, // S_THROWNBOUNCE1 {SPR_RNGB, FF_FULLBRIGHT , 1, {NULL}, 0, 0, S_THROWNBOUNCE2}, // S_THROWNBOUNCE1
{SPR_RNGB, FF_FULLBRIGHT| 5, 1, {A_ThrownRing}, 0, 0, S_THROWNBOUNCE3}, // S_THROWNBOUNCE2 {SPR_RNGB, FF_FULLBRIGHT| 5, 1, {NULL}, 0, 0, S_THROWNBOUNCE3}, // S_THROWNBOUNCE2
{SPR_RNGB, FF_FULLBRIGHT|10, 1, {A_ThrownRing}, 0, 0, S_THROWNBOUNCE4}, // S_THROWNBOUNCE3 {SPR_RNGB, FF_FULLBRIGHT|10, 1, {NULL}, 0, 0, S_THROWNBOUNCE4}, // S_THROWNBOUNCE3
{SPR_RNGB, FF_FULLBRIGHT|15, 1, {A_ThrownRing}, 0, 0, S_THROWNBOUNCE5}, // S_THROWNBOUNCE4 {SPR_RNGB, FF_FULLBRIGHT|15, 1, {NULL}, 0, 0, S_THROWNBOUNCE5}, // S_THROWNBOUNCE4
{SPR_RNGB, FF_FULLBRIGHT|20, 1, {A_ThrownRing}, 0, 0, S_THROWNBOUNCE6}, // S_THROWNBOUNCE5 {SPR_RNGB, FF_FULLBRIGHT|20, 1, {NULL}, 0, 0, S_THROWNBOUNCE6}, // S_THROWNBOUNCE5
{SPR_RNGB, FF_FULLBRIGHT|25, 1, {A_ThrownRing}, 0, 0, S_THROWNBOUNCE7}, // S_THROWNBOUNCE6 {SPR_RNGB, FF_FULLBRIGHT|25, 1, {NULL}, 0, 0, S_THROWNBOUNCE7}, // S_THROWNBOUNCE6
{SPR_RNGB, FF_FULLBRIGHT|30, 1, {A_ThrownRing}, 0, 0, S_THROWNBOUNCE1}, // S_THROWNBOUNCE7 {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 , 1, {NULL}, 0, 0, S_THROWNINFINITY2}, // S_THROWNINFINITY1
{SPR_RNGI, FF_FULLBRIGHT| 5, 1, {A_ThrownRing}, 0, 0, S_THROWNINFINITY3}, // S_THROWNINFINITY2 {SPR_RNGI, FF_FULLBRIGHT| 5, 1, {NULL}, 0, 0, S_THROWNINFINITY3}, // S_THROWNINFINITY2
{SPR_RNGI, FF_FULLBRIGHT|10, 1, {A_ThrownRing}, 0, 0, S_THROWNINFINITY4}, // S_THROWNINFINITY3 {SPR_RNGI, FF_FULLBRIGHT|10, 1, {NULL}, 0, 0, S_THROWNINFINITY4}, // S_THROWNINFINITY3
{SPR_RNGI, FF_FULLBRIGHT|15, 1, {A_ThrownRing}, 0, 0, S_THROWNINFINITY5}, // S_THROWNINFINITY4 {SPR_RNGI, FF_FULLBRIGHT|15, 1, {NULL}, 0, 0, S_THROWNINFINITY5}, // S_THROWNINFINITY4
{SPR_RNGI, FF_FULLBRIGHT|20, 1, {A_ThrownRing}, 0, 0, S_THROWNINFINITY6}, // S_THROWNINFINITY5 {SPR_RNGI, FF_FULLBRIGHT|20, 1, {NULL}, 0, 0, S_THROWNINFINITY6}, // S_THROWNINFINITY5
{SPR_RNGI, FF_FULLBRIGHT|25, 1, {A_ThrownRing}, 0, 0, S_THROWNINFINITY7}, // S_THROWNINFINITY6 {SPR_RNGI, FF_FULLBRIGHT|25, 1, {NULL}, 0, 0, S_THROWNINFINITY7}, // S_THROWNINFINITY6
{SPR_RNGI, FF_FULLBRIGHT|30, 1, {A_ThrownRing}, 0, 0, S_THROWNINFINITY1}, // S_THROWNINFINITY7 {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, {NULL}, 0, 0, S_THROWNAUTOMATIC2}, // S_THROWNAUTOMATIC1
{SPR_TAUT, FF_FULLBRIGHT|1, 1, {A_ThrownRing}, 0, 0, S_THROWNAUTOMATIC3}, // S_THROWNAUTOMATIC2 {SPR_TAUT, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_THROWNAUTOMATIC3}, // S_THROWNAUTOMATIC2
{SPR_TAUT, FF_FULLBRIGHT|2, 1, {A_ThrownRing}, 0, 0, S_THROWNAUTOMATIC4}, // S_THROWNAUTOMATIC3 {SPR_TAUT, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_THROWNAUTOMATIC4}, // S_THROWNAUTOMATIC3
{SPR_TAUT, FF_FULLBRIGHT|3, 1, {A_ThrownRing}, 0, 0, S_THROWNAUTOMATIC5}, // S_THROWNAUTOMATIC4 {SPR_TAUT, FF_FULLBRIGHT|3, 1, {NULL}, 0, 0, S_THROWNAUTOMATIC5}, // S_THROWNAUTOMATIC4
{SPR_TAUT, FF_FULLBRIGHT|4, 1, {A_ThrownRing}, 0, 0, S_THROWNAUTOMATIC6}, // S_THROWNAUTOMATIC5 {SPR_TAUT, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_THROWNAUTOMATIC6}, // S_THROWNAUTOMATIC5
{SPR_TAUT, FF_FULLBRIGHT|5, 1, {A_ThrownRing}, 0, 0, S_THROWNAUTOMATIC7}, // S_THROWNAUTOMATIC6 {SPR_TAUT, FF_FULLBRIGHT|5, 1, {NULL}, 0, 0, S_THROWNAUTOMATIC7}, // S_THROWNAUTOMATIC6
{SPR_TAUT, FF_FULLBRIGHT|6, 1, {A_ThrownRing}, 0, 0, S_THROWNAUTOMATIC1}, // S_THROWNAUTOMATIC7 {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 , 1, {NULL}, 0, 0, S_THROWNEXPLOSION2}, // S_THROWNEXPLOSION1
{SPR_RNGE, FF_FULLBRIGHT| 5, 1, {A_ThrownRing}, 0, 0, S_THROWNEXPLOSION3}, // S_THROWNEXPLOSION2 {SPR_RNGE, FF_FULLBRIGHT| 5, 1, {NULL}, 0, 0, S_THROWNEXPLOSION3}, // S_THROWNEXPLOSION2
{SPR_RNGE, FF_FULLBRIGHT|10, 1, {A_ThrownRing}, 0, 0, S_THROWNEXPLOSION4}, // S_THROWNEXPLOSION3 {SPR_RNGE, FF_FULLBRIGHT|10, 1, {NULL}, 0, 0, S_THROWNEXPLOSION4}, // S_THROWNEXPLOSION3
{SPR_RNGE, FF_FULLBRIGHT|15, 1, {A_ThrownRing}, 0, 0, S_THROWNEXPLOSION5}, // S_THROWNEXPLOSION4 {SPR_RNGE, FF_FULLBRIGHT|15, 1, {NULL}, 0, 0, S_THROWNEXPLOSION5}, // S_THROWNEXPLOSION4
{SPR_RNGE, FF_FULLBRIGHT|20, 1, {A_ThrownRing}, 0, 0, S_THROWNEXPLOSION6}, // S_THROWNEXPLOSION5 {SPR_RNGE, FF_FULLBRIGHT|20, 1, {NULL}, 0, 0, S_THROWNEXPLOSION6}, // S_THROWNEXPLOSION5
{SPR_RNGE, FF_FULLBRIGHT|25, 1, {A_ThrownRing}, 0, 0, S_THROWNEXPLOSION7}, // S_THROWNEXPLOSION6 {SPR_RNGE, FF_FULLBRIGHT|25, 1, {NULL}, 0, 0, S_THROWNEXPLOSION7}, // S_THROWNEXPLOSION6
{SPR_RNGE, FF_FULLBRIGHT|30, 1, {A_ThrownRing}, 0, 0, S_THROWNEXPLOSION1}, // S_THROWNEXPLOSION7 {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, {NULL}, 0, 0, S_THROWNGRENADE2}, // S_THROWNGRENADE1
{SPR_TGRE, FF_FULLBRIGHT| 1, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE3}, // S_THROWNGRENADE2 {SPR_TGRE, FF_FULLBRIGHT| 1, 1, {NULL}, 0, 0, S_THROWNGRENADE3}, // S_THROWNGRENADE2
{SPR_TGRE, FF_FULLBRIGHT| 2, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE4}, // S_THROWNGRENADE3 {SPR_TGRE, FF_FULLBRIGHT| 2, 1, {NULL}, 0, 0, S_THROWNGRENADE4}, // S_THROWNGRENADE3
{SPR_TGRE, FF_FULLBRIGHT| 3, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE5}, // S_THROWNGRENADE4 {SPR_TGRE, FF_FULLBRIGHT| 3, 1, {NULL}, 0, 0, S_THROWNGRENADE5}, // S_THROWNGRENADE4
{SPR_TGRE, FF_FULLBRIGHT| 4, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE6}, // S_THROWNGRENADE5 {SPR_TGRE, FF_FULLBRIGHT| 4, 1, {NULL}, 0, 0, S_THROWNGRENADE6}, // S_THROWNGRENADE5
{SPR_TGRE, FF_FULLBRIGHT| 5, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE7}, // S_THROWNGRENADE6 {SPR_TGRE, FF_FULLBRIGHT| 5, 1, {NULL}, 0, 0, S_THROWNGRENADE7}, // S_THROWNGRENADE6
{SPR_TGRE, FF_FULLBRIGHT| 6, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE8}, // S_THROWNGRENADE7 {SPR_TGRE, FF_FULLBRIGHT| 6, 1, {NULL}, 0, 0, S_THROWNGRENADE8}, // S_THROWNGRENADE7
{SPR_TGRE, FF_FULLBRIGHT| 7, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE9}, // S_THROWNGRENADE8 {SPR_TGRE, FF_FULLBRIGHT| 7, 1, {NULL}, 0, 0, S_THROWNGRENADE9}, // S_THROWNGRENADE8
{SPR_TGRE, FF_FULLBRIGHT| 8, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE10}, // S_THROWNGRENADE9 {SPR_TGRE, FF_FULLBRIGHT| 8, 1, {NULL}, 0, 0, S_THROWNGRENADE10}, // S_THROWNGRENADE9
{SPR_TGRE, FF_FULLBRIGHT| 9, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE11}, // S_THROWNGRENADE10 {SPR_TGRE, FF_FULLBRIGHT| 9, 1, {NULL}, 0, 0, S_THROWNGRENADE11}, // S_THROWNGRENADE10
{SPR_TGRE, FF_FULLBRIGHT|10, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE12}, // S_THROWNGRENADE11 {SPR_TGRE, FF_FULLBRIGHT|10, 1, {NULL}, 0, 0, S_THROWNGRENADE12}, // S_THROWNGRENADE11
{SPR_TGRE, FF_FULLBRIGHT|11, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE13}, // S_THROWNGRENADE12 {SPR_TGRE, FF_FULLBRIGHT|11, 1, {NULL}, 0, 0, S_THROWNGRENADE13}, // S_THROWNGRENADE12
{SPR_TGRE, FF_FULLBRIGHT|12, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE14}, // S_THROWNGRENADE13 {SPR_TGRE, FF_FULLBRIGHT|12, 1, {NULL}, 0, 0, S_THROWNGRENADE14}, // S_THROWNGRENADE13
{SPR_TGRE, FF_FULLBRIGHT|13, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE15}, // S_THROWNGRENADE14 {SPR_TGRE, FF_FULLBRIGHT|13, 1, {NULL}, 0, 0, S_THROWNGRENADE15}, // S_THROWNGRENADE14
{SPR_TGRE, FF_FULLBRIGHT|14, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE16}, // S_THROWNGRENADE15 {SPR_TGRE, FF_FULLBRIGHT|14, 1, {NULL}, 0, 0, S_THROWNGRENADE16}, // S_THROWNGRENADE15
{SPR_TGRE, FF_FULLBRIGHT|15, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE17}, // S_THROWNGRENADE16 {SPR_TGRE, FF_FULLBRIGHT|15, 1, {NULL}, 0, 0, S_THROWNGRENADE17}, // S_THROWNGRENADE16
{SPR_TGRE, FF_FULLBRIGHT|16, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE18}, // S_THROWNGRENADE17 {SPR_TGRE, FF_FULLBRIGHT|16, 1, {NULL}, 0, 0, S_THROWNGRENADE18}, // S_THROWNGRENADE17
{SPR_TGRE, FF_FULLBRIGHT|17, 1, {A_ThrownRing}, 0, 0, S_THROWNGRENADE1}, // S_THROWNGRENADE18 {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 {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 {SPR_CDBU, 2, -1, {NULL}, 0, 0, S_CDTREEBSP}, // S_CDTREEBSP
// Daytona Speedway // Daytona Speedway
{SPR_PINE, 1, -1, {NULL}, 0, 0, S_NULL}, // S_PINETREE {SPR_PINE, 1, -1, {NULL}, 0, 0, S_NULL}, // S_DAYTONAPINETREE
{SPR_PINE, FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_PINETREE_SIDE {SPR_PINE, FF_PAPERSPRITE, -1, {NULL}, 0, 0, S_NULL}, // S_DAYTONAPINETREE_SIDE
// Egg Zeppelin // Egg Zeppelin
{SPR_PPLR, 0, -1, {NULL}, 0, 0, S_EZZPROPELLER}, // S_EZZPROPELLER {SPR_PPLR, 0, -1, {NULL}, 0, 0, S_EZZPROPELLER}, // S_EZZPROPELLER
@ -7621,7 +7586,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
sfx_None, // painsound sfx_None, // painsound
S_NULL, // meleestate S_NULL, // meleestate
S_NULL, // missilestate S_NULL, // missilestate
S_PLAY_DEAD, // deathstate S_KART_SPINOUT, // deathstate
S_NULL, // xdeathstate S_NULL, // xdeathstate
sfx_None, // deathsound sfx_None, // deathsound
0, // speed 0, // speed
@ -8387,190 +8352,244 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
{ // MT_YELLOWSPRING { // MT_YELLOWSPRING
550, // doomednum 550, // doomednum
S_YELLOWSPRING, // spawnstate S_YELLOWSPRING1,// spawnstate
1000, // spawnhealth 1000, // spawnhealth
S_NULL, // seestate S_YELLOWSPRING2,// seestate
sfx_None, // seesound sfx_None, // seesound
0, // reactiontime 8, // reactiontime
sfx_None, // attacksound sfx_None, // attacksound
S_NULL, // painstate S_NULL, // painstate
0, // painchance SKINCOLOR_YELLOW, // painchance
sfx_spring, // painsound sfx_s3kb1, // painsound
S_NULL, // meleestate S_NULL, // meleestate
S_NULL, // missilestate S_NULL, // missilestate
S_NULL, // deathstate S_NULL, // deathstate
S_NULL, // xdeathstate S_NULL, // xdeathstate
sfx_None, // deathsound sfx_None, // deathsound
0, // speed 0, // speed
20*FRACUNIT, // radius 48*FRACUNIT, // radius
16*FRACUNIT, // height 32*FRACUNIT, // height
0, // display offset 0, // display offset
20*FRACUNIT, // mass 25*FRACUNIT, // mass
0, // damage 0, // damage
sfx_None, // activesound sfx_None, // activesound
MF_SPRING, // flags MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags
S_YELLOWSPRING2 // raisestate S_YELLOWSPRING2 // raisestate
}, },
{ // MT_REDSPRING { // MT_REDSPRING
551, // doomednum 551, // doomednum
S_REDSPRING, // spawnstate S_REDSPRING1, // spawnstate
1000, // spawnhealth 1000, // spawnhealth
S_NULL, // seestate S_REDSPRING2, // seestate
sfx_None, // seesound sfx_None, // seesound
0, // reactiontime 8, // reactiontime
sfx_None, // attacksound sfx_None, // attacksound
S_NULL, // painstate S_NULL, // painstate
0, // painchance SKINCOLOR_RASPBERRY, // painchance
sfx_spring, // painsound sfx_s3kb1, // painsound
S_NULL, // meleestate S_NULL, // meleestate
S_NULL, // missilestate S_NULL, // missilestate
S_NULL, // deathstate S_NULL, // deathstate
S_NULL, // xdeathstate S_NULL, // xdeathstate
sfx_None, // deathsound sfx_None, // deathsound
0, // speed 0, // speed
20*FRACUNIT, // radius 48*FRACUNIT, // radius
16*FRACUNIT, // height 32*FRACUNIT, // height
0, // display offset 0, // display offset
32*FRACUNIT, // mass 40*FRACUNIT, // mass
0, // damage 0, // damage
sfx_None, // activesound sfx_None, // activesound
MF_SPRING, // flags MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags
S_REDSPRING2 // raisestate S_REDSPRING2 // raisestate
}, },
{ // MT_BLUESPRING { // MT_BLUESPRING
552, // doomednum 552, // doomednum
S_BLUESPRING, // spawnstate S_BLUESPRING1, // spawnstate
1000, // spawnhealth 1000, // spawnhealth
S_NULL, // seestate S_BLUESPRING2, // seestate
sfx_None, // seesound sfx_None, // seesound
0, // reactiontime 8, // reactiontime
sfx_None, // attacksound sfx_None, // attacksound
S_NULL, // painstate S_NULL, // painstate
0, // painchance SKINCOLOR_PASTEL, // painchance
sfx_spring, // painsound sfx_s3kb1, // painsound
S_NULL, // meleestate S_NULL, // meleestate
S_NULL, // missilestate S_NULL, // missilestate
S_NULL, // deathstate S_NULL, // deathstate
S_NULL, // xdeathstate S_NULL, // xdeathstate
sfx_None, // deathsound sfx_None, // deathsound
0, // speed 0, // speed
20*FRACUNIT, // radius 48*FRACUNIT, // radius
16*FRACUNIT, // height 32*FRACUNIT, // height
0, // display offset 0, // display offset
11*FRACUNIT, // mass 64*FRACUNIT, // mass
0, // damage 0, // damage
sfx_None, // activesound sfx_None, // activesound
MF_SPRING, // flags MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags
S_BLUESPRING2 // raisestate S_BLUESPRING2 // raisestate
}, },
{ // MT_YELLOWDIAG { // MT_GREYSPRING
555, // doomednum 553, // doomednum
S_YDIAG1, // spawnstate S_GREYSPRING1, // spawnstate
1, // spawnhealth 1000, // spawnhealth
S_NULL, // seestate S_GREYSPRING2, // seestate
sfx_None, // seesound sfx_None, // seesound
0, // reactiontime 8, // reactiontime
sfx_None, // attacksound sfx_None, // attacksound
S_NULL, // painstate S_NULL, // painstate
0, // painchance SKINCOLOR_POPCORN, // painchance
sfx_spring, // painsound sfx_s3kb1, // painsound
S_NULL, // meleestate S_NULL, // meleestate
S_NULL, // missilestate S_NULL, // missilestate
S_NULL, // deathstate S_NULL, // deathstate
S_NULL, // xdeathstate S_NULL, // xdeathstate
sfx_None, // deathsound sfx_None, // deathsound
0, // speed 0, // speed
16*FRACUNIT, // radius 48*FRACUNIT, // radius
16*FRACUNIT, // height 32*FRACUNIT, // height
0, // display offset 0, // display offset
20*FRACUNIT, // mass 15*FRACUNIT, // mass
20*FRACUNIT, // damage 0, // damage
sfx_None, // activesound 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 S_YDIAG2 // raisestate
}, },
{ // MT_REDDIAG { // MT_REDDIAG
556, // doomednum 555, // doomednum
S_RDIAG1, // spawnstate S_RDIAG1, // spawnstate
1, // spawnhealth 1, // spawnhealth
S_NULL, // seestate S_RDIAG2, // seestate
sfx_None, // seesound sfx_None, // seesound
0, // reactiontime 8, // reactiontime
sfx_None, // attacksound sfx_None, // attacksound
S_NULL, // painstate S_NULL, // painstate
0, // painchance SKINCOLOR_RASPBERRY, // painchance
sfx_spring, // painsound sfx_s3kb1, // painsound
S_NULL, // meleestate S_NULL, // meleestate
S_NULL, // missilestate S_NULL, // missilestate
S_NULL, // deathstate S_NULL, // deathstate
S_NULL, // xdeathstate S_NULL, // xdeathstate
sfx_None, // deathsound sfx_None, // deathsound
0, // speed 0, // speed
16*FRACUNIT, // radius 48*FRACUNIT, // radius
16*FRACUNIT, // height 56*FRACUNIT, // height
0, // display offset 0, // display offset
32*FRACUNIT, // mass 40*FRACUNIT, // mass
32*FRACUNIT, // damage 40*FRACUNIT, // damage
sfx_None, // activesound sfx_None, // activesound
MF_SPRING, // flags MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags
S_RDIAG2 // raisestate S_RDIAG2 // raisestate
}, },
{ // MT_BLUEDIAG { // MT_BLUEDIAG
557, // doomednum 556, // doomednum
S_BDIAG1, // spawnstate S_BDIAG1, // spawnstate
1, // spawnhealth 1, // spawnhealth
S_BDIAG2, // seestate S_BDIAG2, // seestate
sfx_None, // seesound sfx_None, // seesound
0, // reactiontime 8, // reactiontime
sfx_None, // attacksound sfx_None, // attacksound
S_NULL, // painstate S_NULL, // painstate
0, // painchance SKINCOLOR_PASTEL, // painchance
sfx_spring, // painsound sfx_s3kb1, // painsound
S_NULL, // meleestate S_NULL, // meleestate
S_NULL, // missilestate S_NULL, // missilestate
S_NULL, // deathstate S_NULL, // deathstate
S_NULL, // xdeathstate S_NULL, // xdeathstate
sfx_None, // deathsound sfx_None, // deathsound
0, // speed 0, // speed
16*FRACUNIT, // radius 48*FRACUNIT, // radius
16*FRACUNIT, // height 56*FRACUNIT, // height
0, // display offset 0, // display offset
11*FRACUNIT, // mass 64*FRACUNIT, // mass
11*FRACUNIT, // damage 64*FRACUNIT, // damage
sfx_None, // activesound sfx_None, // activesound
MF_SPRING, // flags MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags
S_BDIAG2 // raisestate 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 { // MT_YELLOWHORIZ
558, // doomednum 558, // doomednum
S_YHORIZ1, // spawnstate S_YHORIZ1, // spawnstate
1, // spawnhealth 1, // spawnhealth
S_NULL, // seestate S_YHORIZ2, // seestate
sfx_None, // seesound sfx_None, // seesound
0, // reactiontime 8, // reactiontime
sfx_None, // attacksound sfx_None, // attacksound
S_NULL, // painstate S_NULL, // painstate
0, // painchance SKINCOLOR_YELLOW, // painchance
sfx_spring, // painsound sfx_s3kb1, // painsound
S_NULL, // meleestate S_NULL, // meleestate
S_NULL, // missilestate S_NULL, // missilestate
S_NULL, // deathstate S_NULL, // deathstate
S_NULL, // xdeathstate S_NULL, // xdeathstate
sfx_None, // deathsound sfx_None, // deathsound
0, // speed 0, // speed
16*FRACUNIT, // radius 48*FRACUNIT, // radius
32*FRACUNIT, // height 56*FRACUNIT, // height
0, // display offset 0, // display offset
0, // mass 0, // mass
36*FRACUNIT, // damage 45*FRACUNIT, // damage
sfx_None, // activesound sfx_None, // activesound
MF_SPRING|MF_NOGRAVITY, // flags MF_SOLID|MF_SPRING|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags
S_YHORIZ2 // raisestate S_YHORIZ2 // raisestate
}, },
@ -8578,26 +8597,26 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
559, // doomednum 559, // doomednum
S_RHORIZ1, // spawnstate S_RHORIZ1, // spawnstate
1, // spawnhealth 1, // spawnhealth
S_NULL, // seestate S_RHORIZ2, // seestate
sfx_None, // seesound sfx_None, // seesound
0, // reactiontime 8, // reactiontime
sfx_None, // attacksound sfx_None, // attacksound
S_NULL, // painstate S_NULL, // painstate
0, // painchance SKINCOLOR_RASPBERRY, // painchance
sfx_spring, // painsound sfx_s3kb1, // painsound
S_NULL, // meleestate S_NULL, // meleestate
S_NULL, // missilestate S_NULL, // missilestate
S_NULL, // deathstate S_NULL, // deathstate
S_NULL, // xdeathstate S_NULL, // xdeathstate
sfx_None, // deathsound sfx_None, // deathsound
0, // speed 0, // speed
16*FRACUNIT, // radius 48*FRACUNIT, // radius
32*FRACUNIT, // height 56*FRACUNIT, // height
0, // display offset 0, // display offset
0, // mass 0, // mass
72*FRACUNIT, // damage 72*FRACUNIT, // damage
sfx_None, // activesound sfx_None, // activesound
MF_SPRING|MF_NOGRAVITY, // flags MF_SOLID|MF_SPRING|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags
S_RHORIZ2 // raisestate S_RHORIZ2 // raisestate
}, },
@ -8605,29 +8624,56 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
560, // doomednum 560, // doomednum
S_BHORIZ1, // spawnstate S_BHORIZ1, // spawnstate
1, // spawnhealth 1, // spawnhealth
S_NULL, // seestate S_BHORIZ2, // seestate
sfx_None, // seesound sfx_None, // seesound
0, // reactiontime 8, // reactiontime
sfx_None, // attacksound sfx_None, // attacksound
S_NULL, // painstate S_NULL, // painstate
0, // painchance SKINCOLOR_PASTEL, // painchance
sfx_spring, // painsound sfx_s3kb1, // painsound
S_NULL, // meleestate S_NULL, // meleestate
S_NULL, // missilestate S_NULL, // missilestate
S_NULL, // deathstate S_NULL, // deathstate
S_NULL, // xdeathstate S_NULL, // xdeathstate
sfx_None, // deathsound sfx_None, // deathsound
0, // speed 0, // speed
16*FRACUNIT, // radius 48*FRACUNIT, // radius
32*FRACUNIT, // height 56*FRACUNIT, // height
0, // display offset 0, // display offset
0, // mass 0, // mass
11*FRACUNIT, // damage 115*FRACUNIT, // damage
sfx_None, // activesound sfx_None, // activesound
MF_SPRING|MF_NOGRAVITY, // flags MF_SOLID|MF_SPRING|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags
S_BHORIZ2 // raisestate 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 { // MT_BOOSTERSEG
-1, // doomednum -1, // doomednum
S_INVISIBLE, // spawnstate S_INVISIBLE, // spawnstate
@ -8770,18 +8816,18 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL, // seestate S_NULL, // seestate
sfx_s3kb8, // seesound sfx_s3kb8, // seesound
8, // reactiontime 8, // reactiontime
sfx_None, // attacksound sfx_s3k7e, // attacksound
S_SIGNPLAYER, // painstate S_NULL, // painstate
MT_SPARK, // painchance 0, // painchance
sfx_s3kb8, // painsound sfx_None, // painsound
S_EGGMANSIGN, // meleestate S_NULL, // meleestate
S_CLEARSIGN, // missilestate S_NULL, // missilestate
S_SIGNSTOP, // deathstate S_NULL, // deathstate
S_NULL, // xdeathstate S_NULL, // xdeathstate
sfx_s3k64, // deathsound sfx_None, // deathsound
8, // speed 8, // speed
8*FRACUNIT, // radius 8*FRACUNIT, // radius
32*FRACUNIT, // height 48*FRACUNIT, // height
0, // display offset 0, // display offset
16, // mass 16, // mass
0, // damage 0, // damage
@ -8814,6 +8860,8 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
0, // damage 0, // damage
sfx_None, // activesound sfx_None, // activesound
MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_NOTHINK|MF_DONTENCOREMAP, // flags MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_NOTHINK|MF_DONTENCOREMAP, // flags
S_NULL // raisestate
},
{ // MT_SPIKEBALL { // MT_SPIKEBALL
521, // doomednum 521, // doomednum
@ -9332,7 +9380,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
409, // doomednum 409, // doomednum
S_1UP_BOX, // spawnstate S_1UP_BOX, // spawnstate
1, // spawnhealth 1, // spawnhealth
S_PLAY_BOX1, // seestate S_INVISIBLE, // seestate
sfx_None, // seesound sfx_None, // seesound
8, // reactiontime 8, // reactiontime
sfx_None, // attacksound sfx_None, // attacksound
@ -10277,7 +10325,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
-1, // doomednum -1, // doomednum
S_1UP_ICON1, // spawnstate S_1UP_ICON1, // spawnstate
1, // spawnhealth 1, // spawnhealth
S_PLAY_ICON1, // seestate S_INVISIBLE, // seestate
sfx_None, // seesound sfx_None, // seesound
8, // reactiontime 8, // reactiontime
sfx_None, // attacksound sfx_None, // attacksound
@ -26438,9 +26486,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate S_NULL // raisestate
}, },
{ // MT_PINETREE { // MT_DAYTONAPINETREE
3204, // doomednum 3204, // doomednum
S_PINETREE, // spawnstate S_DAYTONAPINETREE, // spawnstate
1000, // spawnhealth 1000, // spawnhealth
S_NULL, // seestate S_NULL, // seestate
sfx_None, // seesound sfx_None, // seesound
@ -26465,9 +26513,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate S_NULL // raisestate
}, },
{ // MT_PINETREE_SIDE { // MT_DAYTONAPINETREE_SIDE
-1, // doomednum -1, // doomednum
S_PINETREE_SIDE,// spawnstate S_DAYTONAPINETREE_SIDE,// spawnstate
1000, // spawnhealth 1000, // spawnhealth
S_NULL, // seestate S_NULL, // seestate
sfx_None, // seesound 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 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 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 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 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 {"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 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 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 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_CORNFLOWER, 9, V_YELLOWMAP, false}, // SKINCOLOR_SUPERGOLD2 {"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_CORNFLOWER, 8, V_YELLOWMAP, false}, // SKINCOLOR_SUPERGOLD3 {"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_CORNFLOWER, 8, V_YELLOWMAP, false}, // SKINCOLOR_SUPERGOLD4 {"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_CORNFLOWER, 8, V_YELLOWMAP, false}, // SKINCOLOR_SUPERGOLD5 {"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 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_COBALT, 4, V_PERIDOTMAP, false}, // SKINCOLOR_SUPERPERIDOT2 {"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_COBALT, 3, V_PERIDOTMAP, false}, // SKINCOLOR_SUPERPERIDOT3 {"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_COBALT, 3, V_PERIDOTMAP, false}, // SKINCOLOR_SUPERPERIDOT4 {"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_COBALT, 3, V_PERIDOTMAP, false}, // SKINCOLOR_SUPERPERIDOT5 {"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 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 {"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

View file

@ -27,10 +27,6 @@
void A_Explode(); void A_Explode();
void A_Pain(); void A_Pain();
void A_Fall(); void A_Fall();
void A_MonitorPop();
void A_GoldMonitorPop();
void A_GoldMonitorRestore();
void A_GoldMonitorSparkle();
void A_Look(); void A_Look();
void A_Chase(); void A_Chase();
void A_FaceStabChase(); void A_FaceStabChase();
@ -60,7 +56,6 @@ void A_ScoreRise(); // Rise the score logo
void A_AttractChase(); // Ring Chase void A_AttractChase(); // Ring Chase
void A_DropMine(); // Drop Mine from Skim or Jetty-Syn Bomber void A_DropMine(); // Drop Mine from Skim or Jetty-Syn Bomber
void A_FishJump(); // Fish Jump void A_FishJump(); // Fish Jump
void A_ThrownRing(); // Sparkle trail for red ring
void A_GrenadeRing(); // SRB2kart void A_GrenadeRing(); // SRB2kart
void A_SetSolidSteam(); void A_SetSolidSteam();
void A_UnsetSolidSteam(); void A_UnsetSolidSteam();
@ -143,7 +138,6 @@ void A_LinedefExecute();
void A_PlaySeeSound(); void A_PlaySeeSound();
void A_PlayAttackSound(); void A_PlayAttackSound();
void A_PlayActiveSound(); void A_PlayActiveSound();
void A_1upThinker();
void A_BossZoom(); //Unused void A_BossZoom(); //Unused
void A_Boss1Chase(); void A_Boss1Chase();
void A_Boss2Chase(); void A_Boss2Chase();
@ -181,7 +175,7 @@ void A_ItemPop(); // SRB2kart
void A_JawzChase(); // SRB2kart void A_JawzChase(); // SRB2kart
void A_JawzExplode(); // SRB2kart void A_JawzExplode(); // SRB2kart
void A_SPBChase(); // SRB2kart void A_SPBChase(); // SRB2kart
void A_MineExplode(); // SRB2kart void A_SSMineExplode(); // SRB2kart
void A_BallhogExplode(); // SRB2kart void A_BallhogExplode(); // SRB2kart
void A_LightningFollowPlayer(); // SRB2kart: Lightning shield effect player chasing void A_LightningFollowPlayer(); // SRB2kart: Lightning shield effect player chasing
void A_FZBoomFlash(); // SRB2kart 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_MayonakaArrow(); //SRB2kart: midnight channel arrow sign
void A_ReaperThinker(); //SRB2kart: mementos reaper 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_MementosTPParticles(); //SRB2kart: mementos teleporter particles. Man that's a lot of actions for my shite.
void A_FlameParticle(); // SRB2kart
void A_FlameShieldPaper(); void A_FlameShieldPaper();
void A_OrbitNights(); void A_OrbitNights();
void A_GhostMe(); void A_GhostMe();
@ -276,7 +269,6 @@ void A_Boss5MakeItRain();
void A_Boss5MakeJunk(); void A_Boss5MakeJunk();
void A_LookForBetter(); void A_LookForBetter();
void A_Boss5BombExplode(); void A_Boss5BombExplode();
void A_DustDevilThink();
void A_TNTExplode(); void A_TNTExplode();
void A_DebrisRandom(); void A_DebrisRandom();
void A_TrainCameo(); void A_TrainCameo();

View file

@ -499,9 +499,9 @@ static void K_SetupMovingCapsule(mapthing_t *mt, mobj_t *mobj)
thinker_t *th; thinker_t *th;
// Find the inital target // 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; continue;
mo2 = (mobj_t *)th; mo2 = (mobj_t *)th;

View file

@ -64,7 +64,7 @@ boolean K_OrbinautJawzCollide(mobj_t *t1, mobj_t *t2)
t2->z += t2->height; t2->z += t2->height;
S_StartSound(t2, t2->info->deathsound); S_StartSound(t2, t2->info->deathsound);
P_KillMobj(t2, t1, t1); P_KillMobj(t2, t1, t1, 0);
P_SetObjectMomZ(t2, 8*FRACUNIT, false); P_SetObjectMomZ(t2, 8*FRACUNIT, false);
P_InstaThrust(t2, R_PointToAngle2(t1->x, t1->y, t2->x, t2->y)+ANGLE_90, 16*FRACUNIT); 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; damageitem = true;
// Bomb death // 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)) 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; t1->z += t1->height;
S_StartSound(t1, t1->info->deathsound); S_StartSound(t1, t1->info->deathsound);
P_KillMobj(t1, t2, t2); P_KillMobj(t1, t2, t2, 0);
P_SetObjectMomZ(t1, 8*FRACUNIT, false); P_SetObjectMomZ(t1, 8*FRACUNIT, false);
P_InstaThrust(t1, R_PointToAngle2(t2->x, t2->y, t1->x, t1->y)+ANGLE_90, 16*FRACUNIT); 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; t2->z += t2->height;
S_StartSound(t2, t2->info->deathsound); S_StartSound(t2, t2->info->deathsound);
P_KillMobj(t2, t1, t1); P_KillMobj(t2, t1, t1, 0);
P_SetObjectMomZ(t2, 8*FRACUNIT, false); P_SetObjectMomZ(t2, 8*FRACUNIT, false);
P_InstaThrust(t2, R_PointToAngle2(t1->x, t1->y, t2->x, t2->y)+ANGLE_90, 16*FRACUNIT); 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; t1->z += t1->height;
S_StartSound(t1, t1->info->deathsound); S_StartSound(t1, t1->info->deathsound);
P_KillMobj(t1, t2, t2); P_KillMobj(t1, t2, t2, 0);
P_SetObjectMomZ(t1, 8*FRACUNIT, false); P_SetObjectMomZ(t1, 8*FRACUNIT, false);
P_InstaThrust(t1, R_PointToAngle2(t2->x, t2->y, t1->x, t1->y)+ANGLE_90, 16*FRACUNIT); 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 // Melt item
S_StartSound(t2, sfx_s3k43); S_StartSound(t2, sfx_s3k43);
P_KillMobj(t1, t2, t2); P_KillMobj(t1, t2, t2, 0);
return true; return true;
} }
else else
@ -289,7 +289,7 @@ boolean K_MineCollide(mobj_t *t1, mobj_t *t2)
// Bomb punting // Bomb punting
if ((t1->state >= &states[S_SSMINE1] && t1->state <= &states[S_SSMINE4]) if ((t1->state >= &states[S_SSMINE1] && t1->state <= &states[S_SSMINE4])
|| (t1->state >= &states[S_SSMINE_DEPLOY8] && t1->state <= &states[S_SSMINE_DEPLOY13])) || (t1->state >= &states[S_SSMINE_DEPLOY8] && t1->state <= &states[S_SSMINE_DEPLOY13]))
P_KillMobj(t1, t2, t2); P_KillMobj(t1, t2, t2, 0);
else else
K_PuntMine(t1, t2); 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) || t2->type == MT_ORBINAUT_SHIELD || t2->type == MT_JAWZ_SHIELD)
{ {
// Bomb death // Bomb death
P_KillMobj(t1, t2, t2); P_KillMobj(t1, t2, t2, 0);
// Other Item Damage // Other Item Damage
if (t2->eflags & MFE_VERTICALFLIP) if (t2->eflags & MFE_VERTICALFLIP)
@ -306,7 +306,7 @@ boolean K_MineCollide(mobj_t *t1, mobj_t *t2)
t2->z += t2->height; t2->z += t2->height;
S_StartSound(t2, t2->info->deathsound); S_StartSound(t2, t2->info->deathsound);
P_KillMobj(t2, t1, t1); P_KillMobj(t2, t1, t1, 0);
P_SetObjectMomZ(t2, 8*FRACUNIT, false); P_SetObjectMomZ(t2, 8*FRACUNIT, false);
P_InstaThrust(t2, R_PointToAngle2(t1->x, t1->y, t2->x, t2->y)+ANGLE_90, 16*FRACUNIT); 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) else if (t2->flags & MF_SHOOTABLE)
{ {
// Bomb death // Bomb death
P_KillMobj(t1, t2, t2); P_KillMobj(t1, t2, t2, 0);
// Shootable damage // Shootable damage
P_DamageMobj(t2, t1, t1->target, 1, 0); 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])); 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]); 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_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) else if (t2->flags & MF_SHOOTABLE)
{ {
// Shootable damage // Shootable damage
P_KillMobj(t2, t2, t1->target); P_KillMobj(t2, t2, t1->target, 0);
// This item damage // This item damage
P_KillMobj(t1, t2, t2); P_KillMobj(t1, t2, t2, 0);
} }
return true; return true;
@ -394,7 +394,7 @@ boolean K_SMKIceBlockCollide(mobj_t *t1, mobj_t *t2)
return false; return false;
if (t1->health) if (t1->health)
P_KillMobj(t1, t2, t2); P_KillMobj(t1, t2, t2, 0);
/*if (t2->player && (t2->player->kartstuff[k_invincibilitytimer] > 0 /*if (t2->player && (t2->player->kartstuff[k_invincibilitytimer] > 0
|| t2->player->kartstuff[k_growshrinktimer] > 0)) || t2->player->kartstuff[k_growshrinktimer] > 0))

View file

@ -4331,7 +4331,7 @@ killnext:
banana->z += banana->height; banana->z += banana->height;
S_StartSound(banana, banana->info->deathsound); S_StartSound(banana, banana->info->deathsound);
P_KillMobj(banana, inflictor, source); P_KillMobj(banana, inflictor, source, 0);
P_SetObjectMomZ(banana, 8*FRACUNIT, false); P_SetObjectMomZ(banana, 8*FRACUNIT, false);
if (inflictor) if (inflictor)
@ -4578,7 +4578,7 @@ void K_DropRocketSneaker(player_t *player)
if (shoe->type != MT_ROCKETSNEAKER) if (shoe->type != MT_ROCKETSNEAKER)
return; //woah, not a rocketsneaker, bail! safeguard in case this gets used when you're holding non-rocketsneakers 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->flags &= ~MF_NOGRAVITY;
shoe->angle += ANGLE_45; shoe->angle += ANGLE_45;
@ -4615,7 +4615,7 @@ void K_DropKitchenSink(player_t *player)
if (player->mo->hnext->type != MT_SINK_SHIELD) if (player->mo->hnext->type != MT_SINK_SHIELD)
return; //so we can just call this function regardless of what is being held 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); P_SetTarget(&player->mo->hnext, NULL);
} }

View file

@ -1999,23 +1999,23 @@ void K_AdjustWaypointsParameters (void)
} }
for ( for (
th = thinkercap.next; th = thlist[THINK_MOBJ].next;
th != &thinkercap; th != &thlist[THINK_MOBJ];
th = th->next th = th->next
){ ){
if (th->function.acp1 == (actionf_p1)P_MobjThinker) if (th->function.acp1 == (actionf_p1)P_RemoveThinkerDelayed)
{ continue;
anchor = (const mobj_t *)th;
if (anchor->type == MT_WAYPOINT_ANCHOR) anchor = (const mobj_t *)th;
{
for ( if (anchor->type == MT_WAYPOINT_ANCHOR)
waypointmobj = waypointcap; {
waypointmobj; for (
waypointmobj = waypointmobj->tracer waypointmobj = waypointcap;
){ waypointmobj;
K_AnchorWaypointRadius(waypointmobj, anchor); waypointmobj = waypointmobj->tracer
} ){
K_AnchorWaypointRadius(waypointmobj, anchor);
} }
} }
} }

View file

@ -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 mobj_t *visual = P_SpawnMobj(lockon->x, lockon->y, lockon->z, MT_LOCKON); // positioning, flip handled in P_SceneryThinker
P_SetTarget(&visual->target, lockon); P_SetTarget(&visual->target, lockon);
visual->flags2 |= MF2_DONTDRAW; visual->drawflags |= MFD_DONTDRAW;
P_SetMobjStateNF(visual, state); P_SetMobjStateNF(visual, state);
} }
return 0; return 0;
@ -1458,31 +1458,6 @@ static int lib_pEarthquake(lua_State *L)
return 0; 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) static int lib_pSwitchShield(lua_State *L)
{ {
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
@ -4083,9 +4058,6 @@ static luaL_Reg lib[] = {
{"P_LookForEnemies",lib_pLookForEnemies}, {"P_LookForEnemies",lib_pLookForEnemies},
{"P_NukeEnemies",lib_pNukeEnemies}, {"P_NukeEnemies",lib_pNukeEnemies},
{"P_Earthquake",lib_pEarthquake}, {"P_Earthquake",lib_pEarthquake},
{"P_HomingAttack",lib_pHomingAttack},
//{"P_SuperReady",lib_pSuperReady},
{"P_Telekinesis",lib_pTelekinesis},
{"P_SwitchShield",lib_pSwitchShield}, {"P_SwitchShield",lib_pSwitchShield},
// p_map // p_map

View file

@ -142,15 +142,6 @@ int LUA_PushGlobals(lua_State *L, const char *word)
} else if (fastcmp(word,"maptol")) { } else if (fastcmp(word,"maptol")) {
lua_pushinteger(L, maptol); lua_pushinteger(L, maptol);
return 1; 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")) { } else if (fastcmp(word,"circuitmap")) {
lua_pushboolean(L, circuitmap); lua_pushboolean(L, circuitmap);
return 1; return 1;

View file

@ -103,11 +103,6 @@ void A_BossZoom(mobj_t *actor);
void A_BossScream(mobj_t *actor); void A_BossScream(mobj_t *actor);
void A_Scream(mobj_t *actor); void A_Scream(mobj_t *actor);
void A_Pain(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_Explode(mobj_t *actor);
void A_BossDeath(mobj_t *actor); void A_BossDeath(mobj_t *actor);
void A_CustomPower(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_AttractChase(mobj_t *actor);
void A_DropMine(mobj_t *actor); void A_DropMine(mobj_t *actor);
void A_FishJump(mobj_t *actor); void A_FishJump(mobj_t *actor);
void A_ThrownRing(mobj_t *actor);
void A_GrenadeRing(mobj_t *actor); void A_GrenadeRing(mobj_t *actor);
void A_SetSolidSteam(mobj_t *actor); void A_SetSolidSteam(mobj_t *actor);
void A_UnsetSolidSteam(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_JawzChase(mobj_t *actor); // SRB2kart
void A_JawzExplode(mobj_t *actor); // SRB2kart void A_JawzExplode(mobj_t *actor); // SRB2kart
void A_SPBChase(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_BallhogExplode(mobj_t *actor); // SRB2kart
void A_LightningFollowPlayer(mobj_t *actor); // SRB2kart void A_LightningFollowPlayer(mobj_t *actor); // SRB2kart
void A_FZBoomFlash(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_MayonakaArrow(mobj_t *actor); //SRB2kart
void A_ReaperThinker(mobj_t *actor); //SRB2kart void A_ReaperThinker(mobj_t *actor); //SRB2kart
void A_MementosTPParticles(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_FlameShieldPaper(mobj_t *actor); // SRB2kart
void A_OrbitNights(mobj_t *actor); void A_OrbitNights(mobj_t *actor);
void A_GhostMe(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_Boss5MakeJunk(mobj_t *actor);
void A_LookForBetter(mobj_t *actor); void A_LookForBetter(mobj_t *actor);
void A_Boss5BombExplode(mobj_t *actor); void A_Boss5BombExplode(mobj_t *actor);
void A_DustDevilThink(mobj_t *actor);
void A_TNTExplode(mobj_t *actor); void A_TNTExplode(mobj_t *actor);
void A_DebrisRandom(mobj_t *actor); void A_DebrisRandom(mobj_t *actor);
void A_TrainCameo(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); I_Assert(movedir < NUMDIRS);
tryx = actor->x + FixedMul(speed*xspeed[movedir], actor->scale); tryx = actor->x + FixedMul(speed*xspeed[movedir], actor->scale);
if (twodlevel || actor->flags2 & MF2_TWOD) tryy = actor->y + FixedMul(speed*yspeed[movedir], actor->scale);
tryy = actor->y;
else
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 if (actor->type == MT_SKIM && !P_WaterInSector(actor, tryx, tryy)) // bail out if sector lacks water
return false; return false;
@ -617,8 +606,6 @@ void P_NewChaseDir(mobj_t *actor)
else else
d[1] = DI_NODIR; d[1] = DI_NODIR;
if (twodlevel || actor->flags2 & MF2_TWOD)
d[2] = DI_NODIR;
if (deltay < -FixedMul(10*FRACUNIT, actor->scale)) if (deltay < -FixedMul(10*FRACUNIT, actor->scale))
d[2] = DI_SOUTH; d[2] = DI_SOUTH;
else if (deltay > FixedMul(10*FRACUNIT, actor->scale)) else if (deltay > FixedMul(10*FRACUNIT, actor->scale))
@ -2833,10 +2820,10 @@ void A_Boss1Laser(mobj_t *actor)
SKINCOLOR_SUPERRED3, SKINCOLOR_SUPERRED3,
SKINCOLOR_SUPERRED4, SKINCOLOR_SUPERRED4,
SKINCOLOR_SUPERRED5, SKINCOLOR_SUPERRED5,
SKINCOLOR_FLAME, SKINCOLOR_KETCHUP,
SKINCOLOR_RED, SKINCOLOR_RED,
SKINCOLOR_RED, SKINCOLOR_RED,
SKINCOLOR_FLAME, SKINCOLOR_KETCHUP,
SKINCOLOR_SUPERRED5, SKINCOLOR_SUPERRED5,
SKINCOLOR_SUPERRED4, SKINCOLOR_SUPERRED4,
SKINCOLOR_SUPERRED3, SKINCOLOR_SUPERRED3,
@ -3406,281 +3393,6 @@ void A_Fall(mobj_t *actor)
actor->extravalue2 = locvar1; 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 // 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. // 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 (P_IsLocalPlayer(player) && !player->powers[pw_super])
{ {
if (mariomode) P_PlayJingle(player, JT_INV);
G_GhostAddColor(INT32) (player - players), GHC_INVINCIBLE);
P_PlayJingle(player, (mariomode) ? JT_MINV : JT_INV);
strlcpy(S_sfx[sfx_None].caption, "Invincibility", 14); strlcpy(S_sfx[sfx_None].caption, "Invincibility", 14);
S_StartCaption(sfx_None, -1, player->powers[pw_invulnerability]); 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 (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); S_SpeedMusic(1.4f);
else
P_PlayJingle(player, JT_SHOES);
strlcpy(S_sfx[sfx_None].caption, "Speed shoes", 12); strlcpy(S_sfx[sfx_None].caption, "Speed shoes", 12);
S_StartCaption(sfx_None, -1, player->powers[pw_sneakers]); 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]); 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; 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; return;
} }
else else
@ -4732,170 +4440,6 @@ void A_FishJump(mobj_t *actor)
P_SetMobjStateNF(actor, actor->info->meleestate); 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 //{ SRB2kart - A_GRENADERING
static mobj_t *grenade; static mobj_t *grenade;
static fixed_t explodedist; 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]))) || ((gametyperules & GTR_BUMPERS) && thing->player && thing->player->kartstuff[k_bumper] <= 0 && thing->player->kartstuff[k_comebacktimer])))
return true; 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 // see if it went over / under
if (grenade->z - explodedist > thing->z + thing->height) if (grenade->z - explodedist > thing->z + thing->height)
return true; // overhead 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 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); K_ExplodePlayer(thing->player, grenade->target, grenade);
else else
P_DamageMobj(thing, grenade, grenade->target, 1); P_DamageMobj(thing, grenade, grenade->target, 1, 0);
return true; return true;
} }
void A_MineExplode(mobj_t *actor) void A_SSMineExplode(mobj_t *actor)
{ {
INT32 bx, by, xl, xh, yl, yh; INT32 bx, by, xl, xh, yl, yh;
INT32 d; INT32 d;
@ -5023,7 +4562,7 @@ void A_MineExplode(mobj_t *actor)
mobjtype_t type; mobjtype_t type;
explodedist = FixedMul((3*actor->info->painchance)/2, mapobjectscale); explodedist = FixedMul((3*actor->info->painchance)/2, mapobjectscale);
if (LUA_CallAction("A_MineExplode", actor)) if (LUA_CallAction("A_SSMineExplode", actor))
return; return;
if (actor->flags2 & MF2_DEBRIS) 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->eflags & MFE_VERTICALFLIP && actor->z + actor->height == actor->ceilingz))
&& !actor->reactiontime) && !actor->reactiontime)
{ {
if (twodlevel || actor->flags2 & MF2_TWOD) if (P_RandomChance(FRACUNIT/2))
{
if (P_RandomChance(FRACUNIT/2))
actor->angle += ANGLE_180;
}
else if (P_RandomChance(FRACUNIT/2))
actor->angle += ANGLE_90; actor->angle += ANGLE_90;
else else
actor->angle -= ANGLE_90; actor->angle -= ANGLE_90;
@ -6528,10 +6062,6 @@ void A_MixUp(mobj_t *actor)
} }
//get this done first! //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; tempthing = players[one].mo->tracer;
P_SetTarget(&players[one].mo->tracer, players[two].mo->tracer); P_SetTarget(&players[one].mo->tracer, players[two].mo->tracer);
P_SetTarget(&players[two].mo->tracer, tempthing); P_SetTarget(&players[two].mo->tracer, tempthing);
@ -6542,8 +6072,8 @@ void A_MixUp(mobj_t *actor)
players[two].speed = transspeed; players[two].speed = transspeed;
//set flags variables now but DON'T set them. //set flags variables now but DON'T set them.
carry1 = (players[one].powers[pw_carry] == CR_PLAYER ? CR_NONE : players[one].powers[pw_carry]); carry1 = players[one].powers[pw_carry];
carry2 = (players[two].powers[pw_carry] == CR_PLAYER ? CR_NONE : players[two].powers[pw_carry]); carry2 = players[two].powers[pw_carry];
x = players[one].mo->x; x = players[one].mo->x;
y = players[one].mo->y; y = players[one].mo->y;
@ -6617,7 +6147,7 @@ void A_MixUp(mobj_t *actor)
players[i].rmomx = players[i].rmomy = 1; players[i].rmomx = players[i].rmomy = 1;
players[i].cmomx = players[i].cmomy = 0; 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; transspeed[counter] = players[i].speed;
transtracer[counter] = players[i].mo->tracer; transtracer[counter] = players[i].mo->tracer;
@ -6669,8 +6199,6 @@ void A_MixUp(mobj_t *actor)
//...carry after. same reasoning. //...carry after. same reasoning.
players[i].powers[pw_carry] = transcarry[teleportfrom]; 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; teleported[i] = true;
counter++; 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) if (actor->reactiontime)
actor->reactiontime--; actor->reactiontime--;
@ -8893,7 +8410,7 @@ void A_BossJetFume(mobj_t *actor)
P_SetScale(filler, (filler->destscale = actor->scale/3)); P_SetScale(filler, (filler->destscale = actor->scale/3));
if (actor->eflags & MFE_VERTICALFLIP) if (actor->eflags & MFE_VERTICALFLIP)
filler->flags2 |= MF2_OBJECTFLIP; filler->flags2 |= MF2_OBJECTFLIP;
filler->color = SKINCOLOR_ICY; filler->color = SKINCOLOR_CYAN;
filler->colorized = true; filler->colorized = true;
} }
else if (locvar1 == 3) // Boss 4 jet flame else if (locvar1 == 3) // Boss 4 jet flame
@ -9978,7 +9495,7 @@ void A_RandomShadowFrame(mobj_t *actor)
&& P_IsObjectOnGround(actor->target) && P_IsObjectOnGround(actor->target)
&& actor->z == actor->target->z) && 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<<FRACBITS); P_InstaThrust(actor->target, actor->angle, 16<<FRACBITS);
fire = P_SpawnMobj(actor->target->x, actor->target->y, actor->target->z, MT_THOK); fire = P_SpawnMobj(actor->target->x, actor->target->y, actor->target->z, MT_THOK);
P_SetMobjStateNF(fire, S_QUICKBOOM1); P_SetMobjStateNF(fire, S_QUICKBOOM1);
@ -10023,7 +9540,7 @@ void A_RoamingShadowThinker(mobj_t *actor)
{ {
// send them flying and spawn the WIND! // send them flying and spawn the WIND!
P_InstaThrust(actor->target, 0, 0); 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<<FRACBITS, false); P_SetObjectMomZ(actor->target, 16<<FRACBITS, false);
S_StartSound(actor->target, sfx_wind1); S_StartSound(actor->target, sfx_wind1);
@ -10103,16 +9620,16 @@ void A_MementosTPParticles(mobj_t *actor)
particle->frame = 0; particle->frame = 0;
particle->color = ((i%2) ? (SKINCOLOR_RED) : (SKINCOLOR_BLACK)); particle->color = ((i%2) ? (SKINCOLOR_RED) : (SKINCOLOR_BLACK));
particle->destscale = 1; 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. // 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. // Doesn't seem like much given the small amount of mobjs this map has but heh.
if (!actor->target) 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; continue;
mo2 = (mobj_t *)th; 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. // 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; continue;
mo2 = (mobj_t *)th; mo2 = (mobj_t *)th;
@ -10269,15 +9786,14 @@ void A_ReaperThinker(mobj_t *actor)
// Waypoint behavior. // Waypoint behavior.
if (actor->target->type == MT_REAPERWAYPOINT) if (actor->target->type == MT_REAPERWAYPOINT)
{ {
if (R_PointToDist2(actor->x, actor->y, actor->target->x, actor->target->y) < 22<<FRACBITS) if (R_PointToDist2(actor->x, actor->y, actor->target->x, actor->target->y) < 22<<FRACBITS)
{ {
P_SetTarget(&actor->target, NULL); // remove target so we can default back to first waypoint if things go ham. P_SetTarget(&actor->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. // 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; continue;
mo2 = (mobj_t *)th; 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)<<FRACBITS),
actor->y + (P_RandomRange(-rad, rad)<<FRACBITS),
actor->z + (P_RandomRange(hei/2, hei)<<FRACBITS),
actor->info->painchance);
par->momz = actor->scale<<1;
}
void A_FlameShieldPaper(mobj_t *actor) void A_FlameShieldPaper(mobj_t *actor)
{ {
INT32 framea = 0; INT32 framea = 0;
@ -12601,16 +12101,16 @@ void P_InternalFlickySetColor(mobj_t *actor, UINT8 extrainfo)
SKINCOLOR_RED, SKINCOLOR_RED,
SKINCOLOR_CYAN, SKINCOLOR_CYAN,
SKINCOLOR_BLUE, SKINCOLOR_BLUE,
SKINCOLOR_VAPOR, SKINCOLOR_PASTEL,
SKINCOLOR_PURPLE, SKINCOLOR_PURPLE,
SKINCOLOR_BUBBLEGUM, SKINCOLOR_VIOLET,
SKINCOLOR_NEON, SKINCOLOR_FUCHSIA,
SKINCOLOR_BLACK, SKINCOLOR_BLACK,
SKINCOLOR_BEIGE, SKINCOLOR_BEIGE,
SKINCOLOR_LAVENDER, SKINCOLOR_LAVENDER,
SKINCOLOR_RUBY, SKINCOLOR_RUBY,
SKINCOLOR_SALMON, SKINCOLOR_BLOSSOM,
SKINCOLOR_SUNSET, SKINCOLOR_SUNSLAM,
SKINCOLOR_ORANGE, SKINCOLOR_ORANGE,
SKINCOLOR_YELLOW, SKINCOLOR_YELLOW,
}; };
@ -14308,155 +13808,6 @@ void A_Boss5BombExplode(mobj_t *actor)
quake.radius = 20*actor->radius; 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 // stuff used by A_TNTExplode
static mobj_t *barrel; static mobj_t *barrel;
static fixed_t exploderadius; 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 if (!(actor->flags & MF_PUSHABLE) || (actor->movecount != 1)) // if being ridden or haven't moved, don't disappear
actor->fuse = actor->info->painchance; actor->fuse = actor->info->painchance;
else if (actor->fuse < 2*TICRATE) else if (actor->fuse < 2*TICRATE)
actor->flags2 ^= MF2_DONTDRAW; actor->drawflags ^= MFD_DONTDRAW;
} }

View file

@ -268,7 +268,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
special->momx = special->momy = special->momz = 0; special->momx = special->momy = special->momz = 0;
P_SetTarget(&special->target, toucher); P_SetTarget(&special->target, toucher);
P_KillMobj(special, toucher, toucher); P_KillMobj(special, toucher, toucher, 0);
break; break;
case MT_KARMAHITBOX: case MT_KARMAHITBOX:
if (!special->target->player) 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_growshrinktimer] > 0
|| player->kartstuff[k_flamedash] > 0) || player->kartstuff[k_flamedash] > 0)
{ {
P_KillMobj(special, toucher, toucher); P_KillMobj(special, toucher, toucher, 0);
return; return;
} }
@ -772,10 +772,10 @@ void P_CheckTimeLimit(void)
P_RespawnBattleBoxes(); // FORCE THESE TO BE RESPAWNED FOR THIS!!!!!!! P_RespawnBattleBoxes(); // FORCE THESE TO BE RESPAWNED FOR THIS!!!!!!!
// Find us an item box to center on. // 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; mobj_t *thismo;
if (th->function.acp1 != (actionf_p1)P_MobjThinker) if (th->function.acp1 == (actionf_p1)P_RemoveThinkerDelayed)
continue; continue;
thismo = (mobj_t *)th; 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; mobj_t *cur = target->hnext;
while (cur && !P_MobjWasRemoved(cur)) while (cur && !P_MobjWasRemoved(cur))
{ {
P_KillMobj(cur, inflictor, source); P_KillMobj(cur, inflictor, source, 0);
cur = cur->hnext; cur = cur->hnext;
} }
} }
@ -1651,7 +1651,7 @@ static void P_KillPlayer(player_t *player, mobj_t *source, INT32 damage)
P_ResetPlayer(player); P_ResetPlayer(player);
if (!player->spectator) if (!player->spectator)
player->mo->flags2 &= ~MF2_DONTDRAW; player->mo->drawflags &= ~MFD_DONTDRAW;
P_SetPlayerMobjState(player->mo, player->mo->info->deathstate); P_SetPlayerMobjState(player->mo, player->mo->info->deathstate);
@ -1708,7 +1708,7 @@ void P_RemoveShield(player_t *player)
} }
else else
{ // Second layer shields { // 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; player->mo->color = player->skincolor;
G_GhostAddColor((INT32) (player - players), GHC_NORMAL); G_GhostAddColor((INT32) (player - players), GHC_NORMAL);

View file

@ -57,10 +57,6 @@
#define AIMINGTOSLOPE(aiming) FINESINE((aiming>>ANGLETOFINESHIFT) & FINEMASK) #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) #define P_GetPlayerViewHeight(player) (41*player->mo->height/48)
typedef enum typedef enum
@ -208,7 +204,6 @@ void P_DoTimeOver(player_t *player);
void P_InstaThrust(mobj_t *mo, angle_t angle, fixed_t move); 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_ReturnThrustX(mobj_t *mo, angle_t angle, fixed_t move);
fixed_t P_ReturnThrustY(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); mobj_t *P_LookForFocusTarget(player_t *player, mobj_t *exclude, SINT8 direction, UINT8 lockonflags);

View file

@ -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 // Horizontal speed is used as a minimum thrust, not a direct replacement
finalSpeed = max(objectSpeed, finalSpeed); finalSpeed = max(objectSpeed, finalSpeed);
P_InstaThrustEvenIn2D(object, finalAngle, finalSpeed); P_InstaThrust(object, finalAngle, finalSpeed);
} }
// Re-solidify // Re-solidify
@ -425,15 +425,6 @@ static void P_DoFanAndGasJet(mobj_t *spring, mobj_t *object)
// limit the speed if too high // limit the speed if too high
if (flipval*object->momz > FixedMul(speed, spring->scale)) if (flipval*object->momz > FixedMul(speed, spring->scale))
object->momz = flipval*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; break;
case MT_STEAM: // Steam case MT_STEAM: // Steam
if (zdist > FixedMul(16*FRACUNIT, spring->scale)) if (zdist > FixedMul(16*FRACUNIT, spring->scale))
@ -452,15 +443,6 @@ static void P_DoFanAndGasJet(mobj_t *spring, mobj_t *object)
} }
else else
object->momz = flipval*FixedMul(speed, FixedSqrt(FixedMul(spring->scale, object->scale))); // scale the speed with both objects' scales, just like with springs! 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; break;
default: default:
break; break;
@ -1321,7 +1303,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
if (thing->type == MT_FAN || thing->type == MT_STEAM) if (thing->type == MT_FAN || thing->type == MT_STEAM)
P_DoFanAndGasJet(thing, tmthing); 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 if ( thing->z <= tmthing->z + tmthing->height
&& tmthing->z <= thing->z + thing->height) && tmthing->z <= thing->z + thing->height)
@ -1415,9 +1397,9 @@ static boolean PIT_CheckThing(mobj_t *thing)
|| tmthing->player->kartstuff[k_growshrinktimer] > 0) || tmthing->player->kartstuff[k_growshrinktimer] > 0)
{ {
if (thing->type == MT_BLUEROBRA_JOINT) if (thing->type == MT_BLUEROBRA_JOINT)
P_KillMobj(thing->target, tmthing, tmthing); P_KillMobj(thing->target, tmthing, tmthing, 0);
else else
P_KillMobj(thing, tmthing, tmthing); P_KillMobj(thing, tmthing, tmthing, 0);
return true; return true;
} }
else else
@ -1440,7 +1422,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
if (tmthing->player->kartstuff[k_invincibilitytimer] > 0 if (tmthing->player->kartstuff[k_invincibilitytimer] > 0
|| tmthing->player->kartstuff[k_growshrinktimer] > 0) || tmthing->player->kartstuff[k_growshrinktimer] > 0)
{ {
P_KillMobj(thing, tmthing, tmthing); P_KillMobj(thing, tmthing, tmthing, 0);
return true; // kill return true; // kill
} }
@ -1471,7 +1453,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
if (tmthing->player->kartstuff[k_invincibilitytimer] > 0 if (tmthing->player->kartstuff[k_invincibilitytimer] > 0
|| tmthing->player->kartstuff[k_growshrinktimer] > 0) || tmthing->player->kartstuff[k_growshrinktimer] > 0)
{ {
P_KillMobj(thing, tmthing, tmthing); P_KillMobj(thing, tmthing, tmthing, 0);
return true; 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); subsector_t *s = R_PointInSubsector(x, y);
boolean retval = true; boolean retval = true;
boolean itsatwodlevel = false;
UINT8 i; UINT8 i;
floatok = false; floatok = false;
if (twodlevel) for (i = 0; i <= r_splitscreen; i++)
itsatwodlevel = true;
else
{ {
for (i = 0; i <= r_splitscreen; i++) if (thiscam == &camera[i])
{ {
if (thiscam == &camera[i] && players[displayplayers[i]].mo // i is now splitscreen cam num
&& (players[displayplayers[i]].mo->flags2 & MF2_TWOD)) break;
{
itsatwodlevel = true;
break;
}
} }
} }
if (!itsatwodlevel && players[displayplayers[0]].mo) if (players[displayplayers[i]].mo)
{ {
fixed_t tryx = thiscam->x; fixed_t tryx = thiscam->x;
fixed_t tryy = thiscam->y; fixed_t tryy = thiscam->y;
for (i = 0; i <= r_splitscreen; i++)
{
#ifndef NOCLIPCAM #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 #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 #endif
{ {
floatok = true; floatok = true;
thiscam->floorz = thiscam->z; thiscam->floorz = thiscam->z;
thiscam->ceilingz = thiscam->z + thiscam->height; thiscam->ceilingz = thiscam->z + thiscam->height;
thiscam->x = x; thiscam->x = x;
thiscam->y = y; thiscam->y = y;
thiscam->subsector = s; thiscam->subsector = s;
return true; return true;
}
} }
do { do {
@ -2907,7 +2880,6 @@ static boolean P_ThingHeightClip(mobj_t *thing)
ffloor_t *oldceilingrover = thing->ceilingrover; ffloor_t *oldceilingrover = thing->ceilingrover;
boolean onfloor = P_IsObjectOnGround(thing);//(thing->z <= thing->floorz); boolean onfloor = P_IsObjectOnGround(thing);//(thing->z <= thing->floorz);
ffloor_t *rover = NULL; ffloor_t *rover = NULL;
boolean bouncing;
boolean hitfloor = false; boolean hitfloor = false;
if (thing->flags & MF_NOCLIPHEIGHT) if (thing->flags & MF_NOCLIPHEIGHT)
@ -2931,9 +2903,7 @@ static boolean P_ThingHeightClip(mobj_t *thing)
if (tmfloorz > oldfloorz+thing->height) if (tmfloorz > oldfloorz+thing->height)
return true; return true;
bouncing = thing->player && thing->state-states == S_PLAY_BOUNCE_LANDING && P_IsObjectOnGround(thing); if (onfloor && !(thing->flags & MF_NOGRAVITY) && floormoved)
if ((onfloor || bouncing) && !(thing->flags & MF_NOGRAVITY) && floormoved)
{ {
rover = (thing->eflags & MFE_VERTICALFLIP) ? oldceilingrover : oldfloorrover; 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 ~FF_EXISTS, don't set mobj Z.
if (!rover || ((rover->flags & FF_EXISTS) && (rover->flags & FF_SOLID))) if (!rover || ((rover->flags & FF_EXISTS) && (rover->flags & FF_SOLID)))
{ {
hitfloor = bouncing; hitfloor = false;
if (thing->eflags & MFE_VERTICALFLIP) if (thing->eflags & MFE_VERTICALFLIP)
thing->pmomz = thing->ceilingz - (thing->z + thing->height); thing->pmomz = thing->ceilingz - (thing->z + thing->height);
else else
@ -3646,16 +3616,8 @@ stairstep:
P_HitSlideLine(bestslideline); // clip the moves P_HitSlideLine(bestslideline); // clip the moves
if ((twodlevel || (mo->flags2 & MF2_TWOD)) && mo->player) mo->momx = tmxmove;
{ mo->momy = tmymove;
mo->momx = tmxmove;
tmymove = 0;
}
else
{
mo->momx = tmxmove;
mo->momy = tmymove;
}
do { do {
if (tmxmove > mo->radius) { if (tmxmove > mo->radius) {
@ -3943,15 +3905,9 @@ static boolean PIT_RadiusAttack(mobj_t *thing)
if (thing == bombspot) // ignore the bomb itself (Deton fix) if (thing == bombspot) // ignore the bomb itself (Deton fix)
return true; 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; 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) if ((thing->flags & (MF_MONITOR|MF_SHOOTABLE)) != MF_SHOOTABLE)
return true; return true;

File diff suppressed because it is too large Load diff

View file

@ -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); cur->hnext = P_SpawnMobj(sign->x, sign->y, sign->z, MT_SIGN_PIECE);
P_SetTarget(&cur->hnext->target, sign); P_SetTarget(&cur->hnext->target, sign);
cur->hnext->skin = pmo->skin; 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->extravalue1 = 7;
cur->hnext->extravalue2 = 0; cur->hnext->extravalue2 = 0;
@ -4909,15 +4909,7 @@ DoneSection2:
player->powers[pw_carry] = CR_ZOOMTUBE; player->powers[pw_carry] = CR_ZOOMTUBE;
player->speed = speed; player->speed = speed;
player->pflags |= PF_SPINNING; player->pflags &= ~(PF_SLIDING);
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);
}
} }
break; break;

View file

@ -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 // don't run in place after a teleport
if (!dontstopmove) 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->cmomx = thing->player->cmomy = 0;
thing->player->rmomx = thing->player->rmomy = 0; thing->player->rmomx = thing->player->rmomy = 0;
thing->player->speed = 0; thing->player->speed = 0;
P_ResetPlayer(thing->player); 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->reactiontime = TICRATE/2; // don't move for about half a second
thing->player->drawangle = angle; thing->player->drawangle = angle;

View file

@ -107,21 +107,11 @@ void P_Thrust(mobj_t *mo, angle_t angle, fixed_t move)
{ {
angle >>= ANGLETOFINESHIFT; 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->momx += FixedMul(move, FINECOSINE(angle));
mo->momy += FixedMul(move, FINESINE(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, 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) 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; angle >>= ANGLETOFINESHIFT;
mo->momx = FixedMul(move, FINECOSINE(angle)); mo->momx = FixedMul(move, FINECOSINE(angle));
mo->momy = FixedMul(move,FINESINE(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));
} }
// Returns a location (hard to explain - go see how it is used) // Returns a location (hard to explain - go see how it is used)
@ -349,7 +329,7 @@ void P_GiveEmerald(boolean spawnObj)
if (i == pnum) if (i == pnum)
continue; 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]) if (!(player->pflags & PF_SLIDING) && player->mo->state == &states[player->mo->info->painstate] && player->powers[pw_flashing])
return true; return true;
if (player->mo->state == &states[S_PLAY_STUN]) if (player->mo->state == &states[S_KART_SQUISH])
return true; return true;
return false; return false;
@ -559,8 +539,6 @@ void P_PlayLivesJingle(player_t *player)
if (use1upSound || cv_1upsound.value) if (use1upSound || cv_1upsound.value)
S_StartSound(NULL, sfx_oneup); S_StartSound(NULL, sfx_oneup);
else if (mariomode)
S_StartSound(NULL, sfx_marioa);
else else
{ {
P_PlayJingle(player, JT_1UP); P_PlayJingle(player, JT_1UP);
@ -2434,28 +2412,18 @@ void P_MovePlayer(player_t *player)
K_DriftDustHandling(player->mo); K_DriftDustHandling(player->mo);
// Crush test... // Crush test...
if ((player->mo->ceilingz - player->mo->floorz < player->mo->height) if ((player->mo->ceilingz - player->mo->floorz < player->mo->height) && !(player->mo->flags & MF_NOCLIP))
&& !(player->mo->flags & MF_NOCLIP))
{ {
/* // SRB2kart - no, we're not making the playerspin if ((netgame || multiplayer) && player->spectator)
if ((player->charability2 == CA2_SPINDASH) && !(player->pflags & PF_SPINNING)) P_DamageMobj(player->mo, NULL, NULL, 1, DMG_SPECTATOR); // Respawn crushed spectators
else
{ {
player->pflags |= PF_SPINNING; K_SquishPlayer(player, NULL, NULL); // SRB2kart - we don't kill when squished, we squish when squished.
P_SetPlayerMobjState(player->mo, S_PLAY_ROLL); // 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) if (player->playerstate == PST_DEAD)
return; return;
}
} }
#ifdef FLOORSPLATS #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)) 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;' 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); G_ClipAimingPitch((INT32 *)&angle);
@ -4750,9 +4718,7 @@ void P_PlayerThink(player_t *player)
player->powers[pw_ignorelatch] = 0; player->powers[pw_ignorelatch] = 0;
//pw_super acts as a timer now //pw_super acts as a timer now
if (player->powers[pw_super] if (player->powers[pw_super])
&& (player->mo->state < &states[S_PLAY_SUPER_TRANS1]
|| player->mo->state > &states[S_PLAY_SUPER_TRANS6]))
player->powers[pw_super]++; player->powers[pw_super]++;
// Flash player after being hit. // Flash player after being hit.
@ -4884,7 +4850,7 @@ void P_PlayerAfterThink(player_t *player)
// spectator invisibility and nogravity. // spectator invisibility and nogravity.
if ((netgame || multiplayer) && player->spectator) if ((netgame || multiplayer) && player->spectator)
{ {
player->mo->flags2 |= MF2_DONTDRAW; player->mo->drawflags |= MFD_DONTDRAW;
player->mo->flags |= MF_NOGRAVITY; player->mo->flags |= MF_NOGRAVITY;
} }

View file

@ -914,67 +914,6 @@ void S_StartSound(const void *origin, sfxenum_t sfx_id)
if (S_SoundDisabled()) if (S_SoundDisabled())
return; 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 // the volume is handled 8 bits
#ifdef HW3SOUND #ifdef HW3SOUND
if (hws_mode != HWS_DEFAULT_MODE) if (hws_mode != HWS_DEFAULT_MODE)