NiGHTS is now spr2-ised. i'll upload the relevant files and etc to the ftp

* if you can turn SF_SUPER, flash your skin's supercolor, otherwise be your normal color
* if your skin doesn't have a SPR2_NGT0 (horizontal fly), use Sonic's (this will hopefully be replaced by 2.2 with sprites of NiGHTS themselves)
* MT_NIGHTSCHAR made irrelevant, everything follows actor->target instead of actor->target->tracer now
* emerald is now player->mo->tracer instead of player->mo->tracer->target
* nightopian helpers flash for the 35 tics before they disappear
* nights capsule makes boss explosions/noises now (i can change it back i just like it better)
* drill off into the sky instead of fly up in floating pose (but no noise yet)

ALSO:
* default maxdash is now 70
* forgot to add supercolor to lua, it is there now
* SPR2_SMSL renamed to SPR2_SSTN (stun)
* any player with a skincolor that's in the super range is set to FF_FULLBRIGHT at state-set time, so no need to keep super players non-fullbright just because they use spin stuff
This commit is contained in:
toasterbabe 2016-08-12 02:57:37 +01:00
parent 3310b02b68
commit 0c3256fa14
9 changed files with 424 additions and 496 deletions

View file

@ -3859,6 +3859,50 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
// Level end sign (uses player sprite) // Level end sign (uses player sprite)
"S_PLAY_SIGN", "S_PLAY_SIGN",
// NiGHTS character (uses player sprite)
"S_PLAY_NIGHTS_TRANS",
"S_PLAY_NIGHTS_TRANS2",
"S_PLAY_NIGHTS_TRANS3",
"S_PLAY_NIGHTS_TRANS4",
"S_PLAY_NIGHTS_TRANS5",
"S_PLAY_NIGHTS_TRANS6",
"S_PLAY_NIGHTS_TRANS7",
"S_PLAY_NIGHTS_TRANS8",
"S_PLAY_NIGHTS_TRANS9",
"S_PLAY_NIGHTS_STAND",
"S_PLAY_NIGHTS_FLOAT",
"S_PLAY_NIGHTS_PAIN",
"S_PLAY_NIGHTS_PULL",
"S_PLAY_NIGHTS_ATTACK",
"S_PLAY_NIGHTS_FLY0",
"S_PLAY_NIGHTS_DRILL0",
"S_PLAY_NIGHTS_FLY1",
"S_PLAY_NIGHTS_DRILL1",
"S_PLAY_NIGHTS_FLY2",
"S_PLAY_NIGHTS_DRILL2",
"S_PLAY_NIGHTS_FLY3",
"S_PLAY_NIGHTS_DRILL3",
"S_PLAY_NIGHTS_FLY4",
"S_PLAY_NIGHTS_DRILL4",
"S_PLAY_NIGHTS_FLY5",
"S_PLAY_NIGHTS_DRILL5",
"S_PLAY_NIGHTS_FLY6",
"S_PLAY_NIGHTS_DRILL6",
"S_PLAY_NIGHTS_FLY7",
"S_PLAY_NIGHTS_DRILL7",
"S_PLAY_NIGHTS_FLY8",
"S_PLAY_NIGHTS_DRILL8",
"S_PLAY_NIGHTS_FLY9",
"S_PLAY_NIGHTS_DRILL9",
"S_PLAY_NIGHTS_FLYA",
"S_PLAY_NIGHTS_DRILLA",
"S_PLAY_NIGHTS_FLYB",
"S_PLAY_NIGHTS_DRILLB",
"S_PLAY_NIGHTS_FLYC",
"S_PLAY_NIGHTS_DRILLC",
// Blue Crawla // Blue Crawla
"S_POSS_STND", "S_POSS_STND",
"S_POSS_RUN1", "S_POSS_RUN1",
@ -5854,93 +5898,6 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_NIGHTSGOAL3", "S_NIGHTSGOAL3",
"S_NIGHTSGOAL4", "S_NIGHTSGOAL4",
"S_NIGHTSFLY1A",
"S_NIGHTSFLY1B",
"S_NIGHTSDRILL1A",
"S_NIGHTSDRILL1B",
"S_NIGHTSDRILL1C",
"S_NIGHTSDRILL1D",
"S_NIGHTSFLY2A",
"S_NIGHTSFLY2B",
"S_NIGHTSDRILL2A",
"S_NIGHTSDRILL2B",
"S_NIGHTSDRILL2C",
"S_NIGHTSDRILL2D",
"S_NIGHTSFLY3A",
"S_NIGHTSFLY3B",
"S_NIGHTSDRILL3A",
"S_NIGHTSDRILL3B",
"S_NIGHTSDRILL3C",
"S_NIGHTSDRILL3D",
"S_NIGHTSFLY4A",
"S_NIGHTSFLY4B",
"S_NIGHTSDRILL4A",
"S_NIGHTSDRILL4B",
"S_NIGHTSDRILL4C",
"S_NIGHTSDRILL4D",
"S_NIGHTSFLY5A",
"S_NIGHTSFLY5B",
"S_NIGHTSDRILL5A",
"S_NIGHTSDRILL5B",
"S_NIGHTSDRILL5C",
"S_NIGHTSDRILL5D",
"S_NIGHTSFLY6A",
"S_NIGHTSFLY6B",
"S_NIGHTSDRILL6A",
"S_NIGHTSDRILL6B",
"S_NIGHTSDRILL6C",
"S_NIGHTSDRILL6D",
"S_NIGHTSFLY7A",
"S_NIGHTSFLY7B",
"S_NIGHTSDRILL7A",
"S_NIGHTSDRILL7B",
"S_NIGHTSDRILL7C",
"S_NIGHTSDRILL7D",
"S_NIGHTSFLY8A",
"S_NIGHTSFLY8B",
"S_NIGHTSDRILL8A",
"S_NIGHTSDRILL8B",
"S_NIGHTSDRILL8C",
"S_NIGHTSDRILL8D",
"S_NIGHTSFLY9A",
"S_NIGHTSFLY9B",
"S_NIGHTSDRILL9A",
"S_NIGHTSDRILL9B",
"S_NIGHTSDRILL9C",
"S_NIGHTSDRILL9D",
"S_NIGHTSHURT1",
"S_NIGHTSHURT2",
"S_NIGHTSHURT3",
"S_NIGHTSHURT4",
"S_NIGHTSHURT5",
"S_NIGHTSHURT6",
"S_NIGHTSHURT7",
"S_NIGHTSHURT8",
"S_NIGHTSHURT9",
"S_NIGHTSHURT10",
"S_NIGHTSHURT11",
"S_NIGHTSHURT12",
"S_NIGHTSHURT13",
"S_NIGHTSHURT14",
"S_NIGHTSHURT15",
"S_NIGHTSHURT16",
"S_NIGHTSHURT17",
"S_NIGHTSHURT18",
"S_NIGHTSHURT19",
"S_NIGHTSHURT20",
"S_NIGHTSHURT21",
"S_NIGHTSHURT22",
"S_NIGHTSHURT23",
"S_NIGHTSHURT24",
"S_NIGHTSHURT25",
"S_NIGHTSHURT26",
"S_NIGHTSHURT27",
"S_NIGHTSHURT28",
"S_NIGHTSHURT29",
"S_NIGHTSHURT30",
"S_NIGHTSHURT31",
"S_NIGHTSHURT32",
"S_NIGHTSPARKLE1", "S_NIGHTSPARKLE1",
"S_NIGHTSPARKLE2", "S_NIGHTSPARKLE2",
"S_NIGHTSPARKLE3", "S_NIGHTSPARKLE3",
@ -6037,16 +5994,6 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_CRUMBLE1", "S_CRUMBLE1",
"S_CRUMBLE2", "S_CRUMBLE2",
"S_SUPERTRANS1",
"S_SUPERTRANS2",
"S_SUPERTRANS3",
"S_SUPERTRANS4",
"S_SUPERTRANS5",
"S_SUPERTRANS6",
"S_SUPERTRANS7",
"S_SUPERTRANS8",
"S_SUPERTRANS9",
// Spark // Spark
"S_SPRK1", "S_SPRK1",
"S_SPRK2", "S_SPRK2",
@ -6603,7 +6550,6 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_AXISTRANSFERLINE", "MT_AXISTRANSFERLINE",
"MT_NIGHTSDRONE", "MT_NIGHTSDRONE",
"MT_NIGHTSGOAL", "MT_NIGHTSGOAL",
"MT_NIGHTSCHAR",
"MT_NIGHTSPARKLE", "MT_NIGHTSPARKLE",
"MT_NIGHTSLOOPHELPER", "MT_NIGHTSLOOPHELPER",
"MT_NIGHTSBUMPER", // NiGHTS Bumper "MT_NIGHTSBUMPER", // NiGHTS Bumper

View file

@ -96,7 +96,7 @@ char spr2names[NUMPLAYERSPRITES][5] =
"SRUN", "SRUN",
"SPEE", "SPEE",
"SPAN", "SPAN",
"SMSL", "SSTN",
"SDTH", "SDTH",
"SDRN", "SDRN",
"SSPN", "SSPN",
@ -106,7 +106,42 @@ char spr2names[NUMPLAYERSPRITES][5] =
"SFAL", "SFAL",
"SEDG", "SEDG",
"SRID", "SRID",
"SFLT" "SFLT",
"NTRN",
"NSTD",
"NFLT",
"NPAN",
"NPUL",
"NATK",
"NGT0",
"NGT1",
"NGT2",
"NGT3",
"NGT4",
"NGT5",
"NGT6",
"NGT7",
"NGT8",
"NGT9",
"NGTA",
"NGTB",
"NGTC",
"DRL0",
"DRL1",
"DRL2",
"DRL3",
"DRL4",
"DRL5",
"DRL6",
"DRL7",
"DRL8",
"DRL9",
"DRLA",
"DRLB",
"DRLC"
}; };
enum playersprite free_spr2 = SPR2_FIRSTFREESLOT; enum playersprite free_spr2 = SPR2_FIRSTFREESLOT;
@ -176,7 +211,7 @@ state_t states[NUMSTATES] =
{SPR_PLAY, SPR2_SRUN, 7, {NULL}, 0, 0, S_PLAY_SUPER_RUN}, // S_PLAY_SUPER_RUN {SPR_PLAY, SPR2_SRUN, 7, {NULL}, 0, 0, S_PLAY_SUPER_RUN}, // S_PLAY_SUPER_RUN
{SPR_PLAY, SPR2_SPEE, 7, {NULL}, 0, 0, S_PLAY_SUPER_PEEL}, // S_PLAY_SUPER_PEEL {SPR_PLAY, SPR2_SPEE, 7, {NULL}, 0, 0, S_PLAY_SUPER_PEEL}, // S_PLAY_SUPER_PEEL
{SPR_PLAY, SPR2_SPAN, -1, {NULL}, 0, 0, S_PLAY_SUPER_STND}, // S_PLAY_SUPER_PAIN {SPR_PLAY, SPR2_SPAN, -1, {NULL}, 0, 0, S_PLAY_SUPER_STND}, // S_PLAY_SUPER_PAIN
{SPR_PLAY, SPR2_SMSL, -1, {NULL}, 0, 0, S_PLAY_SUPER_STND}, // S_PLAY_SUPER_STUN {SPR_PLAY, SPR2_SSTN, -1, {NULL}, 0, 0, S_PLAY_SUPER_STND}, // S_PLAY_SUPER_STUN
{SPR_PLAY, SPR2_SDTH, 4, {NULL}, 0, 0, S_PLAY_SUPER_DEAD}, // S_PLAY_SUPER_DEAD {SPR_PLAY, SPR2_SDTH, 4, {NULL}, 0, 0, S_PLAY_SUPER_DEAD}, // S_PLAY_SUPER_DEAD
{SPR_PLAY, SPR2_SDRN, 4, {NULL}, 0, 0, S_PLAY_SUPER_DRWN}, // S_PLAY_SUPER_DRWN {SPR_PLAY, SPR2_SDRN, 4, {NULL}, 0, 0, S_PLAY_SUPER_DRWN}, // S_PLAY_SUPER_DRWN
{SPR_PLAY, SPR2_SSPN, 1, {NULL}, 0, 0, S_PLAY_SUPER_SPIN}, // S_PLAY_SUPER_SPIN {SPR_PLAY, SPR2_SSPN, 1, {NULL}, 0, 0, S_PLAY_SUPER_SPIN}, // S_PLAY_SUPER_SPIN
@ -192,12 +227,12 @@ state_t states[NUMSTATES] =
{SPR_PLAY, SPR2_TRNS, 4, {NULL}, 0, 0, S_PLAY_SUPER_TRANS2}, // S_PLAY_SUPER_TRANS {SPR_PLAY, SPR2_TRNS, 4, {NULL}, 0, 0, S_PLAY_SUPER_TRANS2}, // S_PLAY_SUPER_TRANS
{SPR_PLAY, SPR2_TRNS, 4, {NULL}, 0, 0, S_PLAY_SUPER_TRANS3}, // S_PLAY_SUPER_TRANS2 {SPR_PLAY, SPR2_TRNS, 4, {NULL}, 0, 0, S_PLAY_SUPER_TRANS3}, // S_PLAY_SUPER_TRANS2
{SPR_PLAY, SPR2_TRNS|FF_FULLBRIGHT, 4, {NULL}, 0, 0, S_PLAY_SUPER_TRANS4}, // S_PLAY_SUPER_TRANS3 {SPR_PLAY, SPR2_TRNS|FF_FULLBRIGHT, 4, {NULL}, 0, 0, S_PLAY_SUPER_TRANS4}, // S_PLAY_SUPER_TRANS3
{SPR_PLAY, SPR2_TRNS, 3, {NULL}, 0, 0, S_PLAY_SUPER_TRANS5}, // S_PLAY_SUPER_TRANS4 {SPR_PLAY, SPR2_TRNS|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_PLAY_SUPER_TRANS5}, // S_PLAY_SUPER_TRANS4
{SPR_PLAY, SPR2_TRNS, 3, {NULL}, 0, 0, S_PLAY_SUPER_TRANS6}, // S_PLAY_SUPER_TRANS5 {SPR_PLAY, SPR2_TRNS|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_PLAY_SUPER_TRANS6}, // S_PLAY_SUPER_TRANS5
{SPR_PLAY, SPR2_TRNS, 3, {NULL}, 0, 0, S_PLAY_SUPER_TRANS7}, // S_PLAY_SUPER_TRANS6 {SPR_PLAY, SPR2_TRNS|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_PLAY_SUPER_TRANS7}, // S_PLAY_SUPER_TRANS6
{SPR_PLAY, SPR2_TRNS, 3, {NULL}, 0, 0, S_PLAY_SUPER_TRANS8}, // S_PLAY_SUPER_TRANS7 {SPR_PLAY, SPR2_TRNS|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_PLAY_SUPER_TRANS8}, // S_PLAY_SUPER_TRANS7
{SPR_PLAY, SPR2_TRNS, 3, {NULL}, 0, 0, S_PLAY_SUPER_TRANS9}, // S_PLAY_SUPER_TRANS8 {SPR_PLAY, SPR2_TRNS|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_PLAY_SUPER_TRANS9}, // S_PLAY_SUPER_TRANS8
{SPR_PLAY, SPR2_TRNS, 16, {NULL}, 0, 0, S_PLAY_WALK}, // S_PLAY_SUPER_TRANS9 {SPR_PLAY, SPR2_TRNS|FF_FULLBRIGHT, 16, {NULL}, 0, 0, S_PLAY_WALK}, // S_PLAY_SUPER_TRANS9
{SPR_NULL, 0, -1, {NULL}, 0, 0, S_OBJPLACE_DUMMY}, //S_OBJPLACE_DUMMY {SPR_NULL, 0, -1, {NULL}, 0, 0, S_OBJPLACE_DUMMY}, //S_OBJPLACE_DUMMY
@ -211,6 +246,52 @@ state_t states[NUMSTATES] =
// Level end sign (uses player sprite) // Level end sign (uses player sprite)
{SPR_PLAY, SPR2_SIGN, 1, {NULL}, 0, 24, S_PLAY_SIGN}, // S_PLAY_SIGN {SPR_PLAY, SPR2_SIGN, 1, {NULL}, 0, 24, S_PLAY_SIGN}, // S_PLAY_SIGN
// NiGHTS Player, transforming
{SPR_PLAY, SPR2_NTRN, 4, {A_Scream}, 0, 0, S_PLAY_NIGHTS_TRANS2}, // S_PLAY_NIGHTS_TRANS
{SPR_PLAY, SPR2_NTRN, 4, {NULL}, 0, 0, S_PLAY_NIGHTS_TRANS3}, // S_PLAY_NIGHTS_TRANS2
{SPR_PLAY, SPR2_NTRN|FF_FULLBRIGHT, 4, {NULL}, 0, 0, S_PLAY_NIGHTS_TRANS4}, // S_PLAY_NIGHTS_TRANS3
{SPR_PLAY, SPR2_NTRN|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_PLAY_NIGHTS_TRANS5}, // S_PLAY_NIGHTS_TRANS4
{SPR_PLAY, SPR2_NTRN|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_PLAY_NIGHTS_TRANS6}, // S_PLAY_NIGHTS_TRANS5
{SPR_PLAY, SPR2_NTRN|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_PLAY_NIGHTS_TRANS7}, // S_PLAY_NIGHTS_TRANS6
{SPR_PLAY, SPR2_NTRN|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_PLAY_NIGHTS_TRANS8}, // S_PLAY_NIGHTS_TRANS7
{SPR_PLAY, SPR2_NTRN|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_PLAY_NIGHTS_TRANS9}, // S_PLAY_NIGHTS_TRANS8
{SPR_PLAY, SPR2_NTRN|FF_FULLBRIGHT, 16, {NULL}, 0, 0, S_PLAY_NIGHTS_FLOAT}, // S_PLAY_NIGHTS_TRANS9
// NiGHTS Player, Stand, Floating, Pain, Pull and Attack
{SPR_PLAY, SPR2_NSTD, 7, {NULL}, 0, 0, S_PLAY_NIGHTS_STAND}, // S_PLAY_NIGHTS_STAND
{SPR_PLAY, SPR2_NFLT, 7, {NULL}, 0, 0, S_PLAY_NIGHTS_FLOAT}, // S_PLAY_NIGHTS_FLOAT
{SPR_PLAY, SPR2_NPAN, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_PAIN}, // S_PLAY_NIGHTS_PAIN
{SPR_PLAY, SPR2_NPUL, 1, {NULL}, 0, 0, S_PLAY_NIGHTS_PULL}, // S_PLAY_NIGHTS_PULL
{SPR_PLAY, SPR2_NATK, 1, {NULL}, 0, 0, S_PLAY_NIGHTS_ATTACK}, // S_PLAY_NIGHTS_ATTACK
// NiGHTS Player, Flying and Drilling
{SPR_PLAY, SPR2_NGT0, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_FLY0}, // S_PLAY_NIGHTS_FLY0
{SPR_PLAY, SPR2_DRL0, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_DRILL0}, // S_PLAY_NIGHTS_DRILL0
{SPR_PLAY, SPR2_NGT1, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_FLY1}, // S_PLAY_NIGHTS_FLY1
{SPR_PLAY, SPR2_DRL1, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_DRILL1}, // S_PLAY_NIGHTS_DRILL1
{SPR_PLAY, SPR2_NGT2, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_FLY2}, // S_PLAY_NIGHTS_FLY2
{SPR_PLAY, SPR2_DRL2, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_DRILL2}, // S_PLAY_NIGHTS_DRILL2
{SPR_PLAY, SPR2_NGT3, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_FLY3}, // S_PLAY_NIGHTS_FLY3
{SPR_PLAY, SPR2_DRL3, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_DRILL3}, // S_PLAY_NIGHTS_DRILL3
{SPR_PLAY, SPR2_NGT4, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_FLY4}, // S_PLAY_NIGHTS_FLY4
{SPR_PLAY, SPR2_DRL4, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_DRILL4}, // S_PLAY_NIGHTS_DRILL4
{SPR_PLAY, SPR2_NGT5, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_FLY5}, // S_PLAY_NIGHTS_FLY5
{SPR_PLAY, SPR2_DRL5, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_DRILL5}, // S_PLAY_NIGHTS_DRILL5
{SPR_PLAY, SPR2_NGT6, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_FLY6}, // S_PLAY_NIGHTS_FLY6
{SPR_PLAY, SPR2_DRL6, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_DRILL6}, // S_PLAY_NIGHTS_DRILL6
{SPR_PLAY, SPR2_NGT7, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_FLY7}, // S_PLAY_NIGHTS_FLY7
{SPR_PLAY, SPR2_DRL7, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_DRILL7}, // S_PLAY_NIGHTS_DRILL7
{SPR_PLAY, SPR2_NGT8, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_FLY8}, // S_PLAY_NIGHTS_FLY8
{SPR_PLAY, SPR2_DRL8, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_DRILL8}, // S_PLAY_NIGHTS_DRILL8
{SPR_PLAY, SPR2_NGT9, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_FLY9}, // S_PLAY_NIGHTS_FLY9
{SPR_PLAY, SPR2_DRL9, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_DRILL9}, // S_PLAY_NIGHTS_DRILL9
{SPR_PLAY, SPR2_NGTA, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_FLYA}, // S_PLAY_NIGHTS_FLYA
{SPR_PLAY, SPR2_DRLA, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_DRILLA}, // S_PLAY_NIGHTS_DRILLA
{SPR_PLAY, SPR2_NGTB, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_FLYB}, // S_PLAY_NIGHTS_FLYB
{SPR_PLAY, SPR2_DRLB, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_DRILLB}, // S_PLAY_NIGHTS_DRILLB
{SPR_PLAY, SPR2_NGTC, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_FLYC}, // S_PLAY_NIGHTS_FLYC
{SPR_PLAY, SPR2_DRLC, 2, {NULL}, 0, 0, S_PLAY_NIGHTS_DRILLC}, // S_PLAY_NIGHTS_DRILLC
// Blue Crawla // Blue Crawla
{SPR_POSS, 0, 5, {A_Look}, 0, 0, S_POSS_STND}, // S_POSS_STND {SPR_POSS, 0, 5, {A_Look}, 0, 0, S_POSS_STND}, // S_POSS_STND
{SPR_POSS, 0, 3, {A_Chase}, 0, 0, S_POSS_RUN2}, // S_POSS_RUN1 {SPR_POSS, 0, 3, {A_Chase}, 0, 0, S_POSS_RUN2}, // S_POSS_RUN1
@ -2266,96 +2347,6 @@ state_t states[NUMSTATES] =
{SPR_GOAL, 2, 4, {NULL}, 0, 0, S_NIGHTSGOAL4}, // S_NIGHTSGOAL3 {SPR_GOAL, 2, 4, {NULL}, 0, 0, S_NIGHTSGOAL4}, // S_NIGHTSGOAL3
{SPR_GOAL, 3, 4, {NULL}, 0, 0, S_NIGHTSGOAL1}, // S_NIGHTSGOAL4 {SPR_GOAL, 3, 4, {NULL}, 0, 0, S_NIGHTSGOAL1}, // S_NIGHTSGOAL4
// Nights Player, Flying and Drilling
{SPR_SUPE, 0, 1, {NULL}, 0, 0, S_NIGHTSFLY1B}, // S_NIGHTSFLY1A
{SPR_SUPE, 1, 1, {NULL}, 0, 0, S_NIGHTSFLY1A}, // S_NIGHTSFLY1B
{SPR_NDRL, 0, 2, {NULL}, 0, 0, S_NIGHTSDRILL1B}, // S_NIGHTSDRILL1A
{SPR_NDRL, 1, 2, {NULL}, 0, 0, S_NIGHTSDRILL1C}, // S_NIGHTSDRILL1B
{SPR_NDRL, 2, 2, {NULL}, 0, 0, S_NIGHTSDRILL1D}, // S_NIGHTSDRILL1C
{SPR_NDRL, 3, 2, {NULL}, 0, 0, S_NIGHTSDRILL1A}, // S_NIGHTSDRILL1D
{SPR_SUPE, 2, 1, {NULL}, 0, 0, S_NIGHTSFLY2B}, // S_NIGHTSFLY2A
{SPR_SUPE, 3, 1, {NULL}, 0, 0, S_NIGHTSFLY2A}, // S_NIGHTSFLY2B
{SPR_NDRL, 4, 2, {NULL}, 0, 0, S_NIGHTSDRILL2B}, // S_NIGHTSDRILL2A
{SPR_NDRL, 5, 2, {NULL}, 0, 0, S_NIGHTSDRILL2C}, // S_NIGHTSDRILL2B
{SPR_NDRL, 6, 2, {NULL}, 0, 0, S_NIGHTSDRILL2D}, // S_NIGHTSDRILL2C
{SPR_NDRL, 7, 2, {NULL}, 0, 0, S_NIGHTSDRILL2A}, // S_NIGHTSDRILL2D
{SPR_SUPE, 4, 1, {NULL}, 0, 0, S_NIGHTSFLY3B}, // S_NIGHTSFLY3A
{SPR_SUPE, 5, 1, {NULL}, 0, 0, S_NIGHTSFLY3A}, // S_NIGHTSFLY3B
{SPR_NDRL, 8, 2, {NULL}, 0, 0, S_NIGHTSDRILL3B}, // S_NIGHTSDRILL3A
{SPR_NDRL, 9, 2, {NULL}, 0, 0, S_NIGHTSDRILL3C}, // S_NIGHTSDRILL3B
{SPR_NDRL, 10, 2, {NULL}, 0, 0, S_NIGHTSDRILL3D}, // S_NIGHTSDRILL3C
{SPR_NDRL, 11, 2, {NULL}, 0, 0, S_NIGHTSDRILL3A}, // S_NIGHTSDRILL3D
{SPR_SUPE, 6, 1, {NULL}, 0, 0, S_NIGHTSFLY4B}, // S_NIGHTSFLY4A
{SPR_SUPE, 7, 1, {NULL}, 0, 0, S_NIGHTSFLY4A}, // S_NIGHTSFLY4B
{SPR_NDRL, 12, 2, {NULL}, 0, 0, S_NIGHTSDRILL4B}, // S_NIGHTSDRILL4A
{SPR_NDRL, 13, 2, {NULL}, 0, 0, S_NIGHTSDRILL4C}, // S_NIGHTSDRILL4B
{SPR_NDRL, 14, 2, {NULL}, 0, 0, S_NIGHTSDRILL4D}, // S_NIGHTSDRILL4C
{SPR_NDRL, 15, 2, {NULL}, 0, 0, S_NIGHTSDRILL4A}, // S_NIGHTSDRILL4D
{SPR_SUPE, 8, 1, {NULL}, 0, 0, S_NIGHTSFLY5B}, // S_NIGHTSFLY5A
{SPR_SUPE, 9, 1, {NULL}, 0, 0, S_NIGHTSFLY5A}, // S_NIGHTSFLY5B
{SPR_NDRL, 16, 2, {NULL}, 0, 0, S_NIGHTSDRILL5B}, // S_NIGHTSDRILL5A
{SPR_NDRL, 17, 2, {NULL}, 0, 0, S_NIGHTSDRILL5C}, // S_NIGHTSDRILL5B
{SPR_NDRL, 18, 2, {NULL}, 0, 0, S_NIGHTSDRILL5D}, // S_NIGHTSDRILL5C
{SPR_NDRL, 19, 2, {NULL}, 0, 0, S_NIGHTSDRILL5A}, // S_NIGHTSDRILL5D
{SPR_SUPE, 10, 1, {NULL}, 0, 0, S_NIGHTSFLY6B}, // S_NIGHTSFLY6A
{SPR_SUPE, 11, 1, {NULL}, 0, 0, S_NIGHTSFLY6A}, // S_NIGHTSFLY6B
{SPR_NDRL, 20, 2, {NULL}, 0, 0, S_NIGHTSDRILL6B}, // S_NIGHTSDRILL6A
{SPR_NDRL, 21, 2, {NULL}, 0, 0, S_NIGHTSDRILL6C}, // S_NIGHTSDRILL6B
{SPR_NDRL, 22, 2, {NULL}, 0, 0, S_NIGHTSDRILL6D}, // S_NIGHTSDRILL6C
{SPR_NDRL, 23, 2, {NULL}, 0, 0, S_NIGHTSDRILL6A}, // S_NIGHTSDRILL6D
{SPR_SUPE, 12, 1, {NULL}, 0, 0, S_NIGHTSFLY7B}, // S_NIGHTSFLY7A
{SPR_SUPE, 13, 1, {NULL}, 0, 0, S_NIGHTSFLY7A}, // S_NIGHTSFLY7B
{SPR_NDRL, 24, 2, {NULL}, 0, 0, S_NIGHTSDRILL7B}, // S_NIGHTSDRILL7A
{SPR_NDRL, 25, 2, {NULL}, 0, 0, S_NIGHTSDRILL7C}, // S_NIGHTSDRILL7B
{SPR_NDRL, 26, 2, {NULL}, 0, 0, S_NIGHTSDRILL7D}, // S_NIGHTSDRILL7C
{SPR_NDRL, 27, 2, {NULL}, 0, 0, S_NIGHTSDRILL7A}, // S_NIGHTSDRILL7D
{SPR_SUPE, 14, 1, {NULL}, 0, 0, S_NIGHTSFLY8B}, // S_NIGHTSFLY8A
{SPR_SUPE, 15, 1, {NULL}, 0, 0, S_NIGHTSFLY8A}, // S_NIGHTSFLY8B
{SPR_NDRL, 28, 2, {NULL}, 0, 0, S_NIGHTSDRILL8B}, // S_NIGHTSDRILL8A
{SPR_NDRL, 29, 2, {NULL}, 0, 0, S_NIGHTSDRILL8C}, // S_NIGHTSDRILL8B
{SPR_NDRL, 30, 2, {NULL}, 0, 0, S_NIGHTSDRILL8D}, // S_NIGHTSDRILL8C
{SPR_NDRL, 31, 2, {NULL}, 0, 0, S_NIGHTSDRILL8A}, // S_NIGHTSDRILL8D
{SPR_SUPE, 16, 1, {NULL}, 0, 0, S_NIGHTSFLY9B}, // S_NIGHTSFLY9A
{SPR_SUPE, 17, 1, {NULL}, 0, 0, S_NIGHTSFLY9A}, // S_NIGHTSFLY9B
{SPR_NDRL, 32, 2, {NULL}, 0, 0, S_NIGHTSDRILL9B}, // S_NIGHTSDRILL9A
{SPR_NDRL, 33, 2, {NULL}, 0, 0, S_NIGHTSDRILL9C}, // S_NIGHTSDRILL9B
{SPR_NDRL, 34, 2, {NULL}, 0, 0, S_NIGHTSDRILL9D}, // S_NIGHTSDRILL9C
{SPR_NDRL, 35, 2, {NULL}, 0, 0, S_NIGHTSDRILL9A}, // S_NIGHTSDRILL9D
// Nights Player, Falling
{SPR_SUPZ, 0, 1, {NULL}, 0, 0, S_NIGHTSHURT2}, // S_NIGHTSHURT1
{SPR_SUPZ, 1, 1, {NULL}, 0, 0, S_NIGHTSHURT3}, // S_NIGHTSHURT2
{SPR_SUPZ, 2, 1, {NULL}, 0, 0, S_NIGHTSHURT4}, // S_NIGHTSHURT3
{SPR_SUPZ, 3, 1, {NULL}, 0, 0, S_NIGHTSHURT5}, // S_NIGHTSHURT4
{SPR_SUPZ, 4, 1, {NULL}, 0, 0, S_NIGHTSHURT6}, // S_NIGHTSHURT5
{SPR_SUPZ, 5, 1, {NULL}, 0, 0, S_NIGHTSHURT7}, // S_NIGHTSHURT6
{SPR_SUPZ, 6, 1, {NULL}, 0, 0, S_NIGHTSHURT8}, // S_NIGHTSHURT7
{SPR_SUPZ, 7, 1, {NULL}, 0, 0, S_NIGHTSHURT9}, // S_NIGHTSHURT8
{SPR_SUPZ, 8, 1, {NULL}, 0, 0, S_NIGHTSHURT10}, // S_NIGHTSHURT9
{SPR_SUPZ, 9, 1, {NULL}, 0, 0, S_NIGHTSHURT11}, // S_NIGHTSHURT10
{SPR_SUPZ, 10, 1, {NULL}, 0, 0, S_NIGHTSHURT12}, // S_NIGHTSHURT11
{SPR_SUPZ, 11, 1, {NULL}, 0, 0, S_NIGHTSHURT13}, // S_NIGHTSHURT12
{SPR_SUPZ, 12, 1, {NULL}, 0, 0, S_NIGHTSHURT14}, // S_NIGHTSHURT13
{SPR_SUPZ, 13, 1, {NULL}, 0, 0, S_NIGHTSHURT15}, // S_NIGHTSHURT14
{SPR_SUPZ, 14, 1, {NULL}, 0, 0, S_NIGHTSHURT16}, // S_NIGHTSHURT15
{SPR_SUPZ, 15, 1, {NULL}, 0, 0, S_NIGHTSHURT17}, // S_NIGHTSHURT16
{SPR_SUPZ, 0, 1, {NULL}, 0, 0, S_NIGHTSHURT18}, // S_NIGHTSHURT17
{SPR_SUPZ, 1, 1, {NULL}, 0, 0, S_NIGHTSHURT19}, // S_NIGHTSHURT18
{SPR_SUPZ, 2, 1, {NULL}, 0, 0, S_NIGHTSHURT20}, // S_NIGHTSHURT19
{SPR_SUPZ, 3, 1, {NULL}, 0, 0, S_NIGHTSHURT21}, // S_NIGHTSHURT20
{SPR_SUPZ, 4, 1, {NULL}, 0, 0, S_NIGHTSHURT22}, // S_NIGHTSHURT21
{SPR_SUPZ, 5, 1, {NULL}, 0, 0, S_NIGHTSHURT23}, // S_NIGHTSHURT22
{SPR_SUPZ, 6, 1, {NULL}, 0, 0, S_NIGHTSHURT24}, // S_NIGHTSHURT23
{SPR_SUPZ, 7, 1, {NULL}, 0, 0, S_NIGHTSHURT25}, // S_NIGHTSHURT24
{SPR_SUPZ, 8, 1, {NULL}, 0, 0, S_NIGHTSHURT26}, // S_NIGHTSHURT25
{SPR_SUPZ, 9, 1, {NULL}, 0, 0, S_NIGHTSHURT27}, // S_NIGHTSHURT26
{SPR_SUPZ, 10, 1, {NULL}, 0, 0, S_NIGHTSHURT28}, // S_NIGHTSHURT27
{SPR_SUPZ, 11, 1, {NULL}, 0, 0, S_NIGHTSHURT29}, // S_NIGHTSHURT28
{SPR_SUPZ, 12, 1, {NULL}, 0, 0, S_NIGHTSHURT30}, // S_NIGHTSHURT29
{SPR_SUPZ, 13, 1, {NULL}, 0, 0, S_NIGHTSHURT31}, // S_NIGHTSHURT30
{SPR_SUPZ, 14, 1, {NULL}, 0, 0, S_NIGHTSHURT32}, // S_NIGHTSHURT31
{SPR_SUPZ, 15, 1, {NULL}, 0, 0, S_NIGHTSFLY1A}, // S_NIGHTSHURT32
// Nights Sparkle // Nights Sparkle
{SPR_NSPK, FF_FULLBRIGHT, 140, {NULL}, 0, 0, S_NIGHTSPARKLE2}, // S_NIGHTSPARKLE1 {SPR_NSPK, FF_FULLBRIGHT, 140, {NULL}, 0, 0, S_NIGHTSPARKLE2}, // S_NIGHTSPARKLE1
{SPR_NSPK, FF_FULLBRIGHT|1, 7, {NULL}, 0, 0, S_NIGHTSPARKLE3}, // S_NIGHTSPARKLE2 {SPR_NSPK, FF_FULLBRIGHT|1, 7, {NULL}, 0, 0, S_NIGHTSPARKLE3}, // S_NIGHTSPARKLE2
@ -2458,16 +2449,6 @@ state_t states[NUMSTATES] =
{SPR_NULL, 0, 35, {NULL}, 0, 0, S_CRUMBLE2}, // S_CRUMBLE1 {SPR_NULL, 0, 35, {NULL}, 0, 0, S_CRUMBLE2}, // S_CRUMBLE1
{SPR_NULL, 0, 105, {A_Scream}, 0, 0, S_NULL}, // S_CRUMBLE2 {SPR_NULL, 0, 105, {A_Scream}, 0, 0, S_NULL}, // S_CRUMBLE2
{SPR_SUPT, 0, 4, {A_Scream}, 0, 0, S_SUPERTRANS2}, // S_SUPERTRANS1
{SPR_SUPT, 1, 4, {NULL}, 0, 0, S_SUPERTRANS3}, // S_SUPERTRANS2
{SPR_SUPT, FF_FULLBRIGHT|2, 4, {NULL}, 0, 0, S_SUPERTRANS4}, // S_SUPERTRANS3
{SPR_SUPT, 3, 3, {NULL}, 0, 0, S_SUPERTRANS5}, // S_SUPERTRANS4
{SPR_SUPT, 4, 3, {NULL}, 0, 0, S_SUPERTRANS6}, // S_SUPERTRANS5
{SPR_SUPT, 5, 3, {NULL}, 0, 0, S_SUPERTRANS7}, // S_SUPERTRANS6
{SPR_SUPT, 6, 3, {NULL}, 0, 0, S_SUPERTRANS8}, // S_SUPERTRANS7
{SPR_SUPT, 7, 3, {NULL}, 0, 0, S_SUPERTRANS9}, // S_SUPERTRANS8
{SPR_SUPT, 8, 16, {NULL}, 0, 0, S_NIGHTSDRONE1}, // S_SUPERTRANS9
// Spark // Spark
{SPR_SPRK, FF_TRANS40 , 1, {NULL}, 0, 0, S_SPRK2}, // S_SPRK1 {SPR_SPRK, FF_TRANS40 , 1, {NULL}, 0, 0, S_SPRK2}, // S_SPRK1
{SPR_SPRK, FF_TRANS50|1, 1, {NULL}, 0, 0, S_SPRK3}, // S_SPRK2 {SPR_SPRK, FF_TRANS50|1, 1, {NULL}, 0, 0, S_SPRK3}, // S_SPRK2
@ -12185,33 +12166,6 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate S_NULL // raisestate
}, },
{ // MT_NIGHTSCHAR
-1, // doomednum
S_NIGHTSFLY1A, // spawnstate
1000, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
0, // reactiontime
sfx_None, // attacksound
S_NIGHTSFLY1A, // painstate
255, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NIGHTSFLY1A, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
0, // speed
16*FRACUNIT, // radius
48*FRACUNIT, // height
0, // display offset
1000, // mass
0, // damage
sfx_None, // activesound
MF_NOCLIP|MF_NOGRAVITY, // flags
S_NULL // raisestate
},
{ // MT_NIGHTSPARKLE { // MT_NIGHTSPARKLE
-1, // doomednum -1, // doomednum
S_NIGHTSPARKLE1,// spawnstate S_NIGHTSPARKLE1,// spawnstate

View file

@ -591,9 +591,9 @@ enum playersprite
SPR2_PEEL, SPR2_PEEL,
SPR2_PAIN, SPR2_PAIN,
SPR2_DEAD, SPR2_DEAD,
SPR2_DRWN, SPR2_DRWN, // drown
SPR2_SPIN, SPR2_SPIN,
SPR2_DASH, SPR2_DASH, // spindash charge
SPR2_GASP, SPR2_GASP,
SPR2_JUMP, SPR2_JUMP,
SPR2_SPNG, // spring SPR2_SPNG, // spring
@ -601,38 +601,75 @@ enum playersprite
SPR2_EDGE, SPR2_EDGE,
SPR2_RIDE, SPR2_RIDE,
SPR2_SIGN, SPR2_SIGN, // end sign head
SPR2_LIFE, SPR2_LIFE, // life monitor icon
SPR2_FLY , SPR2_FLY ,
SPR2_SWIM, SPR2_SWIM,
SPR2_TIRE, SPR2_TIRE, // tired
SPR2_GLID, SPR2_GLID, // glide
SPR2_CLNG, SPR2_CLNG, // cling
SPR2_CLMB, SPR2_CLMB, // climb
SPR2_TWIN, SPR2_TWIN, // twinspin
SPR2_MLEE, SPR2_MLEE, // melee
SPR2_TRNS, SPR2_TRNS, // super transformation
SPR2_SSTD, SPR2_SSTD, // super stand
SPR2_SWLK, SPR2_SWLK, // super walk
SPR2_SRUN, SPR2_SRUN, // super run
SPR2_SPEE, SPR2_SPEE, // super peelout
SPR2_SPAN, SPR2_SPAN, // super pain
SPR2_SMSL, SPR2_SSTN, // super stun
SPR2_SDTH, SPR2_SDTH, // super death
SPR2_SDRN, SPR2_SDRN, // super drown
SPR2_SSPN, SPR2_SSPN, // super spin
SPR2_SGSP, SPR2_SGSP, // super gasp
SPR2_SJMP, SPR2_SJMP, // super jump
SPR2_SSPG, SPR2_SSPG, // super spring
SPR2_SFAL, SPR2_SFAL, // super fall
SPR2_SEDG, SPR2_SEDG, // super edge
SPR2_SRID, SPR2_SRID, // super ride
SPR2_SFLT, SPR2_SFLT, // super float
SPR2_NTRN, // NiGHTS transformation
SPR2_NSTD, // NiGHTS stand
SPR2_NFLT, // NiGHTS float
SPR2_NPAN, // NiGHTS pain
SPR2_NPUL, // NiGHTS pull
SPR2_NATK, // NiGHTS attack
// NiGHTS flight.
SPR2_NGT0,
SPR2_NGT1,
SPR2_NGT2,
SPR2_NGT3,
SPR2_NGT4,
SPR2_NGT5,
SPR2_NGT6,
SPR2_NGT7,
SPR2_NGT8,
SPR2_NGT9,
SPR2_NGTA,
SPR2_NGTB,
SPR2_NGTC,
// NiGHTS drill.
SPR2_DRL0,
SPR2_DRL1,
SPR2_DRL2,
SPR2_DRL3,
SPR2_DRL4,
SPR2_DRL5,
SPR2_DRL6,
SPR2_DRL7,
SPR2_DRL8,
SPR2_DRL9,
SPR2_DRLA,
SPR2_DRLB,
SPR2_DRLC,
SPR2_FIRSTFREESLOT, SPR2_FIRSTFREESLOT,
SPR2_LASTFREESLOT = SPR2_FIRSTFREESLOT + NUMSPRITEFREESLOTS - 1, SPR2_LASTFREESLOT = SPR2_FIRSTFREESLOT + NUMSPRITEFREESLOTS - 1,
@ -733,6 +770,50 @@ typedef enum state
// Level end sign overlay (uses player sprite) // Level end sign overlay (uses player sprite)
S_PLAY_SIGN, S_PLAY_SIGN,
// NiGHTS character (uses player sprite)
S_PLAY_NIGHTS_TRANS,
S_PLAY_NIGHTS_TRANS2,
S_PLAY_NIGHTS_TRANS3,
S_PLAY_NIGHTS_TRANS4,
S_PLAY_NIGHTS_TRANS5,
S_PLAY_NIGHTS_TRANS6,
S_PLAY_NIGHTS_TRANS7,
S_PLAY_NIGHTS_TRANS8,
S_PLAY_NIGHTS_TRANS9,
S_PLAY_NIGHTS_STAND,
S_PLAY_NIGHTS_FLOAT,
S_PLAY_NIGHTS_PAIN,
S_PLAY_NIGHTS_PULL,
S_PLAY_NIGHTS_ATTACK,
S_PLAY_NIGHTS_FLY0,
S_PLAY_NIGHTS_DRILL0,
S_PLAY_NIGHTS_FLY1,
S_PLAY_NIGHTS_DRILL1,
S_PLAY_NIGHTS_FLY2,
S_PLAY_NIGHTS_DRILL2,
S_PLAY_NIGHTS_FLY3,
S_PLAY_NIGHTS_DRILL3,
S_PLAY_NIGHTS_FLY4,
S_PLAY_NIGHTS_DRILL4,
S_PLAY_NIGHTS_FLY5,
S_PLAY_NIGHTS_DRILL5,
S_PLAY_NIGHTS_FLY6,
S_PLAY_NIGHTS_DRILL6,
S_PLAY_NIGHTS_FLY7,
S_PLAY_NIGHTS_DRILL7,
S_PLAY_NIGHTS_FLY8,
S_PLAY_NIGHTS_DRILL8,
S_PLAY_NIGHTS_FLY9,
S_PLAY_NIGHTS_DRILL9,
S_PLAY_NIGHTS_FLYA,
S_PLAY_NIGHTS_DRILLA,
S_PLAY_NIGHTS_FLYB,
S_PLAY_NIGHTS_DRILLB,
S_PLAY_NIGHTS_FLYC,
S_PLAY_NIGHTS_DRILLC,
// Blue Crawla // Blue Crawla
S_POSS_STND, S_POSS_STND,
S_POSS_RUN1, S_POSS_RUN1,
@ -2728,93 +2809,6 @@ typedef enum state
S_NIGHTSGOAL3, S_NIGHTSGOAL3,
S_NIGHTSGOAL4, S_NIGHTSGOAL4,
S_NIGHTSFLY1A,
S_NIGHTSFLY1B,
S_NIGHTSDRILL1A,
S_NIGHTSDRILL1B,
S_NIGHTSDRILL1C,
S_NIGHTSDRILL1D,
S_NIGHTSFLY2A,
S_NIGHTSFLY2B,
S_NIGHTSDRILL2A,
S_NIGHTSDRILL2B,
S_NIGHTSDRILL2C,
S_NIGHTSDRILL2D,
S_NIGHTSFLY3A,
S_NIGHTSFLY3B,
S_NIGHTSDRILL3A,
S_NIGHTSDRILL3B,
S_NIGHTSDRILL3C,
S_NIGHTSDRILL3D,
S_NIGHTSFLY4A,
S_NIGHTSFLY4B,
S_NIGHTSDRILL4A,
S_NIGHTSDRILL4B,
S_NIGHTSDRILL4C,
S_NIGHTSDRILL4D,
S_NIGHTSFLY5A,
S_NIGHTSFLY5B,
S_NIGHTSDRILL5A,
S_NIGHTSDRILL5B,
S_NIGHTSDRILL5C,
S_NIGHTSDRILL5D,
S_NIGHTSFLY6A,
S_NIGHTSFLY6B,
S_NIGHTSDRILL6A,
S_NIGHTSDRILL6B,
S_NIGHTSDRILL6C,
S_NIGHTSDRILL6D,
S_NIGHTSFLY7A,
S_NIGHTSFLY7B,
S_NIGHTSDRILL7A,
S_NIGHTSDRILL7B,
S_NIGHTSDRILL7C,
S_NIGHTSDRILL7D,
S_NIGHTSFLY8A,
S_NIGHTSFLY8B,
S_NIGHTSDRILL8A,
S_NIGHTSDRILL8B,
S_NIGHTSDRILL8C,
S_NIGHTSDRILL8D,
S_NIGHTSFLY9A,
S_NIGHTSFLY9B,
S_NIGHTSDRILL9A,
S_NIGHTSDRILL9B,
S_NIGHTSDRILL9C,
S_NIGHTSDRILL9D,
S_NIGHTSHURT1,
S_NIGHTSHURT2,
S_NIGHTSHURT3,
S_NIGHTSHURT4,
S_NIGHTSHURT5,
S_NIGHTSHURT6,
S_NIGHTSHURT7,
S_NIGHTSHURT8,
S_NIGHTSHURT9,
S_NIGHTSHURT10,
S_NIGHTSHURT11,
S_NIGHTSHURT12,
S_NIGHTSHURT13,
S_NIGHTSHURT14,
S_NIGHTSHURT15,
S_NIGHTSHURT16,
S_NIGHTSHURT17,
S_NIGHTSHURT18,
S_NIGHTSHURT19,
S_NIGHTSHURT20,
S_NIGHTSHURT21,
S_NIGHTSHURT22,
S_NIGHTSHURT23,
S_NIGHTSHURT24,
S_NIGHTSHURT25,
S_NIGHTSHURT26,
S_NIGHTSHURT27,
S_NIGHTSHURT28,
S_NIGHTSHURT29,
S_NIGHTSHURT30,
S_NIGHTSHURT31,
S_NIGHTSHURT32,
S_NIGHTSPARKLE1, S_NIGHTSPARKLE1,
S_NIGHTSPARKLE2, S_NIGHTSPARKLE2,
S_NIGHTSPARKLE3, S_NIGHTSPARKLE3,
@ -2911,16 +2905,6 @@ typedef enum state
S_CRUMBLE1, S_CRUMBLE1,
S_CRUMBLE2, S_CRUMBLE2,
S_SUPERTRANS1,
S_SUPERTRANS2,
S_SUPERTRANS3,
S_SUPERTRANS4,
S_SUPERTRANS5,
S_SUPERTRANS6,
S_SUPERTRANS7,
S_SUPERTRANS8,
S_SUPERTRANS9,
// Spark // Spark
S_SPRK1, S_SPRK1,
S_SPRK2, S_SPRK2,
@ -3496,7 +3480,6 @@ typedef enum mobj_type
MT_AXISTRANSFERLINE, MT_AXISTRANSFERLINE,
MT_NIGHTSDRONE, MT_NIGHTSDRONE,
MT_NIGHTSGOAL, MT_NIGHTSGOAL,
MT_NIGHTSCHAR,
MT_NIGHTSPARKLE, MT_NIGHTSPARKLE,
MT_NIGHTSLOOPHELPER, MT_NIGHTSLOOPHELPER,
MT_NIGHTSBUMPER, // NiGHTS Bumper MT_NIGHTSBUMPER, // NiGHTS Bumper

View file

@ -51,6 +51,7 @@ enum skin {
skin_camerascale, skin_camerascale,
skin_starttranscolor, skin_starttranscolor,
skin_prefcolor, skin_prefcolor,
skin_supercolor,
skin_prefoppositecolor, skin_prefoppositecolor,
skin_highresscale, skin_highresscale,
skin_soundsid, skin_soundsid,
@ -88,6 +89,7 @@ static const char *const skin_opt[] = {
"camerascale", "camerascale",
"starttranscolor", "starttranscolor",
"prefcolor", "prefcolor",
"supercolor",
"prefoppositecolor", "prefoppositecolor",
"highresscale", "highresscale",
"soundsid", "soundsid",
@ -208,6 +210,9 @@ static int skin_get(lua_State *L)
case skin_prefcolor: case skin_prefcolor:
lua_pushinteger(L, skin->prefcolor); lua_pushinteger(L, skin->prefcolor);
break; break;
case skin_supercolor:
lua_pushinteger(L, skin->supercolor);
break;
case skin_prefoppositecolor: case skin_prefoppositecolor:
lua_pushinteger(L, skin->prefoppositecolor); lua_pushinteger(L, skin->prefoppositecolor);
break; break;

View file

@ -8039,7 +8039,7 @@ void A_OrbitNights(mobj_t* actor)
#endif #endif
if (!actor->target || !actor->target->player || if (!actor->target || !actor->target->player ||
!actor->target->tracer || !actor->target->player->nightstime !(actor->target->player->pflags & PF_NIGHTSMODE) || !actor->target->player->nightstime
// Also remove this object if they no longer have a NiGHTS helper // Also remove this object if they no longer have a NiGHTS helper
|| (ishelper && !actor->target->player->powers[pw_nights_helper])) || (ishelper && !actor->target->player->powers[pw_nights_helper]))
{ {
@ -8058,14 +8058,21 @@ void A_OrbitNights(mobj_t* actor)
const fixed_t fh = FixedMul(FINECOSINE(ofa),FixedMul(20*FRACUNIT, actor->scale)); const fixed_t fh = FixedMul(FINECOSINE(ofa),FixedMul(20*FRACUNIT, actor->scale));
const fixed_t fs = FixedMul(FINESINE(fa),FixedMul(32*FRACUNIT, actor->scale)); const fixed_t fs = FixedMul(FINESINE(fa),FixedMul(32*FRACUNIT, actor->scale));
actor->x = actor->target->tracer->x + fc; actor->x = actor->target->x + fc;
actor->y = actor->target->tracer->y + fs; actor->y = actor->target->y + fs;
actor->z = actor->target->tracer->z + fh + FixedMul(16*FRACUNIT, actor->scale); actor->z = actor->target->z + fh + FixedMul(16*FRACUNIT, actor->scale);
// Semi-lazy hack // Semi-lazy hack
actor->angle = (angle_t)actor->extravalue1 + ANGLE_90; actor->angle = (angle_t)actor->extravalue1 + ANGLE_90;
} }
P_SetThingPosition(actor); P_SetThingPosition(actor);
if (ishelper // Flash a helper that's about to be removed.
&& (actor->target->player->powers[pw_nights_helper] < TICRATE)
&& (actor->target->player->powers[pw_nights_helper] & 1))
actor->flags2 |= MF2_DONTDRAW;
else
actor->flags2 &= ~MF2_DONTDRAW;
} }
} }

View file

@ -652,16 +652,16 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
if (G_IsSpecialStage(gamemap)) //After-mare bonus time/emerald reward in special stages. if (G_IsSpecialStage(gamemap)) //After-mare bonus time/emerald reward in special stages.
{ {
// only allow the player with the emerald in-hand to leave. // only allow the player with the emerald in-hand to leave.
if (toucher->tracer && toucher->tracer->target if (toucher->tracer
&& toucher->tracer->target->type == MT_GOTEMERALD) && toucher->tracer->type == MT_GOTEMERALD)
{ {
} }
else // Make sure that SOMEONE has the emerald, at least! else // Make sure that SOMEONE has the emerald, at least!
{ {
for (i = 0; i < MAXPLAYERS; i++) for (i = 0; i < MAXPLAYERS; i++)
if (playeringame[i] && players[i].playerstate == PST_LIVE if (playeringame[i] && players[i].playerstate == PST_LIVE
&& players[i].mo->tracer && players[i].mo->tracer->target && players[i].mo->tracer
&& players[i].mo->tracer->target->type == MT_GOTEMERALD) && players[i].mo->tracer->type == MT_GOTEMERALD)
return; return;
// Well no one has an emerald, so exit anyway! // Well no one has an emerald, so exit anyway!
} }
@ -2487,7 +2487,7 @@ static inline void P_NiGHTSDamage(mobj_t *target, mobj_t *source)
} }
player->powers[pw_flashing] = flashingtics; player->powers[pw_flashing] = flashingtics;
P_SetMobjState(target->tracer, S_NIGHTSHURT1); P_SetPlayerMobjState(target, S_PLAY_NIGHTS_PAIN);
S_StartSound(target, sfx_nghurt); S_StartSound(target, sfx_nghurt);
if (oldnightstime > 10*TICRATE if (oldnightstime > 10*TICRATE

View file

@ -173,10 +173,6 @@ boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state)
else if (state == S_PLAY_SWIM && !(player->mo->eflags & MFE_UNDERWATER)) else if (state == S_PLAY_SWIM && !(player->mo->eflags & MFE_UNDERWATER))
return P_SetPlayerMobjState(player->mo, S_PLAY_FLY); return P_SetPlayerMobjState(player->mo, S_PLAY_FLY);
// Catch melee into goop
//if (state == S_PLAY_MELEE && player->mo->eflags & MFE_GOOWATER)
//return P_SetPlayerMobjState(player->mo, S_PLAY_FALL);
// Catch state changes for Super Sonic // Catch state changes for Super Sonic
if (player->powers[pw_super] && (player->charflags & SF_SUPERANIMS)) if (player->powers[pw_super] && (player->charflags & SF_SUPERANIMS))
{ {
@ -439,7 +435,7 @@ boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state)
case SPR2_SPAN: case SPR2_SPAN:
spr2 = SPR2_PAIN; spr2 = SPR2_PAIN;
break; break;
case SPR2_SMSL: case SPR2_SSTN:
spr2 = SPR2_SPAN; spr2 = SPR2_SPAN;
break; break;
case SPR2_SDTH: case SPR2_SDTH:
@ -473,6 +469,81 @@ boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state)
spr2 = SPR2_SWLK; spr2 = SPR2_SWLK;
break; break;
// NiGHTS sprites.
case SPR2_NTRN:
spr2 = SPR2_TRNS;
break;
case SPR2_NSTD:
spr2 = SPR2_SSTD;
break;
case SPR2_NFLT:
spr2 = (skin->flags & SF_SUPERANIMS) ? SPR2_SFLT : SPR2_FALL; // This is skin-exclusive so the default NiGHTS skin changing system plays nice.
break;
case SPR2_NPUL:
spr2 = SPR2_NFLT;
break;
case SPR2_NPAN:
spr2 = SPR2_NPUL;
break;
case SPR2_NATK:
spr2 = SPR2_SSPN;
break;
/*case SPR2_NGT0:
spr2 = SPR2_STND;
break;*/
case SPR2_NGT1:
case SPR2_NGT7:
case SPR2_DRL0:
spr2 = SPR2_NGT0;
break;
case SPR2_NGT2:
case SPR2_DRL1:
spr2 = SPR2_NGT1;
break;
case SPR2_NGT3:
case SPR2_DRL2:
spr2 = SPR2_NGT2;
break;
case SPR2_NGT4:
case SPR2_DRL3:
spr2 = SPR2_NGT3;
break;
case SPR2_NGT5:
case SPR2_DRL4:
spr2 = SPR2_NGT4;
break;
case SPR2_NGT6:
case SPR2_DRL5:
spr2 = SPR2_NGT5;
break;
case SPR2_DRL6:
spr2 = SPR2_NGT6;
break;
case SPR2_NGT8:
case SPR2_DRL7:
spr2 = SPR2_NGT7;
break;
case SPR2_NGT9:
case SPR2_DRL8:
spr2 = SPR2_NGT8;
break;
case SPR2_NGTA:
case SPR2_DRL9:
spr2 = SPR2_NGT9;
break;
case SPR2_NGTB:
case SPR2_DRLA:
spr2 = SPR2_NGTA;
break;
case SPR2_NGTC:
case SPR2_DRLB:
spr2 = SPR2_NGTB;
break;
case SPR2_DRLC:
spr2 = SPR2_NGTC;
break;
// Sprites for non-player objects? There's nothing we can do. // Sprites for non-player objects? There's nothing we can do.
case SPR2_SIGN: case SPR2_SIGN:
case SPR2_LIFE: case SPR2_LIFE:
@ -526,6 +597,8 @@ boolean P_SetPlayerMobjState(mobj_t *mobj, statenum_t state)
mobj->sprite2 = spr2; mobj->sprite2 = spr2;
mobj->frame = frame|(st->frame&~FF_FRAMEMASK); mobj->frame = frame|(st->frame&~FF_FRAMEMASK);
if (mobj->color > MAXSKINCOLORS) // Super colours? Super bright!
mobj->frame |= FF_FULLBRIGHT;
} }
// Regular sprites // Regular sprites
else else

View file

@ -576,9 +576,6 @@ static void P_DeNightserizePlayer(player_t *player)
player->pflags &= ~PF_NIGHTSMODE; player->pflags &= ~PF_NIGHTSMODE;
//if (player->mo->tracer)
//P_RemoveMobj(player->mo->tracer);
player->powers[pw_underwater] = 0; player->powers[pw_underwater] = 0;
player->pflags &= ~(PF_USEDOWN|PF_JUMPDOWN|PF_ATTACKDOWN|PF_STARTDASH|PF_GLIDING|PF_JUMPED|PF_THOKKED|PF_SPINNING|PF_DRILLING|PF_TRANSFERTOCLOSEST); player->pflags &= ~(PF_USEDOWN|PF_JUMPDOWN|PF_ATTACKDOWN|PF_STARTDASH|PF_GLIDING|PF_JUMPED|PF_THOKKED|PF_SPINNING|PF_DRILLING|PF_TRANSFERTOCLOSEST);
player->secondjump = 0; player->secondjump = 0;
@ -592,7 +589,8 @@ static void P_DeNightserizePlayer(player_t *player)
player->mo->flags &= ~MF_NOGRAVITY; player->mo->flags &= ~MF_NOGRAVITY;
player->mo->flags2 &= ~MF2_DONTDRAW; player->mo->skin = &skins[player->skin];
player->mo->color = player->skincolor;
// Restore aiming angle // Restore aiming angle
if (player == &players[consoleplayer]) if (player == &players[consoleplayer])
@ -603,8 +601,6 @@ static void P_DeNightserizePlayer(player_t *player)
// If you screwed up, kiss your score goodbye. // If you screwed up, kiss your score goodbye.
player->marescore = 0; player->marescore = 0;
if (player->mo->tracer)
P_RemoveMobj(player->mo->tracer);
P_SetPlayerMobjState(player->mo, S_PLAY_FALL); P_SetPlayerMobjState(player->mo, S_PLAY_FALL);
player->pflags |= PF_NIGHTSFALL; player->pflags |= PF_NIGHTSFALL;
@ -638,6 +634,9 @@ static void P_DeNightserizePlayer(player_t *player)
// Restore from drowning music // Restore from drowning music
P_RestoreMusic(player); P_RestoreMusic(player);
} }
#define DEFAULTNIGHTSSKIN 0
// //
// P_NightserizePlayer // P_NightserizePlayer
// //
@ -652,11 +651,8 @@ void P_NightserizePlayer(player_t *player, INT32 nighttime)
if (!(player->pflags & PF_NIGHTSMODE)) if (!(player->pflags & PF_NIGHTSMODE))
{ {
P_SetTarget(&player->mo->tracer, P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_NIGHTSCHAR)); player->mo->radius = 16*FRACUNIT;
player->mo->tracer->destscale = player->mo->scale; player->mo->height = 48*FRACUNIT;
P_SetScale(player->mo->tracer, player->mo->scale);
player->mo->tracer->eflags = (player->mo->tracer->eflags & ~MFE_VERTICALFLIP)|(player->mo->eflags & MFE_VERTICALFLIP);
player->mo->height = player->mo->tracer->height;
} }
player->pflags &= ~(PF_USEDOWN|PF_JUMPDOWN|PF_ATTACKDOWN|PF_STARTDASH|PF_GLIDING|PF_JUMPED|PF_THOKKED|PF_SPINNING|PF_DRILLING); player->pflags &= ~(PF_USEDOWN|PF_JUMPDOWN|PF_ATTACKDOWN|PF_STARTDASH|PF_GLIDING|PF_JUMPED|PF_THOKKED|PF_SPINNING|PF_DRILLING);
@ -670,13 +666,17 @@ void P_NightserizePlayer(player_t *player, INT32 nighttime)
player->mo->flags |= MF_NOGRAVITY; player->mo->flags |= MF_NOGRAVITY;
player->mo->flags2 |= MF2_DONTDRAW; if (skins[player->skin].sprites[SPR2_NGT0].numframes == 0) // If you don't have a sprite for flying horizontally, use the default NiGHTS skin.
{
player->mo->skin = &skins[DEFAULTNIGHTSSKIN];
player->mo->color = ((skin_t *)(player->mo->skin))->prefcolor;
}
player->nightstime = player->startedtime = nighttime*TICRATE; player->nightstime = player->startedtime = nighttime*TICRATE;
player->bonustime = false; player->bonustime = false;
P_RestoreMusic(player); P_RestoreMusic(player);
P_SetMobjState(player->mo->tracer, S_SUPERTRANS1); P_SetPlayerMobjState(player->mo, S_PLAY_NIGHTS_TRANS);
if (gametype == GT_RACE || gametype == GT_COMPETITION) if (gametype == GT_RACE || gametype == GT_COMPETITION)
{ {
@ -772,6 +772,8 @@ void P_NightserizePlayer(player_t *player, INT32 nighttime)
player->pflags |= PF_NIGHTSMODE; player->pflags |= PF_NIGHTSMODE;
} }
#undef DEFAULTNIGHTSSKIN
// //
// P_PlayerInPain // P_PlayerInPain
// //
@ -4999,13 +5001,13 @@ static void P_NightsTransferPoints(player_t *player, fixed_t xspeed, fixed_t rad
return; return;
// You're welcome, Rob. (Now with slightly less horrendous hacking -Red // You're welcome, Rob. (Now with slightly less horrendous hacking -Red
player->mo->tracer->flags &= ~MF_NOCLIP; /*player->mo->tracer->flags &= ~MF_NOCLIP;
player->mo->tracer->z = player->mo->z; player->mo->tracer->z = player->mo->z;
if (!P_TryMove(player->mo->tracer, player->mo->x+player->mo->momx, player->mo->y+player->mo->momy, true)) { if (!P_TryMove(player->mo->tracer, player->mo->x+player->mo->momx, player->mo->y+player->mo->momy, true)) {
player->mo->tracer->flags |= MF_NOCLIP; player->mo->tracer->flags |= MF_NOCLIP;
return; return;
} }
player->mo->tracer->flags |= MF_NOCLIP; player->mo->tracer->flags |= MF_NOCLIP;*/
{ {
const INT32 sequence = player->mo->target->threshold; const INT32 sequence = player->mo->target->threshold;
mobj_t *transfer1 = NULL; mobj_t *transfer1 = NULL;
@ -5395,10 +5397,6 @@ static void P_DoNiGHTSCapsule(player_t *player)
{ {
INT32 i; INT32 i;
if ((player->pflags & PF_NIGHTSMODE) && (player->mo->tracer->state < &states[S_NIGHTSHURT1]
|| player->mo->tracer->state > &states[S_NIGHTSHURT32]))
P_SetMobjState(player->mo->tracer, S_NIGHTSHURT1);
if (abs(player->mo->x-player->capsule->x) <= 2*FRACUNIT) if (abs(player->mo->x-player->capsule->x) <= 2*FRACUNIT)
{ {
P_UnsetThingPosition(player->mo); P_UnsetThingPosition(player->mo);
@ -5436,6 +5434,20 @@ static void P_DoNiGHTSCapsule(player_t *player)
else if (player->mo->z < player->capsule->z+(player->capsule->height/3)) else if (player->mo->z < player->capsule->z+(player->capsule->height/3))
player->mo->momz = 2*FRACUNIT; player->mo->momz = 2*FRACUNIT;
if (player->pflags & PF_NIGHTSMODE)
{
if (player->mo->momx || player->mo->momy || player->mo->momz)
{
if (player->mo->state != &states[S_PLAY_NIGHTS_PULL])
P_SetPlayerMobjState(player->mo, S_PLAY_NIGHTS_PULL);
}
else if (player->mo->state != &states[S_PLAY_NIGHTS_ATTACK])
{
S_StartSound(player->mo, sfx_spin);
P_SetPlayerMobjState(player->mo, S_PLAY_NIGHTS_ATTACK);
}
}
if (G_IsSpecialStage(gamemap)) if (G_IsSpecialStage(gamemap))
{ // In special stages, share rings. Everyone gives up theirs to the capsule player always, because we can't have any individualism here! { // In special stages, share rings. Everyone gives up theirs to the capsule player always, because we can't have any individualism here!
for (i = 0; i < MAXPLAYERS; i++) for (i = 0; i < MAXPLAYERS; i++)
@ -5465,7 +5477,7 @@ static void P_DoNiGHTSCapsule(player_t *player)
S_StartSound(P_SpawnMobj(player->capsule->x + ((P_SignedRandom()/2)<<FRACBITS), S_StartSound(P_SpawnMobj(player->capsule->x + ((P_SignedRandom()/2)<<FRACBITS),
player->capsule->y + ((P_SignedRandom()/2)<<FRACBITS), player->capsule->y + ((P_SignedRandom()/2)<<FRACBITS),
player->capsule->z + (player->capsule->height/2) + ((P_SignedRandom()/2)<<FRACBITS), player->capsule->z + (player->capsule->height/2) + ((P_SignedRandom()/2)<<FRACBITS),
MT_EXPLODE),sfx_pop); MT_BOSSEXPLODE),sfx_cybdth);
if (player->capsule->health <= 0) if (player->capsule->health <= 0)
{ {
@ -5503,13 +5515,13 @@ static void P_DoNiGHTSCapsule(player_t *player)
P_SetMobjState(emmo, mobjinfo[MT_GOTEMERALD].meleestate + em); P_SetMobjState(emmo, mobjinfo[MT_GOTEMERALD].meleestate + em);
}*/ }*/
if (player->mo->tracer) if (player->pflags & PF_NIGHTSMODE)
{ {
// Only give it to ONE person, and THAT player has to get to the goal! // Only give it to ONE person, and THAT player has to get to the goal!
emmo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z + player->mo->info->height, MT_GOTEMERALD); emmo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z + player->mo->info->height, MT_GOTEMERALD);
P_SetTarget(&emmo->target, player->mo); P_SetTarget(&emmo->target, player->mo);
P_SetMobjState(emmo, mobjinfo[MT_GOTEMERALD].meleestate + em); P_SetMobjState(emmo, mobjinfo[MT_GOTEMERALD].meleestate + em);
P_SetTarget(&player->mo->tracer->target, emmo); P_SetTarget(&player->mo->tracer, emmo);
} }
// Okay, we're doing this down here because we're handling time weirdly for co-op special stages // Okay, we're doing this down here because we're handling time weirdly for co-op special stages
@ -5568,7 +5580,8 @@ static void P_NiGHTSMovement(player_t *player)
ticcmd_t *cmd = &player->cmd; ticcmd_t *cmd = &player->cmd;
INT32 thrustfactor; INT32 thrustfactor;
INT32 i; INT32 i;
statenum_t flystate = S_NIGHTSFLY1A; statenum_t flystate;
UINT16 visangle;
player->pflags &= ~PF_DRILLING; player->pflags &= ~PF_DRILLING;
@ -5587,7 +5600,7 @@ static void P_NiGHTSMovement(player_t *player)
player->drillmeter = TICRATE/10; player->drillmeter = TICRATE/10;
} }
if (!player->mo->tracer) if (!(player->pflags & PF_NIGHTSMODE))
{ {
P_DeNightserizePlayer(player); P_DeNightserizePlayer(player);
return; return;
@ -5602,13 +5615,14 @@ static void P_NiGHTSMovement(player_t *player)
&& (players[i].capsule && players[i].capsule->reactiontime)) && (players[i].capsule && players[i].capsule->reactiontime))
capsule = true; capsule = true;
if (!capsule if (!capsule
&& !(player->mo->tracer->state >= &states[S_SUPERTRANS1] && !(player->mo->state >= &states[S_PLAY_NIGHTS_TRANS]
&& player->mo->tracer->state <= &states[S_SUPERTRANS9]) && player->mo->state <= &states[S_PLAY_NIGHTS_TRANS9])
&& !player->exiting) && !player->exiting)
player->nightstime--; player->nightstime--;
} }
else if (gametype != GT_RACE && gametype != GT_COMPETITION else if (gametype != GT_RACE && gametype != GT_COMPETITION
&& !(player->mo->tracer->state >= &states[S_SUPERTRANS1] && player->mo->tracer->state <= &states[S_SUPERTRANS9]) && !(player->mo->state >= &states[S_PLAY_NIGHTS_TRANS]
&& player->mo->state <= &states[S_PLAY_NIGHTS_TRANS9])
&& !(player->capsule && player->capsule->reactiontime) && !(player->capsule && player->capsule->reactiontime)
&& !player->exiting) && !player->exiting)
player->nightstime--; player->nightstime--;
@ -5693,8 +5707,6 @@ static void P_NiGHTSMovement(player_t *player)
radius = player->mo->target->radius; radius = player->mo->target->radius;
player->mo->flags |= MF_NOGRAVITY; player->mo->flags |= MF_NOGRAVITY;
player->mo->flags2 |= MF2_DONTDRAW;
P_SetScale(player->mo->tracer, player->mo->scale);
if (player->mo->eflags & MFE_VERTICALFLIP) if (player->mo->eflags & MFE_VERTICALFLIP)
cmd->forwardmove = (SINT8)(-cmd->forwardmove); cmd->forwardmove = (SINT8)(-cmd->forwardmove);
@ -5749,8 +5761,8 @@ static void P_NiGHTSMovement(player_t *player)
return; return;
} }
if (player->mo->tracer->state >= &states[S_SUPERTRANS1] if (player->mo->state >= &states[S_PLAY_NIGHTS_TRANS]
&& player->mo->tracer->state <= &states[S_SUPERTRANS9]) && player->mo->state <= &states[S_PLAY_NIGHTS_TRANS9])
{ {
player->mo->momx = player->mo->momy = player->mo->momz = 0; player->mo->momx = player->mo->momy = player->mo->momz = 0;
return; return;
@ -5761,16 +5773,13 @@ static void P_NiGHTSMovement(player_t *player)
player->mo->momx = player->mo->momy = 0; player->mo->momx = player->mo->momy = 0;
if (gametype != GT_RACE && gametype != GT_COMPETITION) if (gametype != GT_RACE && gametype != GT_COMPETITION)
P_SetObjectMomZ(player->mo, 30*FRACUNIT, false); P_SetObjectMomZ(player->mo, FRACUNIT/2, true);
player->mo->tracer->angle += ANGLE_11hh; if (player->mo->state != &states[S_PLAY_NIGHTS_DRILL6])
P_SetPlayerMobjState(player->mo, S_PLAY_NIGHTS_DRILL6);
if (!(player->mo->tracer->state >= &states[S_NIGHTSDRONE1]
&& player->mo->tracer->state <= &states[S_NIGHTSDRONE2]))
P_SetMobjState(player->mo->tracer, S_NIGHTSDRONE1);
player->mo->tracer->flags |= MF_NOCLIPHEIGHT;
player->mo->flags |= MF_NOCLIPHEIGHT; player->mo->flags |= MF_NOCLIPHEIGHT;
return; return;
} }
@ -6036,74 +6045,41 @@ static void P_NiGHTSMovement(player_t *player)
// NiGHTS flying state // NiGHTS flying state
// Yep, I just ripped out almost 1000 lines of code. // Yep, I just ripped out almost 1000 lines of code.
if ((player->anotherflyangle >= 12 && player->anotherflyangle <= 33) // +x +y // (and then toast revamped the entire thing again to be better, but not by much)
|| (player->anotherflyangle >= 147 && player->anotherflyangle <= 168)) // -x +y if (still)
flystate = S_NIGHTSFLY2A; flystate = (P_IsObjectOnGround(player->mo)) ? S_PLAY_NIGHTS_STAND : S_PLAY_NIGHTS_FLOAT;
else if ((player->anotherflyangle >= 34 && player->anotherflyangle <= 56) // +x +y
|| (player->anotherflyangle >= 124 && player->anotherflyangle <= 146)) // -x +y
flystate = S_NIGHTSFLY3A;
else if ((player->anotherflyangle >= 57 && player->anotherflyangle <= 79) // +x +y
|| (player->anotherflyangle >= 102 && player->anotherflyangle <= 123)) // -x +y
flystate = S_NIGHTSFLY4A;
else if (player->anotherflyangle >= 80 && player->anotherflyangle <= 101)
flystate = S_NIGHTSFLY5A;
else if ((player->anotherflyangle >= 192 && player->anotherflyangle <= 213) // -x -y
|| (player->anotherflyangle >= 327 && player->anotherflyangle <= 348)) // +x -y
flystate = S_NIGHTSFLY6A;
else if ((player->anotherflyangle >= 214 && player->anotherflyangle <= 236) // -x -y
|| (player->anotherflyangle >= 305 && player->anotherflyangle <= 326)) // +x -y
flystate = S_NIGHTSFLY7A;
else if ((player->anotherflyangle >= 237 && player->anotherflyangle <= 258) // -x -y
|| (player->anotherflyangle >= 282 && player->anotherflyangle <= 304)) // +x -y
flystate = S_NIGHTSFLY8A;
else if (player->anotherflyangle >= 259 && player->anotherflyangle <= 281)
flystate = S_NIGHTSFLY9A;
else else
flystate = S_NIGHTSFLY1A;
if (player->mo->eflags & MFE_VERTICALFLIP)
{ {
if (flystate >= S_NIGHTSFLY2A && flystate <= S_NIGHTSFLY5A) visangle = ((player->anotherflyangle + 7) % 360)/15;
flystate += 24; // shift to S_NIGHTSFLY6A if (visangle > 18) // Over 270 degrees.
else if (flystate >= S_NIGHTSFLY6A && flystate <= S_NIGHTSFLY9A) visangle = 30 - visangle;
flystate -= 24; // shift to S_NIGHTSFLY2A else if (visangle > 12) // Over 180 degrees.
} visangle -= 6;
else if (visangle > 6) // Over 90 degrees.
visangle = 12 - visangle;
if (player->pflags & PF_DRILLING) if (player->mo->eflags & MFE_VERTICALFLIP && visangle) // S_PLAY_NIGHTS_FLY0 stays the same, even in reverse gravity
{
const statenum_t drillstate = flystate + 2;
if (!(player->mo->tracer->state >= &states[drillstate]
&& player->mo->tracer->state <= &states[drillstate+4]))
{ {
if (!(player->mo->tracer->state >= &states[S_NIGHTSFLY1A] if (visangle > 6)
&& player->mo->tracer->state <= &states[S_NIGHTSFLY9B])) visangle -= 6; // shift to S_PLAY_NIGHTS_FLY1-6
{
const INT32 framenum = player->mo->tracer->state->frame & 3;
if (framenum == 3) // Drilld special case
P_SetMobjStateNF(player->mo->tracer, drillstate);
else
P_SetMobjStateNF(player->mo->tracer, drillstate+framenum+1);
}
else else
P_SetMobjStateNF(player->mo->tracer, drillstate); visangle += 6; // shift to S_PLAY_NIGHTS_FLY7-C
} }
flystate = S_PLAY_NIGHTS_FLY0 + (visangle*2); // S_PLAY_FLY0-C - the *2 is to skip over drill states
if (player->pflags & PF_DRILLING)
flystate++; // shift to S_PLAY_NIGHTS_DRILL0-C
} }
else
P_SetMobjStateNF(player->mo->tracer, leveltime & 1 ? flystate : flystate+1); if (player->mo->state != &states[flystate])
P_SetPlayerMobjState(player->mo, flystate);
if (player == &players[consoleplayer]) if (player == &players[consoleplayer])
localangle = player->mo->angle; localangle = player->mo->angle;
else if (player == &players[secondarydisplayplayer]) else if (player == &players[secondarydisplayplayer])
localangle2 = player->mo->angle; localangle2 = player->mo->angle;
if (still)
{
P_SetMobjStateNF(player->mo->tracer, S_NIGHTSDRONE1);
player->mo->tracer->angle = player->mo->angle;
}
// Check for crushing in our new location // Check for crushing in our new location
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))
@ -6127,8 +6103,6 @@ static void P_NiGHTSMovement(player_t *player)
else if (player == &players[secondarydisplayplayer]) else if (player == &players[secondarydisplayplayer])
localaiming2 = movingangle; localaiming2 = movingangle;
player->mo->tracer->angle = player->mo->angle;
if ((player->pflags & PF_DRILLING) && !player->bumpertime) if ((player->pflags & PF_DRILLING) && !player->bumpertime)
{ {
if (firstdrill) if (firstdrill)
@ -6433,6 +6407,15 @@ static void P_MovePlayer(player_t *player)
// Locate the capsule for this mare. // Locate the capsule for this mare.
else if (maptol & TOL_NIGHTS) else if (maptol & TOL_NIGHTS)
{ {
if ((player->pflags & PF_NIGHTSMODE)
&& !(player->mo->state >= &states[S_PLAY_NIGHTS_TRANS]
&& player->mo->state <= &states[S_PLAY_NIGHTS_TRANS9]
&& !(player->exiting)))
{
skin_t *skin = ((skin_t *)(player->mo->skin));
player->mo->color = (skin->flags & SF_SUPER) ? skin->supercolor + (unsigned)abs(((signed)(leveltime >> 1) % 9) - 4) : player->mo->color; // This is where super flashing is handled.
}
if (!player->capsule && !player->bonustime) if (!player->capsule && !player->bonustime)
{ {
thinker_t *th; thinker_t *th;
@ -9063,19 +9046,6 @@ void P_PlayerThink(player_t *player)
else else
player->pflags &= ~PF_USEDOWN; player->pflags &= ~PF_USEDOWN;
} }
else if (player->mo->tracer) // match tracer's position with yours when NiGHTS
{
P_UnsetThingPosition(player->mo->tracer);
player->mo->tracer->x = player->mo->x;
player->mo->tracer->y = player->mo->y;
if (player->mo->eflags & MFE_VERTICALFLIP)
player->mo->tracer->z = player->mo->z + player->mo->height - player->mo->tracer->height;
else
player->mo->tracer->z = player->mo->z;
player->mo->tracer->floorz = player->mo->floorz;
player->mo->tracer->ceilingz = player->mo->ceilingz;
P_SetThingPosition(player->mo->tracer);
}
// Counters, time dependent power ups. // Counters, time dependent power ups.
// Time Bonus & Ring Bonus count settings // Time Bonus & Ring Bonus count settings
@ -9172,20 +9142,10 @@ void P_PlayerThink(player_t *player)
player->losstime--; player->losstime--;
// Flash player after being hit. // Flash player after being hit.
if (!(player->pflags & PF_NIGHTSMODE)) if (player->powers[pw_flashing] > 0 && player->powers[pw_flashing] < flashingtics && (leveltime & 1))
{ player->mo->flags2 |= MF2_DONTDRAW;
if (player->powers[pw_flashing] > 0 && player->powers[pw_flashing] < flashingtics && (leveltime & 1)) else
player->mo->flags2 |= MF2_DONTDRAW; player->mo->flags2 &= ~MF2_DONTDRAW;
else
player->mo->flags2 &= ~MF2_DONTDRAW;
}
else if (player->mo->tracer)
{
if (player->powers[pw_flashing] & 1)
player->mo->tracer->flags2 |= MF2_DONTDRAW;
else
player->mo->tracer->flags2 &= ~MF2_DONTDRAW;
}
player->pflags &= ~PF_SLIDING; player->pflags &= ~PF_SLIDING;

View file

@ -2357,7 +2357,7 @@ static void Sk_SetDefaultValue(skin_t *skin)
skin->jumpfactor = FRACUNIT; skin->jumpfactor = FRACUNIT;
skin->actionspd = 30<<FRACBITS; skin->actionspd = 30<<FRACBITS;
skin->mindash = 15<<FRACBITS; skin->mindash = 15<<FRACBITS;
skin->maxdash = 90<<FRACBITS; skin->maxdash = 70<<FRACBITS;
skin->radius = mobjinfo[MT_PLAYER].radius; skin->radius = mobjinfo[MT_PLAYER].radius;
skin->height = mobjinfo[MT_PLAYER].height; skin->height = mobjinfo[MT_PLAYER].height;