Files
HackerSM64/levels/hmc/script.c
Denis Kopyrin ccb1419adb Split vanillla object from levels allowing pruning vanilla assets on fast64 imports and managing vanilla objects independently of levels (#796)
* Move level script to bank 0x1A

* Decouple vanilla objects in a separate bank

* Rollback group level scripts move, fixed nits

* Move actors_vanilla to actors/vanilla_actors

* Make EU translation segment last, remove vanilla objects segments copypaste

* Added LOAD_VANILLA_OBJECTS segment id stub
2025-01-29 20:58:46 -05:00

208 lines
23 KiB
C

#include <ultra64.h>
#include "sm64.h"
#include "behavior_data.h"
#include "model_ids.h"
#include "seq_ids.h"
#include "dialog_ids.h"
#include "segment_symbols.h"
#include "level_commands.h"
#include "game/level_update.h"
#include "levels/scripts.h"
#include "actors/common1.h"
#include "make_const_nonconst.h"
#include "levels/hmc/header.h"
static const LevelScript script_hmc_macro_objects[] = {
// Macro objects
OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -6060, 2048, 5960, /*angle*/ 0, 315, 0, /*behParam*/ (DIALOG_089 << 16), /*beh*/ bhvMessagePanel),
OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -6770, 1845, 4577, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_050 << 16), /*beh*/ bhvMessagePanel),
OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ -439, 220, -2540, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_1 << 16), /*beh*/ bhvSwoop),
OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ 80, 140, -4660, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_0 << 16), /*beh*/ bhvSwoop),
OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ 800, 60, -7500, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_0 << 16), /*beh*/ bhvSwoop),
OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ 1880, 100, -7620, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_1 << 16), /*beh*/ bhvSwoop),
OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 2500, 217, 50, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_071 << 16), /*beh*/ bhvMessagePanel),
OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 2900, 217, 50, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_062 << 16), /*beh*/ bhvMessagePanel),
OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 838, 2052, 3580, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_088 << 16), /*beh*/ bhvMessagePanel),
OBJECT(/*model*/ MODEL_SCUTTLEBUG, /*pos*/ -6320, 2048, 6740, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvScuttlebug),
OBJECT(/*model*/ MODEL_SCUTTLEBUG, /*pos*/ -5455, 1536, 521, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvScuttlebug),
OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2140, 2048, 6540, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin),
OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2900, 2048, 6500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin),
OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 6400, 2090, 5320, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin),
OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 6820, 1024, 3300, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin),
OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 6260, 1124, 4960, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin),
OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 4080, 1124, 5760, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin),
OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 4640, 2250, 3980, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin),
OBJECT(/*model*/ MODEL_RED_COIN, /*pos*/ 2960, 1124, 5140, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRedCoin),
OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -6924, 2440, 7364, /*angle*/ 0, 45, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox),
OBJECT(/*model*/ MODEL_SCUTTLEBUG, /*pos*/ 4160, 28, 6308, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvScuttlebug),
OBJECT(/*model*/ MODEL_SCUTTLEBUG, /*pos*/ 5392, 28, 3587, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvScuttlebug),
OBJECT(/*model*/ MODEL_SNUFIT, /*pos*/ 2260, -627, -1660, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSnufit),
OBJECT(/*model*/ MODEL_SNUFIT, /*pos*/ 5760, -623, -1600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSnufit),
OBJECT(/*model*/ MODEL_SNUFIT, /*pos*/ 4560, -620, -1499, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSnufit),
OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 5860, -550, -739, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox),
OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 1939, -600, -2920, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox),
OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ 5100, -600, -4500, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6580, 1680, -5780, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE) << 16), /*beh*/ bhvCoinFormation),
OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 1022, 1848, 5120, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox),
OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 3500, 2150, 3000, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3240, -4720, 2360, /*angle*/ 0, 270, 0, /*behParam*/ 0x00000000, /*beh*/ bhvScuttlebugSpawn),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3600, -4240, 3600, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING) << 16), /*beh*/ bhvCoinFormation),
OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -3000, -2250, -6400, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_METAL_CAP << 16), /*beh*/ bhvExclamationBox),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ -3420, 1800, 5960, /*angle*/ 0, 270, 0, /*behParam*/ 0x00000000, /*beh*/ bhvScuttlebugSpawn),
OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ 6080, 3060, 4660, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_0 << 16), /*beh*/ bhvSwoop),
OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ 5480, 3000, 7120, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_0 << 16), /*beh*/ bhvSwoop),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2700, 2060, -6400, /*angle*/ 0, 0, 0, /*behParam*/ ((COIN_FORMATION_FLAG_RING) << 16), /*beh*/ bhvCoinFormation),
OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ -5440, 1720, -320, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_1 << 16), /*beh*/ bhvSwoop),
OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2220, 2048, 4440, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin),
OBJECT(/*model*/ MODEL_HEART, /*pos*/ -7511, 1420, -666, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvRecoveryHeart),
OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -3359, 1536, 298, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_122 << 16), /*beh*/ bhvMessagePanel),
OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -3092, 2033, -7685, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_138 << 16), /*beh*/ bhvMessagePanel),
OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 5439, 0, 2785, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_125 << 16), /*beh*/ bhvMessagePanel),
OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -3184, 0, 699, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_126 << 16), /*beh*/ bhvMessagePanel),
OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 500, -4300, 3644, /*angle*/ 0, 270, 0, /*behParam*/ (DIALOG_127 << 16), /*beh*/ bhvMessagePanel),
OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -4960, 2700, 80, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_WALKING << 16), /*beh*/ bhvExclamationBox),
OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 2006, 0, 6713, /*angle*/ 0, 180, 0, /*behParam*/ (DIALOG_124 << 16), /*beh*/ bhvMessagePanel),
OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 2510, 0, 2800, /*angle*/ 0, 0, 0, /*behParam*/ (DIALOG_140 << 16), /*beh*/ bhvMessagePanel),
OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ 510, 0, 5380, /*angle*/ 0, 90, 0, /*behParam*/ (DIALOG_139 << 16), /*beh*/ bhvMessagePanel),
OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2340, 2040, 4560, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin),
OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2460, 2040, 4660, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin),
OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -2060, 2040, 4380, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin),
OBJECT(/*model*/ MODEL_YELLOW_COIN, /*pos*/ -1920, 2040, 4320, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvOneCoin),
OBJECT(/*model*/ MODEL_BLUE_COIN_SWITCH, /*pos*/ 5145, -767, -2954, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBlueCoinSwitch),
OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 3945, -1023, -2918, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin),
OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 3800, -1023, -4009, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin),
OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 3036, -858, -4118, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin),
OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 2018, -921, -4154, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin),
OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 1836, -921, -4700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin),
OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 1836, -721, -4700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin),
OBJECT(/*model*/ MODEL_BLUE_COIN, /*pos*/ 1836, -521, -4700, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHiddenBlueCoin),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ 2800, 205, 463, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ 1800, -409, -7390, /*angle*/ 0, 90, 0, /*behParam*/ ((COIN_FORMATION_FLAG_NONE ) << 16), /*beh*/ bhvCoinFormation),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ -5342, 2809, -1790, /*angle*/ 0, 144, 0, /*behParam*/ ((COIN_FORMATION_FLAG_FLYING) << 16), /*beh*/ bhvCoinFormation),
OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ 5632, -563, -4454, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_1 << 16), /*beh*/ bhvSwoop),
OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ 4915, -665, -5274, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_1 << 16), /*beh*/ bhvSwoop),
OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ 5120, -665, -4660, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_0 << 16), /*beh*/ bhvSwoop),
OBJECT(/*model*/ MODEL_SWOOP, /*pos*/ 5427, -665, -5070, /*angle*/ 0, 0, 0, /*behParam*/ (SWOOP_BP_0 << 16), /*beh*/ bhvSwoop),
OBJECT(/*model*/ MODEL_SNUFIT, /*pos*/ 2439, -722, -5499, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvSnufit),
OBJECT(/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ 2714, -768, -4096, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMontyMoleHole),
OBJECT(/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ 3011, -768, -1272, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMontyMoleHole),
OBJECT(/*model*/ MODEL_DL_MONTY_MOLE_HOLE, /*pos*/ 3324, -768, -1475, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMontyMoleHole),
OBJECT(/*model*/ MODEL_MONTY_MOLE, /*pos*/ 3940, -768, -2880, /*angle*/ 0, 0, 0, /*behParam*/ (MONTY_MOLE_BP_ROCK << 16), /*beh*/ bhvMontyMole),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ 4740, 1060, 4680, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMrI),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ 6700, 1020, 6820, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvMrI),
OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 2960, 1024, 5140, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox),
OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 4080, 1024, 5760, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox),
OBJECT(/*model*/ MODEL_BREAKABLE_BOX, /*pos*/ 6260, 1024, 4960, /*angle*/ 0, 0, 0, /*behParam*/ (BREAKABLE_BOX_BP_NO_COINS << 16), /*beh*/ bhvBreakableBox),
OBJECT(/*model*/ MODEL_WOODEN_SIGNPOST, /*pos*/ -4370, 2860, -2243, /*angle*/ 0, 135, 0, /*behParam*/ (DIALOG_043 << 16), /*beh*/ bhvMessagePanel),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ -2900, 1620, 4640, /*angle*/ 0, 0, 0, /*behParam*/ (FLAMETHROWER_BP_UPWARDS << 16), /*beh*/ bhvFlamethrower),
OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ 1420, -380, -7040, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter),
OBJECT(/*model*/ MODEL_BOWLING_BALL, /*pos*/ 2500, -380, -7740, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFireSpitter),
OBJECT(/*model*/ MODEL_EXCLAMATION_BOX, /*pos*/ -2700, 2100, -6400, /*angle*/ 0, 0, 0, /*behParam*/ (EXCLAMATION_BOX_BP_1UP_RUNNING_AWAY << 16), /*beh*/ bhvExclamationBox),
// Special objects
OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 922, -4689, 2330, /*angle*/ 0, 270, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor),
OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ -3586, 1536, 647, /*angle*/ 0, 26, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor),
OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 5911, -204, 870, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor),
OBJECT(/*model*/ MODEL_CASTLE_WOODEN_DOOR_UNUSED, /*pos*/ 3817, 205, 870, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor),
OBJECT(/*model*/ MODEL_HMC_METAL_DOOR, /*pos*/ 1127, -409, -4709, /*angle*/ 0, 90, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor),
OBJECT(/*model*/ MODEL_HMC_METAL_DOOR, /*pos*/ -468, -4279, 6711, /*angle*/ 0, 45, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor),
OBJECT(/*model*/ MODEL_HMC_METAL_DOOR, /*pos*/ -359, -4279, 6602, /*angle*/ 0, 225, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor),
OBJECT(/*model*/ MODEL_HMC_METAL_DOOR, /*pos*/ -3634, 2355, -2764, /*angle*/ 0, 90, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor),
OBJECT(/*model*/ MODEL_HMC_METAL_DOOR, /*pos*/ -4863, 1843, -7551, /*angle*/ 0, 270, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor),
OBJECT(/*model*/ MODEL_HMC_METAL_DOOR, /*pos*/ 3328, -409, -6911, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor),
OBJECT(/*model*/ MODEL_HMC_HAZY_MAZE_DOOR, /*pos*/ 358, 2048, 3661, /*angle*/ 0, 270, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor),
OBJECT(/*model*/ MODEL_HMC_HAZY_MAZE_DOOR, /*pos*/ -6553, 1536, 1459, /*angle*/ 0, 0, 0, /*behParam*/ (0 << 24), /*beh*/ bhvDoor),
RETURN(),
};
static const LevelScript script_hmc_objects_1[] = {
OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 4936, -357, -4146, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame),
OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 5018, -460, -5559, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame),
OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1997, 666, -235, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame),
OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1762, -460, -2610, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame),
OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 4178, -255, -3737, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame),
OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 2233, -460, 256, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame),
OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 5510, -255, -3429, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame),
OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 4690, -357, -767, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame),
OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 3462, -255, -1125, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame),
OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1762, 666, 0, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame),
OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1762, -460, 256, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame),
OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 6482, 461, 3226, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame),
OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 1075, 461, 6543, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame),
OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 6912, 461, 6543, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame),
OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 6912, 461, 3697, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame),
OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 6482, 461, 7014, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame),
OBJECT(/*model*/ MODEL_RED_FLAME, /*pos*/ 3817, 717, 1034, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFlame),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ 799, 1024, 4434, /*angle*/ 0, 0, 0, /*behParam*/ 0x00B80000, /*beh*/ bhvPoleGrabbing),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ 889, 1024, 3277, /*angle*/ 0, 0, 0, /*behParam*/ 0x00B80000, /*beh*/ bhvPoleGrabbing),
RETURN(),
};
static const LevelScript script_hmc_objects_2[] = {
OBJECT(/*model*/ MODEL_HMC_METAL_PLATFORM, /*pos*/ 1100, 950, 6350, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvControllablePlatform),
OBJECT(/*model*/ MODEL_HMC_ELEVATOR_PLATFORM, /*pos*/ -3243, 1434, 1392, /*angle*/ 0, 27, 0, /*behParam*/ 0x00000000, /*beh*/ bhvHmcElevatorPlatform),
OBJECT(/*model*/ MODEL_HMC_ELEVATOR_PLATFORM, /*pos*/ -2816, 2253, -2509, /*angle*/ 0, 0, 0, /*behParam*/ 0x00010000, /*beh*/ bhvHmcElevatorPlatform),
OBJECT(/*model*/ MODEL_HMC_ELEVATOR_PLATFORM, /*pos*/ -973, 1741, -7347, /*angle*/ 0, 0, 0, /*behParam*/ 0x00020000, /*beh*/ bhvHmcElevatorPlatform),
OBJECT(/*model*/ MODEL_HMC_ELEVATOR_PLATFORM, /*pos*/ -3533, 1741, -7040, /*angle*/ 0, 0, 0, /*behParam*/ 0x00030000, /*beh*/ bhvHmcElevatorPlatform),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ 614, -4690, 2330, /*angle*/ 0, 270, 0, /*behParam*/ 0x00010000, /*beh*/ bhvOpenableGrill),
OBJECT(/*model*/ MODEL_PURPLE_SWITCH, /*pos*/ -307, -4997, 2483, /*angle*/ 0, 270, 0, /*behParam*/ 0x00000000, /*beh*/ bhvFloorSwitchGrills),
OBJECT(/*model*/ MODEL_CHECKERBOARD_PLATFORM, /*pos*/ 1270, 2000, 4000, /*angle*/ 0, 270, 0, /*behParam*/ 0x09A40000, /*beh*/ bhvPlatformOnTrack),
RETURN(),
};
static const LevelScript script_hmc_objects_3[] = {
OBJECT(/*model*/ MODEL_DORRIE, /*pos*/ -3533, -4969, 3558, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvDorrie),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ -6093, 3075, -7807, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBigBoulderGenerator),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ -500, 1600, 3500, /*angle*/ 0, 0, 0, /*behParam*/ 0x00040000, /*beh*/ bhvFlamethrower),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ -500, 1600, 3800, /*angle*/ 0, 0, 0, /*behParam*/ 0x00040000, /*beh*/ bhvFlamethrower),
RETURN(),
};
static const LevelScript script_hmc_objects_4[] = {
OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -3600, -4000, 3600, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS),
OBJECT_WITH_ACTS(/*model*/ MODEL_NONE, /*pos*/ 4000, 300, 5000, /*angle*/ 0, 0, 0, /*behParam*/ 0x01000000, /*beh*/ bhvHiddenRedCoinStar, /*acts*/ ALL_ACTS),
OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ 6200, -4400, 2300, /*angle*/ 0, 0, 0, /*behParam*/ 0x02000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS),
OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -2100, 2100, -7550, /*angle*/ 0, 0, 0, /*behParam*/ 0x03000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS),
OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -6500, 2700, -1600, /*angle*/ 0, 0, 0, /*behParam*/ 0x04000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS),
OBJECT_WITH_ACTS(/*model*/ MODEL_STAR, /*pos*/ -5000, 3050, -6700, /*angle*/ 0, 0, 0, /*behParam*/ 0x05000000, /*beh*/ bhvStar, /*acts*/ ALL_ACTS),
RETURN(),
};
const LevelScript level_hmc_entry[] = {
INIT_LEVEL(),
#include "levels/hmc/areas/script_vanilla_load.inc.c"
ALLOC_LEVEL_POOL(),
MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario),
#include "levels/hmc/areas/script_vanilla.inc.c"
AREA(/*index*/ 1, hmc_geo_000B90),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ -7152, 3161, 7181, /*angle*/ 0, 135, 0, /*behParam*/ 0x000A0000, /*beh*/ bhvSpinAirborneWarp),
OBJECT(/*model*/ MODEL_NONE, /*pos*/ 3351, -4690, 4773, /*angle*/ 0, 0, 0, /*behParam*/ 0x340B0000, /*beh*/ bhvWarp),
WARP_NODE(/*id*/ 0x0A, /*destLevel*/ LEVEL_HMC, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT),
WARP_NODE(/*id*/ 0x0B, /*destLevel*/ LEVEL_COTMC, /*destArea*/ 0x01, /*destNode*/ 0x0A, /*flags*/ WARP_NO_CHECKPOINT),
WARP_NODE(/*id*/ 0xF0, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x34, /*flags*/ WARP_NO_CHECKPOINT),
WARP_NODE(/*id*/ 0xF1, /*destLevel*/ LEVEL_CASTLE, /*destArea*/ 0x03, /*destNode*/ 0x66, /*flags*/ WARP_NO_CHECKPOINT),
JUMP_LINK(script_hmc_objects_1),
JUMP_LINK(script_hmc_objects_2),
JUMP_LINK(script_hmc_objects_3),
JUMP_LINK(script_hmc_objects_4),
TERRAIN(/*terrainData*/ hmc_seg7_collision_level),
JUMP_LINK(script_hmc_macro_objects),
ROOMS(/*surfaceRooms*/ hmc_seg7_rooms),
SET_BACKGROUND_MUSIC(/*settingsPreset*/ 0x0004, /*seq*/ SEQ_LEVEL_UNDERGROUND),
TERRAIN_TYPE(/*terrainType*/ TERRAIN_STONE),
END_AREA(),
FREE_LEVEL_POOL(),
MARIO_POS(/*area*/ 1, /*yaw*/ 135, /*pos*/ -7152, 2161, 7181),
CALL(/*arg*/ 0, /*func*/ lvl_init_or_update),
CALL_LOOP(/*arg*/ 1, /*func*/ lvl_init_or_update),
CLEAR_LEVEL(),
SLEEP_BEFORE_EXIT(/*frames*/ 1),
EXIT(),
};