mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Make it past p_mobj
This commit is contained in:
parent
bc868d8c60
commit
5a6263c36b
22 changed files with 567 additions and 1870 deletions
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
518
src/info.c
518
src/info.c
|
|
@ -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
|
||||||
|
|
|
||||||
10
src/info.h
10
src/info.h
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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))
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
709
src/p_enemy.c
709
src/p_enemy.c
|
|
@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
98
src/p_map.c
98
src/p_map.c
|
|
@ -362,7 +362,7 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object)
|
||||||
// Horizontal speed is used as a minimum thrust, not a direct replacement
|
// 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;
|
||||||
|
|
||||||
|
|
|
||||||
734
src/p_mobj.c
734
src/p_mobj.c
File diff suppressed because it is too large
Load diff
12
src/p_spec.c
12
src/p_spec.c
|
|
@ -4011,7 +4011,7 @@ static void P_SetupSignObject(mobj_t *sign, mobj_t *pmo)
|
||||||
cur->hnext = P_SpawnMobj(sign->x, sign->y, sign->z, MT_SIGN_PIECE);
|
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;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
64
src/p_user.c
64
src/p_user.c
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue