mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-15 01:01:33 +00:00
* Haunted Heights! Smashing spikeball, Cacolantern, Spinbobert and Hangster, along with the Spider and Bat flickies and general decoration/ambience stuff.
* MF_PAIN and MF_MISSILE now support setting damagetype via their Mass parameter. The two existing conflicts - the fuse setting for the grenade weapon ring and the Cybrakdemon napalm bomb - had these moved to other free parameters. * A_ConnectToGround is EXTREMELY useful for palmtrees and stuff. * Some other, relatively hacky A_ functions. * (Unrelated) Remove the need for a "Mario block mode" for the token by making it natively compatible. * Spikes and their time-offsetting via that Lua script sphere made. Also allow for wallspikes to do it via their angle/360.
This commit is contained in:
parent
1eb84f57c5
commit
5cc1befcad
14 changed files with 1589 additions and 147 deletions
210
src/dehacked.c
210
src/dehacked.c
|
@ -853,25 +853,27 @@ static const struct {
|
|||
const char *name;
|
||||
const mobjtype_t type;
|
||||
} FLICKYTYPES[] = {
|
||||
{"BLUEBIRD", MT_FLICKY_01},
|
||||
{"RABBIT", MT_FLICKY_02},
|
||||
{"CHICKEN", MT_FLICKY_03},
|
||||
{"SEAL", MT_FLICKY_04},
|
||||
{"PIG", MT_FLICKY_05},
|
||||
{"CHIPMUNK", MT_FLICKY_06},
|
||||
{"PENGUIN", MT_FLICKY_07},
|
||||
{"FISH", MT_FLICKY_08},
|
||||
{"RAM", MT_FLICKY_09},
|
||||
{"PUFFIN", MT_FLICKY_10},
|
||||
{"COW", MT_FLICKY_11},
|
||||
{"RAT", MT_FLICKY_12},
|
||||
{"BEAR", MT_FLICKY_13},
|
||||
{"DOVE", MT_FLICKY_14},
|
||||
{"CAT", MT_FLICKY_15},
|
||||
{"CANARY", MT_FLICKY_16},
|
||||
{"BLUEBIRD", MT_FLICKY_01}, // Flicky (Flicky)
|
||||
{"RABBIT", MT_FLICKY_02}, // Pocky (1)
|
||||
{"CHICKEN", MT_FLICKY_03}, // Cucky (1)
|
||||
{"SEAL", MT_FLICKY_04}, // Rocky (1)
|
||||
{"PIG", MT_FLICKY_05}, // Picky (1)
|
||||
{"CHIPMUNK", MT_FLICKY_06}, // Ricky (1)
|
||||
{"PENGUIN", MT_FLICKY_07}, // Pecky (1)
|
||||
{"FISH", MT_FLICKY_08}, // Nicky (CD)
|
||||
{"RAM", MT_FLICKY_09}, // Flocky (CD)
|
||||
{"PUFFIN", MT_FLICKY_10}, // Wicky (CD)
|
||||
{"COW", MT_FLICKY_11}, // Macky (SRB2)
|
||||
{"RAT", MT_FLICKY_12}, // Micky (2)
|
||||
{"BEAR", MT_FLICKY_13}, // Becky (2)
|
||||
{"DOVE", MT_FLICKY_14}, // Docky (CD)
|
||||
{"CAT", MT_FLICKY_15}, // Nyannyan (Flicky)
|
||||
{"CANARY", MT_FLICKY_16}, // Lucky (CD)
|
||||
{"a", 0}, // End of normal flickies - a lower case character so will never fastcmp valid with uppercase tmp
|
||||
//{"FLICKER", MT_FLICKER},
|
||||
{"SEED", MT_SEED},
|
||||
//{"FLICKER", MT_FLICKER}, // Flacky (SRB2)
|
||||
{"SPIDER", MT_SECRETFLICKY_01}, // Sticky (SRB2)
|
||||
{"BAT", MT_SECRETFLICKY_02}, // Backy (SRB2)
|
||||
{"SEED", MT_SEED}, // Seed (CD)
|
||||
{NULL, 0}
|
||||
};
|
||||
|
||||
|
@ -1813,6 +1815,9 @@ static actionpointer_t actionpointers[] =
|
|||
{{A_LightBeamReset}, "A_LIGHTBEAMRESET"},
|
||||
{{A_MineExplode}, "A_MINEEXPLODE"},
|
||||
{{A_MineRange}, "A_MINERANGE"},
|
||||
{{A_ConnectToGround}, "A_CONNECTTOGROUND"},
|
||||
{{A_SpawnParticleRelative},"A_SPAWNPARTICLERELATIVE"},
|
||||
{{A_MultiShotDist}, "A_MULTISHOTDIST"},
|
||||
|
||||
{{NULL}, "NONE"},
|
||||
|
||||
|
@ -4968,6 +4973,51 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
"S_XMASBERRYBUSH",
|
||||
"S_XMASBUSH",
|
||||
|
||||
// Halloween Scenery
|
||||
// Pumpkins
|
||||
"S_JACKO1",
|
||||
"S_JACKO1OVERLAY_1",
|
||||
"S_JACKO1OVERLAY_2",
|
||||
"S_JACKO1OVERLAY_3",
|
||||
"S_JACKO1OVERLAY_4",
|
||||
"S_JACKO2",
|
||||
"S_JACKO2OVERLAY_1",
|
||||
"S_JACKO2OVERLAY_2",
|
||||
"S_JACKO2OVERLAY_3",
|
||||
"S_JACKO2OVERLAY_4",
|
||||
"S_JACKO3",
|
||||
"S_JACKO3OVERLAY_1",
|
||||
"S_JACKO3OVERLAY_2",
|
||||
"S_JACKO3OVERLAY_3",
|
||||
"S_JACKO3OVERLAY_4",
|
||||
// Dr Seuss Trees
|
||||
"S_HHZTREE_TOP",
|
||||
"S_HHZTREE_TRUNK",
|
||||
"S_HHZTREE_LEAF",
|
||||
// Mushroom
|
||||
"S_HHZSHROOM_1",
|
||||
"S_HHZSHROOM_2",
|
||||
"S_HHZSHROOM_3",
|
||||
"S_HHZSHROOM_4",
|
||||
"S_HHZSHROOM_5",
|
||||
"S_HHZSHROOM_6",
|
||||
"S_HHZSHROOM_7",
|
||||
"S_HHZSHROOM_8",
|
||||
"S_HHZSHROOM_9",
|
||||
"S_HHZSHROOM_10",
|
||||
"S_HHZSHROOM_11",
|
||||
"S_HHZSHROOM_12",
|
||||
"S_HHZSHROOM_13",
|
||||
"S_HHZSHROOM_14",
|
||||
"S_HHZSHROOM_15",
|
||||
"S_HHZSHROOM_16",
|
||||
// Misc
|
||||
"S_HHZGRASS",
|
||||
"S_HHZTENT1",
|
||||
"S_HHZTENT2",
|
||||
"S_HHZSTALAGMITE_TALL",
|
||||
"S_HHZSTALAGMITE_SHORT",
|
||||
|
||||
// Botanic Serenity's loads of scenery states
|
||||
"S_BSZTALLFLOWER_RED",
|
||||
"S_BSZTALLFLOWER_PURPLE",
|
||||
|
@ -5407,6 +5457,19 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
"S_FLICKY_16_FLAP2",
|
||||
"S_FLICKY_16_FLAP3",
|
||||
|
||||
// Spider
|
||||
"S_SECRETFLICKY_01_OUT",
|
||||
"S_SECRETFLICKY_01_AIM",
|
||||
"S_SECRETFLICKY_01_HOP",
|
||||
"S_SECRETFLICKY_01_UP",
|
||||
"S_SECRETFLICKY_01_DOWN",
|
||||
|
||||
// Bat
|
||||
"S_SECRETFLICKY_02_OUT",
|
||||
"S_SECRETFLICKY_02_FLAP1",
|
||||
"S_SECRETFLICKY_02_FLAP2",
|
||||
"S_SECRETFLICKY_02_FLAP3",
|
||||
|
||||
"S_YELLOWSPRING",
|
||||
"S_YELLOWSPRING2",
|
||||
"S_YELLOWSPRING3",
|
||||
|
@ -5903,6 +5966,85 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
"S_NIGHTOPIANHELPER8",
|
||||
"S_NIGHTOPIANHELPER9",
|
||||
|
||||
// Secret badniks and hazards, shhhh
|
||||
"S_SMASHSPIKE_FLOAT",
|
||||
"S_SMASHSPIKE_EASE1",
|
||||
"S_SMASHSPIKE_EASE2",
|
||||
"S_SMASHSPIKE_FALL",
|
||||
"S_SMASHSPIKE_STOMP1",
|
||||
"S_SMASHSPIKE_STOMP2",
|
||||
"S_SMASHSPIKE_RISE1",
|
||||
"S_SMASHSPIKE_RISE2",
|
||||
|
||||
"S_HHZDUST1",
|
||||
"S_HHZDUST2",
|
||||
"S_HHZDUST3",
|
||||
"S_HHZDUST4",
|
||||
|
||||
"S_CACO_LOOK",
|
||||
"S_CACO_WAKE1",
|
||||
"S_CACO_WAKE2",
|
||||
"S_CACO_WAKE3",
|
||||
"S_CACO_WAKE4",
|
||||
"S_CACO_ROAR",
|
||||
"S_CACO_CHASE",
|
||||
"S_CACO_CHASE_REPEAT",
|
||||
"S_CACO_RANDOM",
|
||||
"S_CACO_PREPARE_SOUND",
|
||||
"S_CACO_PREPARE1",
|
||||
"S_CACO_PREPARE2",
|
||||
"S_CACO_PREPARE3",
|
||||
"S_CACO_SHOOT_SOUND",
|
||||
"S_CACO_SHOOT1",
|
||||
"S_CACO_SHOOT2",
|
||||
"S_CACO_CLOSE",
|
||||
"S_CACO_DIE_FLAGS",
|
||||
"S_CACO_DIE_GIB1",
|
||||
"S_CACO_DIE_GIB2",
|
||||
"S_CACO_DIE_SCREAM",
|
||||
"S_CACO_DIE_SHATTER",
|
||||
"S_CACO_DIE_FALL",
|
||||
"S_CACOSHARD_RANDOMIZE",
|
||||
"S_CACOSHARD1_1",
|
||||
"S_CACOSHARD1_2",
|
||||
"S_CACOSHARD2_1",
|
||||
"S_CACOSHARD2_2",
|
||||
"S_CACOFIRE1",
|
||||
"S_CACOFIRE2",
|
||||
"S_CACOFIRE3",
|
||||
"S_CACOFIRE_EXPLODE1",
|
||||
"S_CACOFIRE_EXPLODE2",
|
||||
"S_CACOFIRE_EXPLODE3",
|
||||
"S_CACOFIRE_EXPLODE4",
|
||||
|
||||
"S_SPINBOBERT_MOVE_FLIPUP",
|
||||
"S_SPINBOBERT_MOVE_UP",
|
||||
"S_SPINBOBERT_MOVE_FLIPDOWN",
|
||||
"S_SPINBOBERT_MOVE_DOWN",
|
||||
"S_SPINBOBERT_FIRE_MOVE",
|
||||
"S_SPINBOBERT_FIRE_GHOST",
|
||||
"S_SPINBOBERT_FIRE_TRAIL1",
|
||||
"S_SPINBOBERT_FIRE_TRAIL2",
|
||||
"S_SPINBOBERT_FIRE_TRAIL3",
|
||||
|
||||
"S_HANGSTER_LOOK",
|
||||
"S_HANGSTER_SWOOP1",
|
||||
"S_HANGSTER_SWOOP2",
|
||||
"S_HANGSTER_ARC1",
|
||||
"S_HANGSTER_ARC2",
|
||||
"S_HANGSTER_ARC3",
|
||||
"S_HANGSTER_FLY1",
|
||||
"S_HANGSTER_FLY2",
|
||||
"S_HANGSTER_FLY3",
|
||||
"S_HANGSTER_FLY4",
|
||||
"S_HANGSTER_FLYREPEAT",
|
||||
"S_HANGSTER_ARCUP1",
|
||||
"S_HANGSTER_ARCUP2",
|
||||
"S_HANGSTER_ARCUP3",
|
||||
"S_HANGSTER_RETURN1",
|
||||
"S_HANGSTER_RETURN2",
|
||||
"S_HANGSTER_RETURN3",
|
||||
|
||||
"S_CRUMBLE1",
|
||||
"S_CRUMBLE2",
|
||||
|
||||
|
@ -6309,6 +6451,22 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
"MT_XMASBERRYBUSH",
|
||||
"MT_XMASBUSH",
|
||||
|
||||
// Halloween Scenery
|
||||
// Pumpkins
|
||||
"MT_JACKO1",
|
||||
"MT_JACKO2",
|
||||
"MT_JACKO3",
|
||||
// Dr Seuss Trees
|
||||
"MT_HHZTREE_TOP",
|
||||
"MT_HHZTREE_PART",
|
||||
// Misc
|
||||
"MT_HHZSHROOM",
|
||||
"MT_HHZGRASS",
|
||||
"MT_HHZTENTACLE1",
|
||||
"MT_HHZTENTACLE2",
|
||||
"MT_HHZSTALAGMITE_TALL",
|
||||
"MT_HHZSTALAGMITE_SHORT",
|
||||
|
||||
// Botanic Serenity
|
||||
"MT_BSZTALLFLOWER_RED",
|
||||
"MT_BSZTALLFLOWER_PURPLE",
|
||||
|
@ -6394,6 +6552,9 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
"MT_FLICKY_14", // Dove
|
||||
"MT_FLICKY_15", // Cat
|
||||
"MT_FLICKY_16", // Canary
|
||||
"MT_SECRETFLICKY_01", // Spider
|
||||
"MT_SECRETFLICKY_02", // Bat
|
||||
"MT_SEED",
|
||||
|
||||
// Environmental Effects
|
||||
"MT_RAIN", // Rain
|
||||
|
@ -6406,7 +6567,6 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
"MT_WATERZAP",
|
||||
"MT_SPINDUST", // Spindash dust
|
||||
"MT_TFOG",
|
||||
"MT_SEED",
|
||||
"MT_PARTICLE",
|
||||
"MT_PARTICLEGEN", // For fans, etc.
|
||||
|
||||
|
@ -6429,6 +6589,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
"MT_AWATERH", // Ambient Water Sound 8
|
||||
"MT_RANDOMAMBIENT",
|
||||
"MT_RANDOMAMBIENT2",
|
||||
"MT_MACHINEAMBIENCE",
|
||||
|
||||
"MT_CORK",
|
||||
|
||||
|
@ -6496,6 +6657,17 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
"MT_EGGCAPSULE",
|
||||
"MT_NIGHTOPIANHELPER", // the actual helper object that orbits you
|
||||
|
||||
// Secret badniks and hazards, shhhh
|
||||
"MT_SMASHINGSPIKEBALL",
|
||||
"MT_HHZDUST",
|
||||
"MT_CACOLANTERN",
|
||||
"MT_CACOSHARD",
|
||||
"MT_CACOFIRE",
|
||||
"MT_SPINBOBERT",
|
||||
"MT_SPINBOBERT_FIRE1",
|
||||
"MT_SPINBOBERT_FIRE2",
|
||||
"MT_HANGSTER",
|
||||
|
||||
// Utility Objects
|
||||
"MT_TELEPORTMAN",
|
||||
"MT_ALTVIEWMAN",
|
||||
|
|
|
@ -46,6 +46,9 @@ enum
|
|||
ML_BLOCKMAP, // LUT, motion clipping, walls/grid element
|
||||
};
|
||||
|
||||
// Extra flag for objects.
|
||||
#define MTF_EXTRA 1
|
||||
|
||||
// Reverse gravity flag for objects.
|
||||
#define MTF_OBJECTFLIP 2
|
||||
|
||||
|
|
|
@ -349,6 +349,12 @@ light_t *t_lspr[NUMSPRITES] =
|
|||
&lspr[NOLIGHT], // SPR_XMS4
|
||||
&lspr[NOLIGHT], // SPR_XMS5
|
||||
|
||||
// Halloween Scenery
|
||||
&lspr[RINGLIGHT_L], // SPR_PUMK
|
||||
&lspr[NOLIGHT], // SPR_HHPL
|
||||
&lspr[NOLIGHT], // SPR_SHRM
|
||||
&lspr[NOLIGHT], // SPR_HHZM
|
||||
|
||||
// Botanic Serenity Scenery
|
||||
&lspr[NOLIGHT], // SPR_BSZ1
|
||||
&lspr[NOLIGHT], // SPR_BSZ2
|
||||
|
@ -399,6 +405,8 @@ light_t *t_lspr[NUMSPRITES] =
|
|||
&lspr[NOLIGHT], // SPR_FL14
|
||||
&lspr[NOLIGHT], // SPR_FL15
|
||||
&lspr[NOLIGHT], // SPR_FL16
|
||||
&lspr[NOLIGHT], // SPR_FS01
|
||||
&lspr[NOLIGHT], // SPR_FS02
|
||||
|
||||
// Springs
|
||||
&lspr[NOLIGHT], // SPR_SPRY
|
||||
|
@ -480,6 +488,16 @@ light_t *t_lspr[NUMSPRITES] =
|
|||
&lspr[NOLIGHT], // SPR_NPRU
|
||||
&lspr[NOLIGHT], // SPR_CAPS
|
||||
|
||||
// Secret badniks and hazards, shhhh
|
||||
&lspr[NOLIGHT], // SPR_FMCE",
|
||||
&lspr[NOLIGHT], // SPR_HMCE",
|
||||
&lspr[NOLIGHT], // SPR_CACO",
|
||||
&lspr[BLUEBALL_L], // SPR_BAL2",
|
||||
&lspr[NOLIGHT], // SPR_SBOB",
|
||||
&lspr[BLUEBALL_L], // SPR_SBFL",
|
||||
&lspr[BLUEBALL_L], // SPR_SBSK",
|
||||
&lspr[NOLIGHT], // SPR_BATT",
|
||||
|
||||
// Debris
|
||||
&lspr[RINGSPARK_L], // SPR_SPRK
|
||||
&lspr[NOLIGHT], // SPR_BOM1
|
||||
|
|
982
src/info.c
982
src/info.c
File diff suppressed because it is too large
Load diff
193
src/info.h
193
src/info.h
|
@ -221,6 +221,9 @@ void A_Boss5Jump();
|
|||
void A_LightBeamReset();
|
||||
void A_MineExplode();
|
||||
void A_MineRange();
|
||||
void A_ConnectToGround();
|
||||
void A_SpawnParticleRelative();
|
||||
void A_MultiShotDist();
|
||||
|
||||
// ratio of states to sprites to mobj types is roughly 6 : 1 : 1
|
||||
#define NUMMOBJFREESLOTS 256
|
||||
|
@ -444,6 +447,12 @@ typedef enum sprite
|
|||
SPR_XMS4, // Lamppost
|
||||
SPR_XMS5, // Hanging Star
|
||||
|
||||
// Halloween Scenery
|
||||
SPR_PUMK, // Pumpkins
|
||||
SPR_HHPL, // Dr Seuss Trees
|
||||
SPR_SHRM, // Mushroom
|
||||
SPR_HHZM, // Misc
|
||||
|
||||
// Botanic Serenity Scenery
|
||||
SPR_BSZ1, // Tall flowers
|
||||
SPR_BSZ2, // Medium flowers
|
||||
|
@ -494,6 +503,8 @@ typedef enum sprite
|
|||
SPR_FL14, // Dove
|
||||
SPR_FL15, // Cat
|
||||
SPR_FL16, // Canary
|
||||
SPR_FS01, // Spider
|
||||
SPR_FS02, // Bat
|
||||
|
||||
// Springs
|
||||
SPR_SPRY, // yellow spring
|
||||
|
@ -575,6 +586,16 @@ typedef enum sprite
|
|||
SPR_NPRU, // Nights Powerups
|
||||
SPR_CAPS, // Capsule thingy for NiGHTS
|
||||
|
||||
// Secret badniks and hazards, shhhh
|
||||
SPR_FMCE,
|
||||
SPR_HMCE,
|
||||
SPR_CACO,
|
||||
SPR_BAL2,
|
||||
SPR_SBOB,
|
||||
SPR_SBFL,
|
||||
SPR_SBSK,
|
||||
SPR_HBAT,
|
||||
|
||||
// Debris
|
||||
SPR_SPRK, // spark
|
||||
SPR_BOM1, // Robot Explosion
|
||||
|
@ -2289,6 +2310,51 @@ typedef enum state
|
|||
S_XMASBERRYBUSH,
|
||||
S_XMASBUSH,
|
||||
|
||||
// Halloween Scenery
|
||||
// Pumpkins
|
||||
S_JACKO1,
|
||||
S_JACKO1OVERLAY_1,
|
||||
S_JACKO1OVERLAY_2,
|
||||
S_JACKO1OVERLAY_3,
|
||||
S_JACKO1OVERLAY_4,
|
||||
S_JACKO2,
|
||||
S_JACKO2OVERLAY_1,
|
||||
S_JACKO2OVERLAY_2,
|
||||
S_JACKO2OVERLAY_3,
|
||||
S_JACKO2OVERLAY_4,
|
||||
S_JACKO3,
|
||||
S_JACKO3OVERLAY_1,
|
||||
S_JACKO3OVERLAY_2,
|
||||
S_JACKO3OVERLAY_3,
|
||||
S_JACKO3OVERLAY_4,
|
||||
// Dr Seuss Trees
|
||||
S_HHZTREE_TOP,
|
||||
S_HHZTREE_TRUNK,
|
||||
S_HHZTREE_LEAF,
|
||||
// Mushroom
|
||||
S_HHZSHROOM_1,
|
||||
S_HHZSHROOM_2,
|
||||
S_HHZSHROOM_3,
|
||||
S_HHZSHROOM_4,
|
||||
S_HHZSHROOM_5,
|
||||
S_HHZSHROOM_6,
|
||||
S_HHZSHROOM_7,
|
||||
S_HHZSHROOM_8,
|
||||
S_HHZSHROOM_9,
|
||||
S_HHZSHROOM_10,
|
||||
S_HHZSHROOM_11,
|
||||
S_HHZSHROOM_12,
|
||||
S_HHZSHROOM_13,
|
||||
S_HHZSHROOM_14,
|
||||
S_HHZSHROOM_15,
|
||||
S_HHZSHROOM_16,
|
||||
// Misc
|
||||
S_HHZGRASS,
|
||||
S_HHZTENT1,
|
||||
S_HHZTENT2,
|
||||
S_HHZSTALAGMITE_TALL,
|
||||
S_HHZSTALAGMITE_SHORT,
|
||||
|
||||
// Botanic Serenity's loads of scenery states
|
||||
S_BSZTALLFLOWER_RED,
|
||||
S_BSZTALLFLOWER_PURPLE,
|
||||
|
@ -2728,6 +2794,19 @@ typedef enum state
|
|||
S_FLICKY_16_FLAP2,
|
||||
S_FLICKY_16_FLAP3,
|
||||
|
||||
// Spider
|
||||
S_SECRETFLICKY_01_OUT,
|
||||
S_SECRETFLICKY_01_AIM,
|
||||
S_SECRETFLICKY_01_HOP,
|
||||
S_SECRETFLICKY_01_UP,
|
||||
S_SECRETFLICKY_01_DOWN,
|
||||
|
||||
// Bat
|
||||
S_SECRETFLICKY_02_OUT,
|
||||
S_SECRETFLICKY_02_FLAP1,
|
||||
S_SECRETFLICKY_02_FLAP2,
|
||||
S_SECRETFLICKY_02_FLAP3,
|
||||
|
||||
S_YELLOWSPRING,
|
||||
S_YELLOWSPRING2,
|
||||
S_YELLOWSPRING3,
|
||||
|
@ -3224,6 +3303,85 @@ typedef enum state
|
|||
S_NIGHTOPIANHELPER8,
|
||||
S_NIGHTOPIANHELPER9,
|
||||
|
||||
// Secret badniks and hazards, shhhh
|
||||
S_SMASHSPIKE_FLOAT,
|
||||
S_SMASHSPIKE_EASE1,
|
||||
S_SMASHSPIKE_EASE2,
|
||||
S_SMASHSPIKE_FALL,
|
||||
S_SMASHSPIKE_STOMP1,
|
||||
S_SMASHSPIKE_STOMP2,
|
||||
S_SMASHSPIKE_RISE1,
|
||||
S_SMASHSPIKE_RISE2,
|
||||
|
||||
S_HHZDUST1,
|
||||
S_HHZDUST2,
|
||||
S_HHZDUST3,
|
||||
S_HHZDUST4,
|
||||
|
||||
S_CACO_LOOK,
|
||||
S_CACO_WAKE1,
|
||||
S_CACO_WAKE2,
|
||||
S_CACO_WAKE3,
|
||||
S_CACO_WAKE4,
|
||||
S_CACO_ROAR,
|
||||
S_CACO_CHASE,
|
||||
S_CACO_CHASE_REPEAT,
|
||||
S_CACO_RANDOM,
|
||||
S_CACO_PREPARE_SOUND,
|
||||
S_CACO_PREPARE1,
|
||||
S_CACO_PREPARE2,
|
||||
S_CACO_PREPARE3,
|
||||
S_CACO_SHOOT_SOUND,
|
||||
S_CACO_SHOOT1,
|
||||
S_CACO_SHOOT2,
|
||||
S_CACO_CLOSE,
|
||||
S_CACO_DIE_FLAGS,
|
||||
S_CACO_DIE_GIB1,
|
||||
S_CACO_DIE_GIB2,
|
||||
S_CACO_DIE_SCREAM,
|
||||
S_CACO_DIE_SHATTER,
|
||||
S_CACO_DIE_FALL,
|
||||
S_CACOSHARD_RANDOMIZE,
|
||||
S_CACOSHARD1_1,
|
||||
S_CACOSHARD1_2,
|
||||
S_CACOSHARD2_1,
|
||||
S_CACOSHARD2_2,
|
||||
S_CACOFIRE1,
|
||||
S_CACOFIRE2,
|
||||
S_CACOFIRE3,
|
||||
S_CACOFIRE_EXPLODE1,
|
||||
S_CACOFIRE_EXPLODE2,
|
||||
S_CACOFIRE_EXPLODE3,
|
||||
S_CACOFIRE_EXPLODE4,
|
||||
|
||||
S_SPINBOBERT_MOVE_FLIPUP,
|
||||
S_SPINBOBERT_MOVE_UP,
|
||||
S_SPINBOBERT_MOVE_FLIPDOWN,
|
||||
S_SPINBOBERT_MOVE_DOWN,
|
||||
S_SPINBOBERT_FIRE_MOVE,
|
||||
S_SPINBOBERT_FIRE_GHOST,
|
||||
S_SPINBOBERT_FIRE_TRAIL1,
|
||||
S_SPINBOBERT_FIRE_TRAIL2,
|
||||
S_SPINBOBERT_FIRE_TRAIL3,
|
||||
|
||||
S_HANGSTER_LOOK,
|
||||
S_HANGSTER_SWOOP1,
|
||||
S_HANGSTER_SWOOP2,
|
||||
S_HANGSTER_ARC1,
|
||||
S_HANGSTER_ARC2,
|
||||
S_HANGSTER_ARC3,
|
||||
S_HANGSTER_FLY1,
|
||||
S_HANGSTER_FLY2,
|
||||
S_HANGSTER_FLY3,
|
||||
S_HANGSTER_FLY4,
|
||||
S_HANGSTER_FLYREPEAT,
|
||||
S_HANGSTER_ARCUP1,
|
||||
S_HANGSTER_ARCUP2,
|
||||
S_HANGSTER_ARCUP3,
|
||||
S_HANGSTER_RETURN1,
|
||||
S_HANGSTER_RETURN2,
|
||||
S_HANGSTER_RETURN3,
|
||||
|
||||
S_CRUMBLE1,
|
||||
S_CRUMBLE2,
|
||||
|
||||
|
@ -3650,6 +3808,22 @@ typedef enum mobj_type
|
|||
MT_XMASBERRYBUSH,
|
||||
MT_XMASBUSH,
|
||||
|
||||
// Halloween Scenery
|
||||
// Pumpkins
|
||||
MT_JACKO1,
|
||||
MT_JACKO2,
|
||||
MT_JACKO3,
|
||||
// Dr Seuss Trees
|
||||
MT_HHZTREE_TOP,
|
||||
MT_HHZTREE_PART,
|
||||
// Misc
|
||||
MT_HHZSHROOM,
|
||||
MT_HHZGRASS,
|
||||
MT_HHZTENTACLE1,
|
||||
MT_HHZTENTACLE2,
|
||||
MT_HHZSTALAGMITE_TALL,
|
||||
MT_HHZSTALAGMITE_SHORT,
|
||||
|
||||
// Botanic Serenity scenery
|
||||
MT_BSZTALLFLOWER_RED,
|
||||
MT_BSZTALLFLOWER_PURPLE,
|
||||
|
@ -3735,6 +3909,9 @@ typedef enum mobj_type
|
|||
MT_FLICKY_14, // Dove
|
||||
MT_FLICKY_15, // Cat
|
||||
MT_FLICKY_16, // Canary
|
||||
MT_SECRETFLICKY_01, // Spider
|
||||
MT_SECRETFLICKY_02, // Bat
|
||||
MT_SEED,
|
||||
|
||||
// Environmental Effects
|
||||
MT_RAIN, // Rain
|
||||
|
@ -3747,7 +3924,6 @@ typedef enum mobj_type
|
|||
MT_WATERZAP,
|
||||
MT_SPINDUST, // Spindash dust
|
||||
MT_TFOG,
|
||||
MT_SEED,
|
||||
MT_PARTICLE,
|
||||
MT_PARTICLEGEN, // For fans, etc.
|
||||
|
||||
|
@ -3770,6 +3946,7 @@ typedef enum mobj_type
|
|||
MT_AWATERH, // Ambient Water Sound 8
|
||||
MT_RANDOMAMBIENT,
|
||||
MT_RANDOMAMBIENT2,
|
||||
MT_MACHINEAMBIENCE,
|
||||
|
||||
MT_CORK,
|
||||
|
||||
|
@ -3837,6 +4014,20 @@ typedef enum mobj_type
|
|||
MT_EGGCAPSULE,
|
||||
MT_NIGHTOPIANHELPER, // the actual helper object that orbits you
|
||||
|
||||
// Secret badniks and hazards, shhhh
|
||||
MT_SMASHINGSPIKEBALL,
|
||||
MT_HHZDUST,
|
||||
|
||||
MT_CACOLANTERN,
|
||||
MT_CACOSHARD,
|
||||
MT_CACOFIRE,
|
||||
|
||||
MT_SPINBOBERT,
|
||||
MT_SPINBOBERT_FIRE1,
|
||||
MT_SPINBOBERT_FIRE2,
|
||||
|
||||
MT_HANGSTER,
|
||||
|
||||
// Utility Objects
|
||||
MT_TELEPORTMAN,
|
||||
MT_ALTVIEWMAN,
|
||||
|
|
149
src/p_enemy.c
149
src/p_enemy.c
|
@ -249,6 +249,9 @@ void A_Boss5Jump(mobj_t *actor);
|
|||
void A_LightBeamReset(mobj_t *actor);
|
||||
void A_MineExplode(mobj_t *actor);
|
||||
void A_MineRange(mobj_t *actor);
|
||||
void A_ConnectToGround(mobj_t *actor);
|
||||
void A_SpawnParticleRelative(mobj_t *actor);
|
||||
void A_MultiShotDist(mobj_t *actor);
|
||||
|
||||
//
|
||||
// ENEMY THINKING
|
||||
|
@ -3420,7 +3423,7 @@ void A_BubbleSpawn(mobj_t *actor)
|
|||
if (!(actor->flags2 & MF2_AMBUSH))
|
||||
{
|
||||
// Quick! Look through players!
|
||||
// Don't spawn bubbles unless a player is relatively close by (var2).
|
||||
// Don't spawn bubbles unless a player is relatively close by (var1).
|
||||
for (i = 0; i < MAXPLAYERS; ++i)
|
||||
if (playeringame[i] && players[i].mo
|
||||
&& P_AproxDistance(actor->x - players[i].mo->x, actor->y - players[i].mo->y) < (locvar1<<FRACBITS))
|
||||
|
@ -7061,6 +7064,7 @@ void A_SpawnObjectRelative(mobj_t *actor)
|
|||
|
||||
if (actor->eflags & MFE_VERTICALFLIP)
|
||||
mo->flags2 |= MF2_OBJECTFLIP;
|
||||
|
||||
}
|
||||
|
||||
// Function: A_ChangeAngleRelative
|
||||
|
@ -10736,3 +10740,146 @@ void A_MineRange(mobj_t *actor)
|
|||
if ((dm>>FRACBITS) < locvar1)
|
||||
P_SetMobjState(actor, actor->info->meleestate);
|
||||
}
|
||||
|
||||
// Function: A_ConnectToGround
|
||||
// Description: Create a palm tree trunk/mine chain.
|
||||
//
|
||||
// var1 = Object type to connect to ground
|
||||
// var2 = Object type to place on ground
|
||||
//
|
||||
void A_ConnectToGround(mobj_t *actor)
|
||||
{
|
||||
mobj_t *work;
|
||||
fixed_t workz;
|
||||
fixed_t workh;
|
||||
INT8 dir;
|
||||
angle_t ang;
|
||||
INT32 locvar1 = var1;
|
||||
INT32 locvar2 = var2;
|
||||
|
||||
#ifdef HAVE_BLUA
|
||||
if (LUA_CallAction("A_ConnectToGround", actor))
|
||||
return;
|
||||
#endif
|
||||
|
||||
P_AdjustMobjFloorZ_FFloors(actor, actor->subsector->sector, 2);
|
||||
|
||||
if (actor->flags2 & MF2_OBJECTFLIP)
|
||||
{
|
||||
workz = actor->ceilingz - (actor->z + actor->height);
|
||||
dir = -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
workz = actor->floorz - actor->z;
|
||||
dir = 1;
|
||||
}
|
||||
|
||||
if (locvar2)
|
||||
{
|
||||
if (actor->flags2 & MF2_OBJECTFLIP)
|
||||
workz -= FixedMul(mobjinfo[locvar2].height, actor->scale);
|
||||
work = P_SpawnMobjFromMobj(actor, 0, 0, workz, locvar2);
|
||||
}
|
||||
|
||||
if (!locvar1)
|
||||
return;
|
||||
|
||||
workh = FixedMul(mobjinfo[locvar1].height, actor->scale);
|
||||
|
||||
if (actor->flags2 & MF2_OBJECTFLIP)
|
||||
workz -= workh;
|
||||
|
||||
ang = actor->angle + ANGLE_45;
|
||||
while (dir*workz < 0)
|
||||
{
|
||||
work = P_SpawnMobjFromMobj(actor, 0, 0, workz, locvar1);
|
||||
if (work)
|
||||
work->angle = ang;
|
||||
ang += ANGLE_90;
|
||||
workz += dir*workh;
|
||||
}
|
||||
|
||||
if (workz != 0)
|
||||
actor->z += workz;
|
||||
}
|
||||
|
||||
// Function: A_SpawnParticleRelative
|
||||
//
|
||||
// Description: Spawns a particle effect relative to the location of the actor
|
||||
//
|
||||
// var1:
|
||||
// var1 >> 16 = x
|
||||
// var1 & 65535 = y
|
||||
// var2:
|
||||
// var2 >> 16 = z
|
||||
// var2 & 65535 = state
|
||||
//
|
||||
void A_SpawnParticleRelative(mobj_t *actor)
|
||||
{
|
||||
INT16 x, y, z; // Want to be sure we can use negative values
|
||||
statenum_t state;
|
||||
mobj_t *mo;
|
||||
INT32 locvar1 = var1;
|
||||
INT32 locvar2 = var2;
|
||||
#ifdef HAVE_BLUA
|
||||
if (LUA_CallAction("A_SpawnParticleRelative", actor))
|
||||
return;
|
||||
#endif
|
||||
|
||||
CONS_Debug(DBG_GAMELOGIC, "A_SpawnParticleRelative called from object type %d, var1: %d, var2: %d\n", actor->type, locvar1, locvar2);
|
||||
|
||||
x = (INT16)(locvar1>>16);
|
||||
y = (INT16)(locvar1&65535);
|
||||
z = (INT16)(locvar2>>16);
|
||||
state = (mobjtype_t)(locvar2&65535);
|
||||
|
||||
// Spawn objects correctly in reverse gravity.
|
||||
// NOTE: Doing actor->z + actor->height is the bottom of the object while the object has reverse gravity. - Flame
|
||||
mo = P_SpawnMobj(actor->x + FixedMul(x<<FRACBITS, actor->scale),
|
||||
actor->y + FixedMul(y<<FRACBITS, actor->scale),
|
||||
(actor->eflags & MFE_VERTICALFLIP) ? ((actor->z + actor->height - mobjinfo[MT_PARTICLE].height) - FixedMul(z<<FRACBITS, actor->scale)) : (actor->z + FixedMul(z<<FRACBITS, actor->scale)), MT_PARTICLE);
|
||||
|
||||
// Spawn objects with an angle matching the spawner's, rather than spawning Eastwards - Monster Iestyn
|
||||
mo->angle = actor->angle;
|
||||
|
||||
if (actor->eflags & MFE_VERTICALFLIP)
|
||||
mo->flags2 |= MF2_OBJECTFLIP;
|
||||
|
||||
P_SetMobjState(mo, state);
|
||||
}
|
||||
|
||||
// Function: A_MultiShotDist
|
||||
//
|
||||
// Description: Spawns multiple shots based on player proximity
|
||||
//
|
||||
// var1:
|
||||
// same as A_MultiShot
|
||||
// var2:
|
||||
// same as A_MultiShot
|
||||
//
|
||||
void A_MultiShotDist(mobj_t *actor)
|
||||
{
|
||||
INT32 locvar1 = var1;
|
||||
INT32 locvar2 = var2;
|
||||
#ifdef HAVE_BLUA
|
||||
if (LUA_CallAction("A_MultiShotDist", actor))
|
||||
return;
|
||||
#endif
|
||||
|
||||
{
|
||||
UINT8 i;
|
||||
// Quick! Look through players!
|
||||
// Don't spawn dust unless a player is relatively close by (var1).
|
||||
for (i = 0; i < MAXPLAYERS; ++i)
|
||||
if (playeringame[i] && players[i].mo
|
||||
&& P_AproxDistance(actor->x - players[i].mo->x, actor->y - players[i].mo->y) < (1600<<FRACBITS))
|
||||
break; // Stop looking.
|
||||
if (i == MAXPLAYERS)
|
||||
return; // don't make bubble!
|
||||
}
|
||||
|
||||
var1 = locvar1;
|
||||
var2 = locvar2;
|
||||
A_MultiShot(actor);
|
||||
}
|
||||
|
|
|
@ -3304,7 +3304,7 @@ INT32 EV_MarioBlock(ffloor_t *rover, sector_t *sector, mobj_t *puncher)
|
|||
P_SetThingPosition(thing);
|
||||
if (thing->flags & MF_SHOOTABLE)
|
||||
P_DamageMobj(thing, puncher, puncher, 1, 0);
|
||||
else if (thing->type == MT_RING || thing->type == MT_COIN)
|
||||
else if (thing->type == MT_RING || thing->type == MT_COIN || thing->type == MT_TOKEN)
|
||||
{
|
||||
thing->momz = FixedMul(3*FRACUNIT, thing->scale);
|
||||
P_TouchSpecialThing(thing, puncher, false);
|
||||
|
|
|
@ -2427,6 +2427,13 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
|||
P_LinedefExecute(target->spawnpoint->angle, (source ? source : inflictor), target->subsector->sector);
|
||||
break;
|
||||
|
||||
case MT_SPINBOBERT:
|
||||
if (target->hnext)
|
||||
P_KillMobj(target->hnext, inflictor, source, damagetype);
|
||||
if (target->hprev)
|
||||
P_KillMobj(target->hprev, inflictor, source, damagetype);
|
||||
break;
|
||||
|
||||
case MT_EGGTRAP:
|
||||
// Time for birdies! Yaaaaaaaay!
|
||||
target->fuse = TICRATE*2;
|
||||
|
|
|
@ -256,6 +256,7 @@ fixed_t P_CameraCeilingZ(camera_t *mobj, sector_t *sector, sector_t *boundsec, f
|
|||
boolean P_InsideANonSolidFFloor(mobj_t *mobj, ffloor_t *rover);
|
||||
boolean P_CheckDeathPitCollide(mobj_t *mo);
|
||||
boolean P_CheckSolidLava(mobj_t *mo, ffloor_t *rover);
|
||||
void P_AdjustMobjFloorZ_FFloors(mobj_t *mo, sector_t *sector, UINT8 motype);
|
||||
|
||||
mobj_t *P_SpawnMobjFromMobj(mobj_t *mobj, fixed_t xofs, fixed_t yofs, fixed_t zofs, mobjtype_t type);
|
||||
|
||||
|
|
21
src/p_map.c
21
src/p_map.c
|
@ -673,10 +673,11 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
|||
return true; // underneath
|
||||
if (tmthing->player && tmthing->flags & MF_SHOOTABLE && thing->health > 0)
|
||||
{
|
||||
UINT8 damagetype = 0;
|
||||
if (thing->flags & MF_FIRE) // BURN!
|
||||
UINT8 damagetype = thing->info->mass;
|
||||
if (!damagetype && thing->flags & MF_FIRE) // BURN!
|
||||
damagetype = DMG_FIRE;
|
||||
P_DamageMobj(tmthing, thing, thing, 1, damagetype);
|
||||
if (P_DamageMobj(tmthing, thing, thing, 1, damagetype) && thing->info->attacksound)
|
||||
S_StartSound(thing, thing->info->attacksound);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -689,10 +690,11 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
|||
return true; // underneath
|
||||
if (thing->player && thing->flags & MF_SHOOTABLE && tmthing->health > 0)
|
||||
{
|
||||
UINT8 damagetype = 0;
|
||||
if (tmthing->flags & MF_FIRE) // BURN!
|
||||
UINT8 damagetype = tmthing->info->mass;
|
||||
if (!damagetype && tmthing->flags & MF_FIRE) // BURN!
|
||||
damagetype = DMG_FIRE;
|
||||
P_DamageMobj(thing, tmthing, tmthing, 1, damagetype);
|
||||
if (P_DamageMobj(thing, tmthing, tmthing, 1, damagetype) && tmthing->info->attacksound)
|
||||
S_StartSound(tmthing, tmthing->info->attacksound);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -860,7 +862,12 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
|||
P_SetThingPosition(tmthing);
|
||||
}
|
||||
else if (!(tmthing->type == MT_SHELL && thing->player)) // player collision handled in touchspecial
|
||||
P_DamageMobj(thing, tmthing, tmthing->target, 1, 0);
|
||||
{
|
||||
UINT8 damagetype = tmthing->info->mass;
|
||||
if (!damagetype && tmthing->flags & MF_FIRE) // BURN!
|
||||
damagetype = DMG_FIRE;
|
||||
P_DamageMobj(thing, tmthing, tmthing->target, 1, damagetype);
|
||||
}
|
||||
|
||||
// don't traverse any more
|
||||
|
||||
|
|
122
src/p_mobj.c
122
src/p_mobj.c
|
@ -2200,7 +2200,7 @@ static void P_SceneryXYMovement(mobj_t *mo)
|
|||
// 1 - forces false check for water (rings)
|
||||
// 2 - forces false check for water + different quicksand behaviour (scenery)
|
||||
//
|
||||
static void P_AdjustMobjFloorZ_FFloors(mobj_t *mo, sector_t *sector, UINT8 motype)
|
||||
void P_AdjustMobjFloorZ_FFloors(mobj_t *mo, sector_t *sector, UINT8 motype)
|
||||
{
|
||||
ffloor_t *rover;
|
||||
fixed_t delta1, delta2, thingtop;
|
||||
|
@ -2764,7 +2764,7 @@ static boolean P_ZMovement(mobj_t *mo)
|
|||
else if (mo->type == MT_FALLINGROCK)
|
||||
{
|
||||
if (P_MobjFlip(mo)*mom.z > FixedMul(2*FRACUNIT, mo->scale))
|
||||
S_StartSound(mo, mo->info->activesound + P_RandomKey(mo->info->mass));
|
||||
S_StartSound(mo, mo->info->activesound + P_RandomKey(mo->info->reactiontime));
|
||||
|
||||
mom.z /= 2; // Rocks not so bouncy
|
||||
|
||||
|
@ -7410,6 +7410,61 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
mobj->z += FINESINE(mobj->extravalue1*(FINEMASK+1)/360);
|
||||
P_SetThingPosition(mobj);
|
||||
break;
|
||||
case MT_SMASHINGSPIKEBALL:
|
||||
mobj->momx = mobj->momy = 0;
|
||||
if (mobj->state-states == S_SMASHSPIKE_FALL && P_IsObjectOnGround(mobj))
|
||||
{
|
||||
P_SetMobjState(mobj, S_SMASHSPIKE_STOMP1);
|
||||
S_StartSound(mobj, sfx_spsmsh);
|
||||
}
|
||||
else if (mobj->state-states == S_SMASHSPIKE_RISE2 && P_MobjFlip(mobj)*(mobj->z - mobj->movecount) >= 0)
|
||||
{
|
||||
mobj->momz = 0;
|
||||
P_SetMobjState(mobj, S_SMASHSPIKE_FLOAT);
|
||||
}
|
||||
break;
|
||||
case MT_HANGSTER:
|
||||
{
|
||||
statenum_t st = mobj->state-states;
|
||||
//ghost image trail when flying down
|
||||
if (st == S_HANGSTER_SWOOP1 || st == S_HANGSTER_SWOOP2)
|
||||
{
|
||||
P_SpawnGhostMobj(mobj);
|
||||
//curve when in line with target, otherwise curve to avoid crashing into floor
|
||||
if ((mobj->z - mobj->floorz <= 80*FRACUNIT) || (mobj->target && (mobj->z - mobj->target->z <= 80*FRACUNIT)))
|
||||
P_SetMobjState(mobj, (st = S_HANGSTER_ARC1));
|
||||
}
|
||||
|
||||
//swoop arc movement stuff
|
||||
if (st == S_HANGSTER_ARC1)
|
||||
{
|
||||
A_FaceTarget(mobj);
|
||||
P_Thrust(mobj, mobj->angle, 1*FRACUNIT);
|
||||
}
|
||||
else if (st == S_HANGSTER_ARC2)
|
||||
P_Thrust(mobj, mobj->angle, 2*FRACUNIT);
|
||||
else if (st == S_HANGSTER_ARC3)
|
||||
P_Thrust(mobj, mobj->angle, 4*FRACUNIT);
|
||||
//if movement has stopped while flying (like hitting a wall), fly up immediately
|
||||
else if (st == S_HANGSTER_FLY1 && !mobj->momx && !mobj->momy)
|
||||
{
|
||||
mobj->extravalue1 = 0;
|
||||
P_SetMobjState(mobj, S_HANGSTER_ARCUP1);
|
||||
}
|
||||
//after swooping back up, check for ceiling
|
||||
else if ((st == S_HANGSTER_RETURN1 || st == S_HANGSTER_RETURN2) && mobj->momz == 0 && mobj->ceilingz == (mobj->z + mobj->height))
|
||||
P_SetMobjState(mobj, (st = S_HANGSTER_RETURN3));
|
||||
|
||||
//should you roost on a ceiling with F_SKY1 as its flat, disappear forever
|
||||
if (st == S_HANGSTER_RETURN3 && mobj->momz == 0 && mobj->ceilingz == (mobj->z + mobj->height)
|
||||
&& mobj->subsector->sector->ceilingpic == skyflatnum
|
||||
&& mobj->subsector->sector->ceilingheight == mobj->ceilingz)
|
||||
{
|
||||
P_RemoveMobj(mobj);
|
||||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MT_EGGCAPSULE:
|
||||
if (!mobj->reactiontime)
|
||||
{
|
||||
|
@ -8015,6 +8070,8 @@ for (i = ((mobj->flags2 & MF2_STRONGBOX) ? strongboxamt : weakboxamt); i; --i) s
|
|||
case MT_WALLSPIKE:
|
||||
P_SetMobjState(mobj, mobj->state->nextstate);
|
||||
mobj->fuse = mobj->info->speed;
|
||||
if (mobj->spawnpoint)
|
||||
mobj->fuse += (mobj->spawnpoint->angle/360);
|
||||
break;
|
||||
case MT_NIGHTSCORE:
|
||||
P_RemoveMobj(mobj);
|
||||
|
@ -8396,7 +8453,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
|||
if (titlemapinaction) mobj->flags &= ~MF_NOTHINK;
|
||||
break;
|
||||
case MT_CYBRAKDEMON_NAPALM_BOMB_LARGE:
|
||||
mobj->fuse = mobj->info->mass;
|
||||
mobj->fuse = mobj->info->painchance;
|
||||
break;
|
||||
case MT_BLACKEGGMAN:
|
||||
{
|
||||
|
@ -8410,8 +8467,8 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
|||
// Collision helper can be stood on but not pushed
|
||||
mobj->flags2 |= MF2_STANDONME;
|
||||
break;
|
||||
case MT_WALLSPIKE:
|
||||
case MT_SPIKE:
|
||||
case MT_WALLSPIKE:
|
||||
mobj->flags2 |= MF2_STANDONME;
|
||||
break;
|
||||
case MT_GFZTREE:
|
||||
|
@ -8481,6 +8538,20 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
|||
case MT_FLICKY_08:
|
||||
mobj->color = (P_RandomChance(FRACUNIT/2) ? SKINCOLOR_RED : SKINCOLOR_AQUA);
|
||||
break;
|
||||
case MT_SMASHINGSPIKEBALL:
|
||||
mobj->movecount = mobj->z;
|
||||
break;
|
||||
case MT_SPINBOBERT:
|
||||
{
|
||||
mobj_t *fire;
|
||||
fire = P_SpawnMobjFromMobj(mobj, 0, 0, 0, MT_SPINBOBERT_FIRE1);
|
||||
P_SetTarget(&fire->target, mobj);
|
||||
P_SetTarget(&mobj->hnext, fire);
|
||||
fire = P_SpawnMobjFromMobj(mobj, 0, 0, 0, MT_SPINBOBERT_FIRE2);
|
||||
P_SetTarget(&fire->target, mobj);
|
||||
P_SetTarget(&mobj->hprev, fire);
|
||||
}
|
||||
break;
|
||||
case MT_REDRING: // Make MT_REDRING red by default
|
||||
mobj->color = skincolor_redring;
|
||||
break;
|
||||
|
@ -10208,12 +10279,42 @@ ML_EFFECT4 : Don't clip inside the ground
|
|||
break;
|
||||
case MT_THZTREE:
|
||||
{ // Spawn the branches
|
||||
angle_t mobjangle = FixedAngle(mthing->angle*FRACUNIT);
|
||||
angle_t mobjangle = FixedAngle((mthing->angle % 113)*FRACUNIT);
|
||||
P_SpawnMobjFromMobj(mobj, 1*FRACUNIT, 0, 0, MT_THZTREEBRANCH)->angle = mobjangle + ANGLE_22h;
|
||||
P_SpawnMobjFromMobj(mobj, 0, 1*FRACUNIT, 0, MT_THZTREEBRANCH)->angle = mobjangle + ANGLE_157h;
|
||||
P_SpawnMobjFromMobj(mobj, -1*FRACUNIT, 0, 0, MT_THZTREEBRANCH)->angle = mobjangle + ANGLE_270;
|
||||
}
|
||||
break;
|
||||
case MT_HHZTREE_TOP:
|
||||
{ // Spawn the branches
|
||||
angle_t mobjangle;
|
||||
mobj_t *leaf;
|
||||
mobjangle = FixedAngle((mthing->angle % 90)*FRACUNIT);
|
||||
#define doleaf(x, y) \
|
||||
leaf = P_SpawnMobjFromMobj(mobj, x, y, 0, MT_HHZTREE_PART);\
|
||||
leaf->angle = mobjangle;\
|
||||
P_SetMobjState(leaf, leaf->info->seestate);\
|
||||
mobjangle += ANGLE_90
|
||||
doleaf(1*FRACUNIT, 0);
|
||||
doleaf(0, 1*FRACUNIT);
|
||||
doleaf(-1*FRACUNIT, 0);
|
||||
doleaf(0, -1*FRACUNIT);
|
||||
#undef doleaf
|
||||
}
|
||||
break;
|
||||
case MT_JACKO1:
|
||||
case MT_JACKO2:
|
||||
case MT_JACKO3:
|
||||
{
|
||||
mobj_t *overlay = P_SpawnMobjFromMobj(mobj, 0, 0, 0, MT_OVERLAY);
|
||||
P_SetTarget(&overlay->target, mobj);
|
||||
P_SetMobjState(overlay, mobj->info->raisestate);
|
||||
}
|
||||
break;
|
||||
case MT_SMASHINGSPIKEBALL:
|
||||
if (mthing->angle > 0)
|
||||
mobj->tics += mthing->angle;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -10246,9 +10347,6 @@ ML_EFFECT4 : Don't clip inside the ground
|
|||
}
|
||||
else if (i == MT_TOKEN)
|
||||
{
|
||||
if (mthing->options & MTF_OBJECTSPECIAL) // Mario Block version
|
||||
mobj->flags &= ~(MF_NOGRAVITY|MF_NOCLIPHEIGHT);
|
||||
|
||||
// We advanced tokenbits earlier due to the return check.
|
||||
// Subtract 1 here for the correct value.
|
||||
mobj->health = 1 << (tokenbits - 1);
|
||||
|
@ -10296,7 +10394,9 @@ ML_EFFECT4 : Don't clip inside the ground
|
|||
if (mthing->options & MTF_OBJECTSPECIAL)
|
||||
{
|
||||
mobj->flags &= ~MF_SCENERY;
|
||||
mobj->fuse = mthing->angle + mobj->info->speed;
|
||||
mobj->fuse = (16 - mthing->extrainfo) * (mthing->angle + mobj->info->speed) / 16;
|
||||
if (mthing->options & MTF_EXTRA)
|
||||
P_SetMobjState(mobj, mobj->info->meleestate);
|
||||
}
|
||||
// Use per-thing collision for spikes if the deaf flag isn't checked.
|
||||
if (!(mthing->options & MTF_AMBUSH) && !metalrecording)
|
||||
|
@ -10313,7 +10413,9 @@ ML_EFFECT4 : Don't clip inside the ground
|
|||
if (mthing->options & MTF_OBJECTSPECIAL)
|
||||
{
|
||||
mobj->flags &= ~MF_SCENERY;
|
||||
mobj->fuse = mobj->info->speed;
|
||||
mobj->fuse = (16 - mthing->extrainfo) * ((mthing->angle/360) + mobj->info->speed) / 16;
|
||||
if (mthing->options & MTF_EXTRA)
|
||||
P_SetMobjState(mobj, mobj->info->meleestate);
|
||||
}
|
||||
// Use per-thing collision for spikes if the deaf flag isn't checked.
|
||||
if (!(mthing->options & MTF_AMBUSH) && !metalrecording)
|
||||
|
|
|
@ -3565,7 +3565,7 @@ static void P_DoFiring(player_t *player, ticcmd_t *cmd)
|
|||
if (mo)
|
||||
{
|
||||
//P_InstaThrust(mo, player->mo->angle, FixedMul(mo->info->speed, player->mo->scale));
|
||||
mo->fuse = mo->info->mass;
|
||||
mo->fuse = mo->info->reactiontime;
|
||||
}
|
||||
}
|
||||
// Scatter
|
||||
|
|
18
src/sounds.c
18
src/sounds.c
|
@ -76,6 +76,8 @@ sfxinfo_t S_sfx[NUMSFX] =
|
|||
{"steam1", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Steam jet"}, // Tails 06-19-2001
|
||||
{"steam2", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Steam jet"}, // Tails 06-19-2001
|
||||
{"wbreak", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Wood breaking"},
|
||||
{"ambmac", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Machinery"},
|
||||
{"spsmsh", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Heavy impact"},
|
||||
|
||||
{"rainin", true, 24, 4, -1, NULL, 0, -1, -1, LUMPERROR, "Rain"},
|
||||
{"litng1", false, 16, 2, -1, NULL, 0, -1, -1, LUMPERROR, "Lightning"},
|
||||
|
@ -226,6 +228,12 @@ sfxinfo_t S_sfx[NUMSFX] =
|
|||
{"prloop", false, 104, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Gust of wind"},
|
||||
{"timeup", true, 256, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Ominous Countdown"},
|
||||
|
||||
// Halloween
|
||||
{"lntsit", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Cacolantern awake"},
|
||||
{"lntdie", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Cacolantern death"},
|
||||
{"pumpkn", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Pumpkin smash"},
|
||||
{"ghosty", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Laughter"},
|
||||
|
||||
// Mario
|
||||
{"koopfr" , true, 127, 8, -1, NULL, 0, -1, -1, LUMPERROR, "Fire"},
|
||||
{"mario1", false, 60, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Hitting a ceiling"},
|
||||
|
@ -295,16 +303,16 @@ sfxinfo_t S_sfx[NUMSFX] =
|
|||
{"s3k45", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Lightning zap"},
|
||||
{"s3k46", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Transformation"},
|
||||
{"s3k47", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Rising dust"},
|
||||
{"s3k48", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Metallic clink"},
|
||||
{"s3k48", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Pulse"},
|
||||
{"s3k49", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Falling rock"},
|
||||
{"s3k4a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Grab"},
|
||||
{"s3k4b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Water splash"},
|
||||
{"s3k4c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Heavy hit"},
|
||||
{"s3k4d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Firing bullet"},
|
||||
{"s3k4e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Bomb explosion"},
|
||||
{"s3k4e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Big explosion"},
|
||||
{"s3k4f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Flamethrower"},
|
||||
{"s3k50", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Siren"},
|
||||
{"s3k51", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Falling bomb"},
|
||||
{"s3k51", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Falling hazard"},
|
||||
{"s3k52", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Spike"},
|
||||
{"s3k53", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Powering up"},
|
||||
{"s3k54", false, 64, 64, -1, NULL, 0, -1, -1, LUMPERROR, "Firing"}, // MetalSonic shot fire
|
||||
|
@ -325,7 +333,7 @@ sfxinfo_t S_sfx[NUMSFX] =
|
|||
{"s3k63", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Starpost"},
|
||||
{"s3k64", false, 64, 2, -1, NULL, 0, -1, -1, LUMPERROR, "Clatter"},
|
||||
{"s3k65", false, 255, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Got blue sphere"}, // Blue Spheres
|
||||
{"s3k66", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Special stage clear"},
|
||||
{"s3k66", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Special stage end"},
|
||||
{"s3k67", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Firing missile"},
|
||||
{"s3k68", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Unknown possibilities"},
|
||||
{"s3k69", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Switch click"},
|
||||
|
@ -372,7 +380,7 @@ sfxinfo_t S_sfx[NUMSFX] =
|
|||
{"s3k92", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Ghost"},
|
||||
{"s3k93", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Rebuilding"},
|
||||
{"s3k94", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Spike"},
|
||||
{"s3k95", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Rising from lava"},
|
||||
{"s3k95", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Lava burst"},
|
||||
{"s3k96", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Falling object"},
|
||||
{"s3k97", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Wind"},
|
||||
{"s3k98", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Falling spike"},
|
||||
|
|
|
@ -142,6 +142,8 @@ typedef enum
|
|||
sfx_steam1,
|
||||
sfx_steam2,
|
||||
sfx_wbreak,
|
||||
sfx_ambmac,
|
||||
sfx_spsmsh,
|
||||
|
||||
sfx_rainin,
|
||||
sfx_litng1,
|
||||
|
@ -292,6 +294,12 @@ typedef enum
|
|||
sfx_prloop,
|
||||
sfx_timeup, // Was gonna be played when less than ten seconds are on the clock; uncomment uses of this to see it in-context
|
||||
|
||||
// Halloween
|
||||
sfx_lntsit,
|
||||
sfx_lntdie,
|
||||
sfx_pumpkn,
|
||||
sfx_ghosty,
|
||||
|
||||
// Mario
|
||||
sfx_koopfr,
|
||||
sfx_mario1,
|
||||
|
|
Loading…
Reference in a new issue