* 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:
toasterbabe 2018-04-28 15:13:44 +01:00
parent 1eb84f57c5
commit 5cc1befcad
14 changed files with 1589 additions and 147 deletions

View File

@ -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",

View File

@ -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

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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,

View File

@ -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);
}

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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"},

View File

@ -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,