mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-01-18 07:22:28 +00:00
Bit of a random one today, but the branch approaches completion...
* Bomb sphere! Paraloopable hazard. Replaces MT_SPECIALSPIKEBALL. * Blueberry bushes, both normal and Xmas, from patch.dta. * BSZ tulips, also from patch.dta! * Frozen Hillside badniks - Penguinator and Pophat. * Frozen Hillside ice decoration! * Fixed some big bugs with the DSZ light beams. * Made multi-mare special stages work, in a troll way - the Chaos Emerald disappears in a puff of smoke, and the Spinbobert laughter sound plays... >:3c * Reverted the mobjtype number changes from the source SOC/Lua, which we can do later when doing a final pass of the levels. * State optimisation. * Serious cruft-removal of the NiGHTS drone thinker. * Fix the issues where the player wouldn't curl into jump in waterslides or dropping off rope-hangs. * Tweak NiGHTS player flashing. * Add text colour support to the titlecard font. * Use that to make the PRESS SPIN\nMID-JUMP thing when you get all Chaos Emeralds use the titlecard font for readability. * Fix the GOT ALL EMERALDS page not lasting the correct, extended amount of time. * Fix that thing where flying mid-spin didn't enact autobrake. * Modify graymap a little on Sryder's suggestion. * [COMPLETELY UNRELATED] fix that thing where the addons menu will fail on files/paths with spaces in [/COMPLETELY UNRELATED]
This commit is contained in:
parent
6e07631cc9
commit
3725203bcd
16 changed files with 656 additions and 345 deletions
|
@ -312,7 +312,7 @@ static void CON_SetupColormaps(void)
|
|||
colset(lgreenmap, 97, 98, 106);
|
||||
colset(bluemap, 146, 147, 155);
|
||||
colset(redmap, 210, 32, 39);
|
||||
colset(graymap, 8, 10, 15);
|
||||
colset(graymap, 6, 8, 14);
|
||||
colset(orangemap, 51, 52, 57);
|
||||
colset(skymap, 129, 130, 133);
|
||||
colset(purplemap, 160, 161, 163);
|
||||
|
|
|
@ -3853,13 +3853,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
"S_UNIDUS_BALL",
|
||||
|
||||
// Boss Explosion
|
||||
"S_BPLD1",
|
||||
"S_BPLD2",
|
||||
"S_BPLD3",
|
||||
"S_BPLD4",
|
||||
"S_BPLD5",
|
||||
"S_BPLD6",
|
||||
"S_BPLD7",
|
||||
"S_BOSSEXPLODE",
|
||||
|
||||
// S3&K Boss Explosion
|
||||
"S_SONIC3KBOSSEXPLOSION1",
|
||||
|
@ -4368,6 +4362,12 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
"S_BLUESPHEREBONUS",
|
||||
"S_BLUESPHERESPARK",
|
||||
|
||||
// Bomb Sphere
|
||||
"S_BOMBSPHERE1",
|
||||
"S_BOMBSPHERE2",
|
||||
"S_BOMBSPHERE3",
|
||||
"S_BOMBSPHERE4",
|
||||
|
||||
// NiGHTS Chip
|
||||
"S_NIGHTSCHIP",
|
||||
"S_NIGHTSCHIPBONUS",
|
||||
|
@ -4720,18 +4720,14 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
"S_ARROWBONK",
|
||||
|
||||
// Trapgoyle Demon fire
|
||||
"S_DEMONFIRE1",
|
||||
"S_DEMONFIRE2",
|
||||
"S_DEMONFIRE3",
|
||||
"S_DEMONFIRE4",
|
||||
"S_DEMONFIRE5",
|
||||
"S_DEMONFIRE6",
|
||||
"S_DEMONFIRE",
|
||||
|
||||
// GFZ flowers
|
||||
"S_GFZFLOWERA",
|
||||
"S_GFZFLOWERB",
|
||||
"S_GFZFLOWERC",
|
||||
|
||||
"S_BLUEBERRYBUSH",
|
||||
"S_BERRYBUSH",
|
||||
"S_BUSH",
|
||||
|
||||
|
@ -5016,8 +5012,12 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
"S_LAMPPOST2", // with snow
|
||||
"S_HANGSTAR",
|
||||
// Xmas GFZ bushes
|
||||
"S_XMASBLUEBERRYBUSH",
|
||||
"S_XMASBERRYBUSH",
|
||||
"S_XMASBUSH",
|
||||
// FHZ
|
||||
"S_FHZICE1",
|
||||
"S_FHZICE2",
|
||||
|
||||
// Halloween Scenery
|
||||
// Pumpkins
|
||||
|
@ -6070,6 +6070,22 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
|
||||
|
||||
// Secret badniks and hazards, shhhh
|
||||
"S_PENGUINATOR_LOOK",
|
||||
"S_PENGUINATOR_WADDLE1",
|
||||
"S_PENGUINATOR_WADDLE2",
|
||||
"S_PENGUINATOR_WADDLE3",
|
||||
"S_PENGUINATOR_WADDLE4",
|
||||
"S_PENGUINATOR_SLIDE1",
|
||||
"S_PENGUINATOR_SLIDE2",
|
||||
"S_PENGUINATOR_SLIDE3",
|
||||
"S_PENGUINATOR_SLIDE4",
|
||||
"S_PENGUINATOR_SLIDE5",
|
||||
|
||||
"S_POPHAT_LOOK",
|
||||
"S_POPHAT_SHOOT1",
|
||||
"S_POPHAT_SHOOT2",
|
||||
"S_POPHAT_SHOOT3",
|
||||
|
||||
"S_HIVEELEMENTAL_LOOK",
|
||||
"S_HIVEELEMENTAL_PREPARE1",
|
||||
"S_HIVEELEMENTAL_PREPARE2",
|
||||
|
@ -6344,7 +6360,8 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
// Collectible Items
|
||||
"MT_RING",
|
||||
"MT_FLINGRING", // Lost ring
|
||||
"MT_BLUESPHERE", // Blue sphere replacement for special stages
|
||||
"MT_BLUESPHERE", // Blue sphere for special stages
|
||||
"MT_BOMBSPHERE",
|
||||
"MT_REDTEAMRING", //Rings collectable by red team.
|
||||
"MT_BLUETEAMRING", //Rings collectable by blue team.
|
||||
"MT_TOKEN", // Special Stage Token
|
||||
|
@ -6382,7 +6399,6 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
"MT_BUBBLES", // Bubble source
|
||||
"MT_SIGN", // Level end sign
|
||||
"MT_SPIKEBALL", // Spike Ball
|
||||
"MT_SPECIALSPIKEBALL",
|
||||
"MT_SPINFIRE",
|
||||
"MT_SPIKE",
|
||||
"MT_WALLSPIKE",
|
||||
|
@ -6475,8 +6491,11 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
"MT_GFZFLOWER1",
|
||||
"MT_GFZFLOWER2",
|
||||
"MT_GFZFLOWER3",
|
||||
|
||||
"MT_BLUEBERRYBUSH",
|
||||
"MT_BERRYBUSH",
|
||||
"MT_BUSH",
|
||||
|
||||
// Trees (both GFZ and misc)
|
||||
"MT_GFZTREE",
|
||||
"MT_GFZBERRYTREE",
|
||||
|
@ -6601,8 +6620,12 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
"MT_LAMPPOST2", // with snow
|
||||
"MT_HANGSTAR",
|
||||
// Xmas GFZ bushes
|
||||
"MT_XMASBLUEBERRYBUSH",
|
||||
"MT_XMASBERRYBUSH",
|
||||
"MT_XMASBUSH",
|
||||
// FHZ
|
||||
"MT_FHZICE1",
|
||||
"MT_FHZICE2",
|
||||
|
||||
// Halloween Scenery
|
||||
// Pumpkins
|
||||
|
@ -6814,6 +6837,10 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
"MT_SHLEEP", // almost-decorative sleeping enemy
|
||||
|
||||
// Secret badniks and hazards, shhhh
|
||||
"MT_PENGUINATOR",
|
||||
"MT_POPHAT",
|
||||
"MT_POPSHOT",
|
||||
|
||||
"MT_HIVEELEMENTAL",
|
||||
"MT_BUMBLEBORE",
|
||||
|
||||
|
|
|
@ -294,6 +294,7 @@ light_t *t_lspr[NUMSPRITES] =
|
|||
&lspr[NOLIGHT], // SPR_FWR4
|
||||
&lspr[NOLIGHT], // SPR_BUS1
|
||||
&lspr[NOLIGHT], // SPR_BUS2
|
||||
&lspr[NOLIGHT], // SPR_BUS3
|
||||
// Trees (both GFZ and misc)
|
||||
&lspr[NOLIGHT], // SPR_TRE1
|
||||
&lspr[NOLIGHT], // SPR_TRE2
|
||||
|
@ -357,6 +358,7 @@ light_t *t_lspr[NUMSPRITES] =
|
|||
&lspr[NOLIGHT], // SPR_XMS3
|
||||
&lspr[NOLIGHT], // SPR_XMS4
|
||||
&lspr[NOLIGHT], // SPR_XMS5
|
||||
&lspr[NOLIGHT], // SPR_FHZI
|
||||
|
||||
// Halloween Scenery
|
||||
&lspr[RINGLIGHT_L], // SPR_PUMK
|
||||
|
@ -368,7 +370,13 @@ light_t *t_lspr[NUMSPRITES] =
|
|||
&lspr[NOLIGHT], // SPR_BSZ1
|
||||
&lspr[NOLIGHT], // SPR_BSZ2
|
||||
&lspr[NOLIGHT], // SPR_BSZ3
|
||||
&lspr[NOLIGHT], // SPR_BSZ4
|
||||
//&lspr[NOLIGHT], -- SPR_BSZ4
|
||||
&lspr[NOLIGHT], // SPR_BST1
|
||||
&lspr[NOLIGHT], // SPR_BST2
|
||||
&lspr[NOLIGHT], // SPR_BST3
|
||||
&lspr[NOLIGHT], // SPR_BST4
|
||||
&lspr[NOLIGHT], // SPR_BST5
|
||||
&lspr[NOLIGHT], // SPR_BST6
|
||||
&lspr[NOLIGHT], // SPR_BSZ5
|
||||
&lspr[NOLIGHT], // SPR_BSZ6
|
||||
&lspr[NOLIGHT], // SPR_BSZ7
|
||||
|
@ -506,6 +514,8 @@ light_t *t_lspr[NUMSPRITES] =
|
|||
&lspr[NOLIGHT], // SPR_SHLP
|
||||
|
||||
// Secret badniks and hazards, shhhh
|
||||
&lspr[NOLIGHT], // SPR_PENG
|
||||
&lspr[NOLIGHT], // SPR_POPH,
|
||||
&lspr[NOLIGHT], // SPR_HIVE
|
||||
&lspr[NOLIGHT], // SPR_BUMB,
|
||||
&lspr[NOLIGHT], // SPR_BBUZ
|
||||
|
|
385
src/info.c
385
src/info.c
|
@ -183,6 +183,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"FWR4",
|
||||
"BUS1", // GFZ Bush w/ berries
|
||||
"BUS2", // GFZ Bush w/o berries
|
||||
"BUS3", // GFZ Bush w/ BLUE berries
|
||||
// Trees (both GFZ and misc)
|
||||
"TRE1", // GFZ
|
||||
"TRE2", // Checker
|
||||
|
@ -251,6 +252,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"XMS3", // Snowman
|
||||
"XMS4", // Lamppost
|
||||
"XMS5", // Hanging Star
|
||||
"FHZI", // FHZ ice
|
||||
|
||||
// Halloween Scenery
|
||||
"PUMK", // Pumpkins
|
||||
|
@ -262,7 +264,13 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"BSZ1", // Tall flowers
|
||||
"BSZ2", // Medium flowers
|
||||
"BSZ3", // Small flowers
|
||||
"BSZ4", // Tulip
|
||||
//"BSZ4", -- Tulips
|
||||
"BST1", // Red tulip
|
||||
"BST2", // Purple tulip
|
||||
"BST3", // Blue tulip
|
||||
"BST4", // Cyan tulip
|
||||
"BST5", // Yellow tulip
|
||||
"BST6", // Orange tulip
|
||||
"BSZ5", // Cluster of Tulips
|
||||
"BSZ6", // Bush
|
||||
"BSZ7", // Vine
|
||||
|
@ -400,6 +408,8 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"SHLP", // Shleep
|
||||
|
||||
// Secret badniks and hazards, shhhh
|
||||
"PENG",
|
||||
"POPH",
|
||||
"HIVE",
|
||||
"BUMB",
|
||||
"BBUZ",
|
||||
|
@ -1083,13 +1093,7 @@ state_t states[NUMSTATES] =
|
|||
{SPR_UNID, 1, 1, {A_UnidusBall}, 1, 0, S_UNIDUS_BALL}, // S_UNIDUS_BALL
|
||||
|
||||
// Boss Explosion
|
||||
{SPR_BOM2, FF_FULLBRIGHT, 5, {NULL}, 0, 0, S_BPLD2}, // S_BPLD1
|
||||
{SPR_BOM2, FF_FULLBRIGHT|1, 5, {NULL}, 0, 0, S_BPLD3}, // S_BPLD2
|
||||
{SPR_BOM2, FF_FULLBRIGHT|2, 5, {NULL}, 0, 0, S_BPLD4}, // S_BPLD3
|
||||
{SPR_BOM2, FF_FULLBRIGHT|3, 5, {NULL}, 0, 0, S_BPLD5}, // S_BPLD4
|
||||
{SPR_BOM2, FF_FULLBRIGHT|4, 5, {NULL}, 0, 0, S_BPLD6}, // S_BPLD5
|
||||
{SPR_BOM2, FF_FULLBRIGHT|5, 5, {NULL}, 0, 0, S_BPLD7}, // S_BPLD6
|
||||
{SPR_BOM2, FF_FULLBRIGHT|6, 5, {NULL}, 0, 0, S_NULL}, // S_BPLD7
|
||||
{SPR_BOM2, FF_FULLBRIGHT|FF_ANIMATE, (5*7), {NULL}, 6, 5, S_NULL}, // S_BOSSEXPLODE
|
||||
|
||||
// S3&K Boss Explosion
|
||||
{SPR_BOM3, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_SONIC3KBOSSEXPLOSION2}, // S_SONIC3KBOSSEXPLOSION1
|
||||
|
@ -1597,9 +1601,15 @@ state_t states[NUMSTATES] =
|
|||
|
||||
// Blue Sphere for special stages
|
||||
{SPR_SPHR, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_BLUESPHERE
|
||||
{SPR_SPHR, FF_FULLBRIGHT|FF_RANDOMANIM|FF_ANIMATE, -1, {NULL}, 1, 4, S_NULL}, // S_BLUESPHEREBONUS
|
||||
{SPR_SPHR, FF_FULLBRIGHT|FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 1, 4, S_NULL}, // S_BLUESPHEREBONUS
|
||||
{SPR_SPHR, 0, 20, {NULL}, 0, 0, S_NULL}, // S_BLUESPHERESPARK
|
||||
|
||||
// Bomb Sphere
|
||||
{SPR_SPHR, FF_FULLBRIGHT|3, 2, {NULL}, 0, 0, S_BOMBSPHERE2}, // S_BOMBSPHERE1
|
||||
{SPR_SPHR, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_BOMBSPHERE3}, // S_BOMBSPHERE2
|
||||
{SPR_SPHR, FF_FULLBRIGHT|5, 2, {NULL}, 0, 0, S_BOMBSPHERE4}, // S_BOMBSPHERE3
|
||||
{SPR_SPHR, FF_FULLBRIGHT|4, 1, {NULL}, 0, 0, S_BOMBSPHERE1}, // S_BOMBSPHERE4
|
||||
|
||||
// NiGHTS Chip
|
||||
{SPR_NCHP, FF_FULLBRIGHT|FF_ANIMATE, -1, {NULL}, 15, 2, S_NULL}, // S_NIGHTSCHIP
|
||||
{SPR_NCHP, FF_FULLBRIGHT|FF_ANIMATE|16, -1, {NULL}, 15, 2, S_NULL}, // S_NIGHTSCHIPBONUS
|
||||
|
@ -1946,20 +1956,16 @@ state_t states[NUMSTATES] =
|
|||
{SPR_AROW, 0, -1, {NULL}, 0, 0, S_NULL}, // S_ARROW
|
||||
{SPR_AROW, FF_ANIMATE, TICRATE, {A_ArrowBonks}, 7, 2, S_NULL}, // S_ARROWBONK
|
||||
|
||||
{SPR_CFIR, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_DEMONFIRE2}, // S_DEMONFIRE1
|
||||
{SPR_CFIR, FF_FULLBRIGHT|1, 2, {NULL}, 0, 0, S_DEMONFIRE3}, // S_DEMONFIRE2
|
||||
{SPR_CFIR, FF_FULLBRIGHT|2, 2, {NULL}, 0, 0, S_DEMONFIRE4}, // S_DEMONFIRE3
|
||||
{SPR_CFIR, FF_FULLBRIGHT|3, 2, {NULL}, 0, 0, S_DEMONFIRE5}, // S_DEMONFIRE4
|
||||
{SPR_CFIR, FF_FULLBRIGHT|4, 2, {NULL}, 0, 0, S_DEMONFIRE6}, // S_DEMONFIRE5
|
||||
{SPR_CFIR, FF_FULLBRIGHT|5, 2, {NULL}, 0, 0, S_DEMONFIRE1}, // S_DEMONFIRE6
|
||||
{SPR_CFIR, FF_FULLBRIGHT|FF_ANIMATE, -1, {NULL}, 5, 2, S_NULL}, // S_DEMONFIRE
|
||||
|
||||
// GFZ flowers
|
||||
{SPR_FWR1, FF_ANIMATE, -1, {NULL}, 7, 3, S_NULL}, // S_GFZFLOWERA
|
||||
{SPR_FWR2, FF_ANIMATE, -1, {NULL}, 19, 3, S_NULL}, // S_GFZFLOWERB
|
||||
{SPR_FWR3, FF_ANIMATE, -1, {NULL}, 11, 4, S_NULL}, // S_GFZFLOWERC
|
||||
|
||||
{SPR_BUS1, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BERRYBUSH
|
||||
{SPR_BUS2, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BUSH
|
||||
{SPR_BUS3, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BLUEBERRYBUSH
|
||||
{SPR_BUS1, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BERRYBUSH
|
||||
{SPR_BUS2, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BUSH
|
||||
|
||||
// Trees
|
||||
{SPR_TRE1, 0, -1, {NULL}, 0, 0, S_NULL}, // S_GFZTREE
|
||||
|
@ -2257,8 +2263,12 @@ state_t states[NUMSTATES] =
|
|||
{SPR_XMS4, 1, -1, {NULL}, 0, 0, S_NULL}, // S_LAMPPOST2
|
||||
{SPR_XMS5, 0, -1, {NULL}, 0, 0, S_NULL}, // S_HANGSTAR
|
||||
// Xmas GFZ bushes
|
||||
{SPR_BUS3, 1, -1, {NULL}, 0, 0, S_NULL}, // S_XMASBLUEBERRYBUSH
|
||||
{SPR_BUS1, 1, -1, {NULL}, 0, 0, S_NULL}, // S_XMASBERRYBUSH
|
||||
{SPR_BUS2, 1, -1, {NULL}, 0, 0, S_NULL}, // S_XMASBUSH
|
||||
// FHZ
|
||||
{SPR_FHZI, 0, -1, {NULL}, 0, 0, S_NULL}, // S_FHZICE1
|
||||
{SPR_FHZI, 1, -1, {NULL}, 0, 0, S_NULL}, // S_FHZICE2
|
||||
|
||||
// Halloween Scenery
|
||||
// Pumpkins
|
||||
|
@ -2324,12 +2334,12 @@ state_t states[NUMSTATES] =
|
|||
{SPR_BSZ3, 3, -1, {NULL}, 0, 0, S_NULL}, // S_BSZSHORTFLOWER_CYAN
|
||||
{SPR_BSZ3, 4, -1, {NULL}, 0, 0, S_NULL}, // S_BSZSHORTFLOWER_YELLOW
|
||||
{SPR_BSZ3, 5, -1, {NULL}, 0, 0, S_NULL}, // S_BSZSHORTFLOWER_ORANGE
|
||||
{SPR_BSZ4, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BSZTULIP_RED
|
||||
{SPR_BSZ4, 1, -1, {NULL}, 0, 0, S_NULL}, // S_BSZTULIP_PURPLE
|
||||
{SPR_BSZ4, 2, -1, {NULL}, 0, 0, S_NULL}, // S_BSZTULIP_BLUE
|
||||
{SPR_BSZ4, 3, -1, {NULL}, 0, 0, S_NULL}, // S_BSZTULIP_CYAN
|
||||
{SPR_BSZ4, 4, -1, {NULL}, 0, 0, S_NULL}, // S_BSZTULIP_YELLOW
|
||||
{SPR_BSZ4, 5, -1, {NULL}, 0, 0, S_NULL}, // S_BSZTULIP_ORANGE
|
||||
{SPR_BST1, FF_ANIMATE, -1, {NULL}, 11, 4, S_NULL}, // S_BSZTULIP_RED
|
||||
{SPR_BST2, FF_ANIMATE, -1, {NULL}, 11, 4, S_NULL}, // S_BSZTULIP_PURPLE
|
||||
{SPR_BST3, FF_ANIMATE, -1, {NULL}, 11, 4, S_NULL}, // S_BSZTULIP_BLUE
|
||||
{SPR_BST4, FF_ANIMATE, -1, {NULL}, 11, 4, S_NULL}, // S_BSZTULIP_CYAN
|
||||
{SPR_BST5, FF_ANIMATE, -1, {NULL}, 11, 4, S_NULL}, // S_BSZTULIP_YELLOW
|
||||
{SPR_BST6, FF_ANIMATE, -1, {NULL}, 11, 4, S_NULL}, // S_BSZTULIP_ORANGE
|
||||
{SPR_BSZ5, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BSZCLUSTER_RED
|
||||
{SPR_BSZ5, 1, -1, {NULL}, 0, 0, S_NULL}, // S_BSZCLUSTER_PURPLE
|
||||
{SPR_BSZ5, 2, -1, {NULL}, 0, 0, S_NULL}, // S_BSZCLUSTER_BLUE
|
||||
|
@ -3366,6 +3376,22 @@ state_t states[NUMSTATES] =
|
|||
{SPR_SHLP, 3, 400, {A_SetObjectFlags}, MF_SLIDEME|MF_ENEMY|MF_BOUNCE|MF_NOCLIP|MF_NOCLIPHEIGHT, 0, S_NULL}, // S_SHLEEPBOUNCE3
|
||||
|
||||
// Secret badniks and hazards, shhhh
|
||||
{SPR_PENG, 0, 2, {A_Look}, 0, 0, S_PENGUINATOR_LOOK}, // S_PENGUINATOR_LOOK
|
||||
{SPR_PENG, 0, 2, {A_Chase}, 0, 0, S_PENGUINATOR_WADDLE2}, // S_PENGUINATOR_WADDLE1
|
||||
{SPR_PENG, 1, 2, {A_Chase}, 0, 0, S_PENGUINATOR_WADDLE3}, // S_PENGUINATOR_WADDLE2
|
||||
{SPR_PENG, 0, 2, {A_Chase}, 0, 0, S_PENGUINATOR_WADDLE4}, // S_PENGUINATOR_WADDLE3
|
||||
{SPR_PENG, 2, 2, {A_Chase}, 0, 0, S_PENGUINATOR_WADDLE1}, // S_PENGUINATOR_WADDLE4
|
||||
{SPR_PENG, 0, 0, {A_FaceTarget}, 0, 0, S_PENGUINATOR_SLIDE2}, // S_PENGUINATOR_SLIDE1
|
||||
{SPR_PENG, 3, 5, {A_BunnyHop}, 4, 10, S_PENGUINATOR_SLIDE3}, // S_PENGUINATOR_SLIDE2
|
||||
{SPR_PENG, 4, 90, {A_PlayAttackSound}, 0, 0, S_PENGUINATOR_SLIDE4}, // S_PENGUINATOR_SLIDE3
|
||||
{SPR_PENG, 3, 5, {A_Thrust}, 0, 1, S_PENGUINATOR_SLIDE5}, // S_PENGUINATOR_SLIDE4
|
||||
{SPR_PENG, 0, 5, {A_FaceTarget}, 0, 0, S_PENGUINATOR_LOOK}, // S_PENGUINATOR_SLIDE5
|
||||
|
||||
{SPR_POPH, 0, 2, {A_Look}, (2048<<16)|1, 0, S_POPHAT_LOOK}, // S_POPHAT_LOOK
|
||||
{SPR_POPH, 1, 2, {A_LobShot}, MT_POPSHOT, (70<<16)|60, S_POPHAT_SHOOT2}, // S_POPHAT_SHOOT1
|
||||
{SPR_POPH, 2, 1, {NULL}, 0, 0, S_POPHAT_SHOOT3}, // S_POPHAT_SHOOT2
|
||||
{SPR_POPH, 0, 57, {NULL}, 0, 0, S_POPHAT_LOOK}, // S_POPHAT_SHOOT3
|
||||
|
||||
{SPR_HIVE, 0, 5, {A_Look}, 1, 1, S_HIVEELEMENTAL_LOOK}, // S_HIVEELEMENTAL_LOOK
|
||||
{SPR_HIVE, 0, 14, {A_PlaySound}, sfx_s3k76, 1, S_HIVEELEMENTAL_PREPARE2}, // S_HIVEELEMENTAL_PREPARE1
|
||||
{SPR_HIVE, 0, 6, {A_PlaySound}, sfx_s3k8c, 1, S_HIVEELEMENTAL_SHOOT1}, // S_HIVEELEMENTAL_PREPARE2
|
||||
|
@ -3513,22 +3539,22 @@ state_t states[NUMSTATES] =
|
|||
|
||||
{SPR_NULL, 0, 1, {A_RockSpawn}, 0, 0, S_ROCKSPAWN}, // S_ROCKSPAWN
|
||||
|
||||
{SPR_ROIA, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEA}, // S_ROCKCRUMBLEA
|
||||
{SPR_ROIB, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEB}, // S_ROCKCRUMBLEB
|
||||
{SPR_ROIC, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEC}, // S_ROCKCRUMBLEC
|
||||
{SPR_ROID, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLED}, // S_ROCKCRUMBLED
|
||||
{SPR_ROIE, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEE}, // S_ROCKCRUMBLEE
|
||||
{SPR_ROIF, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEF}, // S_ROCKCRUMBLEF
|
||||
{SPR_ROIG, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEG}, // S_ROCKCRUMBLEG
|
||||
{SPR_ROIH, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEH}, // S_ROCKCRUMBLEH
|
||||
{SPR_ROII, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEI}, // S_ROCKCRUMBLEI
|
||||
{SPR_ROIJ, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEJ}, // S_ROCKCRUMBLEJ
|
||||
{SPR_ROIK, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEK}, // S_ROCKCRUMBLEK
|
||||
{SPR_ROIL, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEL}, // S_ROCKCRUMBLEL
|
||||
{SPR_ROIM, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEM}, // S_ROCKCRUMBLEM
|
||||
{SPR_ROIN, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEN}, // S_ROCKCRUMBLEN
|
||||
{SPR_ROIO, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEO}, // S_ROCKCRUMBLEO
|
||||
{SPR_ROIP, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_ROCKCRUMBLEP}, // S_ROCKCRUMBLEP
|
||||
{SPR_ROIA, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEA
|
||||
{SPR_ROIB, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEB
|
||||
{SPR_ROIC, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEC
|
||||
{SPR_ROID, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLED
|
||||
{SPR_ROIE, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEE
|
||||
{SPR_ROIF, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEF
|
||||
{SPR_ROIG, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEG
|
||||
{SPR_ROIH, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEH
|
||||
{SPR_ROII, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEI
|
||||
{SPR_ROIJ, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEJ
|
||||
{SPR_ROIK, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEK
|
||||
{SPR_ROIL, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEL
|
||||
{SPR_ROIM, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEM
|
||||
{SPR_ROIN, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEN
|
||||
{SPR_ROIO, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEO
|
||||
{SPR_ROIP, FF_ANIMATE|FF_RANDOMANIM, -1, {NULL}, 4, 2, S_NULL}, // S_ROCKCRUMBLEP
|
||||
|
||||
#ifdef SEENAMES
|
||||
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK
|
||||
|
@ -4024,7 +4050,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
},
|
||||
|
||||
{ // MT_CRUSHSTACEAN
|
||||
126, // doomednum
|
||||
610, //126, // doomednum
|
||||
S_CRUSHSTACEAN_ROAM1, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
|
@ -4538,7 +4564,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
|
||||
{ // MT_BOSSEXPLODE
|
||||
-1, // doomednum
|
||||
S_BPLD1, // spawnstate
|
||||
S_BOSSEXPLODE, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
|
@ -5143,7 +5169,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_BPLD1, // deathstate
|
||||
S_BOSSEXPLODE, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_cybdth, // deathsound
|
||||
48*FRACUNIT, // speed
|
||||
|
@ -5278,7 +5304,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_BPLD1, // deathstate
|
||||
S_BOSSEXPLODE, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_bexpld, // deathsound
|
||||
10*FRACUNIT, // speed
|
||||
|
@ -5440,7 +5466,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_BPLD1, // deathstate
|
||||
S_BOSSEXPLODE, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
10*FRACUNIT, // speed
|
||||
|
@ -5467,7 +5493,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_BPLD1, // deathstate
|
||||
S_BOSSEXPLODE, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
10*FRACUNIT, // speed
|
||||
|
@ -5779,6 +5805,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_BLUESPHEREBONUS // raisestate
|
||||
},
|
||||
|
||||
{ // MT_BOMBSPHERE
|
||||
520, // doomednum
|
||||
S_BOMBSPHERE1, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
MT_NULL, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_BOSSEXPLODE, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_cybdth, // deathsound
|
||||
38*FRACUNIT, // speed
|
||||
16*FRACUNIT, // radius
|
||||
24*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SLIDEME|MF_SPECIAL|MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_REDTEAMRING
|
||||
308, // doomednum
|
||||
S_TEAMRING, // spawnstate
|
||||
|
@ -6637,33 +6690,6 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_SPECIALSPIKEBALL
|
||||
521, // doomednum
|
||||
S_SPIKEBALL1, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
10*FRACUNIT, // speed
|
||||
12*FRACUNIT, // radius
|
||||
24*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
1, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SPECIAL|MF_NOGRAVITY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_SPINFIRE
|
||||
-1, // doomednum
|
||||
S_SPINFIRE1, // spawnstate
|
||||
|
@ -8664,7 +8690,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
|
||||
{ // MT_DEMONFIRE
|
||||
-1, // doomednum
|
||||
S_DEMONFIRE1, // spawnstate
|
||||
S_DEMONFIRE, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
|
@ -8770,6 +8796,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_BLUEBERRYBUSH
|
||||
803, // doomednum
|
||||
S_BLUEBERRYBUSH, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
16*FRACUNIT, // radius
|
||||
32*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_BERRYBUSH
|
||||
804, // doomednum
|
||||
S_BERRYBUSH, // spawnstate
|
||||
|
@ -9311,7 +9364,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
},
|
||||
|
||||
{ // MT_BIGGARGOYLE
|
||||
1011, // doomednum
|
||||
1009, // doomednum
|
||||
S_BIGGARGOYLE, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
|
@ -9581,7 +9634,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
},
|
||||
|
||||
{ // MT_DSZ2STALAGMITE
|
||||
1009, // doomednum
|
||||
999, // doomednum
|
||||
S_DSZ2STALAGMITE, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
|
@ -9630,7 +9683,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
4, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SCENERY|MF_NOBLOCKMAP|MF_NOGRAVITY, // flags
|
||||
MF_SCENERY|MF_NOBLOCKMAP|MF_NOGRAVITY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
|
@ -11524,6 +11577,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_XMASBLUEBERRYBUSH
|
||||
1859, // doomednum
|
||||
S_XMASBLUEBERRYBUSH, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
16*FRACUNIT, // radius
|
||||
32*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_XMASBERRYBUSH
|
||||
1857, // doomednum
|
||||
S_XMASBERRYBUSH, // spawnstate
|
||||
|
@ -11578,6 +11658,60 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_FHZICE1
|
||||
4028, // doomednum
|
||||
S_FHZICE1, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
8*FRACUNIT, // radius
|
||||
32*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_FHZICE2
|
||||
4029, // doomednum
|
||||
S_FHZICE1, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
8*FRACUNIT, // radius
|
||||
32*FRACUNIT, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_JACKO1
|
||||
3520, // doomednum
|
||||
S_JACKO1, // spawnstate
|
||||
|
@ -12387,7 +12521,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags
|
||||
MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
|
@ -12414,7 +12548,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags
|
||||
MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
|
@ -12441,7 +12575,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags
|
||||
MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
|
@ -12468,7 +12602,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags
|
||||
MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
|
@ -12495,7 +12629,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags
|
||||
MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
|
@ -12522,7 +12656,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags
|
||||
MF_NOBLOCKMAP|MF_NOCLIP|MF_SCENERY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
|
@ -14457,9 +14591,9 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
sfx_None, // painsound
|
||||
S_ORBITEM1, // meleestate
|
||||
S_ORBIDYA1, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_XPLD1, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
sfx_s3k8a, // deathsound
|
||||
8, // speed
|
||||
8*FRACUNIT, // radius
|
||||
16*FRACUNIT, // height
|
||||
|
@ -16454,7 +16588,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
{ // MT_SHLEEP
|
||||
1601, // doomednum
|
||||
S_SHLEEP1, // spawnstate
|
||||
1, // spawnhealth
|
||||
1, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
0, // reactiontime
|
||||
|
@ -16478,6 +16612,87 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_PENGUINATOR
|
||||
2017, // doomednum
|
||||
S_PENGUINATOR_LOOK, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_PENGUINATOR_WADDLE1, // seestate
|
||||
sfx_None, // seesound
|
||||
0, // reactiontime
|
||||
sfx_s3k8a, // attacksound
|
||||
S_NULL, // painstate
|
||||
200, // painchance
|
||||
sfx_None, // painsound
|
||||
S_PENGUINATOR_SLIDE1, // meleestate
|
||||
S_PENGUINATOR_SLIDE1, // missilestate
|
||||
S_XPLD_FLICKY, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_pop, // deathsound
|
||||
5, // speed
|
||||
24*FRACUNIT, // radius
|
||||
32*FRACUNIT, // height
|
||||
0, // display offset
|
||||
16, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SPECIAL|MF_SHOOTABLE|MF_ENEMY|MF_SLIDEME, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_POPHAT
|
||||
2018, // doomednum -- happy anniversary!
|
||||
S_POPHAT_LOOK, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_POPHAT_SHOOT1, // seestate
|
||||
sfx_None, // seesound
|
||||
1, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
200, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_XPLD_FLICKY, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_pop, // deathsound
|
||||
0, // speed
|
||||
24*FRACUNIT, // radius
|
||||
64*FRACUNIT, // height
|
||||
0, // display offset
|
||||
16, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SPECIAL|MF_SHOOTABLE|MF_ENEMY, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_POPSHOT
|
||||
-1, // doomednum
|
||||
S_ROCKCRUMBLEI, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_cannon, // seesound
|
||||
0, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
200, // painchance
|
||||
sfx_None, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_XPLD1, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_pop, // deathsound
|
||||
0, // speed
|
||||
16*FRACUNIT, // radius
|
||||
32*FRACUNIT, // height
|
||||
0, // display offset
|
||||
0, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOBLOCKMAP|MF_MISSILE, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_HIVEELEMENTAL
|
||||
3190, // doomednum
|
||||
S_HIVEELEMENTAL_LOOK, // spawnstate
|
||||
|
|
69
src/info.h
69
src/info.h
|
@ -402,6 +402,7 @@ typedef enum sprite
|
|||
SPR_FWR4,
|
||||
SPR_BUS1, // GFZ Bush w/ berries
|
||||
SPR_BUS2, // GFZ Bush w/o berries
|
||||
SPR_BUS3, // GFZ Bush w/ BLUE berries
|
||||
// Trees (both GFZ and misc)
|
||||
SPR_TRE1, // GFZ
|
||||
SPR_TRE2, // Checker
|
||||
|
@ -470,6 +471,7 @@ typedef enum sprite
|
|||
SPR_XMS3, // Snowman
|
||||
SPR_XMS4, // Lamppost
|
||||
SPR_XMS5, // Hanging Star
|
||||
SPR_FHZI, // FHZ Ice
|
||||
|
||||
// Halloween Scenery
|
||||
SPR_PUMK, // Pumpkins
|
||||
|
@ -481,7 +483,13 @@ typedef enum sprite
|
|||
SPR_BSZ1, // Tall flowers
|
||||
SPR_BSZ2, // Medium flowers
|
||||
SPR_BSZ3, // Small flowers
|
||||
SPR_BSZ4, // Tulip
|
||||
//SPR_BSZ4, -- Tulips
|
||||
SPR_BST1, // Red tulip
|
||||
SPR_BST2, // Purple tulip
|
||||
SPR_BST3, // Blue tulip
|
||||
SPR_BST4, // Cyan tulip
|
||||
SPR_BST5, // Yellow tulip
|
||||
SPR_BST6, // Orange tulip
|
||||
SPR_BSZ5, // Cluster of Tulips
|
||||
SPR_BSZ6, // Bush
|
||||
SPR_BSZ7, // Vine
|
||||
|
@ -619,6 +627,8 @@ typedef enum sprite
|
|||
SPR_SHLP, // Shleep
|
||||
|
||||
// Secret badniks and hazards, shhhh
|
||||
SPR_PENG,
|
||||
SPR_POPH,
|
||||
SPR_HIVE,
|
||||
SPR_BUMB,
|
||||
SPR_BBUZ,
|
||||
|
@ -1210,13 +1220,7 @@ typedef enum state
|
|||
S_UNIDUS_BALL,
|
||||
|
||||
// Boss Explosion
|
||||
S_BPLD1,
|
||||
S_BPLD2,
|
||||
S_BPLD3,
|
||||
S_BPLD4,
|
||||
S_BPLD5,
|
||||
S_BPLD6,
|
||||
S_BPLD7,
|
||||
S_BOSSEXPLODE,
|
||||
|
||||
// S3&K Boss Explosion
|
||||
S_SONIC3KBOSSEXPLOSION1,
|
||||
|
@ -1725,6 +1729,12 @@ typedef enum state
|
|||
S_BLUESPHEREBONUS,
|
||||
S_BLUESPHERESPARK,
|
||||
|
||||
// Bomb Sphere
|
||||
S_BOMBSPHERE1,
|
||||
S_BOMBSPHERE2,
|
||||
S_BOMBSPHERE3,
|
||||
S_BOMBSPHERE4,
|
||||
|
||||
// NiGHTS Chip
|
||||
S_NIGHTSCHIP,
|
||||
S_NIGHTSCHIPBONUS,
|
||||
|
@ -2074,18 +2084,14 @@ typedef enum state
|
|||
S_ARROWBONK,
|
||||
|
||||
// Trapgoyle Demon fire
|
||||
S_DEMONFIRE1,
|
||||
S_DEMONFIRE2,
|
||||
S_DEMONFIRE3,
|
||||
S_DEMONFIRE4,
|
||||
S_DEMONFIRE5,
|
||||
S_DEMONFIRE6,
|
||||
S_DEMONFIRE,
|
||||
|
||||
// GFZ flowers
|
||||
S_GFZFLOWERA,
|
||||
S_GFZFLOWERB,
|
||||
S_GFZFLOWERC,
|
||||
|
||||
S_BLUEBERRYBUSH,
|
||||
S_BERRYBUSH,
|
||||
S_BUSH,
|
||||
|
||||
|
@ -2370,8 +2376,12 @@ typedef enum state
|
|||
S_LAMPPOST2, // with snow
|
||||
S_HANGSTAR,
|
||||
// Xmas GFZ bushes
|
||||
S_XMASBLUEBERRYBUSH,
|
||||
S_XMASBERRYBUSH,
|
||||
S_XMASBUSH,
|
||||
// FHZ
|
||||
S_FHZICE1,
|
||||
S_FHZICE2,
|
||||
|
||||
// Halloween Scenery
|
||||
// Pumpkins
|
||||
|
@ -3423,6 +3433,22 @@ typedef enum state
|
|||
S_SHLEEPBOUNCE3,
|
||||
|
||||
// Secret badniks and hazards, shhhh
|
||||
S_PENGUINATOR_LOOK,
|
||||
S_PENGUINATOR_WADDLE1,
|
||||
S_PENGUINATOR_WADDLE2,
|
||||
S_PENGUINATOR_WADDLE3,
|
||||
S_PENGUINATOR_WADDLE4,
|
||||
S_PENGUINATOR_SLIDE1,
|
||||
S_PENGUINATOR_SLIDE2,
|
||||
S_PENGUINATOR_SLIDE3,
|
||||
S_PENGUINATOR_SLIDE4,
|
||||
S_PENGUINATOR_SLIDE5,
|
||||
|
||||
S_POPHAT_LOOK,
|
||||
S_POPHAT_SHOOT1,
|
||||
S_POPHAT_SHOOT2,
|
||||
S_POPHAT_SHOOT3,
|
||||
|
||||
S_HIVEELEMENTAL_LOOK,
|
||||
S_HIVEELEMENTAL_PREPARE1,
|
||||
S_HIVEELEMENTAL_PREPARE2,
|
||||
|
@ -3717,7 +3743,8 @@ typedef enum mobj_type
|
|||
// Collectible Items
|
||||
MT_RING,
|
||||
MT_FLINGRING, // Lost ring
|
||||
MT_BLUESPHERE, // Blue sphere replacement for special stages
|
||||
MT_BLUESPHERE, // Blue sphere for special stages
|
||||
MT_BOMBSPHERE,
|
||||
MT_REDTEAMRING, //Rings collectable by red team.
|
||||
MT_BLUETEAMRING, //Rings collectable by blue team.
|
||||
MT_TOKEN, // Special Stage token for special stage
|
||||
|
@ -3755,7 +3782,6 @@ typedef enum mobj_type
|
|||
MT_BUBBLES, // Bubble source
|
||||
MT_SIGN, // Level end sign
|
||||
MT_SPIKEBALL, // Spike Ball
|
||||
MT_SPECIALSPIKEBALL,
|
||||
MT_SPINFIRE,
|
||||
MT_SPIKE,
|
||||
MT_WALLSPIKE,
|
||||
|
@ -3848,8 +3874,11 @@ typedef enum mobj_type
|
|||
MT_GFZFLOWER1,
|
||||
MT_GFZFLOWER2,
|
||||
MT_GFZFLOWER3,
|
||||
|
||||
MT_BLUEBERRYBUSH,
|
||||
MT_BERRYBUSH,
|
||||
MT_BUSH,
|
||||
|
||||
// Trees (both GFZ and misc)
|
||||
MT_GFZTREE,
|
||||
MT_GFZBERRYTREE,
|
||||
|
@ -3974,8 +4003,12 @@ typedef enum mobj_type
|
|||
MT_LAMPPOST2, // with snow
|
||||
MT_HANGSTAR,
|
||||
// Xmas GFZ bushes
|
||||
MT_XMASBLUEBERRYBUSH,
|
||||
MT_XMASBERRYBUSH,
|
||||
MT_XMASBUSH,
|
||||
// FHZ
|
||||
MT_FHZICE1,
|
||||
MT_FHZICE2,
|
||||
|
||||
// Halloween Scenery
|
||||
// Pumpkins
|
||||
|
@ -4187,6 +4220,10 @@ typedef enum mobj_type
|
|||
MT_SHLEEP, // almost-decorative sleeping enemy
|
||||
|
||||
// Secret badniks and hazards, shhhh
|
||||
MT_PENGUINATOR,
|
||||
MT_POPHAT,
|
||||
MT_POPSHOT,
|
||||
|
||||
MT_HIVEELEMENTAL,
|
||||
MT_BUMBLEBORE,
|
||||
|
||||
|
|
|
@ -5222,7 +5222,7 @@ static void M_HandleAddons(INT32 choice)
|
|||
case EXT_SOC:
|
||||
case EXT_WAD:
|
||||
case EXT_PK3:
|
||||
COM_BufAddText(va("addfile %s%s", menupath, dirmenu[dir_on[menudepthleft]]+DIR_STRING));
|
||||
COM_BufAddText(va("addfile \"%s%s\"", menupath, dirmenu[dir_on[menudepthleft]]+DIR_STRING));
|
||||
addonsresponselimit = 5;
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -5346,7 +5346,7 @@ void A_RotateSpikeBall(mobj_t *actor)
|
|||
return;
|
||||
#endif
|
||||
|
||||
if (actor->type == MT_SPECIALSPIKEBALL) // don't remove this, these spikeballs share the same states as the rotating spikeballs
|
||||
if (actor->type == MT_SPIKEBALL) // don't remove this, these spikeballs share the same states as the rotating spikeballs
|
||||
return;
|
||||
|
||||
if (!((!locvar1 && (actor->target)) || (locvar1 && (actor->tracer))))// This should NEVER happen.
|
||||
|
@ -11323,21 +11323,20 @@ void A_LightBeamReset(mobj_t *actor)
|
|||
return;
|
||||
#endif
|
||||
|
||||
P_SetScale(actor, FRACUNIT + P_SignedRandom()*FRACUNIT/256);
|
||||
actor->destscale = actor->scale;
|
||||
actor->destscale = FRACUNIT + P_SignedRandom()*FRACUNIT/256;
|
||||
P_SetScale(actor, actor->destscale);
|
||||
|
||||
if (!actor->spawnpoint)
|
||||
return; // this can't work properly welp
|
||||
|
||||
actor->momx = P_SignedRandom()*FINECOSINE((actor->spawnpoint->angle*ANG1)>>ANGLETOFINESHIFT)/128;
|
||||
actor->momy = P_SignedRandom()*FINESINE((actor->spawnpoint->angle*ANG1)>>ANGLETOFINESHIFT)/128;
|
||||
actor->momz = P_SignedRandom()*FRACUNIT/128;
|
||||
actor->momx = -(P_SignedRandom()*FINESINE(((actor->spawnpoint->angle*ANG1)>>ANGLETOFINESHIFT) & FINEMASK))/128;
|
||||
actor->momy = (P_SignedRandom()*FINECOSINE(((actor->spawnpoint->angle*ANG1)>>ANGLETOFINESHIFT) & FINEMASK))/128;
|
||||
actor->momz = (P_SignedRandom()*FRACUNIT)/128;
|
||||
|
||||
P_UnsetThingPosition(actor);
|
||||
actor->x = actor->spawnpoint->x*FRACUNIT + P_SignedRandom()*FINECOSINE((actor->spawnpoint->angle*ANG1)>>ANGLETOFINESHIFT)/2;
|
||||
actor->y = actor->spawnpoint->y*FRACUNIT + P_SignedRandom()*FINESINE((actor->spawnpoint->angle*ANG1)>>ANGLETOFINESHIFT)/2;
|
||||
actor->z = actor->spawnpoint->z*FRACUNIT + P_SignedRandom()*FRACUNIT/2;
|
||||
P_SetThingPosition(actor);
|
||||
P_TeleportMove(actor,
|
||||
actor->spawnpoint->x*FRACUNIT - (P_SignedRandom()*FINESINE(((actor->spawnpoint->angle*ANG1)>>ANGLETOFINESHIFT) & FINEMASK))/2,
|
||||
actor->spawnpoint->y*FRACUNIT + (P_SignedRandom()*FINECOSINE(((actor->spawnpoint->angle*ANG1)>>ANGLETOFINESHIFT) & FINEMASK))/2,
|
||||
actor->spawnpoint->z*FRACUNIT + (P_SignedRandom()*FRACUNIT)/2);
|
||||
}
|
||||
|
||||
// Function: A_MineExplode
|
||||
|
|
|
@ -474,7 +474,8 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
|||
case MT_FLINGRING:
|
||||
case MT_COIN:
|
||||
case MT_FLINGCOIN:
|
||||
if (!(P_CanPickupItem(player, false)))
|
||||
case MT_NIGHTSSTAR:
|
||||
if (!(P_CanPickupItem(player, false)) && !(special->flags2 & MF2_NIGHTSPULL))
|
||||
return;
|
||||
|
||||
special->momx = special->momy = special->momz = 0;
|
||||
|
@ -484,39 +485,31 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
|||
P_DoNightsScore(player);
|
||||
break;
|
||||
case MT_BLUESPHERE:
|
||||
if (!(P_CanPickupItem(player, false)))
|
||||
return;
|
||||
|
||||
special->momx = special->momy = special->momz = 0;
|
||||
P_GivePlayerSpheres(player, 1);
|
||||
|
||||
special->destscale = ((player->powers[pw_carry] == CR_NIGHTSMODE) ? 4 : 2)*special->scale;
|
||||
if (states[special->info->deathstate].tics > 0)
|
||||
special->scalespeed = FixedDiv(FixedDiv(special->destscale, special->scale), states[special->info->deathstate].tics<<FRACBITS);
|
||||
else
|
||||
special->scalespeed = 4*FRACUNIT/5;
|
||||
|
||||
if (maptol & TOL_NIGHTS)
|
||||
P_DoNightsScore(player);
|
||||
break;
|
||||
case MT_NIGHTSCHIP:
|
||||
if (!(P_CanPickupItem(player, false)))
|
||||
if (!(P_CanPickupItem(player, false)) && !(special->flags2 & MF2_NIGHTSPULL))
|
||||
return;
|
||||
|
||||
special->momx = special->momy = special->momz = 0;
|
||||
P_GivePlayerSpheres(player, 1);
|
||||
|
||||
if (special->type == MT_BLUESPHERE)
|
||||
{
|
||||
special->destscale = ((player->powers[pw_carry] == CR_NIGHTSMODE) ? 4 : 2)*special->scale;
|
||||
if (states[special->info->deathstate].tics > 0)
|
||||
special->scalespeed = FixedDiv(FixedDiv(special->destscale, special->scale), states[special->info->deathstate].tics<<FRACBITS);
|
||||
else
|
||||
special->scalespeed = 4*FRACUNIT/5;
|
||||
}
|
||||
|
||||
if (maptol & TOL_NIGHTS)
|
||||
P_DoNightsScore(player);
|
||||
break;
|
||||
case MT_NIGHTSSTAR:
|
||||
if (!(P_CanPickupItem(player, false)))
|
||||
case MT_BOMBSPHERE:
|
||||
if (!(P_CanPickupItem(player, false)) && !(special->flags2 & MF2_NIGHTSPULL))
|
||||
return;
|
||||
|
||||
special->momx = special->momy = special->momz = 0;
|
||||
|
||||
if (maptol & TOL_NIGHTS)
|
||||
P_DoNightsScore(player);
|
||||
P_DamageMobj(toucher, special, special, 1, 0);
|
||||
break;
|
||||
case MT_AUTOPICKUP:
|
||||
case MT_BOUNCEPICKUP:
|
||||
|
@ -755,6 +748,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
|||
case MT_NIGHTSDRONE:
|
||||
{
|
||||
boolean spec = G_IsSpecialStage(gamemap);
|
||||
boolean cangiveemmy = false;
|
||||
if (player->bot)
|
||||
return;
|
||||
if (player->exiting)
|
||||
|
@ -776,7 +770,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
|||
return;
|
||||
// Well no one has an emerald, so exit anyway!
|
||||
}
|
||||
P_GiveEmerald(false);
|
||||
cangiveemmy = true;
|
||||
// Don't play Ideya sound in special stage mode
|
||||
}
|
||||
else
|
||||
|
@ -815,7 +809,21 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
|||
while ((hnext = hnext->hnext))
|
||||
P_SetTarget(&hnext->target, toucher);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (!cangiveemmy)
|
||||
return;
|
||||
|
||||
if (player->exiting)
|
||||
P_GiveEmerald(false);
|
||||
else if (player->mo->tracer && player->mare)
|
||||
{
|
||||
P_KillMobj(toucher->tracer, NULL, NULL, 0); // No emerald for you just yet!
|
||||
S_StartSound(NULL, sfx_ghosty);
|
||||
special->flags2 |= MF2_DONTDRAW;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
case MT_NIGHTSLOOPHELPER:
|
||||
|
@ -922,9 +930,10 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
|||
}
|
||||
}
|
||||
|
||||
if (!(mo2->type == MT_RING || mo2->type == MT_COIN || mo2->type == MT_BLUESPHERE
|
||||
if (!(mo2->type == MT_RING || mo2->type == MT_COIN
|
||||
|| mo2->type == MT_BLUESPHERE || mo2->type == MT_BOMBSPHERE
|
||||
|| mo2->type == MT_NIGHTSCHIP || mo2->type == MT_NIGHTSSTAR
|
||||
|| ((mo2->type == MT_EMBLEM) && (mo2->reactiontime & GE_NIGHTSPULL))))
|
||||
|| ((mo2->type == MT_EMBLEM) && (mo2->reactiontime & GE_NIGHTSPULL))))
|
||||
continue;
|
||||
|
||||
// Yay! The thing's in reach! Pull it in!
|
||||
|
@ -942,6 +951,9 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
|||
if (player->powers[pw_carry] == CR_NIGHTSMODE && !toucher->target)
|
||||
return;
|
||||
|
||||
if (toucher->tracer)
|
||||
return; // Don't have multiple ideya
|
||||
|
||||
if (player->mare != special->threshold) // wrong mare
|
||||
return;
|
||||
|
||||
|
|
176
src/p_mobj.c
176
src/p_mobj.c
|
@ -2133,7 +2133,7 @@ void P_XYMovement(mobj_t *mo)
|
|||
if (mo->flags & MF_NOCLIPHEIGHT)
|
||||
return; // no frictions for objects that can pass through floors
|
||||
|
||||
if (mo->flags & MF_MISSILE || mo->flags2 & MF2_SKULLFLY || mo->type == MT_SHELL || mo->type == MT_VULTURE)
|
||||
if (mo->flags & MF_MISSILE || mo->flags2 & MF2_SKULLFLY || mo->type == MT_SHELL || mo->type == MT_VULTURE || mo->type == MT_PENGUINATOR)
|
||||
return; // no friction for missiles ever
|
||||
|
||||
if (player && player->homing) // no friction for homing
|
||||
|
@ -2514,6 +2514,7 @@ static boolean P_ZMovement(mobj_t *mo)
|
|||
case MT_RING: // Ignore still rings
|
||||
case MT_COIN:
|
||||
case MT_BLUESPHERE:
|
||||
case MT_BOMBSPHERE:
|
||||
case MT_NIGHTSCHIP:
|
||||
case MT_NIGHTSSTAR:
|
||||
case MT_REDTEAMRING:
|
||||
|
@ -7747,109 +7748,79 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
}
|
||||
break;
|
||||
case MT_NIGHTSDRONE:
|
||||
// GOAL mode?
|
||||
if (mobj->state >= &states[S_NIGHTSDRONE_SPARKLING1] && mobj->state <= &states[S_NIGHTSDRONE_SPARKLING16])
|
||||
{
|
||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->z = mobj->floorz + mobj->height + (mobj->spawnpoint->options >> ZSHIFT) * FRACUNIT;
|
||||
mobj->angle = 0;
|
||||
INT32 i;
|
||||
boolean bonustime = false;
|
||||
|
||||
if (!mobj->target)
|
||||
{
|
||||
mobj_t *goalpost = P_SpawnMobj(mobj->x, mobj->y, mobj->z + FRACUNIT, MT_NIGHTSGOAL);
|
||||
CONS_Debug(DBG_NIGHTSBASIC, "Adding goal post\n");
|
||||
goalpost->angle = mobj->angle;
|
||||
P_SetTarget(&mobj->target, goalpost);
|
||||
}
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
if (playeringame[i] && players[i].bonustime && players[i].powers[pw_carry] == CR_NIGHTSMODE)
|
||||
{
|
||||
bonustime = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (G_IsSpecialStage(gamemap))
|
||||
{ // Never show the NiGHTS drone in special stages. Check ANYONE for bonustime.
|
||||
INT32 i;
|
||||
boolean bonustime = false;
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
if (playeringame[i] && players[i].bonustime)
|
||||
{
|
||||
bonustime = true;
|
||||
break;
|
||||
}
|
||||
if (!bonustime)
|
||||
{
|
||||
/*mobj->flags &= ~MF_NOGRAVITY;
|
||||
P_SetMobjState(mobj, S_NIGHTSDRONE1);*/
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
}
|
||||
}
|
||||
else if (mobj->tracer && mobj->tracer->player)
|
||||
if (!bonustime)
|
||||
{
|
||||
if (!(mobj->tracer->player->powers[pw_carry] == CR_NIGHTSMODE))
|
||||
{
|
||||
mobj->flags &= ~MF_NOGRAVITY;
|
||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||
P_SetMobjState(mobj, S_NIGHTSDRONE1);
|
||||
}
|
||||
else if (!mobj->tracer->player->bonustime)
|
||||
{
|
||||
mobj->flags &= ~MF_NOGRAVITY;
|
||||
P_SetMobjState(mobj, S_NIGHTSDRONE1);
|
||||
}
|
||||
CONS_Debug(DBG_NIGHTSBASIC, "Removing goal post\n");
|
||||
P_RemoveMobj(mobj->target);
|
||||
P_SetTarget(&mobj->target, NULL);
|
||||
|
||||
mobj->flags &= ~MF_NOGRAVITY;
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
P_SetMobjState(mobj, S_NIGHTSDRONE1);
|
||||
}
|
||||
}
|
||||
// Invisible/bouncing mode.
|
||||
else
|
||||
{
|
||||
if (G_IsSpecialStage(gamemap))
|
||||
{ // Never show the NiGHTS drone in special stages. Check ANYONE for bonustime.
|
||||
INT32 i;
|
||||
INT32 i;
|
||||
boolean bonustime = false;
|
||||
|
||||
boolean bonustime = false;
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
if (playeringame[i] && players[i].bonustime)
|
||||
{
|
||||
bonustime = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (bonustime)
|
||||
{
|
||||
P_SetMobjState(mobj, S_NIGHTSDRONE_SPARKLING1);
|
||||
mobj->flags |= MF_NOGRAVITY;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mobj->target)
|
||||
{
|
||||
CONS_Debug(DBG_NIGHTSBASIC, "Removing goal post\n");
|
||||
P_RemoveMobj(mobj->target);
|
||||
P_SetTarget(&mobj->target, NULL);
|
||||
}
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
}
|
||||
}
|
||||
else if (mobj->tracer && mobj->tracer->player)
|
||||
{
|
||||
if (mobj->target)
|
||||
{
|
||||
CONS_Debug(DBG_NIGHTSBASIC, "Removing goal post\n");
|
||||
P_RemoveMobj(mobj->target);
|
||||
P_SetTarget(&mobj->target, NULL);
|
||||
}
|
||||
|
||||
if (mobj->tracer->player->powers[pw_carry] == CR_NIGHTSMODE)
|
||||
{
|
||||
if (mobj->tracer->player->bonustime)
|
||||
{
|
||||
P_SetMobjState(mobj, S_NIGHTSDRONE_SPARKLING1);
|
||||
mobj->flags |= MF_NOGRAVITY;
|
||||
}
|
||||
else
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
}
|
||||
else // Not NiGHTS
|
||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||
}
|
||||
// Bouncy bouncy!
|
||||
mobj->angle += ANG10;
|
||||
if (mobj->flags2 & MF2_DONTDRAW)
|
||||
mobj->momz = 0;
|
||||
else if (mobj->z <= mobj->floorz)
|
||||
mobj->momz = 5*FRACUNIT;
|
||||
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
if (playeringame[i] && players[i].bonustime && players[i].powers[pw_carry] == CR_NIGHTSMODE)
|
||||
{
|
||||
bonustime = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (bonustime)
|
||||
{
|
||||
mobj->z = mobj->floorz + mobj->height;
|
||||
mobj->angle = mobj->momz = 0;
|
||||
|
||||
if (mobj->spawnpoint)
|
||||
mobj->z += (mobj->spawnpoint->options >> ZSHIFT)<<FRACBITS;
|
||||
|
||||
CONS_Debug(DBG_NIGHTSBASIC, "Adding goal post\n");
|
||||
P_SetTarget(&mobj->target, P_SpawnMobjFromMobj(mobj, 0, 0, FRACUNIT, MT_NIGHTSGOAL));
|
||||
|
||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||
mobj->flags |= MF_NOGRAVITY;
|
||||
P_SetMobjState(mobj, S_NIGHTSDRONE_SPARKLING1);
|
||||
}
|
||||
else if (!G_IsSpecialStage(gamemap))
|
||||
{
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
if (playeringame[i] && players[i].powers[pw_carry] != CR_NIGHTSMODE)
|
||||
{
|
||||
bonustime = true; // variable reuse
|
||||
break;
|
||||
}
|
||||
|
||||
if (bonustime)
|
||||
mobj->flags2 &= ~MF2_DONTDRAW;
|
||||
else
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MT_PLAYER:
|
||||
|
@ -7882,6 +7853,7 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
case MT_RING:
|
||||
case MT_COIN:
|
||||
case MT_BLUESPHERE:
|
||||
case MT_BOMBSPHERE:
|
||||
case MT_NIGHTSCHIP:
|
||||
case MT_NIGHTSSTAR:
|
||||
case MT_REDTEAMRING:
|
||||
|
@ -8713,6 +8685,10 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
|||
case MT_EXTRALARGEBUBBLE:
|
||||
mobj->fuse += 30 * TICRATE;
|
||||
break;
|
||||
case MT_NIGHTSDRONE:
|
||||
if (G_IsSpecialStage(gamemap))
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
break;
|
||||
case MT_EGGCAPSULE:
|
||||
mobj->extravalue1 = -1; // timer for how long a player has been at the capsule
|
||||
break;
|
||||
|
@ -9869,7 +9845,7 @@ void P_SpawnMapThing(mapthing_t *mthing)
|
|||
ss->sector->floorheight) + ((mthing->options >> ZSHIFT) << FRACBITS);
|
||||
else if (i == MT_AXIS || i == MT_AXISTRANSFER || i == MT_AXISTRANSFERLINE)
|
||||
z = ONFLOORZ;
|
||||
else if (i == MT_SPECIALSPIKEBALL || P_WeaponOrPanel(i) || i == MT_EMERALDSPAWN || i == MT_TOKEN)
|
||||
else if (i == MT_BOMBSPHERE || i == MT_SPIKEBALL || P_WeaponOrPanel(i) || i == MT_EMERALDSPAWN || i == MT_TOKEN)
|
||||
{
|
||||
if (mthing->options & MTF_OBJECTFLIP)
|
||||
{
|
||||
|
@ -11063,10 +11039,11 @@ void P_SpawnHoopsAndRings(mapthing_t *mthing, boolean bonustime)
|
|||
else if (mthing->type == mobjinfo[MT_BLUESPHERE].doomednum)
|
||||
ringthing = MT_BLUESPHERE;
|
||||
|
||||
if (ringthing != MT_BLUESPHERE && ultimatemode)
|
||||
return; // No rings in Ultimate!
|
||||
|
||||
if ((maptol & TOL_NIGHTS) && !G_IsSpecialStage(gamemap))
|
||||
ringthing = ((ringthing == MT_BLUESPHERE) ? MT_NIGHTSCHIP : MT_NIGHTSSTAR);
|
||||
else if (ringthing != MT_BLUESPHERE && ultimatemode)
|
||||
return; // No rings in Ultimate!
|
||||
|
||||
// Set proper height
|
||||
if (mthing->options & MTF_OBJECTFLIP)
|
||||
|
@ -11130,10 +11107,11 @@ void P_SpawnHoopsAndRings(mapthing_t *mthing, boolean bonustime)
|
|||
if (mthing->type == 601)
|
||||
dist = 128*FRACUNIT;
|
||||
|
||||
if (ultimatemode)
|
||||
return; // No rings in Ultimate!
|
||||
|
||||
if ((maptol & TOL_NIGHTS) && !G_IsSpecialStage(gamemap))
|
||||
ringthing = MT_NIGHTSSTAR;
|
||||
else if (ultimatemode)
|
||||
return; // No rings in Ultimate!
|
||||
|
||||
for (r = 1; r <= 5; r++)
|
||||
{
|
||||
|
@ -11181,10 +11159,11 @@ void P_SpawnHoopsAndRings(mapthing_t *mthing, boolean bonustime)
|
|||
if (mthing->type == 603)
|
||||
iterations = 10;
|
||||
|
||||
if (ultimatemode)
|
||||
return; // No rings in Ultimate!
|
||||
|
||||
if ((maptol & TOL_NIGHTS) && !G_IsSpecialStage(gamemap))
|
||||
ringthing = MT_NIGHTSSTAR;
|
||||
else if (ultimatemode)
|
||||
return; // No rings in Ultimate!
|
||||
|
||||
closestangle = FixedAngle(mthing->angle*FRACUNIT);
|
||||
fa = (closestangle >> ANGLETOFINESHIFT);
|
||||
|
@ -11274,10 +11253,11 @@ void P_SpawnHoopsAndRings(mapthing_t *mthing, boolean bonustime)
|
|||
break;
|
||||
}
|
||||
|
||||
if (ringthing != MT_BLUESPHERE && ultimatemode)
|
||||
continue; // No rings in Ultimate!
|
||||
|
||||
if ((maptol & TOL_NIGHTS) && !G_IsSpecialStage(gamemap))
|
||||
ringthing = ((ringthing == MT_BLUESPHERE) ? MT_NIGHTSCHIP : MT_NIGHTSSTAR);
|
||||
else if (ringthing == MT_RING && ultimatemode)
|
||||
continue; // No rings in Ultimate!
|
||||
|
||||
fa = i*FINEANGLES/numitems;
|
||||
v[0] = FixedMul(FINECOSINE(fa),size);
|
||||
|
|
|
@ -826,7 +826,8 @@ void P_ReloadRings(void)
|
|||
}
|
||||
continue;
|
||||
}
|
||||
if (!(mo->type == MT_RING || mo->type == MT_COIN || mo->type == MT_BLUESPHERE
|
||||
if (!(mo->type == MT_RING || mo->type == MT_COIN
|
||||
|| mo->type == MT_BLUESPHERE || mo->type == MT_BOMBSPHERE
|
||||
|| mo->type == MT_NIGHTSCHIP || mo->type == MT_NIGHTSSTAR))
|
||||
continue;
|
||||
|
||||
|
|
|
@ -7656,7 +7656,6 @@ void T_Pusher(pusher_t *p)
|
|||
thing->player->pflags |= jumped;
|
||||
|
||||
thing->player->pflags |= PF_SLIDING;
|
||||
P_SetPlayerMobjState (thing, thing->info->painstate); // Whee!
|
||||
thing->angle = R_PointToAngle2 (0, 0, xspeed<<(FRACBITS-PUSH_FACTOR), yspeed<<(FRACBITS-PUSH_FACTOR));
|
||||
|
||||
if (!demoplayback || P_AnalogMove(thing->player))
|
||||
|
|
39
src/p_user.c
39
src/p_user.c
|
@ -6953,12 +6953,17 @@ static void P_MovePlayer(player_t *player)
|
|||
if ((player->powers[pw_carry] == CR_NIGHTSMODE)
|
||||
&& (player->exiting
|
||||
|| !(player->mo->state >= &states[S_PLAY_NIGHTS_TRANS1]
|
||||
&& player->mo->state < &states[S_PLAY_NIGHTS_TRANS6])))
|
||||
&& player->mo->state < &states[S_PLAY_NIGHTS_TRANS6]))) // Note the < instead of <=
|
||||
{
|
||||
skin_t *skin = ((skin_t *)(player->mo->skin));
|
||||
if (skin->flags & SF_SUPER && player->mo->color < MAXSKINCOLORS)
|
||||
if (skin->flags & SF_SUPER)
|
||||
{
|
||||
player->mo->color = skin->supercolor
|
||||
+ ((player->nightstime == player->startedtime)
|
||||
? 4
|
||||
: abs((((signed)leveltime >> 1) % 9) - 4)); // This is where super flashing is handled.
|
||||
G_GhostAddColor(GHC_SUPER);
|
||||
player->mo->color = (skin->flags & SF_SUPER) ? skin->supercolor + abs((((signed)(player->startedtime - player->nightstime) >> 1) % 9) - 4) : player->mo->color; // This is where super flashing is handled.
|
||||
}
|
||||
}
|
||||
|
||||
if (!player->capsule && !player->bonustime)
|
||||
|
@ -7961,17 +7966,18 @@ static void P_DoRopeHang(player_t *player)
|
|||
|
||||
if (player->cmd.buttons & BT_USE && !(player->pflags & PF_STASIS)) // Drop off of the rope
|
||||
{
|
||||
P_SetTarget(&player->mo->tracer, NULL);
|
||||
|
||||
player->pflags |= P_GetJumpFlags(player);
|
||||
P_SetPlayerMobjState(player->mo, S_PLAY_JUMP);
|
||||
|
||||
P_SetTarget(&player->mo->tracer, NULL);
|
||||
player->powers[pw_carry] = CR_NONE;
|
||||
|
||||
if (!(player->pflags & PF_SLIDING) && (player->pflags & PF_JUMPED)
|
||||
&& !(player->panim == PA_JUMP))
|
||||
P_SetPlayerMobjState(player->mo, S_PLAY_JUMP);
|
||||
return;
|
||||
}
|
||||
|
||||
if (player->mo->state-states != S_PLAY_RIDE)
|
||||
P_SetPlayerMobjState(player->mo, S_PLAY_RIDE);
|
||||
|
||||
// If not allowed to move, we're done here.
|
||||
if (!speed)
|
||||
return;
|
||||
|
@ -8062,10 +8068,7 @@ static void P_DoRopeHang(player_t *player)
|
|||
if (player->mo->tracer->flags & MF_SLIDEME)
|
||||
{
|
||||
player->pflags |= P_GetJumpFlags(player);
|
||||
|
||||
if (!(player->pflags & PF_SLIDING) && (player->pflags & PF_JUMPED)
|
||||
&& !(player->panim == PA_JUMP))
|
||||
P_SetPlayerMobjState(player->mo, S_PLAY_JUMP);
|
||||
P_SetPlayerMobjState(player->mo, S_PLAY_JUMP);
|
||||
}
|
||||
|
||||
P_SetTarget(&player->mo->tracer, NULL);
|
||||
|
@ -9737,7 +9740,8 @@ void P_PlayerThink(player_t *player)
|
|||
|
||||
mo2 = (mobj_t *)th;
|
||||
|
||||
if (!(mo2->type == MT_RING || mo2->type == MT_COIN || mo2->type == MT_BLUESPHERE
|
||||
if (!(mo2->type == MT_RING || mo2->type == MT_COIN
|
||||
|| mo2->type == MT_BLUESPHERE || mo2->type == MT_BOMBSPHERE
|
||||
|| mo2->type == MT_NIGHTSCHIP || mo2->type == MT_NIGHTSSTAR))
|
||||
continue;
|
||||
|
||||
|
@ -9774,8 +9778,6 @@ void P_PlayerThink(player_t *player)
|
|||
ticmiss++;
|
||||
|
||||
P_DoRopeHang(player);
|
||||
if (player->mo->state-states != S_PLAY_RIDE)
|
||||
P_SetPlayerMobjState(player->mo, S_PLAY_RIDE);
|
||||
P_DoJumpStuff(player, &player->cmd);
|
||||
}
|
||||
else //if (player->powers[pw_carry] == CR_ZOOMTUBE)
|
||||
|
@ -9891,7 +9893,8 @@ void P_PlayerThink(player_t *player)
|
|||
if (!player->powers[pw_carry]
|
||||
&& ((player->pflags & (PF_AUTOBRAKE|PF_APPLYAUTOBRAKE)) == (PF_AUTOBRAKE|PF_APPLYAUTOBRAKE))
|
||||
&& !(cmd->forwardmove || cmd->sidemove)
|
||||
&& (player->rmomx || player->rmomy))
|
||||
&& (player->rmomx || player->rmomy)
|
||||
&& (!player->capsule || (player->capsule->reactiontime != (player-players)+1)))
|
||||
{
|
||||
fixed_t acceleration = (player->accelstart + (FixedDiv(player->speed, player->mo->scale)>>FRACBITS) * player->acceleration) * player->thrustfactor * 20;
|
||||
angle_t moveAngle = R_PointToAngle2(0, 0, player->rmomx, player->rmomy);
|
||||
|
@ -9913,7 +9916,7 @@ void P_PlayerThink(player_t *player)
|
|||
|| player->climbing
|
||||
|| player->pflags & (PF_SPINNING|PF_SLIDING))
|
||||
player->pflags &= ~PF_APPLYAUTOBRAKE;
|
||||
else if (currentlyonground)
|
||||
else if (currentlyonground || player->powers[pw_tailsfly])
|
||||
player->pflags |= PF_APPLYAUTOBRAKE;
|
||||
}
|
||||
}
|
||||
|
@ -10345,7 +10348,7 @@ void P_PlayerAfterThink(player_t *player)
|
|||
if (P_IsLocalPlayer(player) && (player->pflags & PF_WPNDOWN) && player->currentweapon != oldweapon)
|
||||
S_StartSound(NULL, sfx_wepchg);
|
||||
|
||||
if (player->pflags & PF_SLIDING)
|
||||
if ((player->pflags & PF_SLIDING) && ((player->pflags & (PF_JUMPED|PF_NOJUMPDAMAGE)) != PF_JUMPED))
|
||||
P_SetPlayerMobjState(player->mo, player->mo->info->painstate);
|
||||
|
||||
/* if (player->powers[pw_carry] == CR_NONE && player->mo->tracer && !player->homing)
|
||||
|
|
|
@ -143,12 +143,12 @@ sfxinfo_t S_sfx[NUMSFX] =
|
|||
{"cannon", false, 64, 8, -1, NULL, 0, -1, -1, LUMPERROR, "Powerful shot"},
|
||||
{"cgot" , true, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Got Emerald"}, // Got Emerald! Tails 09-02-2001
|
||||
{"cybdth", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Explosion"},
|
||||
{"deton", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Ominous beeping"},
|
||||
{"deton", true, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Threatening beeping"},
|
||||
{"ding", false, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR, "Ding"},
|
||||
{"dmpain", false, 96, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Machine damage"},
|
||||
{"drown", false, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Drowning"},
|
||||
{"fizzle", false, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR, "Electric fizzle"},
|
||||
{"gbeep", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Ominous beeping"}, // Grenade beep
|
||||
{"gbeep", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Threatening beeping"}, // Grenade beep
|
||||
{"wepfir", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Firing weapon"}, // defaults to thok
|
||||
{"ghit" , false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Goop splash"},
|
||||
{"gloop", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Splash"},
|
||||
|
@ -244,11 +244,11 @@ sfxinfo_t S_sfx[NUMSFX] =
|
|||
{"mario2", false, 127, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Koopa shell"},
|
||||
{"mario3", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Power-up"},
|
||||
{"mario4", true, 78, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Got coin"},
|
||||
{"mario5", false, 78, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Boot"},
|
||||
{"mario5", false, 78, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Boot-stomp"},
|
||||
{"mario6", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Jump"},
|
||||
{"mario7", false, 32, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Fire"},
|
||||
{"mario8", false, 48, 8, -1, NULL, 0, -1, -1, LUMPERROR, "Hurt"},
|
||||
{"mario9", true, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Emerging"},
|
||||
{"mario9", true, 120, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Emerging power-up"},
|
||||
{"marioa", true, 192, 0, -1, NULL, 0, -1, -1, LUMPERROR, "One-up"},
|
||||
{"thwomp", true, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR, "Thwomp"},
|
||||
|
||||
|
|
|
@ -1093,7 +1093,8 @@ static void ST_drawInput(void)
|
|||
((!stplyr->powers[pw_carry]
|
||||
&& (stplyr->pflags & PF_APPLYAUTOBRAKE)
|
||||
&& !(stplyr->cmd.sidemove || stplyr->cmd.forwardmove)
|
||||
&& (stplyr->rmomx || stplyr->rmomy))
|
||||
&& (stplyr->rmomx || stplyr->rmomy)
|
||||
&& (!stplyr->capsule || (stplyr->capsule->reactiontime != (stplyr-players)+1)))
|
||||
? 0 : V_GRAYMAP),
|
||||
"AUTOBRAKE");
|
||||
y -= 8;
|
||||
|
|
|
@ -1624,7 +1624,7 @@ void V_DrawString(INT32 x, INT32 y, INT32 option, const char *string)
|
|||
{
|
||||
INT32 w, c, cx = x, cy = y, dupx, dupy, scrwidth, center = 0, left = 0;
|
||||
const char *ch = string;
|
||||
INT32 charflags = 0;
|
||||
INT32 charflags = (option & V_CHARCOLORMASK);
|
||||
const UINT8 *colormap = NULL;
|
||||
INT32 spacewidth = 4, charwidth = 0;
|
||||
|
||||
|
@ -1644,8 +1644,6 @@ void V_DrawString(INT32 x, INT32 y, INT32 option, const char *string)
|
|||
left = (scrwidth - BASEVIDWIDTH)/2;
|
||||
}
|
||||
|
||||
charflags = (option & V_CHARCOLORMASK);
|
||||
|
||||
switch (option & V_SPACINGMASK)
|
||||
{
|
||||
case V_MONOSPACE:
|
||||
|
@ -2154,8 +2152,10 @@ INT32 V_CreditStringWidth(const char *string)
|
|||
//
|
||||
void V_DrawLevelTitle(INT32 x, INT32 y, INT32 option, const char *string)
|
||||
{
|
||||
INT32 w, c, cx = x, cy = y, dupx, dupy, scrwidth = BASEVIDWIDTH;
|
||||
INT32 w, c, cx = x, cy = y, dupx, dupy, scrwidth, left = 0;
|
||||
const char *ch = string;
|
||||
INT32 charflags = (option & V_CHARCOLORMASK);
|
||||
const UINT8 *colormap = NULL;
|
||||
|
||||
if (option & V_NOSCALESTART)
|
||||
{
|
||||
|
@ -2164,21 +2164,31 @@ void V_DrawLevelTitle(INT32 x, INT32 y, INT32 option, const char *string)
|
|||
scrwidth = vid.width;
|
||||
}
|
||||
else
|
||||
dupx = dupy = 1;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
c = *ch++;
|
||||
if (!c)
|
||||
dupx = dupy = 1;
|
||||
scrwidth = vid.width/vid.dupx;
|
||||
left = (scrwidth - BASEVIDWIDTH)/2;
|
||||
}
|
||||
|
||||
for (;;ch++)
|
||||
{
|
||||
if (!*ch)
|
||||
break;
|
||||
if (c == '\n')
|
||||
if (*ch & 0x80) //color parsing -x 2.16.09
|
||||
{
|
||||
// manually set flags override color codes
|
||||
if (!(option & V_CHARCOLORMASK))
|
||||
charflags = ((*ch & 0x7f) << V_CHARCOLORSHIFT) & V_CHARCOLORMASK;
|
||||
continue;
|
||||
}
|
||||
if (*ch == '\n')
|
||||
{
|
||||
cx = x;
|
||||
cy += 12*dupy;
|
||||
continue;
|
||||
}
|
||||
|
||||
c = toupper(c) - LT_FONTSTART;
|
||||
c = toupper(*ch) - LT_FONTSTART;
|
||||
if (c < 0 || c >= LT_FONTSIZE || !lt_font[c])
|
||||
{
|
||||
cx += 16*dupx;
|
||||
|
@ -2186,17 +2196,19 @@ void V_DrawLevelTitle(INT32 x, INT32 y, INT32 option, const char *string)
|
|||
}
|
||||
|
||||
w = SHORT(lt_font[c]->width) * dupx;
|
||||
if (cx + w > scrwidth)
|
||||
break;
|
||||
|
||||
if (cx+left > scrwidth)
|
||||
break;
|
||||
//left boundary check
|
||||
if (cx < 0)
|
||||
if (cx+left + w < 0)
|
||||
{
|
||||
cx += w;
|
||||
continue;
|
||||
}
|
||||
|
||||
V_DrawScaledPatch(cx, cy, option, lt_font[c]);
|
||||
colormap = V_GetStringColormap(charflags);
|
||||
V_DrawFixedPatch(cx<<FRACBITS, cy<<FRACBITS, FRACUNIT, option, lt_font[c], colormap);
|
||||
|
||||
cx += w;
|
||||
}
|
||||
}
|
||||
|
@ -2210,6 +2222,8 @@ INT32 V_LevelNameWidth(const char *string)
|
|||
|
||||
for (i = 0; i < strlen(string); i++)
|
||||
{
|
||||
if (string[i] & 0x80)
|
||||
continue;
|
||||
c = toupper(string[i]) - LT_FONTSTART;
|
||||
if (c < 0 || c >= LT_FONTSIZE || !lt_font[c])
|
||||
w += 16;
|
||||
|
@ -2265,11 +2279,9 @@ INT32 V_StringWidth(const char *string, INT32 option)
|
|||
|
||||
for (i = 0; i < strlen(string); i++)
|
||||
{
|
||||
c = string[i];
|
||||
if ((UINT8)c >= 0x80 && (UINT8)c <= 0x89) //color parsing! -Inuyasha 2.16.09
|
||||
if (string[i] & 0x80)
|
||||
continue;
|
||||
|
||||
c = toupper(c) - HU_FONTSTART;
|
||||
c = toupper(string[i]) - HU_FONTSTART;
|
||||
if (c < 0 || c >= HU_FONTSIZE || !hu_font[c])
|
||||
w += spacewidth;
|
||||
else
|
||||
|
@ -2307,11 +2319,9 @@ INT32 V_SmallStringWidth(const char *string, INT32 option)
|
|||
|
||||
for (i = 0; i < strlen(string); i++)
|
||||
{
|
||||
c = string[i];
|
||||
if ((UINT8)c >= 0x80 && (UINT8)c <= 0x89) //color parsing! -Inuyasha 2.16.09
|
||||
if (string[i] & 0x80)
|
||||
continue;
|
||||
|
||||
c = toupper(c) - HU_FONTSTART;
|
||||
c = toupper(string[i]) - HU_FONTSTART;
|
||||
if (c < 0 || c >= HU_FONTSIZE || !hu_font[c])
|
||||
w += spacewidth;
|
||||
else
|
||||
|
@ -2346,11 +2356,9 @@ INT32 V_ThinStringWidth(const char *string, INT32 option)
|
|||
|
||||
for (i = 0; i < strlen(string); i++)
|
||||
{
|
||||
c = string[i];
|
||||
if ((UINT8)c >= 0x80 && (UINT8)c <= 0x89) //color parsing! -Inuyasha 2.16.09
|
||||
if (string[i] & 0x80)
|
||||
continue;
|
||||
|
||||
c = toupper(c) - HU_FONTSTART;
|
||||
c = toupper(string[i]) - HU_FONTSTART;
|
||||
if (c < 0 || c >= HU_FONTSIZE || !tny_font[c])
|
||||
w += spacewidth;
|
||||
else
|
||||
|
|
|
@ -77,7 +77,7 @@ typedef union
|
|||
|
||||
struct
|
||||
{
|
||||
char passed1[29]; // KNUCKLES GOT / CRAWLA HONCHO
|
||||
char passed1[29]; // KNUCKLES GOT / CRAWLA HONCHO
|
||||
char passed2[17]; // A CHAOS EMERALD? / GOT THEM ALL!
|
||||
char passed3[15]; // CAN NOW BECOME
|
||||
char passed4[SKINNAMESIZE+7]; // SUPER CRAWLA HONCHO
|
||||
|
@ -315,8 +315,9 @@ void Y_IntermissionDrawer(void)
|
|||
INT32 xoffset1 = 0; // Line 1 x offset
|
||||
INT32 xoffset2 = 0; // Line 2 x offset
|
||||
INT32 xoffset3 = 0; // Line 3 x offset
|
||||
INT32 xoffset4 = 0; // Bonus line x offset
|
||||
INT32 xoffset5 = 0; // Score line x offset
|
||||
INT32 xoffset4 = 0; // Line 4 x offset
|
||||
INT32 xoffset5 = 0; // Line 5 x offset
|
||||
INT32 xoffset6 = 0; // Line 6 x offset
|
||||
UINT8 drawsection = 0;
|
||||
|
||||
if (gottoken) // first to be behind everything else
|
||||
|
@ -331,39 +332,46 @@ void Y_IntermissionDrawer(void)
|
|||
if (animatetic && intertic >= animatetic)
|
||||
{
|
||||
INT32 animatetimer = (intertic - animatetic);
|
||||
if (animatetimer <= 12)
|
||||
if (animatetimer <= 14)
|
||||
{
|
||||
xoffset1 = -(animatetimer * 40);
|
||||
xoffset2 = -((animatetimer-2) * 40);
|
||||
xoffset4 = -((animatetimer-4) * 40);
|
||||
xoffset5 = -((animatetimer-6) * 40);
|
||||
xoffset3 = -((animatetimer-4) * 40);
|
||||
xoffset4 = -((animatetimer-6) * 40);
|
||||
xoffset5 = -((animatetimer-8) * 40);
|
||||
if (xoffset2 > 0) xoffset2 = 0;
|
||||
if (xoffset3 > 0) xoffset3 = 0;
|
||||
if (xoffset4 > 0) xoffset4 = 0;
|
||||
if (xoffset5 > 0) xoffset5 = 0;
|
||||
}
|
||||
else if (animatetimer < 28)
|
||||
else if (animatetimer < 32)
|
||||
{
|
||||
drawsection = 1;
|
||||
xoffset1 = (20-animatetimer) * 40;
|
||||
xoffset2 = (22-animatetimer) * 40;
|
||||
xoffset3 = (24-animatetimer) * 40;
|
||||
xoffset4 = (26-animatetimer) * 40;
|
||||
xoffset5 = (28-animatetimer) * 40;
|
||||
xoffset1 = (22-animatetimer) * 40;
|
||||
xoffset2 = (24-animatetimer) * 40;
|
||||
xoffset3 = (26-animatetimer) * 40;
|
||||
xoffset4 = (28-animatetimer) * 40;
|
||||
xoffset5 = (30-animatetimer) * 40;
|
||||
xoffset6 = (32-animatetimer) * 40;
|
||||
if (xoffset1 < 0) xoffset1 = 0;
|
||||
if (xoffset2 < 0) xoffset2 = 0;
|
||||
if (xoffset3 < 0) xoffset3 = 0;
|
||||
if (xoffset4 < 0) xoffset4 = 0;
|
||||
if (xoffset5 < 0) xoffset5 = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
drawsection = 1;
|
||||
if (animatetimer == 28)
|
||||
if (animatetimer == 32)
|
||||
S_StartSound(NULL, sfx_s3k68);
|
||||
}
|
||||
}
|
||||
|
||||
if (drawsection == 1)
|
||||
{
|
||||
const char *ringtext = "\x86" "50 RINGS, NO SHIELD";
|
||||
const char *tut1text = "\x86" "PRESS " "\x82" "SPIN";
|
||||
const char *tut2text = "\x86" "MID-" "\x82" "JUMP";
|
||||
ttheight = 16;
|
||||
V_DrawLevelTitle(data.spec.passedx1 + xoffset1, ttheight, 0, data.spec.passed1);
|
||||
ttheight += V_LevelNameHeight(data.spec.passed3) + 2;
|
||||
|
@ -371,8 +379,12 @@ void Y_IntermissionDrawer(void)
|
|||
ttheight += V_LevelNameHeight(data.spec.passed4) + 2;
|
||||
V_DrawLevelTitle(data.spec.passedx4 + xoffset3, ttheight, 0, data.spec.passed4);
|
||||
|
||||
V_DrawCenteredString(BASEVIDWIDTH/2 + xoffset4, 108 - 4, 0, "\x86""50 RINGS, NO SHIELD");
|
||||
V_DrawCenteredString(BASEVIDWIDTH/2 + xoffset5, 124 - 4, 0, "\x86""PRESS ""\x82""JUMP""\x86"", THEN ""\x82""SPIN");
|
||||
ttheight = 108;
|
||||
V_DrawLevelTitle(BASEVIDWIDTH/2 + xoffset4 - (V_LevelNameWidth(ringtext)/2), ttheight, 0, ringtext);
|
||||
ttheight += V_LevelNameHeight(ringtext) + 2;
|
||||
V_DrawLevelTitle(BASEVIDWIDTH/2 + xoffset5 - (V_LevelNameWidth(tut1text)/2), ttheight, 0, tut1text);
|
||||
ttheight += V_LevelNameHeight(tut1text) + 2;
|
||||
V_DrawLevelTitle(BASEVIDWIDTH/2 + xoffset6 - (V_LevelNameWidth(tut2text)/2), ttheight, 0, tut2text);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -389,10 +401,24 @@ void Y_IntermissionDrawer(void)
|
|||
V_DrawLevelTitle(data.spec.passedx2 + xoffset1, ttheight, 0, data.spec.passed2);
|
||||
}
|
||||
|
||||
V_DrawScaledPatch(152 + xoffset4, 108, 0, data.spec.bonuspatch);
|
||||
V_DrawTallNum(BASEVIDWIDTH + xoffset4 - 68, 109, 0, data.spec.bonus.points);
|
||||
V_DrawScaledPatch(152 + xoffset5, 124, 0, data.spec.pscore);
|
||||
V_DrawTallNum(BASEVIDWIDTH + xoffset5 - 68, 125, 0, data.spec.score);
|
||||
V_DrawScaledPatch(152 + xoffset3, 108, 0, data.spec.bonuspatch);
|
||||
V_DrawTallNum(BASEVIDWIDTH + xoffset3 - 68, 109, 0, data.spec.bonus.points);
|
||||
V_DrawScaledPatch(152 + xoffset4, 124, 0, data.spec.pscore);
|
||||
V_DrawTallNum(BASEVIDWIDTH + xoffset4 - 68, 125, 0, data.spec.score);
|
||||
|
||||
// Draw continues!
|
||||
if (!multiplayer /* && (data.spec.continues & 0x80) */) // Always draw outside of netplay
|
||||
{
|
||||
UINT8 continues = data.spec.continues & 0x7F;
|
||||
|
||||
V_DrawScaledPatch(152 + xoffset5, 150, 0, data.spec.pcontinues);
|
||||
for (i = 0; i < continues; ++i)
|
||||
{
|
||||
if ((data.spec.continues & 0x80) && i == continues-1 && (endtic < 0 || intertic%20 < 10))
|
||||
break;
|
||||
V_DrawContinueIcon(246 + xoffset5 - (i*12), 162, 0, *data.spec.playerchar, *data.spec.playercolor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// draw the emeralds
|
||||
|
@ -467,20 +493,6 @@ void Y_IntermissionDrawer(void)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Draw continues!
|
||||
if (!multiplayer /* && (data.spec.continues & 0x80) */) // Always draw outside of netplay
|
||||
{
|
||||
UINT8 continues = data.spec.continues & 0x7F;
|
||||
|
||||
V_DrawScaledPatch(152, 150, 0, data.spec.pcontinues);
|
||||
for (i = 0; i < continues; ++i)
|
||||
{
|
||||
if ((data.spec.continues & 0x80) && i == continues-1 && (endtic < 0 || intertic%20 < 10))
|
||||
break;
|
||||
V_DrawContinueIcon(246 - (i*12), 162, 0, *data.spec.playerchar, *data.spec.playercolor);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (intertype == int_match || intertype == int_race)
|
||||
{
|
||||
|
@ -881,7 +893,7 @@ void Y_Ticker(void)
|
|||
{
|
||||
INT32 i;
|
||||
UINT32 oldscore = data.spec.score;
|
||||
boolean skip = false;
|
||||
boolean skip = false, super = false;
|
||||
|
||||
if (!intertic) // first time only
|
||||
{
|
||||
|
@ -893,15 +905,22 @@ void Y_Ticker(void)
|
|||
return;
|
||||
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
if (playeringame[i] && (players[i].cmd.buttons & BT_USE))
|
||||
skip = true;
|
||||
if (playeringame[i])
|
||||
{
|
||||
if (players[i].cmd.buttons & BT_USE)
|
||||
skip = true;
|
||||
if (players[i].charflags & SF_SUPER)
|
||||
super = true;
|
||||
}
|
||||
|
||||
if (((data.spec.continues & 0x80) || ALL7EMERALDS(emeralds)) && tallydonetic != -1)
|
||||
if (tallydonetic != -1 && ((data.spec.continues & 0x80) || (super && ALL7EMERALDS(emeralds))))
|
||||
{
|
||||
if ((intertic - tallydonetic) > (3*TICRATE)/2)
|
||||
{
|
||||
endtic = intertic + 4*TICRATE; // 4 second pause after end of tally
|
||||
S_StartSound(NULL, sfx_s3kac); // bingly-bingly-bing!
|
||||
if (data.spec.continues & 0x80)
|
||||
S_StartSound(NULL, sfx_s3kac); // bingly-bingly-bing!
|
||||
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -918,7 +937,7 @@ void Y_Ticker(void)
|
|||
if (!data.spec.bonus.points)
|
||||
{
|
||||
tallydonetic = intertic;
|
||||
if (!(data.spec.continues & 0x80)) // don't set endtic yet!
|
||||
if (!((data.spec.continues & 0x80) || (super && ALL7EMERALDS(emeralds)))) // don't set endtic yet!
|
||||
endtic = intertic + 4*TICRATE; // 4 second pause after end of tally
|
||||
|
||||
S_StartSound(NULL, (gottoken ? sfx_token : sfx_chchng)); // cha-ching!
|
||||
|
@ -1317,7 +1336,7 @@ void Y_StartIntermission(void)
|
|||
data.spec.passed1[sizeof data.spec.passed1 - 1] = '\0';
|
||||
strcpy(data.spec.passed2, "GOT THEM ALL!");
|
||||
|
||||
if (skins[players[consoleplayer].skin].flags & SF_SUPER)
|
||||
if (players[consoleplayer].charflags & SF_SUPER)
|
||||
{
|
||||
strcpy(data.spec.passed3, "CAN NOW BECOME");
|
||||
snprintf(data.spec.passed4,
|
||||
|
|
Loading…
Reference in a new issue