mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-15 17:22:12 +00:00
Merge branch 'animate_global' into 'master'
FF_ANIMATE additions: globally synced animations FF_GLOBALANIM = makes the animation synced to the level's timer, so all objects will display the same frame at the same time ![](https://dl.dropboxusercontent.com/u/3518218/22/srb22-0008.gif) I mean, doesn't that look so much prettier? There's also some changes to FF_MIDDLESTARTCHANCE (FF_ANIMATE behavior was split due to not acting consistent between that and SPR2 behavior). See merge request !46
This commit is contained in:
commit
9160c8aeb4
4 changed files with 94 additions and 57 deletions
|
@ -6978,8 +6978,10 @@ struct {
|
||||||
{"FF_VERTICALFLIP",FF_VERTICALFLIP},
|
{"FF_VERTICALFLIP",FF_VERTICALFLIP},
|
||||||
{"FF_PAPERSPRITE",FF_PAPERSPRITE},
|
{"FF_PAPERSPRITE",FF_PAPERSPRITE},
|
||||||
{"FF_SPR2ENDSTATE",FF_SPR2ENDSTATE},
|
{"FF_SPR2ENDSTATE",FF_SPR2ENDSTATE},
|
||||||
{"FF_MIDDLESTARTCHANCE",FF_MIDDLESTARTCHANCE},
|
{"FF_SPR2MIDSTART",FF_SPR2MIDSTART},
|
||||||
{"FF_ANIMATE",FF_ANIMATE},
|
{"FF_ANIMATE",FF_ANIMATE},
|
||||||
|
{"FF_RANDOMANIM",FF_RANDOMANIM},
|
||||||
|
{"FF_GLOBALANIM",FF_GLOBALANIM},
|
||||||
{"FF_FULLBRIGHT",FF_FULLBRIGHT},
|
{"FF_FULLBRIGHT",FF_FULLBRIGHT},
|
||||||
{"FF_TRANSMASK",FF_TRANSMASK},
|
{"FF_TRANSMASK",FF_TRANSMASK},
|
||||||
{"FF_TRANSSHIFT",FF_TRANSSHIFT},
|
{"FF_TRANSSHIFT",FF_TRANSSHIFT},
|
||||||
|
|
68
src/info.c
68
src/info.c
|
@ -474,8 +474,8 @@ enum playersprite free_spr2 = SPR2_FIRSTFREESLOT;
|
||||||
state_t states[NUMSTATES] =
|
state_t states[NUMSTATES] =
|
||||||
{
|
{
|
||||||
// frame is masked through FF_FRAMEMASK
|
// frame is masked through FF_FRAMEMASK
|
||||||
// FF_ANIMATE (0x4000) makes simple state animations (var1 #frames, var2 tic delay)
|
// FF_ANIMATE makes simple state animations (var1 #frames, var2 tic delay)
|
||||||
// FF_FULLBRIGHT (0x8000) activates the fullbright colormap
|
// FF_FULLBRIGHT activates the fullbright colormap
|
||||||
// use FF_TRANS10 - FF_TRANS90 for easy translucency
|
// use FF_TRANS10 - FF_TRANS90 for easy translucency
|
||||||
// (or tr_trans10<<FF_TRANSSHIFT if you want to make it hard on yourself)
|
// (or tr_trans10<<FF_TRANSSHIFT if you want to make it hard on yourself)
|
||||||
|
|
||||||
|
@ -1392,7 +1392,7 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_MSCF, FF_FULLBRIGHT|FF_TRANS30|11, 1, {NULL}, 0, 0, S_MSSHIELD_F1}, // S_MSSHIELD_F12
|
{SPR_MSCF, FF_FULLBRIGHT|FF_TRANS30|11, 1, {NULL}, 0, 0, S_MSSHIELD_F1}, // S_MSSHIELD_F12
|
||||||
|
|
||||||
// Ring
|
// Ring
|
||||||
{SPR_RING, FF_ANIMATE, -1, {NULL}, 23, 1, S_RING}, // S_RING
|
{SPR_RING, FF_ANIMATE|FF_GLOBALANIM, -1, {NULL}, 23, 1, S_RING}, // S_RING
|
||||||
|
|
||||||
// Blue Sphere Replacement for special stages
|
// Blue Sphere Replacement for special stages
|
||||||
{SPR_BBAL, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BLUEBALL
|
{SPR_BBAL, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BLUEBALL
|
||||||
|
@ -1408,7 +1408,7 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_GWLR, 2, 1, {NULL}, 0, 0, S_GRAVWELLRED}, // S_GRAVWELLRED3
|
{SPR_GWLR, 2, 1, {NULL}, 0, 0, S_GRAVWELLRED}, // S_GRAVWELLRED3
|
||||||
|
|
||||||
// Individual Team Rings (now with shield attracting action! =P)
|
// Individual Team Rings (now with shield attracting action! =P)
|
||||||
{SPR_TRNG, FF_ANIMATE, -1, {NULL}, 23, 1, S_TEAMRING}, // S_TEAMRING1
|
{SPR_TRNG, FF_ANIMATE|FF_GLOBALANIM, -1, {NULL}, 23, 1, S_TEAMRING}, // S_TEAMRING1
|
||||||
|
|
||||||
// Special Stage Token
|
// Special Stage Token
|
||||||
{SPR_EMMY, FF_ANIMATE|FF_FULLBRIGHT, -1, {NULL}, 6, 2, S_EMMY}, // S_EMMY
|
{SPR_EMMY, FF_ANIMATE|FF_FULLBRIGHT, -1, {NULL}, 6, 2, S_EMMY}, // S_EMMY
|
||||||
|
@ -2294,7 +2294,7 @@ state_t states[NUMSTATES] =
|
||||||
// Extra Large Bubble goes POP!
|
// Extra Large Bubble goes POP!
|
||||||
{SPR_BUBL, 5, 16, {NULL}, 0, 0, S_NULL}, // S_POP1
|
{SPR_BUBL, 5, 16, {NULL}, 0, 0, S_NULL}, // S_POP1
|
||||||
|
|
||||||
{SPR_WZAP, FF_TRANS10|FF_ANIMATE|FF_MIDDLESTARTCHANCE, 4, {NULL}, 3, 2, S_NULL}, // S_WATERZAP
|
{SPR_WZAP, FF_TRANS10|FF_ANIMATE|FF_RANDOMANIM, 4, {NULL}, 3, 2, S_NULL}, // S_WATERZAP
|
||||||
|
|
||||||
{SPR_TFOG, FF_FULLBRIGHT|FF_TRANS50, 2, {NULL}, 0, 0, S_FOG2}, // S_FOG1
|
{SPR_TFOG, FF_FULLBRIGHT|FF_TRANS50, 2, {NULL}, 0, 0, S_FOG2}, // S_FOG1
|
||||||
{SPR_TFOG, FF_FULLBRIGHT|FF_TRANS50|1, 2, {NULL}, 0, 0, S_FOG3}, // S_FOG2
|
{SPR_TFOG, FF_FULLBRIGHT|FF_TRANS50|1, 2, {NULL}, 0, 0, S_FOG3}, // S_FOG2
|
||||||
|
@ -2363,16 +2363,16 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_RRNG, FF_FULLBRIGHT|6, 1, {A_ThrownRing}, 0, 0, S_RRNG1}, // S_RRNG7
|
{SPR_RRNG, FF_FULLBRIGHT|6, 1, {A_ThrownRing}, 0, 0, S_RRNG1}, // S_RRNG7
|
||||||
|
|
||||||
// Weapon Ring Ammo
|
// Weapon Ring Ammo
|
||||||
{SPR_RNGB, FF_ANIMATE, -1, {NULL}, 34, 1, S_BOUNCERINGAMMO}, // S_BOUNCERINGAMMO
|
{SPR_RNGB, FF_ANIMATE|FF_GLOBALANIM, -1, {NULL}, 34, 1, S_BOUNCERINGAMMO}, // S_BOUNCERINGAMMO
|
||||||
{SPR_RNGR, FF_ANIMATE, -1, {NULL}, 34, 1, S_RAILRINGAMMO}, // S_RAILRINGAMMO
|
{SPR_RNGR, FF_ANIMATE|FF_GLOBALANIM, -1, {NULL}, 34, 1, S_RAILRINGAMMO}, // S_RAILRINGAMMO
|
||||||
{SPR_RNGI, FF_ANIMATE, -1, {NULL}, 34, 1, S_INFINITYRINGAMMO}, // S_INFINITYRINGAMMO
|
{SPR_RNGI, FF_ANIMATE|FF_GLOBALANIM, -1, {NULL}, 34, 1, S_INFINITYRINGAMMO}, // S_INFINITYRINGAMMO
|
||||||
{SPR_RNGA, FF_ANIMATE, -1, {NULL}, 34, 1, S_AUTOMATICRINGAMMO}, // S_AUTOMATICRINGAMMO
|
{SPR_RNGA, FF_ANIMATE|FF_GLOBALANIM, -1, {NULL}, 34, 1, S_AUTOMATICRINGAMMO}, // S_AUTOMATICRINGAMMO
|
||||||
{SPR_RNGE, FF_ANIMATE, -1, {NULL}, 34, 1, S_EXPLOSIONRINGAMMO}, // S_EXPLOSIONRINGAMMO
|
{SPR_RNGE, FF_ANIMATE|FF_GLOBALANIM, -1, {NULL}, 34, 1, S_EXPLOSIONRINGAMMO}, // S_EXPLOSIONRINGAMMO
|
||||||
{SPR_RNGS, FF_ANIMATE, -1, {NULL}, 34, 1, S_SCATTERRINGAMMO}, // S_SCATTERRINGAMMO
|
{SPR_RNGS, FF_ANIMATE|FF_GLOBALANIM, -1, {NULL}, 34, 1, S_SCATTERRINGAMMO}, // S_SCATTERRINGAMMO
|
||||||
{SPR_RNGG, FF_ANIMATE, -1, {NULL}, 34, 1, S_GRENADERINGAMMO}, // S_GRENADERINGAMMO
|
{SPR_RNGG, FF_ANIMATE|FF_GLOBALANIM, -1, {NULL}, 34, 1, S_GRENADERINGAMMO}, // S_GRENADERINGAMMO
|
||||||
|
|
||||||
// Bounce Ring Pickup
|
// Bounce Ring Pickup
|
||||||
{SPR_PIKB, FF_ANIMATE, -1, {NULL}, 15, 1, S_BOUNCEPICKUP}, // S_BOUNCEPICKUP
|
{SPR_PIKB, FF_ANIMATE|FF_GLOBALANIM, -1, {NULL}, 15, 1, S_BOUNCEPICKUP}, // S_BOUNCEPICKUP
|
||||||
|
|
||||||
{SPR_PIKB, 0, 1, {NULL}, 0, 0, S_BOUNCEPICKUPFADE2}, // S_BOUNCEPICKUPFADE1
|
{SPR_PIKB, 0, 1, {NULL}, 0, 0, S_BOUNCEPICKUPFADE2}, // S_BOUNCEPICKUPFADE1
|
||||||
{SPR_PIKB, 2, 1, {NULL}, 0, 0, S_BOUNCEPICKUPFADE3}, // S_BOUNCEPICKUPFADE2
|
{SPR_PIKB, 2, 1, {NULL}, 0, 0, S_BOUNCEPICKUPFADE3}, // S_BOUNCEPICKUPFADE2
|
||||||
|
@ -2384,7 +2384,7 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_PIKB, 14, 1, {NULL}, 0, 0, S_BOUNCEPICKUPFADE1}, // S_BOUNCEPICKUPFADE8
|
{SPR_PIKB, 14, 1, {NULL}, 0, 0, S_BOUNCEPICKUPFADE1}, // S_BOUNCEPICKUPFADE8
|
||||||
|
|
||||||
// Rail Ring Pickup
|
// Rail Ring Pickup
|
||||||
{SPR_PIKR, FF_ANIMATE, -1, {NULL}, 15, 1, S_RAILPICKUP}, // S_RAILPICKUP
|
{SPR_PIKR, FF_ANIMATE|FF_GLOBALANIM, -1, {NULL}, 15, 1, S_RAILPICKUP}, // S_RAILPICKUP
|
||||||
|
|
||||||
{SPR_PIKR, 0, 1, {NULL}, 0, 0, S_RAILPICKUPFADE2}, // S_RAILPICKUPFADE1
|
{SPR_PIKR, 0, 1, {NULL}, 0, 0, S_RAILPICKUPFADE2}, // S_RAILPICKUPFADE1
|
||||||
{SPR_PIKR, 2, 1, {NULL}, 0, 0, S_RAILPICKUPFADE3}, // S_RAILPICKUPFADE2
|
{SPR_PIKR, 2, 1, {NULL}, 0, 0, S_RAILPICKUPFADE3}, // S_RAILPICKUPFADE2
|
||||||
|
@ -2396,7 +2396,7 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_PIKR, 14, 1, {NULL}, 0, 0, S_RAILPICKUPFADE1}, // S_RAILPICKUPFADE8
|
{SPR_PIKR, 14, 1, {NULL}, 0, 0, S_RAILPICKUPFADE1}, // S_RAILPICKUPFADE8
|
||||||
|
|
||||||
// Auto Ring Pickup
|
// Auto Ring Pickup
|
||||||
{SPR_PIKA, FF_ANIMATE, -1, {NULL}, 15, 1, S_AUTOPICKUP}, // S_AUTOPICKUP
|
{SPR_PIKA, FF_ANIMATE|FF_GLOBALANIM, -1, {NULL}, 15, 1, S_AUTOPICKUP}, // S_AUTOPICKUP
|
||||||
|
|
||||||
{SPR_PIKA, 0, 1, {NULL}, 0, 0, S_AUTOPICKUPFADE2}, // S_AUTOPICKUPFADE1
|
{SPR_PIKA, 0, 1, {NULL}, 0, 0, S_AUTOPICKUPFADE2}, // S_AUTOPICKUPFADE1
|
||||||
{SPR_PIKA, 2, 1, {NULL}, 0, 0, S_AUTOPICKUPFADE3}, // S_AUTOPICKUPFADE2
|
{SPR_PIKA, 2, 1, {NULL}, 0, 0, S_AUTOPICKUPFADE3}, // S_AUTOPICKUPFADE2
|
||||||
|
@ -2408,7 +2408,7 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_PIKA, 14, 1, {NULL}, 0, 0, S_AUTOPICKUPFADE1}, // S_AUTOPICKUPFADE8
|
{SPR_PIKA, 14, 1, {NULL}, 0, 0, S_AUTOPICKUPFADE1}, // S_AUTOPICKUPFADE8
|
||||||
|
|
||||||
// Explode Ring Pickup
|
// Explode Ring Pickup
|
||||||
{SPR_PIKE, FF_ANIMATE, -1, {NULL}, 15, 1, S_EXPLODEPICKUP}, // S_EXPLODEPICKUP
|
{SPR_PIKE, FF_ANIMATE|FF_GLOBALANIM, -1, {NULL}, 15, 1, S_EXPLODEPICKUP}, // S_EXPLODEPICKUP
|
||||||
|
|
||||||
{SPR_PIKE, 0, 1, {NULL}, 0, 0, S_EXPLODEPICKUPFADE2}, // S_EXPLODEPICKUPFADE1
|
{SPR_PIKE, 0, 1, {NULL}, 0, 0, S_EXPLODEPICKUPFADE2}, // S_EXPLODEPICKUPFADE1
|
||||||
{SPR_PIKE, 2, 1, {NULL}, 0, 0, S_EXPLODEPICKUPFADE3}, // S_EXPLODEPICKUPFADE2
|
{SPR_PIKE, 2, 1, {NULL}, 0, 0, S_EXPLODEPICKUPFADE3}, // S_EXPLODEPICKUPFADE2
|
||||||
|
@ -2420,7 +2420,7 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_PIKE, 14, 1, {NULL}, 0, 0, S_EXPLODEPICKUPFADE1}, // S_EXPLODEPICKUPFADE8
|
{SPR_PIKE, 14, 1, {NULL}, 0, 0, S_EXPLODEPICKUPFADE1}, // S_EXPLODEPICKUPFADE8
|
||||||
|
|
||||||
// Scatter Ring Pickup
|
// Scatter Ring Pickup
|
||||||
{SPR_PIKS, FF_ANIMATE, -1, {NULL}, 15, 1, S_SCATTERPICKUP}, // S_SCATTERPICKUP
|
{SPR_PIKS, FF_ANIMATE|FF_GLOBALANIM, -1, {NULL}, 15, 1, S_SCATTERPICKUP}, // S_SCATTERPICKUP
|
||||||
|
|
||||||
{SPR_PIKS, 0, 1, {NULL}, 0, 0, S_SCATTERPICKUPFADE2}, // S_SCATTERPICKUPFADE1
|
{SPR_PIKS, 0, 1, {NULL}, 0, 0, S_SCATTERPICKUPFADE2}, // S_SCATTERPICKUPFADE1
|
||||||
{SPR_PIKS, 2, 1, {NULL}, 0, 0, S_SCATTERPICKUPFADE3}, // S_SCATTERPICKUPFADE2
|
{SPR_PIKS, 2, 1, {NULL}, 0, 0, S_SCATTERPICKUPFADE3}, // S_SCATTERPICKUPFADE2
|
||||||
|
@ -2432,7 +2432,7 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_PIKS, 14, 1, {NULL}, 0, 0, S_SCATTERPICKUPFADE1}, // S_SCATTERPICKUPFADE8
|
{SPR_PIKS, 14, 1, {NULL}, 0, 0, S_SCATTERPICKUPFADE1}, // S_SCATTERPICKUPFADE8
|
||||||
|
|
||||||
// Grenade Ring Pickup
|
// Grenade Ring Pickup
|
||||||
{SPR_PIKG, FF_ANIMATE, -1, {NULL}, 15, 1, S_GRENADEPICKUP}, // S_GRENADEPICKUP
|
{SPR_PIKG, FF_ANIMATE|FF_GLOBALANIM, -1, {NULL}, 15, 1, S_GRENADEPICKUP}, // S_GRENADEPICKUP
|
||||||
|
|
||||||
{SPR_PIKG, 0, 1, {NULL}, 0, 0, S_GRENADEPICKUPFADE2}, // S_GRENADEPICKUPFADE1
|
{SPR_PIKG, 0, 1, {NULL}, 0, 0, S_GRENADEPICKUPFADE2}, // S_GRENADEPICKUPFADE1
|
||||||
{SPR_PIKG, 2, 1, {NULL}, 0, 0, S_GRENADEPICKUPFADE3}, // S_GRENADEPICKUPFADE2
|
{SPR_PIKG, 2, 1, {NULL}, 0, 0, S_GRENADEPICKUPFADE3}, // S_GRENADEPICKUPFADE2
|
||||||
|
@ -2753,22 +2753,22 @@ state_t states[NUMSTATES] =
|
||||||
|
|
||||||
{SPR_NULL, 0, 1, {A_RockSpawn}, 0, 0, S_ROCKSPAWN}, // S_ROCKSPAWN
|
{SPR_NULL, 0, 1, {A_RockSpawn}, 0, 0, S_ROCKSPAWN}, // S_ROCKSPAWN
|
||||||
|
|
||||||
{SPR_ROIA, FF_ANIMATE, -1, {NULL}, 4, 2, S_ROCKCRUMBLEA}, // S_ROCKCRUMBLEA
|
{SPR_ROIA, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEA}, // S_ROCKCRUMBLEA
|
||||||
{SPR_ROIB, FF_ANIMATE, -1, {NULL}, 4, 2, S_ROCKCRUMBLEB}, // S_ROCKCRUMBLEB
|
{SPR_ROIB, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEB}, // S_ROCKCRUMBLEB
|
||||||
{SPR_ROIC, FF_ANIMATE, -1, {NULL}, 4, 2, S_ROCKCRUMBLEC}, // S_ROCKCRUMBLEC
|
{SPR_ROIC, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEC}, // S_ROCKCRUMBLEC
|
||||||
{SPR_ROID, FF_ANIMATE, -1, {NULL}, 4, 2, S_ROCKCRUMBLED}, // S_ROCKCRUMBLED
|
{SPR_ROID, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLED}, // S_ROCKCRUMBLED
|
||||||
{SPR_ROIE, FF_ANIMATE, -1, {NULL}, 4, 2, S_ROCKCRUMBLEE}, // S_ROCKCRUMBLEE
|
{SPR_ROIE, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEE}, // S_ROCKCRUMBLEE
|
||||||
{SPR_ROIF, FF_ANIMATE, -1, {NULL}, 4, 2, S_ROCKCRUMBLEF}, // S_ROCKCRUMBLEF
|
{SPR_ROIF, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEF}, // S_ROCKCRUMBLEF
|
||||||
{SPR_ROIG, FF_ANIMATE, -1, {NULL}, 4, 2, S_ROCKCRUMBLEG}, // S_ROCKCRUMBLEG
|
{SPR_ROIG, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEG}, // S_ROCKCRUMBLEG
|
||||||
{SPR_ROIH, FF_ANIMATE, -1, {NULL}, 4, 2, S_ROCKCRUMBLEH}, // S_ROCKCRUMBLEH
|
{SPR_ROIH, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEH}, // S_ROCKCRUMBLEH
|
||||||
{SPR_ROII, FF_ANIMATE, -1, {NULL}, 4, 2, S_ROCKCRUMBLEI}, // S_ROCKCRUMBLEI
|
{SPR_ROII, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEI}, // S_ROCKCRUMBLEI
|
||||||
{SPR_ROIJ, FF_ANIMATE, -1, {NULL}, 4, 2, S_ROCKCRUMBLEJ}, // S_ROCKCRUMBLEJ
|
{SPR_ROIJ, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEJ}, // S_ROCKCRUMBLEJ
|
||||||
{SPR_ROIK, FF_ANIMATE, -1, {NULL}, 4, 2, S_ROCKCRUMBLEK}, // S_ROCKCRUMBLEK
|
{SPR_ROIK, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEK}, // S_ROCKCRUMBLEK
|
||||||
{SPR_ROIL, FF_ANIMATE, -1, {NULL}, 4, 2, S_ROCKCRUMBLEL}, // S_ROCKCRUMBLEL
|
{SPR_ROIL, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEL}, // S_ROCKCRUMBLEL
|
||||||
{SPR_ROIM, FF_ANIMATE, -1, {NULL}, 4, 2, S_ROCKCRUMBLEM}, // S_ROCKCRUMBLEM
|
{SPR_ROIM, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEM}, // S_ROCKCRUMBLEM
|
||||||
{SPR_ROIN, FF_ANIMATE, -1, {NULL}, 4, 2, S_ROCKCRUMBLEN}, // S_ROCKCRUMBLEN
|
{SPR_ROIN, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEN}, // S_ROCKCRUMBLEN
|
||||||
{SPR_ROIO, FF_ANIMATE, -1, {NULL}, 4, 2, S_ROCKCRUMBLEO}, // S_ROCKCRUMBLEO
|
{SPR_ROIO, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEO}, // S_ROCKCRUMBLEO
|
||||||
{SPR_ROIP, FF_ANIMATE, -1, {NULL}, 4, 2, S_ROCKCRUMBLEP}, // S_ROCKCRUMBLEP
|
{SPR_ROIP, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEP}, // S_ROCKCRUMBLEP
|
||||||
|
|
||||||
{SPR_SRBA, 0, 5, {A_Look}, 0, 0, S_SRB1_CRAWLA1}, // S_SRB1_CRAWLA1
|
{SPR_SRBA, 0, 5, {A_Look}, 0, 0, S_SRB1_CRAWLA1}, // S_SRB1_CRAWLA1
|
||||||
{SPR_SRBA, 0, 3, {A_Chase}, 0, 0, S_SRB1_CRAWLA3}, // S_SRB1_CRAWLA2
|
{SPR_SRBA, 0, 3, {A_Chase}, 0, 0, S_SRB1_CRAWLA3}, // S_SRB1_CRAWLA2
|
||||||
|
|
49
src/p_mobj.c
49
src/p_mobj.c
|
@ -81,6 +81,36 @@ void P_AddCachedAction(mobj_t *mobj, INT32 statenum)
|
||||||
actioncachehead.prev = newaction;
|
actioncachehead.prev = newaction;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// P_SetupStateAnimation
|
||||||
|
//
|
||||||
|
FUNCINLINE static ATTRINLINE void P_SetupStateAnimation(mobj_t *mobj, state_t *st)
|
||||||
|
{
|
||||||
|
if (!(st->frame & FF_ANIMATE))
|
||||||
|
return;
|
||||||
|
if (st->var1 == 0 || st->var2 == 0)
|
||||||
|
{
|
||||||
|
mobj->frame &= ~FF_ANIMATE;
|
||||||
|
return; // Crash/stupidity prevention
|
||||||
|
}
|
||||||
|
|
||||||
|
mobj->anim_duration = (UINT16)st->var2;
|
||||||
|
|
||||||
|
if (st->frame & FF_GLOBALANIM)
|
||||||
|
{
|
||||||
|
// Attempt to account for the pre-ticker for objects spawned on load
|
||||||
|
if (!leveltime) return;
|
||||||
|
|
||||||
|
mobj->anim_duration -= (leveltime + 2) % st->var2; // Duration synced to timer
|
||||||
|
mobj->frame += ((leveltime + 2) / st->var2) % (st->var1 + 1); // Frame synced to timer (duration taken into account)
|
||||||
|
}
|
||||||
|
else if (st->frame & FF_RANDOMANIM)
|
||||||
|
{
|
||||||
|
mobj->frame += P_RandomKey(st->var1 + 1); // Random starting frame
|
||||||
|
mobj->anim_duration -= P_RandomKey(st->var2); // Random duration for first frame
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// P_CycleStateAnimation
|
// P_CycleStateAnimation
|
||||||
//
|
//
|
||||||
|
@ -588,7 +618,7 @@ boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state)
|
||||||
}
|
}
|
||||||
else if (mobj->sprite2 != spr2)
|
else if (mobj->sprite2 != spr2)
|
||||||
{
|
{
|
||||||
if ((st->frame & FF_MIDDLESTARTCHANCE) && numframes && P_RandomChance(FRACUNIT/2))
|
if ((st->frame & FF_SPR2MIDSTART) && numframes && P_RandomChance(FRACUNIT/2))
|
||||||
frame = numframes/2;
|
frame = numframes/2;
|
||||||
else
|
else
|
||||||
frame = 0;
|
frame = 0;
|
||||||
|
@ -621,8 +651,7 @@ boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state)
|
||||||
{
|
{
|
||||||
mobj->sprite = st->sprite;
|
mobj->sprite = st->sprite;
|
||||||
mobj->frame = st->frame;
|
mobj->frame = st->frame;
|
||||||
if ((st->frame & (FF_ANIMATE|FF_MIDDLESTARTCHANCE)) == (FF_ANIMATE|FF_MIDDLESTARTCHANCE))
|
P_SetupStateAnimation(mobj, st);
|
||||||
mobj->frame += P_RandomKey(st->var1+1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Modified handling.
|
// Modified handling.
|
||||||
|
@ -689,7 +718,6 @@ boolean P_SetMobjState(mobj_t *mobj, statenum_t state)
|
||||||
st = &states[state];
|
st = &states[state];
|
||||||
mobj->state = st;
|
mobj->state = st;
|
||||||
mobj->tics = st->tics;
|
mobj->tics = st->tics;
|
||||||
mobj->anim_duration = (UINT16)st->var2; // only used if FF_ANIMATE is set
|
|
||||||
|
|
||||||
// Player animations
|
// Player animations
|
||||||
if (st->sprite == SPR_PLAY)
|
if (st->sprite == SPR_PLAY)
|
||||||
|
@ -714,7 +742,7 @@ boolean P_SetMobjState(mobj_t *mobj, statenum_t state)
|
||||||
}
|
}
|
||||||
else if (mobj->sprite2 != spr2)
|
else if (mobj->sprite2 != spr2)
|
||||||
{
|
{
|
||||||
if ((st->frame & FF_MIDDLESTARTCHANCE) && numframes && P_RandomChance(FRACUNIT/2))
|
if ((st->frame & FF_SPR2MIDSTART) && numframes && P_RandomChance(FRACUNIT/2))
|
||||||
frame = numframes/2;
|
frame = numframes/2;
|
||||||
else
|
else
|
||||||
frame = 0;
|
frame = 0;
|
||||||
|
@ -736,8 +764,7 @@ boolean P_SetMobjState(mobj_t *mobj, statenum_t state)
|
||||||
{
|
{
|
||||||
mobj->sprite = st->sprite;
|
mobj->sprite = st->sprite;
|
||||||
mobj->frame = st->frame;
|
mobj->frame = st->frame;
|
||||||
if ((st->frame & (FF_ANIMATE|FF_MIDDLESTARTCHANCE)) == (FF_ANIMATE|FF_MIDDLESTARTCHANCE))
|
P_SetupStateAnimation(mobj, st);
|
||||||
mobj->frame += P_RandomKey(st->var1+1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Modified handling.
|
// Modified handling.
|
||||||
|
@ -792,7 +819,7 @@ boolean P_SetMobjStateNF(mobj_t *mobj, statenum_t state)
|
||||||
mobj->tics = st->tics;
|
mobj->tics = st->tics;
|
||||||
mobj->sprite = st->sprite;
|
mobj->sprite = st->sprite;
|
||||||
mobj->frame = st->frame;
|
mobj->frame = st->frame;
|
||||||
mobj->anim_duration = (UINT16)st->var2; // only used if FF_ANIMATE is set
|
P_SetupStateAnimation(mobj, st);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -811,7 +838,7 @@ static boolean P_SetPrecipMobjState(precipmobj_t *mobj, statenum_t state)
|
||||||
mobj->tics = st->tics;
|
mobj->tics = st->tics;
|
||||||
mobj->sprite = st->sprite;
|
mobj->sprite = st->sprite;
|
||||||
mobj->frame = st->frame;
|
mobj->frame = st->frame;
|
||||||
mobj->anim_duration = (UINT16)st->var2; // only used if FF_ANIMATE is set
|
P_SetupStateAnimation((mobj_t*)mobj, st);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -8000,7 +8027,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
||||||
mobj->tics = st->tics;
|
mobj->tics = st->tics;
|
||||||
mobj->sprite = st->sprite;
|
mobj->sprite = st->sprite;
|
||||||
mobj->frame = st->frame; // FF_FRAMEMASK for frame, and other bits..
|
mobj->frame = st->frame; // FF_FRAMEMASK for frame, and other bits..
|
||||||
mobj->anim_duration = (UINT16)st->var2; // only used if FF_ANIMATE is set
|
P_SetupStateAnimation(mobj, st);
|
||||||
|
|
||||||
mobj->friction = ORIG_FRICTION;
|
mobj->friction = ORIG_FRICTION;
|
||||||
|
|
||||||
|
@ -8226,7 +8253,7 @@ static precipmobj_t *P_SpawnPrecipMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype
|
||||||
mobj->tics = st->tics;
|
mobj->tics = st->tics;
|
||||||
mobj->sprite = st->sprite;
|
mobj->sprite = st->sprite;
|
||||||
mobj->frame = st->frame; // FF_FRAMEMASK for frame, and other bits..
|
mobj->frame = st->frame; // FF_FRAMEMASK for frame, and other bits..
|
||||||
mobj->anim_duration = (UINT16)st->var2; // only used if FF_ANIMATE is set
|
P_SetupStateAnimation((mobj_t*)mobj, st);
|
||||||
|
|
||||||
// set subsector and/or block links
|
// set subsector and/or block links
|
||||||
P_SetPrecipitationThingPosition(mobj);
|
P_SetPrecipitationThingPosition(mobj);
|
||||||
|
|
30
src/p_pspr.h
30
src/p_pspr.h
|
@ -37,18 +37,12 @@
|
||||||
|
|
||||||
/// \brief Frame flags: only the frame number - 0 to 511 (Frames from 0 to 63, Sprite2 number uses full range)
|
/// \brief Frame flags: only the frame number - 0 to 511 (Frames from 0 to 63, Sprite2 number uses full range)
|
||||||
#define FF_FRAMEMASK 0x1ff
|
#define FF_FRAMEMASK 0x1ff
|
||||||
/// \brief Frame flags: Flip sprite vertically (relative to what it should be for its gravity)
|
|
||||||
#define FF_VERTICALFLIP 0x400
|
/// \brief Frame flags - SPR2: A change of state at the end of Sprite2 animation
|
||||||
/// \brief Frame flags: Thin, paper-like sprite (for collision equivalent, see MF_PAPERCOLLISION)
|
|
||||||
#define FF_PAPERSPRITE 0x800
|
|
||||||
/// \brief Frame flags: A change of state at the end of Sprite2 animation
|
|
||||||
#define FF_SPR2ENDSTATE 0x1000
|
#define FF_SPR2ENDSTATE 0x1000
|
||||||
/// \brief Frame flags: 50% of starting in middle of animation (Sprite2 and FF_ANIMATE)
|
/// \brief Frame flags - SPR2: 50% of starting in middle of Sprite2 animation
|
||||||
#define FF_MIDDLESTARTCHANCE 0x2000
|
#define FF_SPR2MIDSTART 0x2000
|
||||||
/// \brief Frame flags: Simple stateless animation
|
|
||||||
#define FF_ANIMATE 0x4000
|
|
||||||
/// \brief Frame flags: frame always appears full bright
|
|
||||||
#define FF_FULLBRIGHT 0x8000
|
|
||||||
/// \brief Frame flags: 0 = no trans(opaque), 1-15 = transl. table
|
/// \brief Frame flags: 0 = no trans(opaque), 1-15 = transl. table
|
||||||
#define FF_TRANSMASK 0xf0000
|
#define FF_TRANSMASK 0xf0000
|
||||||
/// \brief shift for FF_TRANSMASK
|
/// \brief shift for FF_TRANSMASK
|
||||||
|
@ -64,6 +58,20 @@
|
||||||
#define FF_TRANS80 (tr_trans80<<FF_TRANSSHIFT)
|
#define FF_TRANS80 (tr_trans80<<FF_TRANSSHIFT)
|
||||||
#define FF_TRANS90 (tr_trans90<<FF_TRANSSHIFT)
|
#define FF_TRANS90 (tr_trans90<<FF_TRANSSHIFT)
|
||||||
|
|
||||||
|
/// \brief Frame flags: frame always appears full bright
|
||||||
|
#define FF_FULLBRIGHT 0x00100000
|
||||||
|
/// \brief Frame flags: Flip sprite vertically (relative to what it should be for its gravity)
|
||||||
|
#define FF_VERTICALFLIP 0x00200000
|
||||||
|
/// \brief Frame flags: Thin, paper-like sprite (for collision equivalent, see MF_PAPERCOLLISION)
|
||||||
|
#define FF_PAPERSPRITE 0x00400000
|
||||||
|
|
||||||
|
/// \brief Frame flags - Animate: Simple stateless animation
|
||||||
|
#define FF_ANIMATE 0x01000000
|
||||||
|
/// \brief Frame flags - Animate: Start at a random place in the animation (mutually exclusive with below)
|
||||||
|
#define FF_RANDOMANIM 0x02000000
|
||||||
|
/// \brief Frame flags - Animate: Sync animation to global timer (mutually exclusive with above)
|
||||||
|
#define FF_GLOBALANIM 0x04000000
|
||||||
|
|
||||||
/** \brief translucency tables
|
/** \brief translucency tables
|
||||||
|
|
||||||
\todo add another asm routine which use the fg and bg indexes in the
|
\todo add another asm routine which use the fg and bg indexes in the
|
||||||
|
|
Loading…
Reference in a new issue