From 9036336f42808dc25bd05f62b28c6bee8ba87623 Mon Sep 17 00:00:00 2001 From: MysterD Date: Sun, 9 Aug 2020 16:21:12 -0700 Subject: [PATCH] Gave each BehaviorScript an ID Created functions to trivially translate an ID to a Behavior and vice versa. Sent ID over packets instead of Behavior pointer. This should allow Linux and Windows to play together. --- .../behavior_table/behavior_data.c | 6129 +++++++++++++++++ .../behavior_table/generate.py | 43 + data/behavior_data.c | 556 +- data/behavior_table.c | 527 ++ include/behavior_table.h | 529 ++ src/engine/behavior_script.c | 10 +- src/pc/network/network.c | 7 +- src/pc/network/packets/packet_collect_coin.c | 11 +- src/pc/network/packets/packet_collect_star.c | 10 +- src/pc/network/packets/packet_object.c | 9 +- src/pc/network/packets/packet_spawn_objects.c | 11 +- 11 files changed, 7808 insertions(+), 34 deletions(-) create mode 100644 build-windows-visual-studio/behavior_table/behavior_data.c create mode 100644 build-windows-visual-studio/behavior_table/generate.py create mode 100644 data/behavior_table.c create mode 100644 include/behavior_table.h diff --git a/build-windows-visual-studio/behavior_table/behavior_data.c b/build-windows-visual-studio/behavior_table/behavior_data.c new file mode 100644 index 000000000..a21c98e3b --- /dev/null +++ b/build-windows-visual-studio/behavior_table/behavior_data.c @@ -0,0 +1,6129 @@ +#define OBJECT_FIELDS_INDEX_DIRECTLY + +#include "sm64.h" + +#include "object_constants.h" +#include "game/object_list_processor.h" +#include "game/interaction.h" +#include "game/behavior_actions.h" +#include "game/mario_actions_cutscene.h" +#include "game/mario_misc.h" +#include "game/object_helpers.h" +#include "game/debug.h" +#include "menu/file_select.h" +#include "engine/surface_load.h" + +#include "actors/common0.h" +#include "actors/common1.h" +#include "actors/group1.h" +#include "actors/group2.h" +#include "actors/group3.h" +#include "actors/group4.h" +#include "actors/group5.h" +#include "actors/group6.h" +#include "actors/group7.h" +#include "actors/group8.h" +#include "actors/group9.h" +#include "actors/group10.h" +#include "actors/group11.h" +#include "actors/group12.h" +#include "actors/group13.h" +#include "actors/group14.h" +#include "actors/group15.h" +#include "actors/group16.h" +#include "actors/group17.h" +#include "levels/bbh/header.h" +#include "levels/castle_inside/header.h" +#include "levels/hmc/header.h" +#include "levels/ssl/header.h" +#include "levels/bob/header.h" +#include "levels/sl/header.h" +#include "levels/wdw/header.h" +#include "levels/jrb/header.h" +#include "levels/thi/header.h" +#include "levels/ttc/header.h" +#include "levels/rr/header.h" +#include "levels/castle_grounds/header.h" +#include "levels/bitdw/header.h" +#include "levels/lll/header.h" +#include "levels/sa/header.h" +#include "levels/bitfs/header.h" +#include "levels/ddd/header.h" +#include "levels/wf/header.h" +#include "levels/bowser_2/header.h" +#include "levels/ttm/header.h" + +#include "make_const_nonconst.h" +#include "behavior_data.h" + +#define BC_B(a) _SHIFTL(a, 24, 8) +#define BC_BB(a, b) (_SHIFTL(a, 24, 8) | _SHIFTL(b, 16, 8)) +#define BC_BBBB(a, b, c, d) (_SHIFTL(a, 24, 8) | _SHIFTL(b, 16, 8) | _SHIFTL(c, 8, 8) | _SHIFTL(d, 0, 8)) +#define BC_BBH(a, b, c) (_SHIFTL(a, 24, 8) | _SHIFTL(b, 16, 8) | _SHIFTL(c, 0, 16)) +#define BC_B0H(a, b) (_SHIFTL(a, 24, 8) | _SHIFTL(b, 0, 16)) +#define BC_H(a) _SHIFTL(a, 16, 16) +#define BC_HH(a, b) (_SHIFTL(a, 16, 16) | _SHIFTL(b, 0, 16)) +#define BC_W(a) ((uintptr_t)(u32)(a)) +#define BC_PTR(a) ((uintptr_t)(a)) + + +// Defines the id of the behavior script +#define ID(id) \ + BC_B0H(0x39, id) + +// Defines the start of the behavior script as well as the object list the object belongs to. +// Has some special behavior for certain objects. +#define BEGIN(objList) \ + BC_BB(0x00, objList) + +// Delays the behavior script for a certain number of frames. +#define DELAY(num) \ + BC_B0H(0x01, num) + +// Jumps to a new behavior command and stores the return address in the object's stack. +#define CALL(addr) \ + BC_B(0x02), \ + BC_PTR(addr) + +// Jumps back to the behavior command stored in the object's stack. +#define RETURN() \ + BC_B(0x03) + +// Jumps to a new behavior script without saving anything. +#define GOTO(addr) \ + BC_B(0x04), \ + BC_PTR(addr) + +// Marks the start of a loop that will repeat a certain number of times. +#define BEGIN_REPEAT(count) \ + BC_B0H(0x05, count) + +// Marks the end of a repeating loop. +#define END_REPEAT() \ + BC_B(0x06) + +// Also marks the end of a repeating loop, but continues executing commands following the loop on the same frame. +#define END_REPEAT_CONTINUE() \ + BC_B(0x07) + +// Marks the beginning of an infinite loop. +#define BEGIN_LOOP() \ + BC_B(0x08) + +// Marks the end of an infinite loop. +#define END_LOOP() \ + BC_B(0x09) + +// Exits the behavior script. +// Often used to end behavior scripts that do not contain an infinite loop. +#define BREAK() \ + BC_B(0x0A) + +// Exits the behavior script, unused. +#define BREAK_UNUSED() \ + BC_B(0x0B) + +// Executes a native game function. +#define CALL_NATIVE(func) \ + BC_B(0x0C), \ + BC_PTR(func) + +// Adds a float to the specified field. +#define ADD_FLOAT(field, value) \ + BC_BBH(0x0D, field, value) + +// Sets the specified field to a float. +#define SET_FLOAT(field, value) \ + BC_BBH(0x0E, field, value) + +// Adds an integer to the specified field. +#define ADD_INT(field, value) \ + BC_BBH(0x0F, field, value) + +// Sets the specified field to an integer. +#define SET_INT(field, value) \ + BC_BBH(0x10, field, value) + +// Performs a bitwise OR with the specified field and the given integer. +// Usually used to set an object's flags. +#define OR_INT(field, value) \ + BC_BBH(0x11, field, value) + +// Performs a bit clear with the specified short. Unused in favor of the 32-bit version. +#define BIT_CLEAR(field, value) \ + BC_BBH(0x12, field, value) + +// TODO: this one needs a better name / labelling +// Gets a random short, right shifts it the specified amount and adds min to it, then sets the specified field to that value. +#define SET_INT_RAND_RSHIFT(field, min, rshift) \ + BC_BBH(0x13, field, min), \ + BC_H(rshift) + +// Sets the specified field to a random float in the given range. +#define SET_RANDOM_FLOAT(field, min, range) \ + BC_BBH(0x14, field, min), \ + BC_H(range) + +// Sets the specified field to a random integer in the given range. +#define SET_RANDOM_INT(field, min, range) \ + BC_BBH(0x15, field, min), \ + BC_H(range) + +// Adds a random float in the given range to the specified field. +#define ADD_RANDOM_FLOAT(field, min, range) \ + BC_BBH(0x16, field, min), \ + BC_H(range) + +// TODO: better name (unused anyway) +// Gets a random short, right shifts it the specified amount and adds min to it, then adds the value to the specified field. Unused. +#define ADD_INT_RAND_RSHIFT(field, min, rshift) \ + BC_BBH(0x17, field, min), \ + BC_H(rshift) + +// No operation. Unused. +#define CMD_NOP_1(field) \ + BC_BB(0x18, field) + +// No operation. Unused. +#define CMD_NOP_2(field) \ + BC_BB(0x19, field) + +// No operation. Unused. +#define CMD_NOP_3(field) \ + BC_BB(0x1A, field) + +// Sets the current model ID of the object. +#define SET_MODEL(modelID) \ + BC_B0H(0x1B, modelID) + +// Spawns a child object with the specified model and behavior. +#define SPAWN_CHILD(modelID, behavior) \ + BC_B(0x1C), \ + BC_W(modelID), \ + BC_PTR(behavior) + +// Exits the behavior script and despawns the object. +// Often used to end behavior scripts that do not contain an infinite loop. +#define DEACTIVATE() \ + BC_B(0x1D) + +// Finds the floor triangle directly under the object and moves the object down to it. +#define DROP_TO_FLOOR() \ + BC_B(0x1E) + +// Sets the destination float field to the sum of the values of the given float fields. +#define SUM_FLOAT(fieldDst, fieldSrc1, fieldSrc2) \ + BC_BBBB(0x1F, fieldDst, fieldSrc1, fieldSrc2) + +// Sets the destination integer field to the sum of the values of the given integer fields. Unused. +#define SUM_INT(fieldDst, fieldSrc1, fieldSrc2) \ + BC_BBBB(0x20, fieldDst, fieldSrc1, fieldSrc2) + +// Billboards the current object, making it always face the camera. +#define BILLBOARD() \ + BC_B(0x21) + +#define CYLBOARD() \ + BC_B(0x38) + +// Hides the current object. +#define HIDE() \ + BC_B(0x22) + +// Sets the size of the object's cylindrical hitbox. +#define SET_HITBOX(radius, height) \ + BC_B(0x23), \ + BC_HH(radius, height) + +// No operation. Unused. +#define CMD_NOP_4(field, value) \ + BC_BBH(0x24, field, value) + +// Delays the behavior script for the number of frames given by the value of the specified field. +#define DELAY_VAR(field) \ + BC_BB(0x25, field) + +// Unused. Marks the start of a loop that will repeat a certain number of times. +// Uses a u8 as the argument, instead of a s16 like the other version does. +#define BEGIN_REPEAT_UNUSED(count) \ + BC_BB(0x26, count) + +// Loads the animations for the object. is always set to oAnimations. +#define LOAD_ANIMATIONS(field, anims) \ + BC_BB(0x27, field), \ + BC_PTR(anims) + +// Begins animation and sets the object's current animation index to the specified value. +#define ANIMATE(animIndex) \ + BC_BB(0x28, animIndex) + +// Spawns a child object with the specified model and behavior, plus a behavior param. +#define SPAWN_CHILD_WITH_PARAM(bhvParam, modelID, behavior) \ + BC_B0H(0x29, bhvParam), \ + BC_W(modelID), \ + BC_PTR(behavior) + +// Loads collision data for the object. +#define LOAD_COLLISION_DATA(collisionData) \ + BC_B(0x2A), \ + BC_PTR(collisionData) + +// Sets the size of the object's cylindrical hitbox, and applies a downwards offset. +#define SET_HITBOX_WITH_OFFSET(radius, height, downOffset) \ + BC_B(0x2B), \ + BC_HH(radius, height), \ + BC_H(downOffset) + +// Spawns a new object with the specified model and behavior. +#define SPAWN_OBJ(modelID, behavior) \ + BC_B(0x2C), \ + BC_W(modelID), \ + BC_PTR(behavior) + +// Sets the home position of the object to its current position. +#define SET_HOME() \ + BC_B(0x2D) + +// Sets the size of the object's cylindrical hurtbox. +#define SET_HURTBOX(radius, height) \ + BC_B(0x2E), \ + BC_HH(radius, height) + +// Sets the object's interaction type. +#define SET_INTERACT_TYPE(type) \ + BC_B(0x2F), \ + BC_W(type) + +// Sets various parameters that the object uses for calculating physics. +#define SET_OBJ_PHYSICS(wallHitboxRadius, gravity, bounciness, dragStrength, friction, buoyancy, unused1, unused2) \ + BC_B(0x30), \ + BC_HH(wallHitboxRadius, gravity), \ + BC_HH(bounciness, dragStrength), \ + BC_HH(friction, buoyancy), \ + BC_HH(unused1, unused2) + +// Sets the object's interaction subtype. Unused. +#define SET_INTERACT_SUBTYPE(subtype) \ + BC_B(0x31), \ + BC_W(subtype) + +// Sets the object's size to the specified percentage. +#define SCALE(unusedField, percent) \ + BC_BBH(0x32, unusedField, percent) + +// Performs a bit clear on the object's parent's field with the specified value. +// Used for clearing active particle flags fron Mario's object. +#define PARENT_BIT_CLEAR(field, flags) \ + BC_BB(0x33, field), \ + BC_W(flags) + +// Animates an object using texture animation. is always set to oAnimState. +#define ANIMATE_TEXTURE(field, rate) \ + BC_BBH(0x34, field, rate) + +// Disables rendering for the object. +#define DISABLE_RENDERING() \ + BC_B(0x35) + +// Unused. Sets the specified field to an integer. Wastes 4 bytes of space for no reason at all. +#define SET_INT_UNUSED(field, value) \ + BC_BB(0x36, field), \ + BC_HH(0, value) + +// Spawns a water droplet with the given parameters. +#define SPAWN_WATER_DROPLET(dropletParams) \ + BC_B(0x37), \ + BC_PTR(dropletParams) + + +const BehaviorScript bhvStarDoor[] = { + BEGIN(OBJ_LIST_SURFACE), + SET_INT(oInteractType, INTERACT_DOOR), + LOAD_COLLISION_DATA(inside_castle_seg7_collision_star_door), + SET_INT(oInteractionSubtype, INT_SUBTYPE_STAR_DOOR), + OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HITBOX(/*Radius*/ 80, /*Height*/ 100), + SET_HOME(), + SET_FLOAT(oDrawingDistance, 20000), + CALL_NATIVE(bhv_door_init), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_star_door_loop), + CALL_NATIVE(bhv_star_door_loop_2), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvMrI[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + SPAWN_CHILD(/*Model*/ MODEL_MR_I_IRIS, /*Behavior*/ bhvMrIBody), + SET_MODEL(MODEL_MR_I), + BILLBOARD(), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_mr_i_loop), + END_LOOP(), +}; + +const BehaviorScript bhvMrIBody[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_mr_i_body_loop), + END_LOOP(), +}; + +const BehaviorScript bhvMrIParticle[] = { + BEGIN(OBJ_LIST_LEVEL), + BILLBOARD(), + OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_INT(oIntangibleTimer, 0), + SET_HITBOX(50, 50), + SET_INT(oDamageOrCoinValue, 1), + SET_INT(oInteractType, INTERACT_DAMAGE), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 0, /*Unused*/ 0, 0), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_mr_i_particle_loop), + END_LOOP(), +}; + +const BehaviorScript bhvPurpleParticle[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + BILLBOARD(), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_REPEAT(10), + CALL_NATIVE(bhv_piranha_particle_loop), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvGiantPole[] = { + BEGIN(OBJ_LIST_POLELIKE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INT(oInteractType, INTERACT_POLE), + SET_HITBOX(/*Radius*/ 80, /*Height*/ 2100), + SET_HOME(), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_giant_pole_loop), + END_LOOP(), +}; + +const BehaviorScript bhvPoleGrabbing[] = { + BEGIN(OBJ_LIST_POLELIKE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INT(oInteractType, INTERACT_POLE), + SET_HITBOX(/*Radius*/ 80, /*Height*/ 1500), + CALL_NATIVE(bhv_pole_init), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_pole_base_loop), + END_LOOP(), +}; + +const BehaviorScript bhvThiHugeIslandTop[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(thi_seg7_collision_top_trap), + BEGIN_LOOP(), + CALL_NATIVE(bhv_thi_huge_island_top_loop), + END_LOOP(), +}; + +const BehaviorScript bhvThiTinyIslandTop[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_LOOP(), + CALL_NATIVE(bhv_thi_tiny_island_top_loop), + END_LOOP(), +}; + +const BehaviorScript bhvCapSwitchBase[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(capswitch_collision_05003448), + BEGIN_LOOP(), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvCapSwitch[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(capswitch_collision_050033D0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_cap_switch_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvKingBobomb[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, king_bobomb_seg5_anims_0500FE30), + SET_INT(oInteractType, INTERACT_GRABBABLE), + SET_HITBOX(/*Radius*/ 100, /*Height*/ 100), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SET_INT(oIntangibleTimer, 0), + DROP_TO_FLOOR(), + SET_HOME(), + SPAWN_OBJ(/*Model*/ MODEL_NONE, /*Behavior*/ bhvBobombAnchorMario), + SET_INT(oHealth, 3), + SET_INT(oDamageOrCoinValue, 1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_king_bobomb_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBobombAnchorMario[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_FLOAT(oParentRelativePosX, 100), + SET_FLOAT(oParentRelativePosZ, 150), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bobomb_anchor_mario_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBetaChestBottom[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + CALL_NATIVE(bhv_beta_chest_bottom_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_beta_chest_bottom_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBetaChestLid[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_beta_chest_lid_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBubbleParticleSpawner[] = { + BEGIN(OBJ_LIST_DEFAULT), + DISABLE_RENDERING(), + SET_RANDOM_INT(oWaterObjUnkF4, /*Minimum*/ 2, /*Range*/ 9), + DELAY_VAR(oWaterObjUnkF4), + SPAWN_CHILD(/*Model*/ MODEL_BUBBLE, /*Behavior*/ bhvSmallWaterWave), + PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_BUBBLE), + DEACTIVATE(), +}; + +const BehaviorScript bhvBubbleMaybe[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + CALL_NATIVE(bhv_bubble_wave_init), + SET_RANDOM_FLOAT(oWaterObjUnkF4, /*Minimum*/ -75, /*Range*/ 150), + SET_RANDOM_FLOAT(oWaterObjUnkF8, /*Minimum*/ -75, /*Range*/ 150), + SET_RANDOM_FLOAT(oWaterObjUnkFC, /*Minimum*/ -75, /*Range*/ 150), + SUM_FLOAT(/*Dest*/ oPosX, /*Value 1*/ oPosX, /*Value 2*/ oWaterObjUnkF4), + SUM_FLOAT(/*Dest*/ oPosZ, /*Value 1*/ oPosZ, /*Value 2*/ oWaterObjUnkF8), + SUM_FLOAT(/*Dest*/ oPosY, /*Value 1*/ oPosY, /*Value 2*/ oWaterObjUnkFC), + SET_INT(oAnimState, -1), + BEGIN_REPEAT(60), + ADD_INT(oAnimState, 1), + CALL_NATIVE(bhv_bubble_maybe_loop), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvSmallWaterWave[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + CALL_NATIVE(bhv_bubble_wave_init), + SET_RANDOM_FLOAT(oWaterObjUnkF4, /*Minimum*/ -50, /*Range*/ 100), + SET_RANDOM_FLOAT(oWaterObjUnkF8, /*Minimum*/ -50, /*Range*/ 100), + SUM_FLOAT(/*Dest*/ oPosX, /*Value 1*/ oPosX, /*Value 2*/ oWaterObjUnkF4), + SUM_FLOAT(/*Dest*/ oPosZ, /*Value 1*/ oPosZ, /*Value 2*/ oWaterObjUnkF8), + SET_RANDOM_FLOAT(oWaterObjUnkFC, /*Minimum*/ 0, /*Range*/ 50), + SUM_FLOAT(/*Dest*/ oPosY, /*Value 1*/ oPosY, /*Value 2*/ oWaterObjUnkFC), + SET_INT(oAnimState, -1), + CALL(bhvSmallWaterWave398), + BEGIN_REPEAT(60), + CALL(bhvSmallWaterWave398), + CALL_NATIVE(bhv_small_water_wave_loop), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvSmallWaterWave398[] = { + ADD_INT(oAnimState, 1), + ADD_FLOAT(oPosY, 7), + SET_RANDOM_FLOAT(oWaterObjUnkF4, /*Minimum*/ -2, /*Range*/ 5), + SET_RANDOM_FLOAT(oWaterObjUnkF8, /*Minimum*/ -2, /*Range*/ 5), + SUM_FLOAT(/*Dest*/ oPosX, /*Value 1*/ oPosX, /*Value 2*/ oWaterObjUnkF4), + SUM_FLOAT(/*Dest*/ oPosZ, /*Value 1*/ oPosZ, /*Value 2*/ oWaterObjUnkF8), + RETURN(), +}; + +const BehaviorScript bhvWaterAirBubble[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 400, /*Height*/ 150, /*Downwards offset*/ -150), + SET_INT(oIntangibleTimer, 0), + SET_INTERACT_TYPE(INTERACT_WATER_RING), + SET_INT(oDamageOrCoinValue, 5), + CALL_NATIVE(bhv_water_air_bubble_init), + SET_INT(oAnimState, -1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_water_air_bubble_loop), + END_LOOP(), +}; + +const BehaviorScript bhvSmallParticle[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + BILLBOARD(), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_particle_init), + BEGIN_REPEAT(70), + CALL_NATIVE(bhv_particle_loop), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvPlungeBubble[] = { + BEGIN(OBJ_LIST_DEFAULT), + PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_PLUNGE_BUBBLE), + DISABLE_RENDERING(), + CALL_NATIVE(bhv_water_waves_init), + DEACTIVATE(), +}; + +const BehaviorScript bhvSmallParticleSnow[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + BILLBOARD(), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_particle_init), + BEGIN_REPEAT(30), + CALL_NATIVE(bhv_particle_loop), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvSmallParticleBubbles[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + BILLBOARD(), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_particle_init), + BEGIN_REPEAT(70), + CALL_NATIVE(bhv_small_bubbles_loop), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvFishGroup[] = { + BEGIN(OBJ_LIST_DEFAULT), + BEGIN_LOOP(), + CALL_NATIVE(bhv_fish_group_loop), + END_LOOP(), +}; + +const BehaviorScript bhvCannon[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SPAWN_CHILD(/*Model*/ MODEL_CANNON_BARREL, /*Behavior*/ bhvCannonBarrel), + SET_INT(oInteractType, INTERACT_CANNON_BASE), + ADD_FLOAT(oPosY, -340), + SET_HOME(), + SET_HITBOX(/*Radius*/ 150, /*Height*/ 150), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_cannon_base_loop), + END_LOOP(), +}; + +const BehaviorScript bhvCannonBarrel[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_cannon_barrel_loop), + END_LOOP(), +}; + +const BehaviorScript bhvCannonBaseUnused[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_INT(oAnimState, -1), + BEGIN_REPEAT(8), + CALL_NATIVE(bhv_cannon_base_unused_loop), + ADD_INT(oAnimState, 1), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvChuckya[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, chuckya_seg8_anims_0800C070), + ANIMATE(5), + SET_INT(oInteractType, INTERACT_GRABBABLE), + SET_HITBOX(/*Radius*/ 150, /*Height*/ 100), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SPAWN_OBJ(/*Model*/ MODEL_NONE, /*Behavior*/ bhvChuckyaAnchorMario), + SET_INT(oNumLootCoins, 5), + SET_INT(oIntangibleTimer, 0), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_chuckya_loop), + END_LOOP(), +}; + +const BehaviorScript bhvChuckyaAnchorMario[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_FLOAT(oParentRelativePosY, -60), + SET_FLOAT(oParentRelativePosZ, 150), + BEGIN_LOOP(), + CALL_NATIVE(bhv_chuckya_anchor_mario_loop), + END_LOOP(), +}; + +const BehaviorScript bhvUnused05A8[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BREAK(), +}; + +const BehaviorScript bhvRotatingPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_rotating_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvTower[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(wf_seg7_collision_tower), + SET_FLOAT(oCollisionDistance, 3000), + SET_FLOAT(oDrawingDistance, 20000), + BEGIN_LOOP(), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvBulletBillCannon[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(wf_seg7_collision_bullet_bill_cannon), + SET_FLOAT(oCollisionDistance, 300), + BEGIN_LOOP(), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvWfBreakableWallRight[] = { + BEGIN(OBJ_LIST_SURFACE), + LOAD_COLLISION_DATA(wf_seg7_collision_breakable_wall), + GOTO(bhvWfBreakableWallLeft + 1 + 2), +}; + +const BehaviorScript bhvWfBreakableWallLeft[] = { + BEGIN(OBJ_LIST_SURFACE), + LOAD_COLLISION_DATA(wf_seg7_collision_breakable_wall_2), + // WF breakable walls - common: + OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HITBOX(/*Radius*/ 300, /*Height*/ 400), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_wf_breakable_wall_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvKickableBoard[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(wf_seg7_collision_kickable_board), + SET_HITBOX(/*Radius*/ 100, /*Height*/ 1200), + SET_HURTBOX(/*Radius*/ 1, /*Height*/ 1), + SET_FLOAT(oCollisionDistance, 1500), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_kickable_board_loop), + END_LOOP(), +}; + +const BehaviorScript bhvTowerDoor[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(wf_seg7_collision_tower_door), + SET_HITBOX(/*Radius*/ 100, /*Height*/ 100), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_tower_door_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvRotatingCounterClockwise[] = { + BEGIN(OBJ_LIST_DEFAULT), + BREAK(), +}; + +const BehaviorScript bhvWfRotatingWoodenPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(wf_seg7_collision_clocklike_rotation), + BEGIN_LOOP(), + CALL_NATIVE(bhv_wf_rotating_wooden_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvKoopaShellUnderwater[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_LOOP(), + CALL_NATIVE(bhv_koopa_shell_underwater_loop), + END_LOOP(), +}; + +const BehaviorScript bhvExitPodiumWarp[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_INT(oInteractType, INTERACT_WARP), + DROP_TO_FLOOR(), + SET_FLOAT(oCollisionDistance, 8000), + LOAD_COLLISION_DATA(ttm_seg7_collision_podium_warp), + SET_INT(oIntangibleTimer, 0), + SET_HITBOX(/*Radius*/ 50, /*Height*/ 50), + BEGIN_LOOP(), + CALL_NATIVE(load_object_collision_model), + SET_INT(oInteractStatus, 0), + END_LOOP(), +}; + +const BehaviorScript bhvFadingWarp[] = { + BEGIN(OBJ_LIST_LEVEL), + SET_INT(oInteractionSubtype, INT_SUBTYPE_FADING_WARP), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_INT(oInteractType, INTERACT_WARP), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_fading_warp_loop), + END_LOOP(), +}; + +const BehaviorScript bhvWarp[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_INT(oInteractType, INTERACT_WARP), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_warp_loop), + END_LOOP(), +}; + +const BehaviorScript bhvWarpPipe[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_INT(oInteractType, INTERACT_WARP), + LOAD_COLLISION_DATA(warp_pipe_seg3_collision_03009AC8), + SET_FLOAT(oDrawingDistance, 16000), + SET_INT(oIntangibleTimer, 0), + SET_HITBOX(/*Radius*/ 70, /*Height*/ 50), + BEGIN_LOOP(), + CALL_NATIVE(bhv_warp_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvWhitePuffExplosion[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_white_puff_exploding_loop), + END_LOOP(), +}; + +const BehaviorScript bhvSpawnedStar[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INT(oBehParams2ndByte, 1), + GOTO(bhvSpawnedStarNoLevelExit + 1 + 1), +}; + +const BehaviorScript bhvSpawnedStarNoLevelExit[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + // Spawned star - common: + SET_HOME(), + CALL_NATIVE(bhv_spawned_star_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_spawned_star_loop), + END_LOOP(), +}; + +const BehaviorScript bhvMrIBlueCoin[] = { + BEGIN(OBJ_LIST_LEVEL), + SET_INT(oInteractType, INTERACT_COIN), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_INT(oIntangibleTimer, 0), + SET_FLOAT(oMrIUnk110, 20), + SET_INT(oAnimState, -1), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + CALL_NATIVE(bhv_coin_init), + SET_INT(oDamageOrCoinValue, 5), + SET_HITBOX(/*Radius*/ 120, /*Height*/ 64), + BEGIN_LOOP(), + CALL_NATIVE(bhv_coin_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvCoinInsideBoo[] = { + BEGIN(OBJ_LIST_LEVEL), + SET_HITBOX(/*Radius*/ 100, /*Height*/ 64), + SET_INT(oInteractType, INTERACT_COIN), + OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BILLBOARD(), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_coin_inside_boo_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvCoinFormationSpawn[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_coin_formation_spawn_loop), + END_LOOP(), +}; + +const BehaviorScript bhvCoinFormation[] = { + BEGIN(OBJ_LIST_SPAWNER), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + CALL_NATIVE(bhv_coin_formation_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_coin_formation_loop), + END_LOOP(), +}; + +const BehaviorScript bhvOneCoin[] = { + BEGIN(OBJ_LIST_LEVEL), + SET_INT(oBehParams2ndByte, 1), + GOTO(bhvYellowCoin + 1), +}; + +const BehaviorScript bhvYellowCoin[] = { + BEGIN(OBJ_LIST_LEVEL), + // Yellow coin - common: + BILLBOARD(), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + CALL_NATIVE(bhv_yellow_coin_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_yellow_coin_loop), + END_LOOP(), +}; + +const BehaviorScript bhvTemporaryYellowCoin[] = { + BEGIN(OBJ_LIST_LEVEL), + BILLBOARD(), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_yellow_coin_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_temp_coin_loop), + END_LOOP(), +}; + +const BehaviorScript bhvThreeCoinsSpawn[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_REPEAT(3), + SPAWN_CHILD(/*Model*/ MODEL_YELLOW_COIN, /*Behavior*/ bhvSingleCoinGetsSpawned), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvTenCoinsSpawn[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_REPEAT(10), + SPAWN_CHILD(/*Model*/ MODEL_YELLOW_COIN, /*Behavior*/ bhvSingleCoinGetsSpawned), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvSingleCoinGetsSpawned[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + CALL_NATIVE(bhv_coin_init), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_coin_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvCoinSparkles[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_FLOAT(oGraphYOffset, 25), + SET_INT(oAnimState, -1), + BEGIN_REPEAT(8), + ADD_INT(oAnimState, 1), + END_REPEAT(), + BEGIN_REPEAT(2), + CALL_NATIVE(bhv_coin_sparkles_loop), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvGoldenCoinSparkles[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + DISABLE_RENDERING(), + BEGIN_REPEAT(3), + CALL_NATIVE(bhv_golden_coin_sparkles_loop), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvWallTinyStarParticle[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + BEGIN_REPEAT(10), + CALL_NATIVE(bhv_wall_tiny_star_particle_loop), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvVertStarParticleSpawner[] = { + BEGIN(OBJ_LIST_DEFAULT), + DISABLE_RENDERING(), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_V_STAR), + CALL_NATIVE(bhv_tiny_star_particles_init), + DELAY(1), + DEACTIVATE(), +}; + +const BehaviorScript bhvPoundTinyStarParticle[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + BEGIN_REPEAT(10), + CALL_NATIVE(bhv_pound_tiny_star_particle_loop), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvHorStarParticleSpawner[] = { + BEGIN(OBJ_LIST_DEFAULT), + DISABLE_RENDERING(), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_H_STAR), + CALL_NATIVE(bhv_pound_tiny_star_particle_init), + DELAY(1), + DEACTIVATE(), +}; + +const BehaviorScript bhvPunchTinyTriangle[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_punch_tiny_triangle_loop), + END_LOOP(), +}; + +const BehaviorScript bhvTriangleParticleSpawner[] = { + BEGIN(OBJ_LIST_DEFAULT), + DISABLE_RENDERING(), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_TRIANGLE), + CALL_NATIVE(bhv_punch_tiny_triangle_init), + DELAY(1), + DEACTIVATE(), +}; + +const BehaviorScript bhvDoorWarp[] = { + BEGIN(OBJ_LIST_SURFACE), + SET_INT(oInteractType, INTERACT_WARP_DOOR), + GOTO(bhvDoor + 1 + 1), +}; + +const BehaviorScript bhvDoor[] = { + BEGIN(OBJ_LIST_SURFACE), + SET_INT(oInteractType, INTERACT_DOOR), + // Door - common: + OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, door_seg3_anims_030156C0), + ANIMATE(0), + LOAD_COLLISION_DATA(door_seg3_collision_0301CE78), + SET_HITBOX(/*Radius*/ 80, /*Height*/ 100), + SET_INT(oIntangibleTimer, 0), + SET_FLOAT(oCollisionDistance, 1000), + SET_HOME(), + CALL_NATIVE(bhv_door_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_door_loop), + END_LOOP(), +}; + +const BehaviorScript bhvGrindel[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(ssl_seg7_collision_grindel), + DROP_TO_FLOOR(), + ADD_FLOAT(oPosY, 1), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_grindel_thwomp_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvThwomp2[] = { + BEGIN(OBJ_LIST_SURFACE), + LOAD_COLLISION_DATA(thwomp_seg5_collision_0500B92C), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + ADD_FLOAT(oPosY, 1), + SET_HOME(), + SCALE(/*Unused*/ 0, /*Field*/ 140), + SET_FLOAT(oDrawingDistance, 4000), + BEGIN_LOOP(), + CALL_NATIVE(bhv_grindel_thwomp_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvThwomp[] = { + BEGIN(OBJ_LIST_SURFACE), + LOAD_COLLISION_DATA(thwomp_seg5_collision_0500B7D0), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + ADD_FLOAT(oPosY, 1), + SCALE(/*Unused*/ 0, /*Field*/ 140), + SET_HOME(), + SET_FLOAT(oDrawingDistance, 4000), + BEGIN_LOOP(), + CALL_NATIVE(bhv_grindel_thwomp_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvTumblingBridgePlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_FLOAT(oCollisionDistance, 300), + BEGIN_LOOP(), + CALL_NATIVE(bhv_tumbling_bridge_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvWfTumblingBridge[] = { + BEGIN(OBJ_LIST_SPAWNER), + OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_tumbling_bridge_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBbhTumblingBridge[] = { + BEGIN(OBJ_LIST_SPAWNER), + OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + SET_INT(oBehParams2ndByte, 1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_tumbling_bridge_loop), + END_LOOP(), +}; + +const BehaviorScript bhvLllTumblingBridge[] = { + BEGIN(OBJ_LIST_SPAWNER), + OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + SET_INT(oBehParams2ndByte, 2), + BEGIN_LOOP(), + CALL_NATIVE(bhv_tumbling_bridge_loop), + END_LOOP(), +}; + +const BehaviorScript bhvFlame[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_HOME(), + SCALE(/*Unused*/ 0, /*Field*/ 700), + SET_INTERACT_TYPE(INTERACT_FLAME), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 50, /*Height*/ 25, /*Downwards offset*/ 25), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + SET_INT(oInteractStatus, 0), + ANIMATE_TEXTURE(oAnimState, 2), + END_LOOP(), +}; + +const BehaviorScript bhvAnotherElavator[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(hmc_seg7_collision_elevator), + SET_HOME(), + CALL_NATIVE(bhv_elevator_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_elevator_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvRrElevatorPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(rr_seg7_collision_elevator_platform), + SET_HOME(), + CALL_NATIVE(bhv_elevator_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_elevator_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvHmcElevatorPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(hmc_seg7_collision_elevator), + SET_HOME(), + CALL_NATIVE(bhv_elevator_init), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_elevator_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvWaterMist[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_INT(oOpacity, 254), + SET_FLOAT(oForwardVel, 20), + SET_FLOAT(oVelY, -8), + ADD_FLOAT(oPosY, 62), + BEGIN_LOOP(), + CALL_NATIVE(bhv_water_mist_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBreathParticleSpawner[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_REPEAT(8), + CALL_NATIVE(bhv_water_mist_spawn_loop), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvBreakBoxTriangle[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_REPEAT(18), + CALL_NATIVE(cur_obj_rotate_face_angle_using_vel), + CALL_NATIVE(cur_obj_move_using_fvel_and_gravity), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvWaterMist2[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + SET_INT(oFaceAnglePitch, 0xC000), + SCALE(/*Unused*/ 0, /*Field*/ 2100), + BEGIN_LOOP(), + CALL_NATIVE(bhv_water_mist_2_loop), + END_LOOP(), +}; + +const BehaviorScript bhvUnused0DFC[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INT(oAnimState, -1), + SET_FLOAT(oFaceAnglePitch, 0), + SET_FLOAT(oFaceAngleYaw, 0), + SET_FLOAT(oFaceAngleRoll, 0), + BEGIN_REPEAT(6), + ADD_INT(oAnimState, 1), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvMistCircParticleSpawner[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_pound_white_puffs_init), + DELAY(1), + DEACTIVATE(), +}; + +const BehaviorScript bhvDirtParticleSpawner[] = { + BEGIN(OBJ_LIST_DEFAULT), + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_ground_sand_init), + DELAY(1), + DEACTIVATE(), +}; + +const BehaviorScript bhvSnowParticleSpawner[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_ground_snow_init), + DELAY(1), + DEACTIVATE(), +}; + +const BehaviorScript bhvWind[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_LOOP(), + CALL_NATIVE(bhv_wind_loop), + END_LOOP(), +}; + +const BehaviorScript bhvEndToad[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_ANIMATIONS(oAnimations, toad_seg6_anims_0600FB58), + ANIMATE(0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_end_toad_loop), + END_LOOP(), +}; + +const BehaviorScript bhvEndPeach[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_ANIMATIONS(oAnimations, peach_seg5_anims_0501C41C), + ANIMATE(0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_end_peach_loop), + END_LOOP(), +}; + +const BehaviorScript bhvUnusedParticleSpawn[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SET_INT(oIntangibleTimer, 0), + SET_HITBOX(/*Radius*/ 40, /*Height*/ 40), + BEGIN_LOOP(), + CALL_NATIVE(bhv_unused_particle_spawn_loop), + END_LOOP(), +}; + +const BehaviorScript bhvUkiki[] = { + BEGIN(OBJ_LIST_GENACTOR), + GOTO(bhvMacroUkiki + 1), +}; + +const BehaviorScript bhvUkikiCageChild[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_FLOAT(oPosX, 2560), + SET_FLOAT(oPosY, 1457), + SET_FLOAT(oPosZ, 1898), + BREAK(), +}; + +const BehaviorScript bhvUkikiCageStar[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ukiki_cage_star_loop), + END_LOOP(), +}; + +const BehaviorScript bhvUkikiCage[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + LOAD_COLLISION_DATA(ttm_seg7_collision_ukiki_cage), + SPAWN_CHILD(/*Model*/ MODEL_STAR, /*Behavior*/ bhvUkikiCageStar), + SPAWN_CHILD(/*Model*/ MODEL_NONE, /*Behavior*/ bhvUkikiCageChild), + SET_FLOAT(oCollisionDistance, 20000), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ukiki_cage_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBitfsSinkingPlatforms[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(bitfs_seg7_collision_sinking_platform), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bitfs_sinking_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvBitfsSinkingCagePlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(bitfs_seg7_collision_sinking_cage_platform), + SET_HOME(), + SPAWN_CHILD(/*Model*/ MODEL_BITFS_BLUE_POLE, /*Behavior*/ bhvDddMovingPole), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bitfs_sinking_cage_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvDddMovingPole[] = { + BEGIN(OBJ_LIST_POLELIKE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INT(oInteractType, INTERACT_POLE), + SET_HITBOX(/*Radius*/ 80, /*Height*/ 710), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ddd_moving_pole_loop), + CALL_NATIVE(bhv_pole_base_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBitfsTiltingInvertedPyramid[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(bitfs_seg7_collision_inverted_pyramid), + SET_HOME(), + CALL_NATIVE(bhv_platform_normals_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_tilting_inverted_pyramid_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvSquishablePlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(bitfs_seg7_collision_squishable_platform), + SET_FLOAT(oCollisionDistance, 10000), + CALL_NATIVE(bhv_platform_normals_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_squishable_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvCutOutObject[] = { + BEGIN(OBJ_LIST_GENACTOR), + DISABLE_RENDERING(), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BREAK(), +}; + +const BehaviorScript bhvBetaMovingFlamesSpawn[] = { + BEGIN_LOOP(), + CALL_NATIVE(bhv_beta_moving_flames_spawn_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBetaMovingFlames[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_beta_moving_flames_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvRrRotatingBridgePlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(rr_seg7_collision_rotating_platform_with_fire), + SET_FLOAT(oCollisionDistance, 1500), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_rr_rotating_bridge_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvFlamethrower[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_flamethrower_loop), + END_LOOP(), +}; + +const BehaviorScript bhvFlamethrowerFlame[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INTERACT_TYPE(INTERACT_FLAME), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 50, /*Height*/ 25, /*Downwards offset*/ 25), + BILLBOARD(), + SET_HOME(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_flamethrower_flame_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvBouncingFireball[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DISABLE_RENDERING(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bouncing_fireball_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBouncingFireballFlame[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INTERACT_TYPE(INTERACT_FLAME), + SET_FLOAT(oGraphYOffset, 30), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 50, /*Height*/ 25, /*Downwards offset*/ 25), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bouncing_fireball_flame_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvBowserShockWave[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_INT(oOpacity, 255), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bowser_shock_wave_loop), + END_LOOP(), +}; + +const BehaviorScript bhvFireParticleSpawner[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_FLOAT(oGraphYOffset, 70), + SET_INT(oAnimState, -1), + BEGIN_LOOP(), + ADD_INT(oAnimState, 1), + CALL_NATIVE(bhv_flame_mario_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBlackSmokeMario[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_INT(oAnimState, 4), + SET_FLOAT(oGraphYOffset, 50), + BEGIN_REPEAT(8), + CALL_NATIVE(bhv_black_smoke_mario_loop), + DELAY(1), + CALL_NATIVE(bhv_black_smoke_mario_loop), + DELAY(1), + CALL_NATIVE(bhv_black_smoke_mario_loop), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvBlackSmokeBowser[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_FLOAT(oGraphYOffset, 0), + BEGIN_REPEAT(8), + CALL_NATIVE(bhv_black_smoke_bowser_loop), + ANIMATE_TEXTURE(oAnimState, 4), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvBlackSmokeUpward[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_REPEAT(4), + CALL_NATIVE(bhv_black_smoke_upward_loop), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvBetaFishSplashSpawner[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DISABLE_RENDERING(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_beta_fish_splash_spawner_loop), + END_LOOP(), +}; + +const BehaviorScript bhvSpindrift[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, spindrift_seg5_anims_05002D68), + ANIMATE(0), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SET_HOME(), + SET_INT(oInteractionSubtype, INT_SUBTYPE_TWIRL_BOUNCE), + BEGIN_LOOP(), + CALL_NATIVE(bhv_spindrift_loop), + END_LOOP(), +}; + +const BehaviorScript bhvTowerPlatformGroup[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + DISABLE_RENDERING(), + ADD_FLOAT(oPosY, 300), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_tower_platform_group_loop), + END_LOOP(), +}; + +const BehaviorScript bhvWfSlidingTowerPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(wf_seg7_collision_platform), + BEGIN_LOOP(), + CALL_NATIVE(bhv_wf_sliding_tower_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvWfElevatorTowerPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(wf_seg7_collision_platform), + BEGIN_LOOP(), + CALL_NATIVE(bhv_wf_elevator_tower_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvWfSolidTowerPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(wf_seg7_collision_platform), + BEGIN_LOOP(), + CALL_NATIVE(bhv_wf_solid_tower_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvLeafParticleSpawner[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_snow_leaf_particle_spawn_init), + DELAY(1), + DEACTIVATE(), +}; + +const BehaviorScript bhvTreeSnow[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_tree_snow_or_leaf_loop), + END_LOOP(), +}; + +const BehaviorScript bhvTreeLeaf[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_LOOP(), + CALL_NATIVE(bhv_tree_snow_or_leaf_loop), + END_LOOP(), +}; + +const BehaviorScript bhvAnotherTiltingPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + CALL_NATIVE(bhv_platform_normals_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_tilting_inverted_pyramid_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvSquarishPathMoving[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(bitdw_seg7_collision_moving_pyramid), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_squarish_path_moving_loop), + END_LOOP(), +}; + +const BehaviorScript bhvPiranhaPlantBubble[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_piranha_plant_bubble_loop), + END_LOOP(), +}; + +const BehaviorScript bhvPiranhaPlantWakingBubbles[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + BILLBOARD(), + OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_REPEAT(10), + CALL_NATIVE(bhv_piranha_plant_waking_bubbles_loop), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvFloorSwitchAnimatesObject[] = { + BEGIN(OBJ_LIST_SURFACE), + SET_INT(oBehParams2ndByte, 1), + GOTO(bhvFloorSwitchHardcodedModel + 1), +}; + +const BehaviorScript bhvFloorSwitchGrills[] = { + BEGIN(OBJ_LIST_SURFACE), + GOTO(bhvFloorSwitchHardcodedModel + 1), +}; + +const BehaviorScript bhvFloorSwitchHardcodedModel[] = { + BEGIN(OBJ_LIST_SURFACE), + // Floor switch - common: + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(purple_switch_seg8_collision_0800C7A8), + BEGIN_LOOP(), + CALL_NATIVE(bhv_purple_switch_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvFloorSwitchHiddenObjects[] = { + BEGIN(OBJ_LIST_SURFACE), + SET_INT(oBehParams2ndByte, 2), + GOTO(bhvFloorSwitchHardcodedModel + 1), +}; + +const BehaviorScript bhvHiddenObject[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(breakable_box_seg8_collision_08012D70), + SET_FLOAT(oCollisionDistance, 300), + BEGIN_LOOP(), + CALL_NATIVE(bhv_hidden_object_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBreakableBox[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(breakable_box_seg8_collision_08012D70), + SET_FLOAT(oCollisionDistance, 500), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_breakable_box_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), + BREAK(), +}; + +const BehaviorScript bhvPushableMetalBox[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(metal_box_seg8_collision_08024C28), + SET_FLOAT(oCollisionDistance, 500), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_pushable_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvHeaveHo[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, heave_ho_seg5_anims_0501534C), + ANIMATE(0), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 200, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 600, /*Unused*/ 0, 0), + SPAWN_OBJ(/*Model*/ MODEL_NONE, /*Behavior*/ bhvHeaveHoThrowMario), + SET_INT(oInteractType, INTERACT_GRABBABLE), + SET_INT(oInteractionSubtype, INT_SUBTYPE_NOT_GRABBABLE | INT_SUBTYPE_GRABS_MARIO), + SET_HITBOX(/*Radius*/ 120, /*Height*/ 100), + SET_HOME(), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_heave_ho_loop), + END_LOOP(), +}; + +const BehaviorScript bhvHeaveHoThrowMario[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_heave_ho_throw_mario_loop), + END_LOOP(), +}; + +const BehaviorScript bhvCcmTouchedStarSpawn[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HITBOX(/*Radius*/ 500, /*Height*/ 500), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ccm_touched_star_spawn_loop), + END_LOOP(), +}; + +const BehaviorScript bhvUnusedPoundablePlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(sl_seg7_collision_pound_explodes), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_unused_poundable_platform), + END_LOOP(), +}; + +const BehaviorScript bhvBetaTrampolineTop[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(springboard_collision_05001A28), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_beta_trampoline_top_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvBetaTrampolineSpring[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_beta_trampoline_spring_loop), + END_LOOP(), +}; + +const BehaviorScript bhvJumpingBox[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 600, /*Unused*/ 0, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_jumping_box_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBooCage[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_FLOAT(oGraphYOffset, 10), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_boo_cage_loop), + END_LOOP(), +}; + +const BehaviorScript bhvStub[] = { + BEGIN(OBJ_LIST_DEFAULT), + DISABLE_RENDERING(), + BREAK(), +}; + +const BehaviorScript bhvIgloo[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INTERACT_TYPE(INTERACT_IGLOO_BARRIER), + SET_HITBOX(/*Radius*/ 100, /*Height*/ 200), + SET_INT(oIntangibleTimer, 0), + SET_HOME(), + BEGIN_LOOP(), + SET_INT(oInteractStatus, 0), + END_LOOP(), +}; + +const BehaviorScript bhvBowserKey[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_HOME(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bowser_key_loop), + END_LOOP(), +}; + +const BehaviorScript bhvGrandStar[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INTERACT_TYPE(INTERACT_STAR_OR_KEY), + SET_INT(oInteractionSubtype, INT_SUBTYPE_GRAND_STAR), + SET_HITBOX(/*Radius*/ 160, /*Height*/ 100), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_grand_star_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBetaBooKey[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_HITBOX(/*Radius*/ 32, /*Height*/ 64), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_beta_boo_key_loop), + END_LOOP(), +}; + +const BehaviorScript bhvAlphaBooKey[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_HITBOX(/*Radius*/ 32, /*Height*/ 64), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_alpha_boo_key_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBulletBill[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 50, /*Height*/ 50, /*Downwards offset*/ 50), + SET_INTERACT_TYPE(INTERACT_DAMAGE), + SET_INT(oDamageOrCoinValue, 3), + SCALE(/*Unused*/ 0, /*Field*/ 40), + SET_INT(oIntangibleTimer, 0), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 0, /*Unused*/ 0, 0), + CALL_NATIVE(bhv_bullet_bill_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bullet_bill_loop), + END_LOOP(), +}; + +const BehaviorScript bhvWhitePuffSmoke[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + ADD_FLOAT(oPosY, -100), + CALL_NATIVE(bhv_white_puff_smoke_init), + SET_INT(oAnimState, -1), + BEGIN_REPEAT(10), + ADD_INT(oAnimState, 1), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvUnused1820[] = { + BEGIN(OBJ_LIST_DEFAULT), + BREAK(), +}; + +const BehaviorScript bhvBowserTailAnchor[] = { + BEGIN(OBJ_LIST_GENACTOR), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 100, /*Height*/ 50, /*Downwards offset*/ -50), + SET_INT(oIntangibleTimer, 0), + DISABLE_RENDERING(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bowser_tail_anchor_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBowser[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_INT(oInteractType, INTERACT_GRABBABLE), + SET_HITBOX(/*Radius*/ 400, /*Height*/ 400), + DROP_TO_FLOOR(), + SET_HOME(), + LOAD_ANIMATIONS(oAnimations, bowser_seg6_anims_06057690), + SPAWN_CHILD(/*Model*/ MODEL_NONE, /*Behavior*/ bhvBowserBodyAnchor), + SPAWN_CHILD(/*Model*/ MODEL_BOWSER_BOMB_CHILD_OBJ, /*Behavior*/ bhvBowserFlameSpawn), + SPAWN_OBJ(/*Model*/ MODEL_NONE, /*Behavior*/ bhvBowserTailAnchor), + SET_INT(oNumLootCoins, 50), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SET_HOME(), + CALL_NATIVE(bhv_bowser_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bowser_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBowserBodyAnchor[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_HITBOX(/*Radius*/ 100, /*Height*/ 300), + SET_INTERACT_TYPE(INTERACT_DAMAGE), + SET_INT(oInteractionSubtype, INT_SUBTYPE_BIG_KNOCKBACK), + DISABLE_RENDERING(), + SET_INT(oDamageOrCoinValue, 2), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bowser_body_anchor_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBowserFlameSpawn[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_MODEL(MODEL_NONE), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bowser_flame_spawn_loop), + END_LOOP(), +}; + +const BehaviorScript bhvTiltingBowserLavaPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(bowser_2_seg7_collision_tilting_platform), + SET_FLOAT(oDrawingDistance, 20000), + SET_FLOAT(oCollisionDistance, 20000), + SET_INT(oFaceAngleYaw, 0), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(cur_obj_rotate_face_angle_using_vel), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvFallingBowserPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_FLOAT(oDrawingDistance, 20000), + SET_FLOAT(oCollisionDistance, 20000), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_falling_bowser_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvBlueBowserFlame[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INTERACT_TYPE(INTERACT_FLAME), + BILLBOARD(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + CALL_NATIVE(bhv_blue_bowser_flame_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_blue_bowser_flame_loop), + ANIMATE_TEXTURE(oAnimState, 2), + END_LOOP(), +}; + +const BehaviorScript bhvFlameFloatingLanding[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INTERACT_TYPE(INTERACT_FLAME), + BILLBOARD(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + CALL_NATIVE(bhv_flame_floating_landing_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_flame_floating_landing_loop), + ANIMATE_TEXTURE(oAnimState, 2), + END_LOOP(), +}; + +const BehaviorScript bhvBlueFlamesGroup[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_INTERACT_TYPE(INTERACT_FLAME), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_blue_flames_group_loop), + END_LOOP(), +}; + +const BehaviorScript bhvFlameBouncing[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_INTERACT_TYPE(INTERACT_FLAME), + BILLBOARD(), + CALL_NATIVE(bhv_flame_bouncing_init), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_flame_bouncing_loop), + ANIMATE_TEXTURE(oAnimState, 2), + END_LOOP(), +}; + +const BehaviorScript bhvFlameMovingForwardGrowing[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INTERACT_TYPE(INTERACT_FLAME), + BILLBOARD(), + CALL_NATIVE(bhv_flame_moving_forward_growing_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_flame_moving_forward_growing_loop), + ANIMATE_TEXTURE(oAnimState, 2), + END_LOOP(), +}; + +const BehaviorScript bhvFlameBowser[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INTERACT_TYPE(INTERACT_FLAME), + BILLBOARD(), + CALL_NATIVE(bhv_flame_bowser_init), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_flame_bowser_loop), + ANIMATE_TEXTURE(oAnimState, 2), + END_LOOP(), +}; + +const BehaviorScript bhvFlameLargeBurningOut[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INTERACT_TYPE(INTERACT_FLAME), + BILLBOARD(), + CALL_NATIVE(bhv_flame_large_burning_out_init), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_flame_bowser_loop), + ANIMATE_TEXTURE(oAnimState, 2), + END_LOOP(), +}; + +const BehaviorScript bhvBlueFish[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + LOAD_ANIMATIONS(oAnimations, blue_fish_seg3_anims_0301C2B0), + ANIMATE(0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_blue_fish_movement_loop), + END_LOOP(), +}; + +const BehaviorScript bhvTankFishGroup[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_tank_fish_group_loop), + END_LOOP(), +}; + +const BehaviorScript bhvCheckerboardElevatorGroup[] = { + BEGIN(OBJ_LIST_SPAWNER), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_checkerboard_elevator_group_init), + DELAY(1), + DEACTIVATE(), +}; + +const BehaviorScript bhvCheckerboardPlatformSub[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(checkerboard_platform_seg8_collision_0800D710), + CALL_NATIVE(bhv_checkerboard_platform_init), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_checkerboard_platform_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBowserKeyUnlockDoor[] = { + BEGIN(OBJ_LIST_DEFAULT), + LOAD_ANIMATIONS(oAnimations, bowser_key_seg3_anims_list), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bowser_key_unlock_door_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBowserKeyCourseExit[] = { + BEGIN(OBJ_LIST_DEFAULT), + LOAD_ANIMATIONS(oAnimations, bowser_key_seg3_anims_list), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bowser_key_course_exit_loop), + END_LOOP(), +}; + +const BehaviorScript bhvInvisibleObjectsUnderBridge[] = { + BEGIN(OBJ_LIST_DEFAULT), + CALL_NATIVE(bhv_invisible_objects_under_bridge_init), + BREAK(), +}; + +const BehaviorScript bhvWaterLevelPillar[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(inside_castle_seg7_collision_water_level_pillar), + CALL_NATIVE(bhv_water_level_pillar_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_water_level_pillar_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvDddWarp[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_FLOAT(oCollisionDistance, 30000), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ddd_warp_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvMoatGrills[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(castle_grounds_seg7_collision_moat_grills), + SET_FLOAT(oCollisionDistance, 30000), + BEGIN_LOOP(), + CALL_NATIVE(bhv_moat_grills_loop), + END_LOOP(), +}; + +const BehaviorScript bhvClockMinuteHand[] = { + BEGIN(OBJ_LIST_DEFAULT), + SET_INT(oAngleVelRoll, -0x180), + GOTO(bhvClockHourHand + 1 + 1), +}; + +const BehaviorScript bhvClockHourHand[] = { + BEGIN(OBJ_LIST_DEFAULT), + SET_INT(oAngleVelRoll, -0x20), + // Clock hand - common: + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_rotating_clock_arm_loop), + END_LOOP(), +}; + +const BehaviorScript bhvMacroUkiki[] = { + BEGIN(OBJ_LIST_GENACTOR), + // Ukiki - common: + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_INT(oInteractType, INTERACT_GRABBABLE), + SET_INT(oInteractionSubtype, INT_SUBTYPE_HOLDABLE_NPC), + SET_HITBOX(/*Radius*/ 40, /*Height*/ 40), + SET_INT(oIntangibleTimer, 0), + DROP_TO_FLOOR(), + LOAD_ANIMATIONS(oAnimations, ukiki_seg5_anims_05015784), + ANIMATE(0), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SET_HOME(), + CALL_NATIVE(bhv_ukiki_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ukiki_loop), + END_LOOP(), +}; + +const BehaviorScript bhvStub1D0C[] = { + BEGIN(OBJ_LIST_DEFAULT), + DEACTIVATE(), +}; + +const BehaviorScript bhvLllRotatingHexagonalPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(lll_seg7_collision_hexagonal_platform), + SET_HOME(), + BEGIN_LOOP(), + SET_INT(oAngleVelYaw, 0x100), + ADD_INT(oMoveAngleYaw, 0x100), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvLllSinkingRockBlock[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(lll_seg7_collision_floating_block), + ADD_FLOAT(oPosY, -50), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_lll_sinking_rock_block_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvStub1D70[] = { + BEGIN(OBJ_LIST_DEFAULT), + BREAK(), +}; + +const BehaviorScript bhvLllMovingOctagonalMeshPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + ADD_FLOAT(oPosY, -50), + LOAD_COLLISION_DATA(lll_seg7_collision_octagonal_moving_platform), + BEGIN_LOOP(), + CALL_NATIVE(bhv_lll_moving_octagonal_mesh_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvSnowBall[] = { + BREAK(), +}; + +const BehaviorScript bhvLllRotatingBlockWithFireBars[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(lll_seg7_collision_rotating_fire_bars), + SET_FLOAT(oCollisionDistance, 4000), + BEGIN_LOOP(), + CALL_NATIVE(bhv_lll_rotating_block_fire_bars_loop), + END_LOOP(), +}; + +const BehaviorScript bhvLllRotatingHexFlame[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_INTERACT_TYPE(INTERACT_FLAME), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 50, /*Height*/ 100, /*Downwards offset*/ 50), + SET_INT(oIntangibleTimer, 0), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_lll_rotating_hex_flame_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvLllWoodPiece[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(lll_seg7_collision_wood_piece), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_lll_wood_piece_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvLllFloatingWoodBridge[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_MODEL(MODEL_NONE), + BEGIN_LOOP(), + CALL_NATIVE(bhv_lll_floating_wood_bridge_loop), + END_LOOP(), +}; + +const BehaviorScript bhvVolcanoFlames[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + BEGIN_LOOP(), + ADD_INT(oAnimState, 1), + CALL_NATIVE(bhv_volcano_flames_loop), + END_LOOP(), +}; + +const BehaviorScript bhvLllRotatingHexagonalRing[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(lll_seg7_collision_rotating_platform), + BEGIN_LOOP(), + CALL_NATIVE(bhv_lll_rotating_hexagonal_ring_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvLllSinkingRectangularPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(lll_seg7_collision_slow_tilting_platform), + SET_FLOAT(oCollisionDistance, 2000), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_lll_sinking_rectangular_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvLllSinkingSquarePlatforms[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(lll_seg7_collision_sinking_pyramids), + ADD_FLOAT(oPosY, 5), + SET_FLOAT(oCollisionDistance, 2000), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_lll_sinking_square_platforms_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvLllTiltingInvertedPyramid[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(lll_seg7_collision_inverted_pyramid), + ADD_FLOAT(oPosY, 5), + SET_HOME(), + CALL_NATIVE(bhv_platform_normals_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_tilting_inverted_pyramid_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvUnused1F30[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BREAK(), +}; + +const BehaviorScript bhvKoopaShell[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_koopa_shell_loop), + END_LOOP(), +}; + +const BehaviorScript bhvKoopaShellFlame[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INTERACT_TYPE(INTERACT_FLAME), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_koopa_shell_flame_loop), + ANIMATE_TEXTURE(oAnimState, 2), + END_LOOP(), +}; + +const BehaviorScript bhvToxBox[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(ssl_seg7_collision_tox_box), + ADD_FLOAT(oPosY, 256), + SET_FLOAT(oDrawingDistance, 8000), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_tox_box_loop), + END_LOOP(), +}; + +const BehaviorScript bhvPiranhaPlant[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, piranha_plant_seg6_anims_0601C31C), + ANIMATE(0), + SET_INTERACT_TYPE(INTERACT_DAMAGE), + SET_HITBOX(/*Radius*/ 100, /*Height*/ 200), + SET_HURTBOX(/*Radius*/ 50, /*Height*/ 200), + SET_INT(oIntangibleTimer, 0), + SET_INT(oDamageOrCoinValue, 3), + SET_INT(oNumLootCoins, 5), + SPAWN_CHILD(/*Model*/ MODEL_BUBBLE, /*Behavior*/ bhvPiranhaPlantBubble), + SET_FLOAT(oDrawingDistance, 2000), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_piranha_plant_loop), + END_LOOP(), +}; + +const BehaviorScript bhvLllHexagonalMesh[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(lll_hexagonal_mesh_seg3_collision_0301CECC), + BEGIN_LOOP(), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvLllBowserPuzzlePiece[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(lll_seg7_collision_puzzle_piece), + SET_HOME(), + SET_FLOAT(oCollisionDistance, 3000), + BEGIN_LOOP(), + CALL_NATIVE(bhv_lll_bowser_puzzle_piece_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvLllBowserPuzzle[] = { + BEGIN(OBJ_LIST_SPAWNER), + DISABLE_RENDERING(), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + ADD_FLOAT(oPosZ, -50), + BEGIN_LOOP(), + CALL_NATIVE(bhv_lll_bowser_puzzle_loop), + END_LOOP(), +}; + +const BehaviorScript bhvTuxiesMother[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, penguin_seg5_anims_05008B74), + ANIMATE(3), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 0, /*Unused*/ 0, 0), + SET_HOME(), + SET_INTERACT_TYPE(INTERACT_TEXT), + SET_HITBOX(/*Radius*/ 200, /*Height*/ 300), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_tuxies_mother_loop), + END_LOOP(), +}; + +const BehaviorScript bhvPenguinBaby[] = { + BEGIN(OBJ_LIST_GENACTOR), + BREAK(), +}; + +const BehaviorScript bhvUnused20E0[] = { + BEGIN(OBJ_LIST_GENACTOR), + BREAK(), +}; + +const BehaviorScript bhvSmallPenguin[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + LOAD_ANIMATIONS(oAnimations, penguin_seg5_anims_05008B74), + ANIMATE(0), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SET_INT(oInteractType, INTERACT_GRABBABLE), + SET_INT(oInteractionSubtype, INT_SUBTYPE_HOLDABLE_NPC), + SET_INT(oIntangibleTimer, 0), + SET_HITBOX(/*Radius*/ 40, /*Height*/ 40), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_small_penguin_loop), + END_LOOP(), +}; + +const BehaviorScript bhvFish2[] = { + BEGIN(OBJ_LIST_DEFAULT), + SET_INT(oBehParams2ndByte, 0), + GOTO(bhvLargeFishGroup + 1), +}; + +const BehaviorScript bhvFish3[] = { + BEGIN(OBJ_LIST_DEFAULT), + SET_INT(oBehParams2ndByte, 1), + GOTO(bhvLargeFishGroup + 1), +}; + +const BehaviorScript bhvLargeFishGroup[] = { + BEGIN(OBJ_LIST_DEFAULT), + // Large fish group - common: + DISABLE_RENDERING(), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_LOOP(), + CALL_NATIVE(bhv_large_fish_group_loop), + END_LOOP(), +}; + +const BehaviorScript bhvFish[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_fish_loop), + END_LOOP(), +}; + +const BehaviorScript bhvWdwExpressElevator[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(wdw_seg7_collision_express_elevator_platform), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_wdw_express_elevator_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvWdwExpressElevatorPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(wdw_seg7_collision_express_elevator_platform), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvChirpChirp[] = { + BEGIN(OBJ_LIST_DEFAULT), + SET_INT(oBirdChirpChirpUnkF4, 1), + GOTO(bhvChirpChirpUnused), +}; + +const BehaviorScript bhvChirpChirpUnused[] = { + DISABLE_RENDERING(), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bub_spawner_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBub[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, bub_seg6_anims_06012354), + ANIMATE(0), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 20, /*Height*/ 10, /*Downwards offset*/ 10), + SET_INTERACT_TYPE(INTERACT_DAMAGE), + SET_INT(oDamageOrCoinValue, 1), + SET_HOME(), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bub_loop), + END_LOOP(), +}; + +const BehaviorScript bhvExclamationBox[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(exclamation_box_outline_seg8_collision_08025F78), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_FLOAT(oCollisionDistance, 300), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_exclamation_box_loop), + END_LOOP(), +}; + +const BehaviorScript bhvRotatingExclamationMark[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SCALE(/*Unused*/ 0, /*Field*/ 200), + BEGIN_LOOP(), + CALL_NATIVE(bhv_rotating_exclamation_box_loop), + ADD_INT(oMoveAngleYaw, 0x800), + END_LOOP(), +}; + +const BehaviorScript bhvSoundSpawner[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + DELAY(3), + CALL_NATIVE(bhv_sound_spawner_init), + DELAY(30), + DEACTIVATE(), +}; + +const BehaviorScript bhvRockSolid[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(jrb_seg7_collision_rock_solid), + BEGIN_LOOP(), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvBowserSubDoor[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(ddd_seg7_collision_bowser_sub_door), + SET_FLOAT(oDrawingDistance, 20000), + SET_FLOAT(oCollisionDistance, 20000), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bowsers_sub_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvBowsersSub[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_FLOAT(oDrawingDistance, 20000), + SET_FLOAT(oCollisionDistance, 20000), + LOAD_COLLISION_DATA(ddd_seg7_collision_submarine), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bowsers_sub_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvSushiShark[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, sushi_seg5_anims_0500AE54), + SPAWN_OBJ(/*Model*/ MODEL_NONE, /*Behavior*/ bhvSushiSharkCollisionChild), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 100, /*Height*/ 50, /*Downwards offset*/ 50), + SET_INTERACT_TYPE(INTERACT_DAMAGE), + SET_INT(oDamageOrCoinValue, 3), + SET_HOME(), + ANIMATE(0), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_sushi_shark_loop), + END_LOOP(), +}; + +const BehaviorScript bhvSushiSharkCollisionChild[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + DISABLE_RENDERING(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_sushi_shark_collision_loop), + END_LOOP(), +}; + +const BehaviorScript bhvJrbSlidingBox[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(jrb_seg7_collision_floating_box), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_jrb_sliding_box_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvShipPart3[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ship_part_3_loop), + END_LOOP(), +}; + +const BehaviorScript bhvInSunkenShip3[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(jrb_seg7_collision_in_sunken_ship_3), + SET_HOME(), + SET_FLOAT(oCollisionDistance, 4000), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ship_part_3_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvSunkenShipPart[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SCALE(/*Unused*/ 0, /*Field*/ 50), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_sunken_ship_part_loop), + END_LOOP(), +}; + +const BehaviorScript bhvSunkenShipSetRotation[] = { + SET_INT(oFaceAnglePitch, 0xE958), + SET_INT(oFaceAngleYaw, 0xEE6C), + SET_INT(oFaceAngleRoll, 0x0C80), + RETURN(), +}; + +const BehaviorScript bhvSunkenShipPart2[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SCALE(/*Unused*/ 0, /*Field*/ 100), + SET_FLOAT(oDrawingDistance, 6000), + SET_HOME(), + CALL(bhvSunkenShipSetRotation), + BREAK(), +}; + +const BehaviorScript bhvInSunkenShip[] = { + BEGIN(OBJ_LIST_SURFACE), + LOAD_COLLISION_DATA(jrb_seg7_collision_in_sunken_ship), + GOTO(bhvInSunkenShip2 + 1 + 2), +}; + +const BehaviorScript bhvInSunkenShip2[] = { + BEGIN(OBJ_LIST_SURFACE), + LOAD_COLLISION_DATA(jrb_seg7_collision_in_sunken_ship_2), + // Sunken ship - common: + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_FLOAT(oCollisionDistance, 4000), + CALL(bhvSunkenShipSetRotation), + BEGIN_LOOP(), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvMistParticleSpawner[] = { + BEGIN(OBJ_LIST_DEFAULT), + PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_DUST), + DISABLE_RENDERING(), + SPAWN_CHILD(/*Model*/ MODEL_MIST, /*Behavior*/ bhvWhitePuff1), + SPAWN_CHILD(/*Model*/ MODEL_SMOKE, /*Behavior*/ bhvWhitePuff2), + DELAY(1), + DEACTIVATE(), +}; + +const BehaviorScript bhvWhitePuff1[] = { + BEGIN(OBJ_LIST_DEFAULT), + PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_DUST), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_white_puff_1_loop), + END_LOOP(), +}; + +const BehaviorScript bhvWhitePuff2[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_INT(oAnimState, -1), + BEGIN_REPEAT(7), + CALL_NATIVE(bhv_white_puff_2_loop), + ADD_INT(oAnimState, 1), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvWhitePuffSmoke2[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_INT(oAnimState, -1), + BEGIN_REPEAT(7), + CALL_NATIVE(bhv_white_puff_2_loop), + CALL_NATIVE(cur_obj_move_using_fvel_and_gravity), + ADD_INT(oAnimState, 1), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvPurpleSwitchHiddenBoxes[] = { + BEGIN(OBJ_LIST_SURFACE), + SET_INT(oBehParams2ndByte, 2), + GOTO(bhvFloorSwitchHardcodedModel + 1), +}; + +const BehaviorScript bhvBlueCoinSwitch[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(blue_coin_switch_seg8_collision_08000E98), + BEGIN_LOOP(), + CALL_NATIVE(bhv_blue_coin_switch_loop), + END_LOOP(), +}; + +const BehaviorScript bhvHiddenBlueCoin[] = { + BEGIN(OBJ_LIST_LEVEL), + SET_INT(oInteractType, INTERACT_COIN), + OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_HITBOX(/*Radius*/ 100, /*Height*/ 64), + SET_INT(oDamageOrCoinValue, 5), + SET_INT(oIntangibleTimer, 0), + SET_INT(oAnimState, -1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_hidden_blue_coin_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvOpenableCageDoor[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_LOOP(), + CALL_NATIVE(bhv_openable_cage_door_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvOpenableGrill[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_LOOP(), + CALL_NATIVE(bhv_openable_grill_loop), + END_LOOP(), +}; + +const BehaviorScript bhvWaterLevelDiamond[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_HITBOX(/*Radius*/ 70, /*Height*/ 30), + SET_FLOAT(oCollisionDistance, 200), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_water_level_diamond_loop), + END_LOOP(), +}; + +const BehaviorScript bhvInitializeChangingWaterLevel[] = { + BEGIN(OBJ_LIST_DEFAULT), + BEGIN_LOOP(), + CALL_NATIVE(bhv_init_changing_water_level_loop), + END_LOOP(), +}; + +const BehaviorScript bhvTweesterSandParticle[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_tweester_sand_particle_loop), + END_LOOP(), +}; + +const BehaviorScript bhvTweester[] = { + BEGIN(OBJ_LIST_POLELIKE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + DROP_TO_FLOOR(), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_tweester_loop), + END_LOOP(), +}; + +const BehaviorScript bhvMerryGoRoundBooManager[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_LOOP(), + CALL_NATIVE(bhv_merry_go_round_boo_manager_loop), + END_LOOP(), +}; + +const BehaviorScript bhvAnimatedTexture[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_animated_texture_loop), + ADD_INT(oAnimState, 1), + ANIMATE_TEXTURE(oAnimState, 2), + END_LOOP(), +}; + +const BehaviorScript bhvBooInCastle[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + SET_FLOAT(oGraphYOffset, 60), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_boo_in_castle_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBooWithCage[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + SET_INT(oDamageOrCoinValue, 3), + SET_HURTBOX(/*Radius*/ 80, /*Height*/ 120), + SET_HITBOX(/*Radius*/ 180, /*Height*/ 140), + SET_FLOAT(oGraphYOffset, 60), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + CALL_NATIVE(bhv_boo_with_cage_init), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_boo_with_cage_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBalconyBigBoo[] = { + BEGIN(OBJ_LIST_GENACTOR), + SET_INT(oBehParams2ndByte, 2), + SET_INT(oBigBooNumMinionBoosKilled, 10), + GOTO(bhvGhostHuntBigBoo + 1), +}; + +const BehaviorScript bhvMerryGoRoundBigBoo[] = { + BEGIN(OBJ_LIST_GENACTOR), + SET_INT(oBehParams2ndByte, 1), + // Set number of minion boos killed to 10, which is greater than 5 so that the boo always loads without needing to kill any boos. + SET_INT(oBigBooNumMinionBoosKilled, 10), + GOTO(bhvGhostHuntBigBoo + 1), +}; + +const BehaviorScript bhvGhostHuntBigBoo[] = { + BEGIN(OBJ_LIST_GENACTOR), + // Big boo - common: + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + CALL_NATIVE(bhv_init_room), + CALL_NATIVE(bhv_boo_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_big_boo_loop), + END_LOOP(), +}; + +const BehaviorScript bhvCourtyardBooTriplet[] = { + BEGIN(OBJ_LIST_DEFAULT), + DISABLE_RENDERING(), + CALL_NATIVE(bhv_courtyard_boo_triplet_init), + DEACTIVATE(), +}; + +const BehaviorScript bhvBoo[] = { + BEGIN(OBJ_LIST_GENACTOR), + SET_INT(oBehParams2ndByte, 1), + GOTO(bhvGhostHuntBoo + 1), +}; + +const BehaviorScript bhvMerryGoRoundBoo[] = { + BEGIN(OBJ_LIST_GENACTOR), + SET_INT(oBehParams2ndByte, 2), + GOTO(bhvGhostHuntBoo + 1), +}; + +const BehaviorScript bhvGhostHuntBoo[] = { + BEGIN(OBJ_LIST_GENACTOR), + // Boo - common: + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_INT(oIntangibleTimer, 0), + SET_HOME(), + SET_INT(oDamageOrCoinValue, 2), + SET_HITBOX(/*Radius*/ 140, /*Height*/ 80), + SET_HURTBOX(/*Radius*/ 40, /*Height*/ 60), + SET_FLOAT(oGraphYOffset, 30), + CALL_NATIVE(bhv_init_room), + SPAWN_CHILD(/*Model*/ MODEL_YELLOW_COIN, /*Behavior*/ bhvCoinInsideBoo), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + CALL_NATIVE(bhv_boo_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_boo_loop), + END_LOOP(), +}; + +const BehaviorScript bhvHiddenStaircaseStep[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(bbh_seg7_collision_staircase_step), + SET_INT(oRoom, 1), + SET_FLOAT(oCollisionDistance, 1000), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvBooBossSpawnedBridge[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(bbh_seg7_collision_staircase_step), + SET_INT(oRoom, 1), + SET_FLOAT(oCollisionDistance, 1000), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_boo_boss_spawned_bridge_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvBbhTiltingTrapPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(bbh_seg7_collision_tilt_floor_platform), + SET_HOME(), + SET_INT(oRoom, 2), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bbh_tilting_trap_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvHauntedBookshelf[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(bbh_seg7_collision_haunted_bookshelf), + SET_HOME(), + SET_INT(oRoom, 6), + BEGIN_LOOP(), + CALL_NATIVE(bhv_haunted_bookshelf_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvMeshElevator[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(bbh_seg7_collision_mesh_elevator), + SET_HOME(), + SET_INT(oRoom, 12), + SET_INT(oBehParams2ndByte, 4), + CALL_NATIVE(bhv_elevator_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_elevator_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvMerryGoRound[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(bbh_seg7_collision_merry_go_round), + SET_FLOAT(oCollisionDistance, 2000), + SET_INT(oRoom, 10), + BEGIN_LOOP(), + CALL_NATIVE(bhv_merry_go_round_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +#ifndef VERSION_JP +const BehaviorScript bhvPlaysMusicTrackWhenTouched[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_LOOP(), + CALL_NATIVE(bhv_play_music_track_when_touched_loop), + END_LOOP(), +}; +#endif + +const BehaviorScript bhvInsideCannon[] = { + BREAK(), +}; + +const BehaviorScript bhvBetaBowserAnchor[] = { + BEGIN(OBJ_LIST_DESTRUCTIVE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_HOME(), + SET_HITBOX(/*Radius*/ 100, /*Height*/ 300), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + ADD_INT(oAnimState, 1), + CALL_NATIVE(bhv_beta_bowser_anchor_loop), + END_LOOP(), +}; + +const BehaviorScript bhvStaticCheckeredPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(checkerboard_platform_seg8_collision_0800D710), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_static_checkered_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvUnused2A10[] = { + BEGIN(OBJ_LIST_DEFAULT), + BILLBOARD(), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BREAK(), +}; + +const BehaviorScript bhvUnusedFakeStar[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_LOOP(), + ADD_INT(oFaceAnglePitch, 0x100), + ADD_INT(oFaceAngleYaw, 0x100), + END_LOOP(), +}; + +// What is this? +static const BehaviorScript unused_1[] = { + BREAK(), + BREAK(), + BREAK(), + BREAK(), +}; + +const BehaviorScript bhvStaticObject[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BREAK(), +}; + +const BehaviorScript bhvUnused2A54[] = { + BEGIN(OBJ_LIST_DEFAULT), + BREAK(), +}; + +const BehaviorScript bhvCastleFloorTrap[] = { + BEGIN(OBJ_LIST_DEFAULT), + DISABLE_RENDERING(), + CALL_NATIVE(bhv_castle_floor_trap_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_castle_floor_trap_loop), + END_LOOP(), +}; + +const BehaviorScript bhvFloorTrapInCastle[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(inside_castle_seg7_collision_floor_trap), + BEGIN_LOOP(), + CALL_NATIVE(bhv_floor_trap_in_castle_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvTree[] = { + BEGIN(OBJ_LIST_POLELIKE), + #ifdef BETTERCAMERA + CYLBOARD(), + #else + BILLBOARD(), + #endif + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INT(oInteractType, INTERACT_POLE), + SET_HITBOX(/*Radius*/ 80, /*Height*/ 500), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_pole_base_loop), + END_LOOP(), +}; + +const BehaviorScript bhvSparkle[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + BILLBOARD(), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INT(oAnimState, -1), + BEGIN_REPEAT(9), + ADD_INT(oAnimState, 1), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvSparkleSpawn[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_LOOP(), + CALL_NATIVE(bhv_sparkle_spawn_loop), + END_LOOP(), +}; + +const BehaviorScript bhvSparkleParticleSpawner[] = { + BEGIN(OBJ_LIST_DEFAULT), + PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_SPARKLES), + BEGIN(OBJ_LIST_UNIMPORTANT), + BILLBOARD(), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_FLOAT(oGraphYOffset, 25), + SET_RANDOM_FLOAT(oMarioParticleFlags, /*Minimum*/ -50, /*Range*/ 100), + SUM_FLOAT(/*Dest*/ oPosX, /*Value 1*/ oPosX, /*Value 2*/ oMarioParticleFlags), + SET_RANDOM_FLOAT(oMarioParticleFlags, /*Minimum*/ -50, /*Range*/ 100), + SUM_FLOAT(/*Dest*/ oPosZ, /*Value 1*/ oPosZ, /*Value 2*/ oMarioParticleFlags), + SET_RANDOM_FLOAT(oMarioParticleFlags, /*Minimum*/ -50, /*Range*/ 100), + SUM_FLOAT(/*Dest*/ oPosY, /*Value 1*/ oPosY, /*Value 2*/ oMarioParticleFlags), + SET_INT(oAnimState, -1), + BEGIN_REPEAT(12), + ADD_INT(oAnimState, 1), + END_REPEAT(), + DEACTIVATE(), +}; + +const BehaviorScript bhvScuttlebug[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, scuttlebug_seg6_anims_06015064), + ANIMATE(0), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 80, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SET_HOME(), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_scuttlebug_loop), + END_LOOP(), +}; + +const BehaviorScript bhvScuttlebugSpawn[] = { + BEGIN(OBJ_LIST_SPAWNER), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_LOOP(), + CALL_NATIVE(bhv_scuttlebug_spawn_loop), + END_LOOP(), +}; + +const BehaviorScript bhvWhompKingBoss[] = { + BEGIN(OBJ_LIST_SURFACE), + SET_INT(oBehParams2ndByte, 1), + SET_INT(oHealth, 3), + GOTO(bhvSmallWhomp + 1 + 1), +}; + +const BehaviorScript bhvSmallWhomp[] = { + BEGIN(OBJ_LIST_SURFACE), + SET_INT(oNumLootCoins, 5), + // Whomp - common: + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, whomp_seg6_anims_06020A04), + LOAD_COLLISION_DATA(whomp_seg6_collision_06020A0C), + ANIMATE(0), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_whomp_loop), + END_LOOP(), +}; + +// The large splash Mario makes when he jumps into a pool of water. +const BehaviorScript bhvWaterSplash[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_INT(oAnimState, -1), + BEGIN_REPEAT(3), + ADD_INT(oAnimState, 1), + CALL_NATIVE(bhv_water_splash_spawn_droplets), + DELAY(1), + CALL_NATIVE(bhv_water_splash_spawn_droplets), + END_REPEAT(), + BEGIN_REPEAT(5), + ADD_INT(oAnimState, 1), + DELAY(1), + END_REPEAT(), + PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_WATER_SPLASH), + DEACTIVATE(), +}; + +// Droplets of water that spawn as a result of various water splashes. +const BehaviorScript bhvWaterDroplet[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_water_droplet_loop), + END_LOOP(), +}; + +// Small splashes that are seen when a water droplet lands back into the water. +const BehaviorScript bhvWaterDropletSplash[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), +#ifndef VERSION_JP + SET_INT(oFaceAnglePitch, 0), + SET_INT(oFaceAngleYaw, 0), + SET_INT(oFaceAngleRoll, 0), +#endif + CALL_NATIVE(bhv_water_droplet_splash_init), + ADD_FLOAT(oPosY, 5), + SET_INT(oAnimState, -1), + BEGIN_REPEAT(6), + ADD_INT(oAnimState, 1), + END_REPEAT(), + DEACTIVATE(), +}; + +// The splash created when an air bubble hits the surface of the water. +const BehaviorScript bhvBubbleSplash[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), +#ifdef VERSION_JP + SET_FLOAT(oFaceAnglePitch, 0), + SET_FLOAT(oFaceAngleYaw, 0), + SET_FLOAT(oFaceAngleRoll, 0), +#endif +#ifndef VERSION_JP + SET_INT(oFaceAnglePitch, 0), + SET_INT(oFaceAngleYaw, 0), + SET_INT(oFaceAngleRoll, 0), +#endif + SET_INT(oAnimState, -1), + CALL_NATIVE(bhv_bubble_splash_init), + BEGIN_REPEAT(6), + ADD_INT(oAnimState, 1), + END_REPEAT(), + DEACTIVATE(), +}; + +// The water wave surrounding Mario when he is idle in a pool of water. +const BehaviorScript bhvIdleWaterWave[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), +#ifdef VERSION_JP + SET_FLOAT(oFaceAnglePitch, 0), + SET_FLOAT(oFaceAngleYaw, 0), + SET_FLOAT(oFaceAngleRoll, 0), +#endif +#ifndef VERSION_JP + SET_INT(oFaceAnglePitch, 0), + SET_INT(oFaceAngleYaw, 0), + SET_INT(oFaceAngleRoll, 0), +#endif + SET_INT(oAnimState, -1), + ADD_INT(oAnimState, 1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_idle_water_wave_loop), + ADD_INT(oAnimState, 1), + BEGIN_REPEAT(6), + CALL_NATIVE(bhv_idle_water_wave_loop), + END_REPEAT(), + CALL_NATIVE(bhv_idle_water_wave_loop), + END_LOOP(), +}; + +// Water splashes similar to the splashes created by water droplets, but are created by other objects. +// Unlike water droplet splashes, they are unimportant objects. +const BehaviorScript bhvObjectWaterSplash[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), +#ifdef VERSION_JP + SET_FLOAT(oFaceAnglePitch, 0), + SET_FLOAT(oFaceAngleYaw, 0), + SET_FLOAT(oFaceAngleRoll, 0), +#endif +#ifndef VERSION_JP + SET_INT(oFaceAnglePitch, 0), + SET_INT(oFaceAngleYaw, 0), + SET_INT(oFaceAngleRoll, 0), +#endif + SET_INT(oAnimState, -1), + BEGIN_REPEAT(6), + ADD_INT(oAnimState, 1), + END_REPEAT(), + DEACTIVATE(), +}; + +// Waves that are generated when running in shallow water. +const BehaviorScript bhvShallowWaterWave[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + DISABLE_RENDERING(), + BEGIN_REPEAT(5), + SPAWN_WATER_DROPLET(&gShallowWaterWaveDropletParams), + END_REPEAT_CONTINUE(), + DELAY(1), + PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_SHALLOW_WATER_WAVE), + DEACTIVATE(), +}; + +// A small water splash that occurs when jumping in and out of shallow water. +// Unlike the larger water splash it has no visible model of its own. +// It has a 1 in 256 chance of spawning the fish particle easter egg. +const BehaviorScript bhvShallowWaterSplash[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + DISABLE_RENDERING(), + BEGIN_REPEAT(18), + SPAWN_WATER_DROPLET(&gShallowWaterSplashDropletParams), + END_REPEAT_CONTINUE(), + CALL_NATIVE(bhv_shallow_water_splash_init), + DELAY(1), + PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_SHALLOW_WATER_SPLASH), + DEACTIVATE(), +}; + +// Waves created by other objects along the water's surface, specifically the koopa shell and Sushi. +// Unlike Mario's waves, they are unimportant objects. +const BehaviorScript bhvObjectWaveTrail[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + GOTO(bhvWaveTrail + 1 + 1 + 2), // Wave trail - common +}; + +// The waves created by Mario while he is swimming. +const BehaviorScript bhvWaveTrail[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_WAVE_TRAIL), + // Wave trail - common: + SET_FLOAT(oFaceAnglePitch, 0), + SET_FLOAT(oFaceAngleYaw, 0), + SET_FLOAT(oFaceAngleRoll, 0), + SET_INT(oAnimState, -1), + BEGIN_REPEAT(8), + ADD_INT(oAnimState, 1), + CALL_NATIVE(bhv_wave_trail_shrink), + DELAY(1), + CALL_NATIVE(bhv_wave_trail_shrink), + END_REPEAT(), + DEACTIVATE(), +}; + +// Tiny wind particles that provide aesthetics to the strong winds generated by the Snowman and Fwoosh. +// As they are unimportant objects, they don't have collision with Mario. +const BehaviorScript bhvTinyStrongWindParticle[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_strong_wind_particle_loop), + END_LOOP(), +}; + +// Strong wind particles generated by the Snowman and Fwoosh that blow Mario back and knock his cap off. +const BehaviorScript bhvStrongWindParticle[] = { + BEGIN(OBJ_LIST_POLELIKE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_strong_wind_particle_loop), + END_LOOP(), +}; + +// The handler for the strong wind blown by the Snowman in SL. Triggers dialog and then aims towards Mario. +const BehaviorScript bhvSLSnowmanWind[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_sl_snowman_wind_loop), + END_LOOP(), +}; + +// The penguin that walks erratically along the ice bridge in front of the Snowman in SL. +// Blocks strong wind particles, allowing Mario to walk behind it. +const BehaviorScript bhvSLWalkingPenguin[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(penguin_seg5_collision_05008B88), + LOAD_ANIMATIONS(oAnimations, penguin_seg5_anims_05008B74), + ANIMATE(0), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SCALE(/*Unused*/ 0, /*Field*/ 600), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_sl_walking_penguin_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvYellowBall[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + BREAK(), +}; + +UNUSED static const u64 behavior_data_unused_0 = 0; +const BehaviorScript bhvMario[] = { + BEGIN(OBJ_LIST_PLAYER), + SET_INT(oIntangibleTimer, 0), + OR_INT(oFlags, OBJ_FLAG_0100), + OR_INT(oUnk94, 0x0001), + SET_HITBOX(/*Radius*/ 37, /*Height*/ 160), + BEGIN_LOOP(), + CALL_NATIVE(try_print_debug_mario_level_info), + CALL_NATIVE(bhv_mario_update), + CALL_NATIVE(try_do_mario_debug_object_spawn), + END_LOOP(), +}; + +const BehaviorScript bhvMario2[] = { + BEGIN(OBJ_LIST_PLAYER), + SET_INT(oIntangibleTimer, 0), + OR_INT(oFlags, OBJ_FLAG_0100), + OR_INT(oUnk94, 0x0001), + SET_HITBOX(/*Radius*/ 37, /*Height*/ 160), + BEGIN_LOOP(), + CALL_NATIVE(bhv_mario2_update), + END_LOOP(), +}; + +const BehaviorScript bhvToadMessage[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, toad_seg6_anims_0600FB58), + ANIMATE(6), + SET_INTERACT_TYPE(INTERACT_TEXT), + SET_HITBOX(/*Radius*/ 80, /*Height*/ 100), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_init_room), + CALL_NATIVE(bhv_toad_message_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_toad_message_loop), + END_LOOP(), +}; + +const BehaviorScript bhvUnlockDoorStar[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + CALL_NATIVE(bhv_unlock_door_star_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_unlock_door_star_loop), + END_LOOP(), +}; + +const BehaviorScript bhvInstantActiveWarp[] = { + BREAK(), +}; + +const BehaviorScript bhvAirborneWarp[] = { + BREAK(), +}; + +const BehaviorScript bhvHardAirKnockBackWarp[] = { + BREAK(), +}; + +const BehaviorScript bhvSpinAirborneCircleWarp[] = { + BREAK(), +}; + +const BehaviorScript bhvDeathWarp[] = { + BREAK(), +}; + +const BehaviorScript bhvSpinAirborneWarp[] = { + BREAK(), +}; + +const BehaviorScript bhvFlyingWarp[] = { + BREAK(), +}; + +const BehaviorScript bhvPaintingStarCollectWarp[] = { + BREAK(), +}; + +const BehaviorScript bhvPaintingDeathWarp[] = { + BREAK(), +}; + +const BehaviorScript bhvAirborneDeathWarp[] = { + BREAK(), +}; + +const BehaviorScript bhvAirborneStarCollectWarp[] = { + BREAK(), +}; + +const BehaviorScript bhvLaunchStarCollectWarp[] = { + BREAK(), +}; + +const BehaviorScript bhvLaunchDeathWarp[] = { + BREAK(), +}; + +const BehaviorScript bhvSwimmingWarp[] = { + BREAK(), +}; + +UNUSED static const u64 behavior_data_unused_1 = 0; +const BehaviorScript bhvRandomAnimatedTexture[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_FLOAT(oGraphYOffset, -16), + BILLBOARD(), + SET_INT(oAnimState, -1), + BEGIN_LOOP(), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvYellowBackgroundInMenu[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(beh_yellow_background_menu_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(beh_yellow_background_menu_loop), + END_LOOP(), +}; + +const BehaviorScript bhvMenuButton[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_menu_button_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_menu_button_loop), + END_LOOP(), +}; + +const BehaviorScript bhvMenuButtonManager[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_SET_THROW_MATRIX_FROM_TRANSFORM | OBJ_FLAG_0020 | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + CALL_NATIVE(bhv_menu_button_manager_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_menu_button_manager_loop), + END_LOOP(), +}; + +const BehaviorScript bhvActSelectorStarType[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_act_selector_star_type_loop), + END_LOOP(), +}; + +const BehaviorScript bhvActSelector[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_act_selector_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_act_selector_loop), + END_LOOP(), +}; + +const BehaviorScript bhvMovingYellowCoin[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_HITBOX(/*Radius*/ 100, /*Height*/ 64), + SET_INT(oInteractType, INTERACT_COIN), + SET_INT(oIntangibleTimer, 0), + SET_INT(oAnimState, -1), + CALL_NATIVE(bhv_moving_yellow_coin_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_moving_yellow_coin_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvMovingBlueCoin[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_INT(oIntangibleTimer, 0), + SET_INT(oAnimState, -1), + CALL_NATIVE(bhv_moving_blue_coin_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_moving_blue_coin_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvBlueCoinSliding[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_INT(oIntangibleTimer, 0), + SET_INT(oAnimState, -1), + CALL_NATIVE(bhv_blue_coin_sliding_jumping_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_blue_coin_sliding_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvBlueCoinJumping[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_INT(oIntangibleTimer, 0), + SET_INT(oAnimState, -1), + CALL_NATIVE(bhv_blue_coin_sliding_jumping_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_blue_coin_jumping_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvSeaweed[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_ANIMATIONS(oAnimations, seaweed_seg6_anims_0600A4D4), + ANIMATE(0), + CALL_NATIVE(bhv_seaweed_init), + BEGIN_LOOP(), + END_LOOP(), +}; + +const BehaviorScript bhvSeaweedBundle[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + DROP_TO_FLOOR(), + CALL_NATIVE(bhv_seaweed_bundle_init), + BEGIN_LOOP(), + END_LOOP(), +}; + +const BehaviorScript bhvBobomb[] = { + BEGIN(OBJ_LIST_DESTRUCTIVE), + OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, bobomb_seg8_anims_0802396C), + DROP_TO_FLOOR(), + ANIMATE(0), + SET_INT(oIntangibleTimer, 0), + SET_HOME(), + CALL_NATIVE(bhv_bobomb_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bobomb_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBobombFuseSmoke[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_INT(oAnimState, -1), + CALL_NATIVE(bhv_bobomb_fuse_smoke_init), + DELAY(1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_dust_smoke_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvBobombBuddy[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, bobomb_seg8_anims_0802396C), + SET_INTERACT_TYPE(INTERACT_TEXT), + DROP_TO_FLOOR(), + SET_HITBOX(/*Radius*/ 100, /*Height*/ 60), + ANIMATE(0), + SET_INT(oBobombBuddyRole, 0), + SET_HOME(), + CALL_NATIVE(bhv_bobomb_buddy_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_bobomb_buddy_loop), + END_LOOP(), +}; + +// The only difference between this and the previous behavior are what oFlags and oBobombBuddyRole are set to, why didn't they just use a jump? +const BehaviorScript bhvBobombBuddyOpensCannon[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, bobomb_seg8_anims_0802396C), + SET_INTERACT_TYPE(INTERACT_TEXT), + DROP_TO_FLOOR(), + SET_HITBOX(/*Radius*/ 100, /*Height*/ 60), + ANIMATE(0), + SET_INT(oBobombBuddyRole, 1), + SET_HOME(), + CALL_NATIVE(bhv_bobomb_buddy_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_bobomb_buddy_loop), + END_LOOP(), +}; + +const BehaviorScript bhvCannonClosed[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(cannon_lid_seg8_collision_08004950), + SET_HOME(), + CALL_NATIVE(bhv_cannon_closed_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_cannon_closed_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvWhirlpool[] = { + BEGIN(OBJ_LIST_POLELIKE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + CALL_NATIVE(bhv_whirlpool_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_whirlpool_loop), + END_LOOP(), +}; + +const BehaviorScript bhvJetStream[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_LOOP(), + CALL_NATIVE(bhv_jet_stream_loop), + END_LOOP(), +}; + +const BehaviorScript bhvMessagePanel[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(wooden_signpost_seg3_collision_0302DD80), + SET_INTERACT_TYPE(INTERACT_TEXT), + SET_INT(oInteractionSubtype, INT_SUBTYPE_SIGN), + DROP_TO_FLOOR(), + SET_HITBOX(/*Radius*/ 150, /*Height*/ 80), + SET_INT(oWoodenPostTotalMarioAngle, 0), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(load_object_collision_model), + SET_INT(oInteractStatus, 0), + END_LOOP(), +}; + +const BehaviorScript bhvSignOnWall[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INTERACT_TYPE(INTERACT_TEXT), + SET_INT(oInteractionSubtype, INT_SUBTYPE_SIGN), + SET_HITBOX(/*Radius*/ 150, /*Height*/ 80), + SET_INT(oWoodenPostTotalMarioAngle, 0), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + SET_INT(oInteractStatus, 0), + END_LOOP(), +}; + +const BehaviorScript bhvHomingAmp[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, amp_seg8_anims_08004034), + ANIMATE(0), + SET_FLOAT(oGraphYOffset, 40), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_homing_amp_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_homing_amp_loop), + END_LOOP(), +}; + +const BehaviorScript bhvCirclingAmp[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, amp_seg8_anims_08004034), + ANIMATE(0), + SET_FLOAT(oGraphYOffset, 40), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_circling_amp_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_circling_amp_loop), + END_LOOP(), +}; + +const BehaviorScript bhvButterfly[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, butterfly_seg3_anims_030056B0), + DROP_TO_FLOOR(), + SET_FLOAT(oGraphYOffset, 5), + CALL_NATIVE(bhv_butterfly_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_butterfly_loop), + END_LOOP(), +}; + +const BehaviorScript bhvHoot[] = { + BEGIN(OBJ_LIST_POLELIKE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, hoot_seg5_anims_05005768), + SET_INT(oInteractType, INTERACT_HOOT), + SET_HITBOX(/*Radius*/ 75, /*Height*/ 75), + CALL_NATIVE(bhv_hoot_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_hoot_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBetaHoldableObject[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_INT(oInteractType, INTERACT_GRABBABLE), + DROP_TO_FLOOR(), + SET_HITBOX(/*Radius*/ 40, /*Height*/ 50), + CALL_NATIVE(bhv_beta_holdable_object_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_beta_holdable_object_loop), + END_LOOP(), +}; + +const BehaviorScript bhvCarrySomething1[] = { + BEGIN(OBJ_LIST_DEFAULT), + BREAK(), +}; + +const BehaviorScript bhvCarrySomething2[] = { + BEGIN(OBJ_LIST_DEFAULT), + BREAK(), +}; + +const BehaviorScript bhvCarrySomething3[] = { + BEGIN(OBJ_LIST_DEFAULT), + BREAK(), +}; + +const BehaviorScript bhvCarrySomething4[] = { + BEGIN(OBJ_LIST_DEFAULT), + BREAK(), +}; + +const BehaviorScript bhvCarrySomething5[] = { + BEGIN(OBJ_LIST_DEFAULT), + BREAK(), +}; + +const BehaviorScript bhvCarrySomething6[] = { + BEGIN(OBJ_LIST_DEFAULT), + BREAK(), +}; + +const BehaviorScript bhvObjectBubble[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, (OBJ_FLAG_MOVE_Y_WITH_TERMINAL_VEL | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INT(oAnimState, -1), + CALL_NATIVE(bhv_object_bubble_init), + SET_RANDOM_FLOAT(oVelY, /*Minimum*/ 3, /*Range*/ 6), + SET_INT_RAND_RSHIFT(oMoveAngleYaw, /*Minimum*/ 0, /*Right shift*/ 0), + DELAY(1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_object_bubble_loop), + END_LOOP(), +}; + +const BehaviorScript bhvObjectWaterWave[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_FLOAT(oFaceAnglePitch, 0), + SET_FLOAT(oFaceAngleYaw, 0), + SET_FLOAT(oFaceAngleRoll, 0), + SET_INT(oAnimState, -1), + CALL_NATIVE(bhv_object_water_wave_init), + ADD_INT(oAnimState, 1), + DELAY(6), + BEGIN_LOOP(), + CALL_NATIVE(bhv_object_water_wave_loop), + ADD_INT(oAnimState, 1), + BEGIN_REPEAT(6), + CALL_NATIVE(bhv_object_water_wave_loop), + END_REPEAT(), + END_LOOP(), +}; + +const BehaviorScript bhvExplosion[] = { + BEGIN(OBJ_LIST_DESTRUCTIVE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_INTERACT_TYPE(INTERACT_DAMAGE), + SET_INT(oDamageOrCoinValue, 2), + SET_INT(oIntangibleTimer, 0), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 150, /*Height*/ 150, /*Downwards offset*/ 150), + SET_INT(oAnimState, -1), + CALL_NATIVE(bhv_explosion_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_explosion_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvBobombBullyDeathSmoke[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, (OBJ_FLAG_MOVE_Y_WITH_TERMINAL_VEL | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_INT(oAnimState, -1), + CALL_NATIVE(bhv_bobomb_bully_death_smoke_init), + DELAY(1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_dust_smoke_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvSmoke[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, (OBJ_FLAG_MOVE_Y_WITH_TERMINAL_VEL | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_INT(oAnimState, -1), + DELAY(1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_dust_smoke_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvBobombExplosionBubble[] = { + BEGIN(OBJ_LIST_DEFAULT), + BILLBOARD(), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_bobomb_explosion_bubble_init), + ADD_RANDOM_FLOAT(oPosX, /*Minimum*/ -50, /*Range*/ 100), + ADD_RANDOM_FLOAT(oPosY, /*Minimum*/ -50, /*Range*/ 100), + ADD_RANDOM_FLOAT(oPosZ, /*Minimum*/ -50, /*Range*/ 100), + CALL(bhvBobombExplosionBubble3600), + DELAY(1), + BEGIN_LOOP(), + CALL(bhvBobombExplosionBubble3600), + CALL_NATIVE(bhv_bobomb_explosion_bubble_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBobombExplosionBubble3600[] = { + ADD_RANDOM_FLOAT(oPosX, /*Minimum*/ -2, /*Range*/ 4), + ADD_RANDOM_FLOAT(oPosZ, /*Minimum*/ -2, /*Range*/ 4), + RETURN(), +}; + +const BehaviorScript bhvRespawner[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_LOOP(), + CALL_NATIVE(bhv_respawner_loop), + END_LOOP(), +}; + +const BehaviorScript bhvSmallBully[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, bully_seg5_anims_0500470C), + DROP_TO_FLOOR(), + SET_HOME(), + CALL_NATIVE(bhv_small_bully_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_bully_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBigBully[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, bully_seg5_anims_0500470C), + DROP_TO_FLOOR(), + SET_HOME(), + CALL_NATIVE(bhv_big_bully_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_bully_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBigBullyWithMinions[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, bully_seg5_anims_0500470C), + SET_HOME(), + CALL_NATIVE(bhv_big_bully_init), + CALL_NATIVE(bhv_big_bully_with_minions_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_big_bully_with_minions_loop), + END_LOOP(), +}; + +const BehaviorScript bhvSmallChillBully[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, chilly_chief_seg6_anims_06003994), + DROP_TO_FLOOR(), + SET_HOME(), + SET_INT(oBullySubtype, 0x0010), + CALL_NATIVE(bhv_small_bully_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_bully_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBigChillBully[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, chilly_chief_seg6_anims_06003994), + DROP_TO_FLOOR(), + SET_HOME(), + SET_INT(oBullySubtype, 0x0010), + CALL_NATIVE(bhv_big_bully_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_bully_loop), + END_LOOP(), +}; + +const BehaviorScript bhvJetStreamRingSpawner[] = { + BEGIN(OBJ_LIST_DEFAULT), + HIDE(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_jet_stream_ring_spawner_loop), + END_LOOP(), +}; + +const BehaviorScript bhvJetStreamWaterRing[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_ANIMATIONS(oAnimations, water_ring_seg6_anims_06013F7C), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 75, /*Height*/ 20, /*Downwards offset*/ 20), + SET_INTERACT_TYPE(INTERACT_WATER_RING), + SET_INT(oDamageOrCoinValue, 2), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_jet_stream_water_ring_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_jet_stream_water_ring_loop), + END_LOOP(), +}; + +const BehaviorScript bhvMantaRayWaterRing[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_ANIMATIONS(oAnimations, water_ring_seg6_anims_06013F7C), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 75, /*Height*/ 20, /*Downwards offset*/ 20), + SET_INTERACT_TYPE(INTERACT_WATER_RING), + SET_INT(oDamageOrCoinValue, 2), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_manta_ray_water_ring_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_manta_ray_water_ring_loop), + END_LOOP(), +}; + +const BehaviorScript bhvMantaRayRingManager[] = { + BEGIN(OBJ_LIST_DEFAULT), + BEGIN_LOOP(), + END_LOOP(), +}; + +const BehaviorScript bhvBowserBomb[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INT(oIntangibleTimer, 0), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 40, /*Height*/ 40, /*Downwards offset*/ 40), + DELAY(1), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_bowser_bomb_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBowserBombExplosion[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_FLOAT(oGraphYOffset, -288), + SET_INT(oAnimState, -1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bowser_bomb_explosion_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBowserBombSmoke[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_FLOAT(oGraphYOffset, -288), + SET_INT(oOpacity, 255), + SET_INT(oAnimState, -1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bowser_bomb_smoke_loop), + END_LOOP(), +}; + +const BehaviorScript bhvCelebrationStar[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_celebration_star_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_celebration_star_loop), + END_LOOP(), +}; + +const BehaviorScript bhvCelebrationStarSparkle[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + BILLBOARD(), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_FLOAT(oGraphYOffset, 25), + SET_INT(oAnimState, -1), + BEGIN_LOOP(), + ADD_INT(oAnimState, 1), + CALL_NATIVE(bhv_celebration_star_sparkle_loop), + END_LOOP(), +}; + +const BehaviorScript bhvStarKeyCollectionPuffSpawner[] = { + BEGIN(OBJ_LIST_DEFAULT), + BILLBOARD(), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INT(oAnimState, -1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_star_key_collection_puff_spawner_loop), + END_LOOP(), +}; + +const BehaviorScript bhvLllDrawbridgeSpawner[] = { + BEGIN(OBJ_LIST_DEFAULT), + HIDE(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_lll_drawbridge_spawner_loop), + END_LOOP(), +}; + +const BehaviorScript bhvLllDrawbridge[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(lll_seg7_collision_drawbridge), + BEGIN_LOOP(), + CALL_NATIVE(bhv_lll_drawbridge_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvSmallBomp[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(wf_seg7_collision_small_bomp), + CALL_NATIVE(bhv_small_bomp_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_small_bomp_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvLargeBomp[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(wf_seg7_collision_large_bomp), + CALL_NATIVE(bhv_large_bomp_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_large_bomp_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvWfSlidingPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(wf_seg7_collision_sliding_brick_platform), + CALL_NATIVE(bhv_wf_sliding_platform_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_wf_sliding_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvMoneybag[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, moneybag_seg6_anims_06005E5C), + DROP_TO_FLOOR(), + SET_HOME(), + SET_INT(oIntangibleTimer, -1), + CALL_NATIVE(bhv_moneybag_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_moneybag_loop), + END_LOOP(), +}; + +const BehaviorScript bhvMoneybagHidden[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_FLOAT(oGraphYOffset, 27), + BILLBOARD(), + SET_HITBOX(/*Radius*/ 110, /*Height*/ 100), + SET_INT(oIntangibleTimer, 0), + SET_INT(oAnimState, -1), + BEGIN_LOOP(), + ADD_INT(oAnimState, 1), + CALL_NATIVE(bhv_moneybag_hidden_loop), + END_LOOP(), +}; + +const BehaviorScript bhvPitBowlingBall[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_FLOAT(oGraphYOffset, 130), + CALL_NATIVE(bhv_bob_pit_bowling_ball_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bob_pit_bowling_ball_loop), + END_LOOP(), +}; + +const BehaviorScript bhvFreeBowlingBall[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_FLOAT(oGraphYOffset, 130), + CALL_NATIVE(bhv_free_bowling_ball_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_free_bowling_ball_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBowlingBall[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_FLOAT(oGraphYOffset, 130), + CALL_NATIVE(bhv_bowling_ball_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bowling_ball_loop), + END_LOOP(), +}; + +const BehaviorScript bhvTtmBowlingBallSpawner[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INT(oBBallSpawnerPeriodMinus1, 63), + CALL_NATIVE(bhv_generic_bowling_ball_spawner_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_generic_bowling_ball_spawner_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBobBowlingBallSpawner[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INT(oBBallSpawnerPeriodMinus1, 127), + CALL_NATIVE(bhv_generic_bowling_ball_spawner_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_generic_bowling_ball_spawner_loop), + END_LOOP(), +}; + +const BehaviorScript bhvThiBowlingBallSpawner[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_LOOP(), + CALL_NATIVE(bhv_thi_bowling_ball_spawner_loop), + END_LOOP(), +}; + +const BehaviorScript bhvRrCruiserWing[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_rr_cruiser_wing_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_rr_cruiser_wing_loop), + END_LOOP(), +}; + +const BehaviorScript bhvSpindel[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(ssl_seg7_collision_spindel), + CALL_NATIVE(bhv_spindel_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_spindel_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvSslMovingPyramidWall[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(ssl_seg7_collision_0702808C), + CALL_NATIVE(bhv_ssl_moving_pyramid_wall_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ssl_moving_pyramid_wall_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvPyramidElevator[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(ssl_seg7_collision_pyramid_elevator), + SET_HOME(), + SET_FLOAT(oCollisionDistance, 20000), + CALL_NATIVE(bhv_pyramid_elevator_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_pyramid_elevator_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvPyramidElevatorTrajectoryMarkerBall[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_pyramid_elevator_trajectory_marker_ball_loop), + END_LOOP(), +}; + +const BehaviorScript bhvPyramidTop[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(ssl_seg7_collision_pyramid_top), + SET_HOME(), + SET_FLOAT(oCollisionDistance, 20000), + CALL_NATIVE(bhv_pyramid_top_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_pyramid_top_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvPyramidTopFragment[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_pyramid_top_fragment_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_pyramid_top_fragment_loop), + END_LOOP(), +}; + +const BehaviorScript bhvPyramidPillarTouchDetector[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_HITBOX(/*Radius*/ 50, /*Height*/ 50), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_pyramid_pillar_touch_detector_loop), + END_LOOP(), +}; + +const BehaviorScript bhvWaterfallSoundLoop[] = { + BEGIN(OBJ_LIST_DEFAULT), + BEGIN_LOOP(), + CALL_NATIVE(bhv_waterfall_sound_loop), + END_LOOP(), +}; + +const BehaviorScript bhvVolcanoSoundLoop[] = { + BEGIN(OBJ_LIST_DEFAULT), + BEGIN_LOOP(), + CALL_NATIVE(bhv_volcano_sound_loop), + END_LOOP(), +}; + +const BehaviorScript bhvCastleFlagWaving[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_ANIMATIONS(oAnimations, castle_grounds_seg7_anims_flags), + ANIMATE(0), + CALL_NATIVE(bhv_castle_flag_init), + BEGIN_LOOP(), + END_LOOP(), +}; + +const BehaviorScript bhvBirdsSoundLoop[] = { + BEGIN(OBJ_LIST_DEFAULT), + BEGIN_LOOP(), + CALL_NATIVE(bhv_birds_sound_loop), + END_LOOP(), +}; + +const BehaviorScript bhvAmbientSounds[] = { + BEGIN(OBJ_LIST_DEFAULT), + CALL_NATIVE(bhv_ambient_sounds_init), + BEGIN_LOOP(), + END_LOOP(), +}; + +const BehaviorScript bhvSandSoundLoop[] = { + BEGIN(OBJ_LIST_DEFAULT), + BEGIN_LOOP(), + CALL_NATIVE(bhv_sand_sound_loop), + END_LOOP(), +}; + +const BehaviorScript bhvHiddenAt120Stars[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(castle_grounds_seg7_collision_cannon_grill), + SET_FLOAT(oCollisionDistance, 4000), + CALL_NATIVE(bhv_castle_cannon_grate_init), + BEGIN_LOOP(), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvSnowmansBottom[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_snowmans_bottom_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_snowmans_bottom_loop), + END_LOOP(), +}; + +const BehaviorScript bhvSnowmansHead[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + SET_FLOAT(oGraphYOffset, 110), + CALL_NATIVE(bhv_snowmans_head_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_snowmans_head_loop), + END_LOOP(), +}; + +const BehaviorScript bhvSnowmansBodyCheckpoint[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_LOOP(), + CALL_NATIVE(bhv_snowmans_body_checkpoint_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBigSnowmanWhole[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_FLOAT(oGraphYOffset, 180), + SET_INTERACT_TYPE(INTERACT_TEXT), + SET_HITBOX(/*Radius*/ 210, /*Height*/ 550), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + END_LOOP(), +}; + +const BehaviorScript bhvBigBoulder[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_FLOAT(oGraphYOffset, 180), + CALL_NATIVE(bhv_big_boulder_init), + SET_FLOAT(oCollisionDistance, 20000), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_big_boulder_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBigBoulderGenerator[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_LOOP(), + CALL_NATIVE(bhv_big_boulder_generator_loop), + END_LOOP(), +}; + +const BehaviorScript bhvWingCap[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + CALL_NATIVE(bhv_wing_cap_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_wing_vanish_cap_loop), + END_LOOP(), +}; + +const BehaviorScript bhvMetalCap[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + CALL_NATIVE(bhv_metal_cap_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_metal_cap_loop), + END_LOOP(), +}; + +const BehaviorScript bhvNormalCap[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + CALL_NATIVE(bhv_normal_cap_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_normal_cap_loop), + END_LOOP(), +}; + +const BehaviorScript bhvVanishCap[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + CALL_NATIVE(bhv_vanish_cap_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_wing_vanish_cap_loop), + END_LOOP(), +}; + +const BehaviorScript bhvStar[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_init_room), + CALL_NATIVE(bhv_collect_star_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_collect_star_loop), + END_LOOP(), +}; + +const BehaviorScript bhvStarSpawnCoordinates[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_collect_star_init), + CALL_NATIVE(bhv_star_spawn_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_star_spawn_loop), + END_LOOP(), +}; + +const BehaviorScript bhvHiddenRedCoinStar[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + CALL_NATIVE(bhv_hidden_red_coin_star_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_hidden_red_coin_star_loop), + END_LOOP(), +}; + +const BehaviorScript bhvRedCoin[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_INT(oIntangibleTimer, 0), + SET_INT(oAnimState, -1), + CALL_NATIVE(bhv_init_room), + CALL_NATIVE(bhv_red_coin_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_red_coin_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvBowserCourseRedCoinStar[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bowser_course_red_coin_star_loop), + END_LOOP(), +}; + +const BehaviorScript bhvHiddenStar[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + CALL_NATIVE(bhv_hidden_star_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_hidden_star_loop), + END_LOOP(), +}; + +const BehaviorScript bhvHiddenStarTrigger[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_HITBOX(/*Radius*/ 100, /*Height*/ 100), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_hidden_star_trigger_loop), + END_LOOP(), +}; + +const BehaviorScript bhvTtmRollingLog[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(ttm_seg7_collision_pitoune_2), + SET_HOME(), + SET_FLOAT(oCollisionDistance, 2000), + CALL_NATIVE(bhv_ttm_rolling_log_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_rolling_log_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvLllVolcanoFallingTrap[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(lll_seg7_collision_falling_wall), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_volcano_trap_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvLllRollingLog[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(lll_seg7_collision_pitoune), + SET_HOME(), + SET_FLOAT(oCollisionDistance, 2000), + CALL_NATIVE(bhv_lll_rolling_log_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_rolling_log_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhv1upWalking[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0), + SET_FLOAT(oGraphYOffset, 30), + CALL_NATIVE(bhv_1up_common_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_1up_walking_loop), + END_LOOP(), +}; + +const BehaviorScript bhv1upRunningAway[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0), + SET_FLOAT(oGraphYOffset, 30), + CALL_NATIVE(bhv_1up_common_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_1up_running_away_loop), + END_LOOP(), +}; + +const BehaviorScript bhv1upSliding[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0), + SET_FLOAT(oGraphYOffset, 30), + CALL_NATIVE(bhv_1up_common_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_1up_sliding_loop), + END_LOOP(), +}; + +const BehaviorScript bhv1Up[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0), + SET_FLOAT(oGraphYOffset, 30), + CALL_NATIVE(bhv_1up_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_1up_loop), + END_LOOP(), +}; + +const BehaviorScript bhv1upJumpOnApproach[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0), + SET_FLOAT(oGraphYOffset, 30), + CALL_NATIVE(bhv_1up_common_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_1up_jump_on_approach_loop), + END_LOOP(), +}; + +const BehaviorScript bhvHidden1up[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0), + SET_FLOAT(oGraphYOffset, 30), + CALL_NATIVE(bhv_1up_common_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_1up_hidden_loop), + END_LOOP(), +}; + +const BehaviorScript bhvHidden1upTrigger[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_HITBOX(/*Radius*/ 100, /*Height*/ 100), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_1up_hidden_trigger_loop), + END_LOOP(), +}; + +const BehaviorScript bhvHidden1upInPole[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0), + SET_FLOAT(oGraphYOffset, 30), + CALL_NATIVE(bhv_1up_common_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_1up_hidden_in_pole_loop), + END_LOOP(), +}; + +const BehaviorScript bhvHidden1upInPoleTrigger[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_HITBOX(/*Radius*/ 100, /*Height*/ 100), + SET_INT(oIntangibleTimer, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_1up_hidden_in_pole_trigger_loop), + END_LOOP(), +}; + +const BehaviorScript bhvHidden1upInPoleSpawner[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_LOOP(), + CALL_NATIVE(bhv_1up_hidden_in_pole_spawner_loop), + END_LOOP(), +}; + +const BehaviorScript bhvControllablePlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_THROW_MATRIX_FROM_TRANSFORM | OBJ_FLAG_0020 | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(hmc_seg7_collision_controllable_platform), + SET_HOME(), + CALL_NATIVE(bhv_controllable_platform_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_controllable_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvControllablePlatformSub[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(hmc_seg7_collision_controllable_platform_sub), + BEGIN_LOOP(), + CALL_NATIVE(bhv_controllable_platform_sub_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvBreakableBoxSmall[] = { + BEGIN(OBJ_LIST_DESTRUCTIVE), + OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + SET_HOME(), + CALL_NATIVE(bhv_breakable_box_small_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_breakable_box_small_loop), + END_LOOP(), +}; + +const BehaviorScript bhvSlidingSnowMound[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(sl_seg7_collision_sliding_snow_mound), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_sliding_snow_mound_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvSnowMoundSpawn[] = { + BEGIN(OBJ_LIST_DEFAULT), + BEGIN_LOOP(), + CALL_NATIVE(bhv_snow_mound_spawn_loop), + END_LOOP(), +}; + +const BehaviorScript bhvWdwSquareFloatingPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(wdw_seg7_collision_square_floating_platform), + SET_FLOAT(oFloatingPlatformUnkFC, 64), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_floating_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvWdwRectangularFloatingPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(wdw_seg7_collision_rect_floating_platform), + SET_FLOAT(oFloatingPlatformUnkFC, 64), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_floating_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvJrbFloatingPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_COLLISION_DATA(jrb_seg7_collision_floating_platform), + SET_FLOAT(oFloatingPlatformUnkFC, 64), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_floating_platform_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvArrowLift[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(wdw_seg7_collision_arrow_lift), + SET_INT_RAND_RSHIFT(oArrowLiftUnk100, /*Minimum*/ 1, /*Right shift*/ 32), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_arrow_lift_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvOrangeNumber[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_HOME(), + CALL_NATIVE(bhv_orange_number_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_orange_number_loop), + END_LOOP(), +}; + +const BehaviorScript bhvMantaRay[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, manta_seg5_anims_05008EB4), + ANIMATE(0), + CALL_NATIVE(bhv_manta_ray_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_manta_ray_loop), + END_LOOP(), +}; + +const BehaviorScript bhvFallingPillar[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + CALL_NATIVE(bhv_falling_pillar_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_falling_pillar_loop), + END_LOOP(), +}; + +const BehaviorScript bhvFallingPillarHitbox[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_falling_pillar_hitbox_loop), + END_LOOP(), +}; + +const BehaviorScript bhvPillarBase[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(jrb_seg7_collision_pillar_base), + BEGIN_LOOP(), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvJrbFloatingBox[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_COLLISION_DATA(jrb_seg7_collision_floating_box), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_jrb_floating_box_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvDecorativePendulum[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_decorative_pendulum_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_decorative_pendulum_loop), + END_LOOP(), +}; + +const BehaviorScript bhvTreasureChestsShip[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + DROP_TO_FLOOR(), + CALL_NATIVE(bhv_treasure_chest_ship_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_treasure_chest_ship_loop), + END_LOOP(), +}; + +const BehaviorScript bhvTreasureChestsJrb[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + DROP_TO_FLOOR(), + CALL_NATIVE(bhv_treasure_chest_jrb_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_treasure_chest_jrb_loop), + END_LOOP(), +}; + +const BehaviorScript bhvTreasureChests[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + DROP_TO_FLOOR(), + CALL_NATIVE(bhv_treasure_chest_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_treasure_chest_loop), + END_LOOP(), +}; + +const BehaviorScript bhvTreasureChestBottom[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + DROP_TO_FLOOR(), + CALL_NATIVE(bhv_treasure_chest_bottom_init), + SET_INT(oIntangibleTimer, -1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_treasure_chest_bottom_loop), + END_LOOP(), +}; + +const BehaviorScript bhvTreasureChestTop[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_treasure_chest_top_loop), + END_LOOP(), +}; + +const BehaviorScript bhvMips[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, mips_seg6_anims_06015634), + SET_INT(oInteractType, INTERACT_GRABBABLE), + DROP_TO_FLOOR(), + SET_HITBOX(/*Radius*/ 50, /*Height*/ 75), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_mips_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_mips_loop), + END_LOOP(), +}; + +const BehaviorScript bhvYoshi[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, yoshi_seg5_anims_05024100), + SET_INTERACT_TYPE(INTERACT_TEXT), + DROP_TO_FLOOR(), + SET_HITBOX(/*Radius*/ 160, /*Height*/ 150), + ANIMATE(0), + SET_HOME(), + CALL_NATIVE(bhv_yoshi_init), + BEGIN_LOOP(), + SET_INT(oIntangibleTimer, 0), + CALL_NATIVE(bhv_yoshi_loop), + END_LOOP(), +}; + +const BehaviorScript bhvKoopa[] = { + BEGIN(OBJ_LIST_PUSHABLE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + LOAD_ANIMATIONS(oAnimations, koopa_seg6_anims_06011364), + ANIMATE(9), + SET_HOME(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 50, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SCALE(/*Unused*/ 0, /*Field*/ 150), + SET_FLOAT(oKoopaAgility, 1), + CALL_NATIVE(bhv_koopa_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_koopa_update), + END_LOOP(), +}; + +const BehaviorScript bhvKoopaRaceEndpoint[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + SPAWN_CHILD_WITH_PARAM(/*Bhv param*/ 0, /*Model*/ MODEL_KOOPA_FLAG, /*Behavior*/ bhvKoopaFlag), + BEGIN_LOOP(), + CALL_NATIVE(bhv_koopa_race_endpoint_update), + END_LOOP(), +}; + +const BehaviorScript bhvKoopaFlag[] = { + BEGIN(OBJ_LIST_POLELIKE), + SET_INTERACT_TYPE(INTERACT_POLE), + SET_HITBOX(/*Radius*/ 80, /*Height*/ 700), + SET_INT(oIntangibleTimer, 0), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + DROP_TO_FLOOR(), + LOAD_ANIMATIONS(oAnimations, koopa_flag_seg6_anims_06001028), + ANIMATE(0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_pole_base_loop), + END_LOOP(), +}; + +const BehaviorScript bhvPokey[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + SET_HOME(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 60, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_pokey_update), + END_LOOP(), +}; + +const BehaviorScript bhvPokeyBodyPart[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 60, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BILLBOARD(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_pokey_body_part_update), + END_LOOP(), +}; + +const BehaviorScript bhvSwoop[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, swoop_seg6_anims_060070D0), + SET_HOME(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 50, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 0, /*Unused*/ 0, 0), + CALL_NATIVE(bhv_init_room), + SCALE(/*Unused*/ 0, /*Field*/ 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_swoop_update), + END_LOOP(), +}; + +const BehaviorScript bhvFlyGuy[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, flyguy_seg8_anims_08011A64), + ANIMATE(0), + SET_HOME(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 50, /*Gravity*/ 0, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 1000, /*Buoyancy*/ 600, /*Unused*/ 0, 0), + CALL_NATIVE(bhv_init_room), + SET_INT(oInteractionSubtype, INT_SUBTYPE_TWIRL_BOUNCE), + SET_FLOAT(oGraphYOffset, 30), + SCALE(/*Unused*/ 0, /*Field*/ 150), + BEGIN_LOOP(), + CALL_NATIVE(bhv_fly_guy_update), + END_LOOP(), +}; + +const BehaviorScript bhvGoomba[] = { + BEGIN(OBJ_LIST_PUSHABLE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + LOAD_ANIMATIONS(oAnimations, goomba_seg8_anims_0801DA4C), + SET_HOME(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 40, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 0, /*Unused*/ 0, 0), + CALL_NATIVE(bhv_goomba_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_goomba_update), + END_LOOP(), +}; + +const BehaviorScript bhvGoombaTripletSpawner[] = { + BEGIN(OBJ_LIST_PUSHABLE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_goomba_triplet_spawner_update), + END_LOOP(), +}; + +const BehaviorScript bhvChainChomp[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + LOAD_ANIMATIONS(oAnimations, chain_chomp_seg6_anims_06025178), + ANIMATE(0), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + HIDE(), + SET_HOME(), + SET_FLOAT(oGraphYOffset, 240), + SCALE(/*Unused*/ 0, /*Field*/ 200), + SPAWN_CHILD_WITH_PARAM(/*Bhv param*/ 0, /*Model*/ MODEL_WOODEN_POST, /*Behavior*/ bhvWoodenPost), + BEGIN_LOOP(), + CALL_NATIVE(bhv_chain_chomp_update), + END_LOOP(), +}; + +const BehaviorScript bhvChainChompChainPart[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SET_FLOAT(oGraphYOffset, 40), + SCALE(/*Unused*/ 0, /*Field*/ 200), + BEGIN_LOOP(), + CALL_NATIVE(bhv_chain_chomp_chain_part_update), + END_LOOP(), +}; + +const BehaviorScript bhvWoodenPost[] = { + BEGIN(OBJ_LIST_SURFACE), + LOAD_COLLISION_DATA(poundable_pole_collision_06002490), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SET_INT(oNumLootCoins, 5), + DROP_TO_FLOOR(), + SET_HOME(), + SCALE(/*Unused*/ 0, /*Field*/ 50), + BEGIN_LOOP(), + CALL_NATIVE(bhv_wooden_post_update), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvChainChompGate[] = { + BEGIN(OBJ_LIST_SURFACE), + LOAD_COLLISION_DATA(bob_seg7_collision_chain_chomp_gate), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + CALL_NATIVE(bhv_chain_chomp_gate_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_chain_chomp_gate_update), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvWigglerHead[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + LOAD_ANIMATIONS(oAnimations, wiggler_seg5_anims_0500EC8C), + SET_HOME(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 60, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + HIDE(), + SCALE(/*Unused*/ 0, /*Field*/ 400), + SET_FLOAT(oWigglerFallThroughFloorsHeight, 5000), + BEGIN_LOOP(), + CALL_NATIVE(bhv_wiggler_update), + END_LOOP(), +}; + +const BehaviorScript bhvWigglerBody[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_ANIMATIONS(oAnimations, wiggler_seg5_anims_0500C874), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SCALE(/*Unused*/ 0, /*Field*/ 400), + BEGIN_LOOP(), + CALL_NATIVE(bhv_wiggler_body_part_update), + END_LOOP(), +}; + +const BehaviorScript bhvEnemyLakitu[] = { + BEGIN(OBJ_LIST_PUSHABLE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, lakitu_enemy_seg5_anims_050144D4), + ANIMATE(0), + SET_HOME(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 40, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_enemy_lakitu_update), + END_LOOP(), +}; + +const BehaviorScript bhvCameraLakitu[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, lakitu_seg6_anims_060058F8), + ANIMATE(0), + CALL_NATIVE(bhv_init_room), + CALL_NATIVE(bhv_camera_lakitu_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_camera_lakitu_update), + END_LOOP(), +}; + +const BehaviorScript bhvCloud[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_HOME(), + SET_INT(oOpacity, 240), + BEGIN_LOOP(), + CALL_NATIVE(bhv_cloud_update), + END_LOOP(), +}; + +const BehaviorScript bhvCloudPart[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_INT(oOpacity, 240), + BEGIN_LOOP(), + CALL_NATIVE(bhv_cloud_part_update), + END_LOOP(), +}; + +const BehaviorScript bhvSpiny[] = { + BEGIN(OBJ_LIST_PUSHABLE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, spiny_seg5_anims_05016EAC), + ANIMATE(0), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 40, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_spiny_update), + END_LOOP(), +}; + +const BehaviorScript bhvMontyMole[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + LOAD_ANIMATIONS(oAnimations, monty_mole_seg5_anims_05007248), + ANIMATE(3), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + HIDE(), + SET_INT(oIntangibleTimer, -1), + SET_FLOAT(oGraphYOffset, -60), + SCALE(/*Unused*/ 0, /*Field*/ 150), + DELAY(1), + CALL_NATIVE(bhv_monty_mole_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_monty_mole_update), + END_LOOP(), +}; + +const BehaviorScript bhvMontyMoleHole[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + SCALE(/*Unused*/ 0, /*Field*/ 150), + BEGIN_LOOP(), + CALL_NATIVE(bhv_monty_mole_hole_update), + END_LOOP(), +}; + +const BehaviorScript bhvMontyMoleRock[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SET_FLOAT(oGraphYOffset, 10), + SCALE(/*Unused*/ 0, /*Field*/ 200), + BEGIN_LOOP(), + CALL_NATIVE(bhv_monty_mole_rock_update), + END_LOOP(), +}; + +const BehaviorScript bhvPlatformOnTrack[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 50, /*Gravity*/ -100, /*Bounciness*/ -50, /*Drag strength*/ 100, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + CALL_NATIVE(bhv_init_room), + CALL_NATIVE(bhv_platform_on_track_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_platform_on_track_update), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvTrackBall[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + CALL_NATIVE(bhv_init_room), + SCALE(/*Unused*/ 0, /*Field*/ 15), + BEGIN_LOOP(), + CALL_NATIVE(bhv_track_ball_update), + END_LOOP(), +}; + +const BehaviorScript bhvSeesawPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + CALL_NATIVE(bhv_seesaw_platform_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_seesaw_platform_update), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvFerrisWheelAxle[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + ADD_INT(oMoveAngleYaw, 0x4000), + CALL_NATIVE(bhv_ferris_wheel_axle_init), + BEGIN_LOOP(), + ADD_INT(oFaceAngleRoll, 400), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvFerrisWheelPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ferris_wheel_platform_update), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvWaterBombSpawner[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_water_bomb_spawner_update), + END_LOOP(), +}; + +const BehaviorScript bhvWaterBomb[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 120, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_water_bomb_update), + END_LOOP(), +}; + +const BehaviorScript bhvWaterBombShadow[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SCALE(/*Unused*/ 0, /*Field*/ 150), + BEGIN_LOOP(), + CALL_NATIVE(bhv_water_bomb_shadow_update), + END_LOOP(), +}; + +const BehaviorScript bhvTTCRotatingSolid[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + SET_FLOAT(oCollisionDistance, 450), + CALL_NATIVE(bhv_ttc_rotating_solid_init), + SET_INT(oTTCRotatingSolidNumTurns, 1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ttc_rotating_solid_update), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvTTCPendulum[] = { + BEGIN(OBJ_LIST_SURFACE), + LOAD_COLLISION_DATA(ttc_seg7_collision_clock_pendulum), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_FLOAT(oCollisionDistance, 1500), + CALL_NATIVE(bhv_ttc_pendulum_init), + SET_FLOAT(oTTCPendulumAccelDir, 1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ttc_pendulum_update), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvTTCTreadmill[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_FLOAT(oCollisionDistance, 750), + CALL_NATIVE(bhv_ttc_treadmill_init), + DELAY(1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ttc_treadmill_update), + CALL_NATIVE(cur_obj_compute_vel_xz), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvTTCMovingBar[] = { + BEGIN(OBJ_LIST_SURFACE), + LOAD_COLLISION_DATA(ttc_seg7_collision_sliding_surface), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + SET_FLOAT(oCollisionDistance, 550), + CALL_NATIVE(bhv_ttc_moving_bar_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ttc_moving_bar_update), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvTTCCog[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_FLOAT(oCollisionDistance, 400), + CALL_NATIVE(bhv_ttc_cog_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ttc_cog_update), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvTTCPitBlock[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + SET_FLOAT(oCollisionDistance, 350), + CALL_NATIVE(bhv_ttc_pit_block_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ttc_pit_block_update), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvTTCElevator[] = { + BEGIN(OBJ_LIST_SURFACE), + LOAD_COLLISION_DATA(ttc_seg7_collision_clock_platform), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + SET_FLOAT(oCollisionDistance, 400), + CALL_NATIVE(bhv_ttc_elevator_init), + SET_FLOAT(oTTCElevatorDir, 1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ttc_elevator_update), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvTTC2DRotator[] = { + BEGIN(OBJ_LIST_SURFACE), + LOAD_COLLISION_DATA(ttc_seg7_collision_clock_main_rotation), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_FLOAT(oCollisionDistance, 1800), + CALL_NATIVE(bhv_ttc_2d_rotator_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ttc_2d_rotator_update), + END_LOOP(), +}; + +const BehaviorScript bhvTTCSpinner[] = { + BEGIN(OBJ_LIST_SURFACE), + LOAD_COLLISION_DATA(ttc_seg7_collision_rotating_clock_platform2), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_FLOAT(oCollisionDistance, 450), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ttc_spinner_update), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvMrBlizzard[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + LOAD_ANIMATIONS(oAnimations, snowman_seg5_anims_0500D118), + ANIMATE(0), + SET_HOME(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + CALL_NATIVE(bhv_mr_blizzard_init), + SET_FLOAT(oMrBlizzardScale, 1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_mr_blizzard_update), + END_LOOP(), +}; + +const BehaviorScript bhvMrBlizzardSnowball[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -300, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SCALE(/*Unused*/ 0, /*Field*/ 200), + ADD_INT(oMoveAngleYaw, -0x5B58), + SET_FLOAT(oForwardVel, 5), + SET_FLOAT(oVelY, -1), + SET_FLOAT(oGraphYOffset, 10), + BEGIN_LOOP(), + CALL_NATIVE(bhv_mr_blizzard_snowball), + END_LOOP(), +}; + +const BehaviorScript bhvSlidingPlatform2[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + CALL_NATIVE(bhv_sliding_plat_2_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_sliding_plat_2_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvOctagonalPlatformRotating[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + CALL_NATIVE(bhv_rotating_octagonal_plat_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_rotating_octagonal_plat_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvAnimatesOnFloorSwitchPress[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_FLOAT(oCollisionDistance, 8000), + CALL_NATIVE(bhv_animates_on_floor_switch_press_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_animates_on_floor_switch_press_loop), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvActivatedBackAndForthPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + CALL_NATIVE(bhv_activated_back_and_forth_platform_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_activated_back_and_forth_platform_update), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvRecoveryHeart[] = { + BEGIN(OBJ_LIST_LEVEL), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_LOOP(), + CALL_NATIVE(bhv_recovery_heart_loop), + END_LOOP(), +}; + +const BehaviorScript bhvWaterBombCannon[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_LOOP(), + CALL_NATIVE(bhv_water_bomb_cannon_loop), + END_LOOP(), +}; + +const BehaviorScript bhvCannonBarrelBubbles[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bubble_cannon_barrel_loop), + END_LOOP(), +}; + +const BehaviorScript bhvUnagi[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, unagi_seg5_anims_05012824), + ANIMATE(6), + SET_HOME(), + SCALE(/*Unused*/ 0, /*Field*/ 300), + SET_FLOAT(oDrawingDistance, 6000), + CALL_NATIVE(bhv_unagi_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_unagi_loop), + END_LOOP(), +}; + +const BehaviorScript bhvUnagiSubobject[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_LOOP(), + CALL_NATIVE(bhv_unagi_subobject_loop), + END_LOOP(), +}; + +const BehaviorScript bhvDorrie[] = { + BEGIN(OBJ_LIST_SURFACE), + LOAD_COLLISION_DATA(dorrie_seg6_collision_0600F644), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, dorrie_seg6_anims_0600F638), + SET_HOME(), + SET_FLOAT(oCollisionDistance, 30000), + ADD_FLOAT(oPosX, 2000), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_dorrie_update), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvHauntedChair[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + LOAD_ANIMATIONS(oAnimations, chair_seg5_anims_05005784), + ANIMATE(0), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 40, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SET_HOME(), + CALL_NATIVE(bhv_init_room), + CALL_NATIVE(bhv_haunted_chair_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_haunted_chair_loop), + END_LOOP(), +}; + +const BehaviorScript bhvMadPiano[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + LOAD_ANIMATIONS(oAnimations, mad_piano_seg5_anims_05009B14), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 40, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SET_HOME(), + ADD_INT(oMoveAngleYaw, 0x4000), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_mad_piano_update), + END_LOOP(), +}; + +const BehaviorScript bhvFlyingBookend[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, bookend_seg5_anims_05002540), + ANIMATE(0), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 60, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SET_INT(oMoveFlags, 0), + SCALE(/*Unused*/ 0, /*Field*/ 70), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_flying_bookend_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBookendSpawn[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bookend_spawn_loop), + END_LOOP(), +}; + +const BehaviorScript bhvHauntedBookshelfManager[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_haunted_bookshelf_manager_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBookSwitch[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + SET_FLOAT(oGraphYOffset, 30), + ADD_INT(oMoveAngleYaw, 0x4000), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_book_switch_loop), + END_LOOP(), +}; + +const BehaviorScript bhvFirePiranhaPlant[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + LOAD_ANIMATIONS(oAnimations, piranha_plant_seg6_anims_0601C31C), + ANIMATE(0), + SET_HOME(), + HIDE(), + CALL_NATIVE(bhv_fire_piranha_plant_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_fire_piranha_plant_update), + END_LOOP(), +}; + +const BehaviorScript bhvSmallPiranhaFlame[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_small_piranha_flame_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvFireSpitter[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SCALE(/*Unused*/ 0, /*Field*/ 40), + BEGIN_LOOP(), + CALL_NATIVE(bhv_fire_spitter_update), + END_LOOP(), +}; + +const BehaviorScript bhvFlyguyFlame[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BILLBOARD(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ 200, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_fly_guy_flame_loop), + ADD_INT(oAnimState, 1), + END_LOOP(), +}; + +const BehaviorScript bhvSnufit[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 0, /*Unused*/ 0, 0), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + SET_INT(oSnufitRecoil, 0), + CALL_NATIVE(bhv_snufit_loop), + END_LOOP(), +}; + +const BehaviorScript bhvSnufitBalls[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BILLBOARD(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 10, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + CALL_NATIVE(bhv_init_room), + SET_FLOAT(oGraphYOffset, 10), + SCALE(/*Unused*/ 0, /*Field*/ 10), + BEGIN_LOOP(), + CALL_NATIVE(bhv_snufit_balls_loop), + END_LOOP(), +}; + +const BehaviorScript bhvHorizontalGrindel[] = { + BEGIN(OBJ_LIST_SURFACE), + LOAD_COLLISION_DATA(ssl_seg7_collision_grindel), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + DROP_TO_FLOOR(), + SET_HOME(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 40, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SCALE(/*Unused*/ 0, /*Field*/ 90), + CALL_NATIVE(bhv_horizontal_grindel_init), + BEGIN_LOOP(), + CALL_NATIVE(cur_obj_update_floor_and_walls), + CALL_NATIVE(bhv_horizontal_grindel_update), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvEyerokBoss[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_eyerok_boss_loop), + END_LOOP(), +}; + +const BehaviorScript bhvEyerokHand[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, eyerok_seg5_anims_050116E4), + ANIMATE(6), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 150, /*Gravity*/ 0, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SET_HOME(), + SET_INT(oAnimState, 3), + BEGIN_LOOP(), + CALL_NATIVE(bhv_eyerok_hand_loop), + END_LOOP(), +}; + +const BehaviorScript bhvKlepto[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, klepto_seg5_anims_05008CFC), + ANIMATE(0), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 100, /*Gravity*/ 0, /*Bounciness*/ -20, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SET_HOME(), + CALL_NATIVE(bhv_klepto_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_klepto_update), + END_LOOP(), +}; + +const BehaviorScript bhvBird[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, birds_seg5_anims_050009E8), + ANIMATE(0), + HIDE(), + SCALE(/*Unused*/ 0, /*Field*/ 70), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bird_update), + END_LOOP(), +}; + +const BehaviorScript bhvRacingPenguin[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, penguin_seg5_anims_05008B74), + ANIMATE(3), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 300, /*Gravity*/ -800, /*Bounciness*/ -5, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 0, /*Unused*/ 0, 0), + SCALE(/*Unused*/ 0, /*Field*/ 400), + CALL_NATIVE(bhv_racing_penguin_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_racing_penguin_update), + END_LOOP(), +}; + +const BehaviorScript bhvPenguinRaceFinishLine[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_LOOP(), + CALL_NATIVE(bhv_penguin_race_finish_line_update), + END_LOOP(), +}; + +const BehaviorScript bhvPenguinRaceShortcutCheck[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + BEGIN_LOOP(), + CALL_NATIVE(bhv_penguin_race_shortcut_check_update), + END_LOOP(), +}; + +const BehaviorScript bhvCoffinSpawner[] = { + BEGIN(OBJ_LIST_SURFACE), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_coffin_spawner_loop), + END_LOOP(), +}; + +const BehaviorScript bhvCoffin[] = { + BEGIN(OBJ_LIST_SURFACE), + LOAD_COLLISION_DATA(bbh_seg7_collision_coffin), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + CALL_NATIVE(bhv_init_room), + BEGIN_LOOP(), + CALL_NATIVE(bhv_coffin_loop), + END_LOOP(), +}; + +const BehaviorScript bhvClamShell[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + DROP_TO_FLOOR(), + LOAD_ANIMATIONS(oAnimations, clam_shell_seg5_anims_05001744), + SET_FLOAT(oGraphYOffset, 10), + BEGIN_LOOP(), + CALL_NATIVE(bhv_clam_loop), + END_LOOP(), +}; + +const BehaviorScript bhvSkeeter[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, skeeter_seg6_anims_06007DE0), + SET_HOME(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 180, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 1200, /*Unused*/ 0, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_skeeter_update), + END_LOOP(), +}; + +const BehaviorScript bhvSkeeterWave[] = { + BEGIN(OBJ_LIST_UNIMPORTANT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_LOOP(), + CALL_NATIVE(bhv_skeeter_wave_update), + END_LOOP(), +}; + +const BehaviorScript bhvSwingPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + LOAD_COLLISION_DATA(rr_seg7_collision_pendulum), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_FLOAT(oCollisionDistance, 2000), + CALL_NATIVE(bhv_swing_platform_init), + BEGIN_LOOP(), + CALL_NATIVE(bhv_swing_platform_update), + CALL_NATIVE(load_object_collision_model), + END_LOOP(), +}; + +const BehaviorScript bhvDonutPlatformSpawner[] = { + BEGIN(OBJ_LIST_SPAWNER), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_LOOP(), + CALL_NATIVE(bhv_donut_platform_spawner_update), + END_LOOP(), +}; + +const BehaviorScript bhvDonutPlatform[] = { + BEGIN(OBJ_LIST_SURFACE), + LOAD_COLLISION_DATA(rr_seg7_collision_donut_platform), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + BEGIN_LOOP(), + CALL_NATIVE(bhv_donut_platform_update), + END_LOOP(), +}; + +const BehaviorScript bhvDDDPole[] = { + BEGIN(OBJ_LIST_POLELIKE), + SET_INTERACT_TYPE(INTERACT_POLE), + SET_HITBOX(/*Radius*/ 80, /*Height*/ 800), + SET_INT(oIntangibleTimer, 0), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + SET_HOME(), + CALL_NATIVE(bhv_ddd_pole_init), + SET_FLOAT(oDDDPoleVel, 10), + BEGIN_LOOP(), + CALL_NATIVE(bhv_ddd_pole_update), + CALL_NATIVE(bhv_pole_base_loop), + END_LOOP(), +}; + +const BehaviorScript bhvRedCoinStarMarker[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + DROP_TO_FLOOR(), + SCALE(/*Unused*/ 0, /*Field*/ 150), + SET_INT(oFaceAnglePitch, 0x4000), + ADD_FLOAT(oPosY, 60), + CALL_NATIVE(bhv_red_coin_star_marker_init), + BEGIN_LOOP(), + ADD_INT(oFaceAngleYaw, 0x100), + END_LOOP(), +}; + +const BehaviorScript bhvTripletButterfly[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, butterfly_seg3_anims_030056B0), + ANIMATE(0), + HIDE(), + SET_HOME(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ 0, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), + SET_FLOAT(oTripletButterflyScale, 1), + BEGIN_LOOP(), + CALL_NATIVE(bhv_triplet_butterfly_update), + END_LOOP(), +}; + +const BehaviorScript bhvBubba[] = { + BEGIN(OBJ_LIST_GENACTOR), + OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + SET_HOME(), + SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 200, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 0, /*Unused*/ 0, 0), + SCALE(/*Unused*/ 0, /*Field*/ 50), + BEGIN_LOOP(), + CALL_NATIVE(bhv_bubba_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBeginningLakitu[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_ANIMATIONS(oAnimations, lakitu_seg6_anims_060058F8), + ANIMATE(0), + SET_FLOAT(oOpacity, 0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_intro_lakitu_loop), + END_LOOP(), +}; + +const BehaviorScript bhvBeginningPeach[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + LOAD_ANIMATIONS(oAnimations, peach_seg5_anims_0501C41C), + ANIMATE(0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_intro_peach_loop), + END_LOOP(), +}; + +const BehaviorScript bhvEndBirds1[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, birds_seg5_anims_050009E8), + ANIMATE(0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_end_birds_1_loop), + END_LOOP(), +}; + +const BehaviorScript bhvEndBirds2[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), + LOAD_ANIMATIONS(oAnimations, birds_seg5_anims_050009E8), + ANIMATE(0), + BEGIN_LOOP(), + CALL_NATIVE(bhv_end_birds_2_loop), + END_LOOP(), +}; + +const BehaviorScript bhvIntroScene[] = { + BEGIN(OBJ_LIST_DEFAULT), + OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), + BEGIN_LOOP(), + CALL_NATIVE(bhv_intro_scene_loop), + END_LOOP(), +}; diff --git a/build-windows-visual-studio/behavior_table/generate.py b/build-windows-visual-studio/behavior_table/generate.py new file mode 100644 index 000000000..a09b3dae2 --- /dev/null +++ b/build-windows-visual-studio/behavior_table/generate.py @@ -0,0 +1,43 @@ +behaviors = [] + +with open('behavior_data.c', 'r') as f: + lines = f.readlines() + +with open('../../data/behavior_data.c', 'w+') as f: + line_number = -1 + current_behavior = None + for line in lines: + f.write(line) + if current_behavior is not None: + f.write(' ID(id_' + current_behavior + '),\n') + current_behavior = None + + line_number += 1 + if not line.startswith('const BehaviorScript'): + continue + if 'BEGIN(' not in lines[line_number + 1]: + continue + behavior_name = line.split('const BehaviorScript ')[1].split('[]')[0] + current_behavior = behavior_name + behaviors.append(behavior_name) + +with open('../../include/behavior_table.h', 'w+') as f: + f.write('#ifndef BEHAVIOR_TABLE_H\n') + f.write('#define BEHAVIOR_TABLE_H\n\n') + f.write('extern BehaviorScript* gBehaviorTable;\n\n') + f.write('enum BehaviorId {\n') + for behavior in behaviors: + f.write(' id_' + behavior + ',\n') + f.write(' id_bhv_max_count // must be the last in the list\n') + f.write('};\n') + + f.write('#endif\n') + +with open('../../data/behavior_table.c', 'w+') as f: + f.write('#include "behavior_table.h"\n\n') + f.write('BehaviorScript* gBehaviorTable[id_bhv_max_count] = {\n') + for behavior in behaviors: + f.write(' [id_' + behavior + '] = &' + behavior + ',\n') + f.write('};\n') + +print(str(behaviors)) \ No newline at end of file diff --git a/data/behavior_data.c b/data/behavior_data.c index 33c4aa2ca..9dd7bc614 100644 --- a/data/behavior_data.c +++ b/data/behavior_data.c @@ -55,6 +55,7 @@ #include "make_const_nonconst.h" #include "behavior_data.h" +#include "behavior_table.h" #define BC_B(a) _SHIFTL(a, 24, 8) #define BC_BB(a, b) (_SHIFTL(a, 24, 8) | _SHIFTL(b, 16, 8)) @@ -67,6 +68,10 @@ #define BC_PTR(a) ((uintptr_t)(a)) +// Defines the id of the behavior script +#define ID(id) \ + BC_B0H(0x39, id) + // Defines the start of the behavior script as well as the object list the object belongs to. // Has some special behavior for certain objects. #define BEGIN(objList) \ @@ -334,6 +339,7 @@ const BehaviorScript bhvStarDoor[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvStarDoor), SET_INT(oInteractType, INTERACT_DOOR), LOAD_COLLISION_DATA(inside_castle_seg7_collision_star_door), SET_INT(oInteractionSubtype, INT_SUBTYPE_STAR_DOOR), @@ -352,6 +358,7 @@ const BehaviorScript bhvStarDoor[] = { const BehaviorScript bhvMrI[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvMrI), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), SPAWN_CHILD(/*Model*/ MODEL_MR_I_IRIS, /*Behavior*/ bhvMrIBody), @@ -365,6 +372,7 @@ const BehaviorScript bhvMrI[] = { const BehaviorScript bhvMrIBody[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvMrIBody), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_init_room), BEGIN_LOOP(), @@ -374,6 +382,7 @@ const BehaviorScript bhvMrIBody[] = { const BehaviorScript bhvMrIParticle[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvMrIParticle), BILLBOARD(), OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_INT(oIntangibleTimer, 0), @@ -389,6 +398,7 @@ const BehaviorScript bhvMrIParticle[] = { const BehaviorScript bhvPurpleParticle[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvPurpleParticle), BILLBOARD(), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_REPEAT(10), @@ -399,6 +409,7 @@ const BehaviorScript bhvPurpleParticle[] = { const BehaviorScript bhvGiantPole[] = { BEGIN(OBJ_LIST_POLELIKE), + ID(id_bhvGiantPole), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INT(oInteractType, INTERACT_POLE), SET_HITBOX(/*Radius*/ 80, /*Height*/ 2100), @@ -411,6 +422,7 @@ const BehaviorScript bhvGiantPole[] = { const BehaviorScript bhvPoleGrabbing[] = { BEGIN(OBJ_LIST_POLELIKE), + ID(id_bhvPoleGrabbing), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INT(oInteractType, INTERACT_POLE), SET_HITBOX(/*Radius*/ 80, /*Height*/ 1500), @@ -423,6 +435,7 @@ const BehaviorScript bhvPoleGrabbing[] = { const BehaviorScript bhvThiHugeIslandTop[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvThiHugeIslandTop), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(thi_seg7_collision_top_trap), BEGIN_LOOP(), @@ -432,6 +445,7 @@ const BehaviorScript bhvThiHugeIslandTop[] = { const BehaviorScript bhvThiTinyIslandTop[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvThiTinyIslandTop), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), CALL_NATIVE(bhv_thi_tiny_island_top_loop), @@ -440,6 +454,7 @@ const BehaviorScript bhvThiTinyIslandTop[] = { const BehaviorScript bhvCapSwitchBase[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvCapSwitchBase), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(capswitch_collision_05003448), BEGIN_LOOP(), @@ -449,6 +464,7 @@ const BehaviorScript bhvCapSwitchBase[] = { const BehaviorScript bhvCapSwitch[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvCapSwitch), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(capswitch_collision_050033D0), BEGIN_LOOP(), @@ -459,6 +475,7 @@ const BehaviorScript bhvCapSwitch[] = { const BehaviorScript bhvKingBobomb[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvKingBobomb), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, king_bobomb_seg5_anims_0500FE30), SET_INT(oInteractType, INTERACT_GRABBABLE), @@ -477,6 +494,7 @@ const BehaviorScript bhvKingBobomb[] = { const BehaviorScript bhvBobombAnchorMario[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBobombAnchorMario), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_FLOAT(oParentRelativePosX, 100), @@ -488,6 +506,7 @@ const BehaviorScript bhvBobombAnchorMario[] = { const BehaviorScript bhvBetaChestBottom[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBetaChestBottom), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), CALL_NATIVE(bhv_beta_chest_bottom_init), @@ -498,6 +517,7 @@ const BehaviorScript bhvBetaChestBottom[] = { const BehaviorScript bhvBetaChestLid[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBetaChestLid), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), BEGIN_LOOP(), @@ -507,6 +527,7 @@ const BehaviorScript bhvBetaChestLid[] = { const BehaviorScript bhvBubbleParticleSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBubbleParticleSpawner), DISABLE_RENDERING(), SET_RANDOM_INT(oWaterObjUnkF4, /*Minimum*/ 2, /*Range*/ 9), DELAY_VAR(oWaterObjUnkF4), @@ -517,6 +538,7 @@ const BehaviorScript bhvBubbleParticleSpawner[] = { const BehaviorScript bhvBubbleMaybe[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvBubbleMaybe), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), CALL_NATIVE(bhv_bubble_wave_init), @@ -536,6 +558,7 @@ const BehaviorScript bhvBubbleMaybe[] = { const BehaviorScript bhvSmallWaterWave[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvSmallWaterWave), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), CALL_NATIVE(bhv_bubble_wave_init), @@ -566,6 +589,7 @@ const BehaviorScript bhvSmallWaterWave398[] = { const BehaviorScript bhvWaterAirBubble[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvWaterAirBubble), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_HITBOX_WITH_OFFSET(/*Radius*/ 400, /*Height*/ 150, /*Downwards offset*/ -150), @@ -581,6 +605,7 @@ const BehaviorScript bhvWaterAirBubble[] = { const BehaviorScript bhvSmallParticle[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvSmallParticle), BILLBOARD(), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_particle_init), @@ -592,6 +617,7 @@ const BehaviorScript bhvSmallParticle[] = { const BehaviorScript bhvPlungeBubble[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvPlungeBubble), PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_PLUNGE_BUBBLE), DISABLE_RENDERING(), CALL_NATIVE(bhv_water_waves_init), @@ -600,6 +626,7 @@ const BehaviorScript bhvPlungeBubble[] = { const BehaviorScript bhvSmallParticleSnow[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvSmallParticleSnow), BILLBOARD(), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_particle_init), @@ -611,6 +638,7 @@ const BehaviorScript bhvSmallParticleSnow[] = { const BehaviorScript bhvSmallParticleBubbles[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvSmallParticleBubbles), BILLBOARD(), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_particle_init), @@ -622,6 +650,7 @@ const BehaviorScript bhvSmallParticleBubbles[] = { const BehaviorScript bhvFishGroup[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvFishGroup), BEGIN_LOOP(), CALL_NATIVE(bhv_fish_group_loop), END_LOOP(), @@ -629,6 +658,7 @@ const BehaviorScript bhvFishGroup[] = { const BehaviorScript bhvCannon[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvCannon), OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SPAWN_CHILD(/*Model*/ MODEL_CANNON_BARREL, /*Behavior*/ bhvCannonBarrel), SET_INT(oInteractType, INTERACT_CANNON_BASE), @@ -643,6 +673,7 @@ const BehaviorScript bhvCannon[] = { const BehaviorScript bhvCannonBarrel[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvCannonBarrel), OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), BEGIN_LOOP(), @@ -652,6 +683,7 @@ const BehaviorScript bhvCannonBarrel[] = { const BehaviorScript bhvCannonBaseUnused[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvCannonBaseUnused), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_INT(oAnimState, -1), @@ -664,6 +696,7 @@ const BehaviorScript bhvCannonBaseUnused[] = { const BehaviorScript bhvChuckya[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvChuckya), OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, chuckya_seg8_anims_0800C070), ANIMATE(5), @@ -681,6 +714,7 @@ const BehaviorScript bhvChuckya[] = { const BehaviorScript bhvChuckyaAnchorMario[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvChuckyaAnchorMario), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_FLOAT(oParentRelativePosY, -60), @@ -692,12 +726,14 @@ const BehaviorScript bhvChuckyaAnchorMario[] = { const BehaviorScript bhvUnused05A8[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvUnused05A8), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BREAK(), }; const BehaviorScript bhvRotatingPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvRotatingPlatform), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HOME(), BEGIN_LOOP(), @@ -708,6 +744,7 @@ const BehaviorScript bhvRotatingPlatform[] = { const BehaviorScript bhvTower[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvTower), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(wf_seg7_collision_tower), SET_FLOAT(oCollisionDistance, 3000), @@ -719,6 +756,7 @@ const BehaviorScript bhvTower[] = { const BehaviorScript bhvBulletBillCannon[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvBulletBillCannon), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(wf_seg7_collision_bullet_bill_cannon), SET_FLOAT(oCollisionDistance, 300), @@ -729,12 +767,14 @@ const BehaviorScript bhvBulletBillCannon[] = { const BehaviorScript bhvWfBreakableWallRight[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvWfBreakableWallRight), LOAD_COLLISION_DATA(wf_seg7_collision_breakable_wall), - GOTO(bhvWfBreakableWallLeft + 1 + 2), + GOTO(bhvWfBreakableWallLeft + 1 + 2 + 1), }; const BehaviorScript bhvWfBreakableWallLeft[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvWfBreakableWallLeft), LOAD_COLLISION_DATA(wf_seg7_collision_breakable_wall_2), // WF breakable walls - common: OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), @@ -748,6 +788,7 @@ const BehaviorScript bhvWfBreakableWallLeft[] = { const BehaviorScript bhvKickableBoard[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvKickableBoard), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wf_seg7_collision_kickable_board), SET_HITBOX(/*Radius*/ 100, /*Height*/ 1200), @@ -761,6 +802,7 @@ const BehaviorScript bhvKickableBoard[] = { const BehaviorScript bhvTowerDoor[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvTowerDoor), OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wf_seg7_collision_tower_door), SET_HITBOX(/*Radius*/ 100, /*Height*/ 100), @@ -773,11 +815,13 @@ const BehaviorScript bhvTowerDoor[] = { const BehaviorScript bhvRotatingCounterClockwise[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvRotatingCounterClockwise), BREAK(), }; const BehaviorScript bhvWfRotatingWoodenPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvWfRotatingWoodenPlatform), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(wf_seg7_collision_clocklike_rotation), BEGIN_LOOP(), @@ -788,6 +832,7 @@ const BehaviorScript bhvWfRotatingWoodenPlatform[] = { const BehaviorScript bhvKoopaShellUnderwater[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvKoopaShellUnderwater), OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), CALL_NATIVE(bhv_koopa_shell_underwater_loop), @@ -796,6 +841,7 @@ const BehaviorScript bhvKoopaShellUnderwater[] = { const BehaviorScript bhvExitPodiumWarp[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvExitPodiumWarp), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_INT(oInteractType, INTERACT_WARP), DROP_TO_FLOOR(), @@ -811,6 +857,7 @@ const BehaviorScript bhvExitPodiumWarp[] = { const BehaviorScript bhvFadingWarp[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvFadingWarp), SET_INT(oInteractionSubtype, INT_SUBTYPE_FADING_WARP), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_INT(oInteractType, INTERACT_WARP), @@ -822,6 +869,7 @@ const BehaviorScript bhvFadingWarp[] = { const BehaviorScript bhvWarp[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvWarp), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_INT(oInteractType, INTERACT_WARP), SET_INT(oIntangibleTimer, 0), @@ -832,6 +880,7 @@ const BehaviorScript bhvWarp[] = { const BehaviorScript bhvWarpPipe[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvWarpPipe), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_INT(oInteractType, INTERACT_WARP), LOAD_COLLISION_DATA(warp_pipe_seg3_collision_03009AC8), @@ -846,6 +895,7 @@ const BehaviorScript bhvWarpPipe[] = { const BehaviorScript bhvWhitePuffExplosion[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvWhitePuffExplosion), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), BEGIN_LOOP(), @@ -855,13 +905,15 @@ const BehaviorScript bhvWhitePuffExplosion[] = { const BehaviorScript bhvSpawnedStar[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvSpawnedStar), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INT(oBehParams2ndByte, 1), - GOTO(bhvSpawnedStarNoLevelExit + 1 + 1), + GOTO(bhvSpawnedStarNoLevelExit + 1 + 1 + 1), }; const BehaviorScript bhvSpawnedStarNoLevelExit[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvSpawnedStarNoLevelExit), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), // Spawned star - common: SET_HOME(), @@ -873,6 +925,7 @@ const BehaviorScript bhvSpawnedStarNoLevelExit[] = { const BehaviorScript bhvMrIBlueCoin[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvMrIBlueCoin), SET_INT(oInteractType, INTERACT_COIN), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), @@ -891,6 +944,7 @@ const BehaviorScript bhvMrIBlueCoin[] = { const BehaviorScript bhvCoinInsideBoo[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvCoinInsideBoo), SET_HITBOX(/*Radius*/ 100, /*Height*/ 64), SET_INT(oInteractType, INTERACT_COIN), OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), @@ -905,6 +959,7 @@ const BehaviorScript bhvCoinInsideBoo[] = { const BehaviorScript bhvCoinFormationSpawn[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvCoinFormationSpawn), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), BEGIN_LOOP(), @@ -914,6 +969,7 @@ const BehaviorScript bhvCoinFormationSpawn[] = { const BehaviorScript bhvCoinFormation[] = { BEGIN(OBJ_LIST_SPAWNER), + ID(id_bhvCoinFormation), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), CALL_NATIVE(bhv_coin_formation_init), BEGIN_LOOP(), @@ -923,12 +979,14 @@ const BehaviorScript bhvCoinFormation[] = { const BehaviorScript bhvOneCoin[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvOneCoin), SET_INT(oBehParams2ndByte, 1), - GOTO(bhvYellowCoin + 1), + GOTO(bhvYellowCoin + 1 + 1), }; const BehaviorScript bhvYellowCoin[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvYellowCoin), // Yellow coin - common: BILLBOARD(), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), @@ -940,6 +998,7 @@ const BehaviorScript bhvYellowCoin[] = { const BehaviorScript bhvTemporaryYellowCoin[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvTemporaryYellowCoin), BILLBOARD(), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_yellow_coin_init), @@ -950,6 +1009,7 @@ const BehaviorScript bhvTemporaryYellowCoin[] = { const BehaviorScript bhvThreeCoinsSpawn[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvThreeCoinsSpawn), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_REPEAT(3), SPAWN_CHILD(/*Model*/ MODEL_YELLOW_COIN, /*Behavior*/ bhvSingleCoinGetsSpawned), @@ -959,6 +1019,7 @@ const BehaviorScript bhvThreeCoinsSpawn[] = { const BehaviorScript bhvTenCoinsSpawn[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvTenCoinsSpawn), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_REPEAT(10), SPAWN_CHILD(/*Model*/ MODEL_YELLOW_COIN, /*Behavior*/ bhvSingleCoinGetsSpawned), @@ -968,6 +1029,7 @@ const BehaviorScript bhvTenCoinsSpawn[] = { const BehaviorScript bhvSingleCoinGetsSpawned[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvSingleCoinGetsSpawned), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), CALL_NATIVE(bhv_coin_init), @@ -980,6 +1042,7 @@ const BehaviorScript bhvSingleCoinGetsSpawned[] = { const BehaviorScript bhvCoinSparkles[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvCoinSparkles), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_FLOAT(oGraphYOffset, 25), @@ -995,6 +1058,7 @@ const BehaviorScript bhvCoinSparkles[] = { const BehaviorScript bhvGoldenCoinSparkles[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvGoldenCoinSparkles), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), DISABLE_RENDERING(), BEGIN_REPEAT(3), @@ -1005,6 +1069,7 @@ const BehaviorScript bhvGoldenCoinSparkles[] = { const BehaviorScript bhvWallTinyStarParticle[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvWallTinyStarParticle), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), BEGIN_REPEAT(10), @@ -1015,6 +1080,7 @@ const BehaviorScript bhvWallTinyStarParticle[] = { const BehaviorScript bhvVertStarParticleSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvVertStarParticleSpawner), DISABLE_RENDERING(), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_V_STAR), @@ -1025,6 +1091,7 @@ const BehaviorScript bhvVertStarParticleSpawner[] = { const BehaviorScript bhvPoundTinyStarParticle[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvPoundTinyStarParticle), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), BEGIN_REPEAT(10), @@ -1035,6 +1102,7 @@ const BehaviorScript bhvPoundTinyStarParticle[] = { const BehaviorScript bhvHorStarParticleSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvHorStarParticleSpawner), DISABLE_RENDERING(), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_H_STAR), @@ -1045,6 +1113,7 @@ const BehaviorScript bhvHorStarParticleSpawner[] = { const BehaviorScript bhvPunchTinyTriangle[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvPunchTinyTriangle), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), BEGIN_LOOP(), @@ -1054,6 +1123,7 @@ const BehaviorScript bhvPunchTinyTriangle[] = { const BehaviorScript bhvTriangleParticleSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvTriangleParticleSpawner), DISABLE_RENDERING(), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_TRIANGLE), @@ -1064,12 +1134,14 @@ const BehaviorScript bhvTriangleParticleSpawner[] = { const BehaviorScript bhvDoorWarp[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvDoorWarp), SET_INT(oInteractType, INTERACT_WARP_DOOR), - GOTO(bhvDoor + 1 + 1), + GOTO(bhvDoor + 1 + 1 + 1), }; const BehaviorScript bhvDoor[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvDoor), SET_INT(oInteractType, INTERACT_DOOR), // Door - common: OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), @@ -1088,6 +1160,7 @@ const BehaviorScript bhvDoor[] = { const BehaviorScript bhvGrindel[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvGrindel), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(ssl_seg7_collision_grindel), DROP_TO_FLOOR(), @@ -1101,6 +1174,7 @@ const BehaviorScript bhvGrindel[] = { const BehaviorScript bhvThwomp2[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvThwomp2), LOAD_COLLISION_DATA(thwomp_seg5_collision_0500B92C), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), @@ -1116,6 +1190,7 @@ const BehaviorScript bhvThwomp2[] = { const BehaviorScript bhvThwomp[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvThwomp), LOAD_COLLISION_DATA(thwomp_seg5_collision_0500B7D0), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), @@ -1131,6 +1206,7 @@ const BehaviorScript bhvThwomp[] = { const BehaviorScript bhvTumblingBridgePlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvTumblingBridgePlatform), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_FLOAT(oCollisionDistance, 300), BEGIN_LOOP(), @@ -1141,6 +1217,7 @@ const BehaviorScript bhvTumblingBridgePlatform[] = { const BehaviorScript bhvWfTumblingBridge[] = { BEGIN(OBJ_LIST_SPAWNER), + ID(id_bhvWfTumblingBridge), OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), BEGIN_LOOP(), @@ -1150,6 +1227,7 @@ const BehaviorScript bhvWfTumblingBridge[] = { const BehaviorScript bhvBbhTumblingBridge[] = { BEGIN(OBJ_LIST_SPAWNER), + ID(id_bhvBbhTumblingBridge), OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), SET_INT(oBehParams2ndByte, 1), @@ -1160,6 +1238,7 @@ const BehaviorScript bhvBbhTumblingBridge[] = { const BehaviorScript bhvLllTumblingBridge[] = { BEGIN(OBJ_LIST_SPAWNER), + ID(id_bhvLllTumblingBridge), OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), SET_INT(oBehParams2ndByte, 2), @@ -1170,6 +1249,7 @@ const BehaviorScript bhvLllTumblingBridge[] = { const BehaviorScript bhvFlame[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvFlame), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_HOME(), @@ -1186,6 +1266,7 @@ const BehaviorScript bhvFlame[] = { const BehaviorScript bhvAnotherElavator[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvAnotherElavator), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(hmc_seg7_collision_elevator), SET_HOME(), @@ -1198,6 +1279,7 @@ const BehaviorScript bhvAnotherElavator[] = { const BehaviorScript bhvRrElevatorPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvRrElevatorPlatform), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(rr_seg7_collision_elevator_platform), SET_HOME(), @@ -1210,6 +1292,7 @@ const BehaviorScript bhvRrElevatorPlatform[] = { const BehaviorScript bhvHmcElevatorPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvHmcElevatorPlatform), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(hmc_seg7_collision_elevator), SET_HOME(), @@ -1223,6 +1306,7 @@ const BehaviorScript bhvHmcElevatorPlatform[] = { const BehaviorScript bhvWaterMist[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvWaterMist), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_INT(oOpacity, 254), @@ -1236,6 +1320,7 @@ const BehaviorScript bhvWaterMist[] = { const BehaviorScript bhvBreathParticleSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBreathParticleSpawner), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_REPEAT(8), CALL_NATIVE(bhv_water_mist_spawn_loop), @@ -1245,6 +1330,7 @@ const BehaviorScript bhvBreathParticleSpawner[] = { const BehaviorScript bhvBreakBoxTriangle[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvBreakBoxTriangle), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_REPEAT(18), CALL_NATIVE(cur_obj_rotate_face_angle_using_vel), @@ -1255,6 +1341,7 @@ const BehaviorScript bhvBreakBoxTriangle[] = { const BehaviorScript bhvWaterMist2[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvWaterMist2), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), SET_INT(oFaceAnglePitch, 0xC000), @@ -1266,6 +1353,7 @@ const BehaviorScript bhvWaterMist2[] = { const BehaviorScript bhvUnused0DFC[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvUnused0DFC), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INT(oAnimState, -1), SET_FLOAT(oFaceAnglePitch, 0), @@ -1279,6 +1367,7 @@ const BehaviorScript bhvUnused0DFC[] = { const BehaviorScript bhvMistCircParticleSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvMistCircParticleSpawner), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_pound_white_puffs_init), DELAY(1), @@ -1287,6 +1376,7 @@ const BehaviorScript bhvMistCircParticleSpawner[] = { const BehaviorScript bhvDirtParticleSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvDirtParticleSpawner), BEGIN(OBJ_LIST_DEFAULT), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_ground_sand_init), @@ -1296,6 +1386,7 @@ const BehaviorScript bhvDirtParticleSpawner[] = { const BehaviorScript bhvSnowParticleSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvSnowParticleSpawner), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_ground_snow_init), DELAY(1), @@ -1304,6 +1395,7 @@ const BehaviorScript bhvSnowParticleSpawner[] = { const BehaviorScript bhvWind[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvWind), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_LOOP(), CALL_NATIVE(bhv_wind_loop), @@ -1312,6 +1404,7 @@ const BehaviorScript bhvWind[] = { const BehaviorScript bhvEndToad[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvEndToad), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_ANIMATIONS(oAnimations, toad_seg6_anims_0600FB58), ANIMATE(0), @@ -1322,6 +1415,7 @@ const BehaviorScript bhvEndToad[] = { const BehaviorScript bhvEndPeach[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvEndPeach), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_ANIMATIONS(oAnimations, peach_seg5_anims_0501C41C), ANIMATE(0), @@ -1332,6 +1426,7 @@ const BehaviorScript bhvEndPeach[] = { const BehaviorScript bhvUnusedParticleSpawn[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvUnusedParticleSpawn), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), SET_INT(oIntangibleTimer, 0), @@ -1343,11 +1438,13 @@ const BehaviorScript bhvUnusedParticleSpawn[] = { const BehaviorScript bhvUkiki[] = { BEGIN(OBJ_LIST_GENACTOR), - GOTO(bhvMacroUkiki + 1), + ID(id_bhvUkiki), + GOTO(bhvMacroUkiki + 1 + 1), }; const BehaviorScript bhvUkikiCageChild[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvUkikiCageChild), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_FLOAT(oPosX, 2560), SET_FLOAT(oPosY, 1457), @@ -1357,6 +1454,7 @@ const BehaviorScript bhvUkikiCageChild[] = { const BehaviorScript bhvUkikiCageStar[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvUkikiCageStar), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HOME(), BEGIN_LOOP(), @@ -1366,6 +1464,7 @@ const BehaviorScript bhvUkikiCageStar[] = { const BehaviorScript bhvUkikiCage[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvUkikiCage), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), LOAD_COLLISION_DATA(ttm_seg7_collision_ukiki_cage), @@ -1380,6 +1479,7 @@ const BehaviorScript bhvUkikiCage[] = { const BehaviorScript bhvBitfsSinkingPlatforms[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvBitfsSinkingPlatforms), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(bitfs_seg7_collision_sinking_platform), SET_HOME(), @@ -1391,6 +1491,7 @@ const BehaviorScript bhvBitfsSinkingPlatforms[] = { const BehaviorScript bhvBitfsSinkingCagePlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvBitfsSinkingCagePlatform), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(bitfs_seg7_collision_sinking_cage_platform), SET_HOME(), @@ -1403,6 +1504,7 @@ const BehaviorScript bhvBitfsSinkingCagePlatform[] = { const BehaviorScript bhvDddMovingPole[] = { BEGIN(OBJ_LIST_POLELIKE), + ID(id_bhvDddMovingPole), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INT(oInteractType, INTERACT_POLE), SET_HITBOX(/*Radius*/ 80, /*Height*/ 710), @@ -1415,6 +1517,7 @@ const BehaviorScript bhvDddMovingPole[] = { const BehaviorScript bhvBitfsTiltingInvertedPyramid[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvBitfsTiltingInvertedPyramid), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(bitfs_seg7_collision_inverted_pyramid), SET_HOME(), @@ -1427,6 +1530,7 @@ const BehaviorScript bhvBitfsTiltingInvertedPyramid[] = { const BehaviorScript bhvSquishablePlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvSquishablePlatform), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(bitfs_seg7_collision_squishable_platform), SET_FLOAT(oCollisionDistance, 10000), @@ -1439,6 +1543,7 @@ const BehaviorScript bhvSquishablePlatform[] = { const BehaviorScript bhvCutOutObject[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvCutOutObject), DISABLE_RENDERING(), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BREAK(), @@ -1452,6 +1557,7 @@ const BehaviorScript bhvBetaMovingFlamesSpawn[] = { const BehaviorScript bhvBetaMovingFlames[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvBetaMovingFlames), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), BEGIN_LOOP(), @@ -1462,6 +1568,7 @@ const BehaviorScript bhvBetaMovingFlames[] = { const BehaviorScript bhvRrRotatingBridgePlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvRrRotatingBridgePlatform), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(rr_seg7_collision_rotating_platform_with_fire), SET_FLOAT(oCollisionDistance, 1500), @@ -1474,6 +1581,7 @@ const BehaviorScript bhvRrRotatingBridgePlatform[] = { const BehaviorScript bhvFlamethrower[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvFlamethrower), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), BEGIN_LOOP(), @@ -1483,6 +1591,7 @@ const BehaviorScript bhvFlamethrower[] = { const BehaviorScript bhvFlamethrowerFlame[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvFlamethrowerFlame), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INTERACT_TYPE(INTERACT_FLAME), SET_HITBOX_WITH_OFFSET(/*Radius*/ 50, /*Height*/ 25, /*Downwards offset*/ 25), @@ -1498,6 +1607,7 @@ const BehaviorScript bhvFlamethrowerFlame[] = { const BehaviorScript bhvBouncingFireball[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBouncingFireball), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DISABLE_RENDERING(), BEGIN_LOOP(), @@ -1507,6 +1617,7 @@ const BehaviorScript bhvBouncingFireball[] = { const BehaviorScript bhvBouncingFireballFlame[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBouncingFireballFlame), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INTERACT_TYPE(INTERACT_FLAME), SET_FLOAT(oGraphYOffset, 30), @@ -1521,6 +1632,7 @@ const BehaviorScript bhvBouncingFireballFlame[] = { const BehaviorScript bhvBowserShockWave[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBowserShockWave), OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_INT(oOpacity, 255), BEGIN_LOOP(), @@ -1530,6 +1642,7 @@ const BehaviorScript bhvBowserShockWave[] = { const BehaviorScript bhvFireParticleSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvFireParticleSpawner), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_FLOAT(oGraphYOffset, 70), @@ -1542,6 +1655,7 @@ const BehaviorScript bhvFireParticleSpawner[] = { const BehaviorScript bhvBlackSmokeMario[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvBlackSmokeMario), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_INT(oAnimState, 4), @@ -1558,6 +1672,7 @@ const BehaviorScript bhvBlackSmokeMario[] = { const BehaviorScript bhvBlackSmokeBowser[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvBlackSmokeBowser), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_FLOAT(oGraphYOffset, 0), @@ -1570,6 +1685,7 @@ const BehaviorScript bhvBlackSmokeBowser[] = { const BehaviorScript bhvBlackSmokeUpward[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBlackSmokeUpward), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_REPEAT(4), CALL_NATIVE(bhv_black_smoke_upward_loop), @@ -1579,6 +1695,7 @@ const BehaviorScript bhvBlackSmokeUpward[] = { const BehaviorScript bhvBetaFishSplashSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBetaFishSplashSpawner), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DISABLE_RENDERING(), BEGIN_LOOP(), @@ -1588,6 +1705,7 @@ const BehaviorScript bhvBetaFishSplashSpawner[] = { const BehaviorScript bhvSpindrift[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvSpindrift), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, spindrift_seg5_anims_05002D68), ANIMATE(0), @@ -1601,6 +1719,7 @@ const BehaviorScript bhvSpindrift[] = { const BehaviorScript bhvTowerPlatformGroup[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvTowerPlatformGroup), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), DISABLE_RENDERING(), ADD_FLOAT(oPosY, 300), @@ -1612,6 +1731,7 @@ const BehaviorScript bhvTowerPlatformGroup[] = { const BehaviorScript bhvWfSlidingTowerPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvWfSlidingTowerPlatform), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wf_seg7_collision_platform), BEGIN_LOOP(), @@ -1622,6 +1742,7 @@ const BehaviorScript bhvWfSlidingTowerPlatform[] = { const BehaviorScript bhvWfElevatorTowerPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvWfElevatorTowerPlatform), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wf_seg7_collision_platform), BEGIN_LOOP(), @@ -1632,6 +1753,7 @@ const BehaviorScript bhvWfElevatorTowerPlatform[] = { const BehaviorScript bhvWfSolidTowerPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvWfSolidTowerPlatform), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wf_seg7_collision_platform), BEGIN_LOOP(), @@ -1642,6 +1764,7 @@ const BehaviorScript bhvWfSolidTowerPlatform[] = { const BehaviorScript bhvLeafParticleSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvLeafParticleSpawner), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_snow_leaf_particle_spawn_init), DELAY(1), @@ -1650,6 +1773,7 @@ const BehaviorScript bhvLeafParticleSpawner[] = { const BehaviorScript bhvTreeSnow[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvTreeSnow), OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), BEGIN_LOOP(), @@ -1659,6 +1783,7 @@ const BehaviorScript bhvTreeSnow[] = { const BehaviorScript bhvTreeLeaf[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvTreeLeaf), OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), CALL_NATIVE(bhv_tree_snow_or_leaf_loop), @@ -1667,6 +1792,7 @@ const BehaviorScript bhvTreeLeaf[] = { const BehaviorScript bhvAnotherTiltingPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvAnotherTiltingPlatform), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), CALL_NATIVE(bhv_platform_normals_init), @@ -1678,6 +1804,7 @@ const BehaviorScript bhvAnotherTiltingPlatform[] = { const BehaviorScript bhvSquarishPathMoving[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvSquarishPathMoving), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(bitdw_seg7_collision_moving_pyramid), SET_HOME(), @@ -1688,6 +1815,7 @@ const BehaviorScript bhvSquarishPathMoving[] = { const BehaviorScript bhvPiranhaPlantBubble[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvPiranhaPlantBubble), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), BEGIN_LOOP(), @@ -1697,6 +1825,7 @@ const BehaviorScript bhvPiranhaPlantBubble[] = { const BehaviorScript bhvPiranhaPlantWakingBubbles[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvPiranhaPlantWakingBubbles), BILLBOARD(), OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_REPEAT(10), @@ -1707,17 +1836,20 @@ const BehaviorScript bhvPiranhaPlantWakingBubbles[] = { const BehaviorScript bhvFloorSwitchAnimatesObject[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvFloorSwitchAnimatesObject), SET_INT(oBehParams2ndByte, 1), - GOTO(bhvFloorSwitchHardcodedModel + 1), + GOTO(bhvFloorSwitchHardcodedModel + 1 + 1), }; const BehaviorScript bhvFloorSwitchGrills[] = { BEGIN(OBJ_LIST_SURFACE), - GOTO(bhvFloorSwitchHardcodedModel + 1), + ID(id_bhvFloorSwitchGrills), + GOTO(bhvFloorSwitchHardcodedModel + 1 + 1), }; const BehaviorScript bhvFloorSwitchHardcodedModel[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvFloorSwitchHardcodedModel), // Floor switch - common: OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(purple_switch_seg8_collision_0800C7A8), @@ -1729,12 +1861,14 @@ const BehaviorScript bhvFloorSwitchHardcodedModel[] = { const BehaviorScript bhvFloorSwitchHiddenObjects[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvFloorSwitchHiddenObjects), SET_INT(oBehParams2ndByte, 2), - GOTO(bhvFloorSwitchHardcodedModel + 1), + GOTO(bhvFloorSwitchHardcodedModel + 1 + 1), }; const BehaviorScript bhvHiddenObject[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvHiddenObject), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(breakable_box_seg8_collision_08012D70), SET_FLOAT(oCollisionDistance, 300), @@ -1745,6 +1879,7 @@ const BehaviorScript bhvHiddenObject[] = { const BehaviorScript bhvBreakableBox[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvBreakableBox), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(breakable_box_seg8_collision_08012D70), SET_FLOAT(oCollisionDistance, 500), @@ -1758,6 +1893,7 @@ const BehaviorScript bhvBreakableBox[] = { const BehaviorScript bhvPushableMetalBox[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvPushableMetalBox), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(metal_box_seg8_collision_08024C28), SET_FLOAT(oCollisionDistance, 500), @@ -1770,6 +1906,7 @@ const BehaviorScript bhvPushableMetalBox[] = { const BehaviorScript bhvHeaveHo[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvHeaveHo), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, heave_ho_seg5_anims_0501534C), ANIMATE(0), @@ -1787,6 +1924,7 @@ const BehaviorScript bhvHeaveHo[] = { const BehaviorScript bhvHeaveHoThrowMario[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvHeaveHoThrowMario), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), BEGIN_LOOP(), @@ -1796,6 +1934,7 @@ const BehaviorScript bhvHeaveHoThrowMario[] = { const BehaviorScript bhvCcmTouchedStarSpawn[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvCcmTouchedStarSpawn), OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HITBOX(/*Radius*/ 500, /*Height*/ 500), SET_INT(oIntangibleTimer, 0), @@ -1806,6 +1945,7 @@ const BehaviorScript bhvCcmTouchedStarSpawn[] = { const BehaviorScript bhvUnusedPoundablePlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvUnusedPoundablePlatform), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(sl_seg7_collision_pound_explodes), SET_HOME(), @@ -1816,6 +1956,7 @@ const BehaviorScript bhvUnusedPoundablePlatform[] = { const BehaviorScript bhvBetaTrampolineTop[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvBetaTrampolineTop), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(springboard_collision_05001A28), SET_HOME(), @@ -1827,6 +1968,7 @@ const BehaviorScript bhvBetaTrampolineTop[] = { const BehaviorScript bhvBetaTrampolineSpring[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBetaTrampolineSpring), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HOME(), BEGIN_LOOP(), @@ -1836,6 +1978,7 @@ const BehaviorScript bhvBetaTrampolineSpring[] = { const BehaviorScript bhvJumpingBox[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvJumpingBox), OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 600, /*Unused*/ 0, 0), BEGIN_LOOP(), @@ -1845,6 +1988,7 @@ const BehaviorScript bhvJumpingBox[] = { const BehaviorScript bhvBooCage[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBooCage), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_FLOAT(oGraphYOffset, 10), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0), @@ -1855,12 +1999,14 @@ const BehaviorScript bhvBooCage[] = { const BehaviorScript bhvStub[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvStub), DISABLE_RENDERING(), BREAK(), }; const BehaviorScript bhvIgloo[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvIgloo), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INTERACT_TYPE(INTERACT_IGLOO_BARRIER), SET_HITBOX(/*Radius*/ 100, /*Height*/ 200), @@ -1873,6 +2019,7 @@ const BehaviorScript bhvIgloo[] = { const BehaviorScript bhvBowserKey[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvBowserKey), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HOME(), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), @@ -1883,6 +2030,7 @@ const BehaviorScript bhvBowserKey[] = { const BehaviorScript bhvGrandStar[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvGrandStar), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INTERACT_TYPE(INTERACT_STAR_OR_KEY), SET_INT(oInteractionSubtype, INT_SUBTYPE_GRAND_STAR), @@ -1895,6 +2043,7 @@ const BehaviorScript bhvGrandStar[] = { const BehaviorScript bhvBetaBooKey[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvBetaBooKey), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HITBOX(/*Radius*/ 32, /*Height*/ 64), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), @@ -1905,6 +2054,7 @@ const BehaviorScript bhvBetaBooKey[] = { const BehaviorScript bhvAlphaBooKey[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvAlphaBooKey), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HITBOX(/*Radius*/ 32, /*Height*/ 64), SET_INT(oIntangibleTimer, 0), @@ -1915,6 +2065,7 @@ const BehaviorScript bhvAlphaBooKey[] = { const BehaviorScript bhvBulletBill[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBulletBill), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), SET_HITBOX_WITH_OFFSET(/*Radius*/ 50, /*Height*/ 50, /*Downwards offset*/ 50), @@ -1931,6 +2082,7 @@ const BehaviorScript bhvBulletBill[] = { const BehaviorScript bhvWhitePuffSmoke[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvWhitePuffSmoke), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), ADD_FLOAT(oPosY, -100), @@ -1944,11 +2096,13 @@ const BehaviorScript bhvWhitePuffSmoke[] = { const BehaviorScript bhvUnused1820[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvUnused1820), BREAK(), }; const BehaviorScript bhvBowserTailAnchor[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBowserTailAnchor), SET_HITBOX_WITH_OFFSET(/*Radius*/ 100, /*Height*/ 50, /*Downwards offset*/ -50), SET_INT(oIntangibleTimer, 0), DISABLE_RENDERING(), @@ -1959,6 +2113,7 @@ const BehaviorScript bhvBowserTailAnchor[] = { const BehaviorScript bhvBowser[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBowser), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_INT(oInteractType, INTERACT_GRABBABLE), SET_HITBOX(/*Radius*/ 400, /*Height*/ 400), @@ -1979,6 +2134,7 @@ const BehaviorScript bhvBowser[] = { const BehaviorScript bhvBowserBodyAnchor[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBowserBodyAnchor), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HITBOX(/*Radius*/ 100, /*Height*/ 300), SET_INTERACT_TYPE(INTERACT_DAMAGE), @@ -1993,6 +2149,7 @@ const BehaviorScript bhvBowserBodyAnchor[] = { const BehaviorScript bhvBowserFlameSpawn[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBowserFlameSpawn), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_MODEL(MODEL_NONE), BEGIN_LOOP(), @@ -2002,6 +2159,7 @@ const BehaviorScript bhvBowserFlameSpawn[] = { const BehaviorScript bhvTiltingBowserLavaPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvTiltingBowserLavaPlatform), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(bowser_2_seg7_collision_tilting_platform), SET_FLOAT(oDrawingDistance, 20000), @@ -2016,6 +2174,7 @@ const BehaviorScript bhvTiltingBowserLavaPlatform[] = { const BehaviorScript bhvFallingBowserPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvFallingBowserPlatform), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_FLOAT(oDrawingDistance, 20000), SET_FLOAT(oCollisionDistance, 20000), @@ -2028,6 +2187,7 @@ const BehaviorScript bhvFallingBowserPlatform[] = { const BehaviorScript bhvBlueBowserFlame[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvBlueBowserFlame), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INTERACT_TYPE(INTERACT_FLAME), BILLBOARD(), @@ -2041,6 +2201,7 @@ const BehaviorScript bhvBlueBowserFlame[] = { const BehaviorScript bhvFlameFloatingLanding[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvFlameFloatingLanding), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INTERACT_TYPE(INTERACT_FLAME), BILLBOARD(), @@ -2054,6 +2215,7 @@ const BehaviorScript bhvFlameFloatingLanding[] = { const BehaviorScript bhvBlueFlamesGroup[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvBlueFlamesGroup), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_INTERACT_TYPE(INTERACT_FLAME), BILLBOARD(), @@ -2064,6 +2226,7 @@ const BehaviorScript bhvBlueFlamesGroup[] = { const BehaviorScript bhvFlameBouncing[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvFlameBouncing), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_INTERACT_TYPE(INTERACT_FLAME), BILLBOARD(), @@ -2077,6 +2240,7 @@ const BehaviorScript bhvFlameBouncing[] = { const BehaviorScript bhvFlameMovingForwardGrowing[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvFlameMovingForwardGrowing), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INTERACT_TYPE(INTERACT_FLAME), BILLBOARD(), @@ -2089,6 +2253,7 @@ const BehaviorScript bhvFlameMovingForwardGrowing[] = { const BehaviorScript bhvFlameBowser[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvFlameBowser), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INTERACT_TYPE(INTERACT_FLAME), BILLBOARD(), @@ -2102,6 +2267,7 @@ const BehaviorScript bhvFlameBowser[] = { const BehaviorScript bhvFlameLargeBurningOut[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvFlameLargeBurningOut), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INTERACT_TYPE(INTERACT_FLAME), BILLBOARD(), @@ -2115,6 +2281,7 @@ const BehaviorScript bhvFlameLargeBurningOut[] = { const BehaviorScript bhvBlueFish[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBlueFish), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), LOAD_ANIMATIONS(oAnimations, blue_fish_seg3_anims_0301C2B0), @@ -2126,6 +2293,7 @@ const BehaviorScript bhvBlueFish[] = { const BehaviorScript bhvTankFishGroup[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvTankFishGroup), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HOME(), BEGIN_LOOP(), @@ -2135,6 +2303,7 @@ const BehaviorScript bhvTankFishGroup[] = { const BehaviorScript bhvCheckerboardElevatorGroup[] = { BEGIN(OBJ_LIST_SPAWNER), + ID(id_bhvCheckerboardElevatorGroup), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_checkerboard_elevator_group_init), DELAY(1), @@ -2143,6 +2312,7 @@ const BehaviorScript bhvCheckerboardElevatorGroup[] = { const BehaviorScript bhvCheckerboardPlatformSub[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvCheckerboardPlatformSub), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(checkerboard_platform_seg8_collision_0800D710), CALL_NATIVE(bhv_checkerboard_platform_init), @@ -2154,6 +2324,7 @@ const BehaviorScript bhvCheckerboardPlatformSub[] = { const BehaviorScript bhvBowserKeyUnlockDoor[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBowserKeyUnlockDoor), LOAD_ANIMATIONS(oAnimations, bowser_key_seg3_anims_list), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_LOOP(), @@ -2163,6 +2334,7 @@ const BehaviorScript bhvBowserKeyUnlockDoor[] = { const BehaviorScript bhvBowserKeyCourseExit[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBowserKeyCourseExit), LOAD_ANIMATIONS(oAnimations, bowser_key_seg3_anims_list), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_LOOP(), @@ -2172,12 +2344,14 @@ const BehaviorScript bhvBowserKeyCourseExit[] = { const BehaviorScript bhvInvisibleObjectsUnderBridge[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvInvisibleObjectsUnderBridge), CALL_NATIVE(bhv_invisible_objects_under_bridge_init), BREAK(), }; const BehaviorScript bhvWaterLevelPillar[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvWaterLevelPillar), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(inside_castle_seg7_collision_water_level_pillar), CALL_NATIVE(bhv_water_level_pillar_init), @@ -2189,6 +2363,7 @@ const BehaviorScript bhvWaterLevelPillar[] = { const BehaviorScript bhvDddWarp[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvDddWarp), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_FLOAT(oCollisionDistance, 30000), BEGIN_LOOP(), @@ -2199,6 +2374,7 @@ const BehaviorScript bhvDddWarp[] = { const BehaviorScript bhvMoatGrills[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvMoatGrills), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(castle_grounds_seg7_collision_moat_grills), SET_FLOAT(oCollisionDistance, 30000), @@ -2209,12 +2385,14 @@ const BehaviorScript bhvMoatGrills[] = { const BehaviorScript bhvClockMinuteHand[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvClockMinuteHand), SET_INT(oAngleVelRoll, -0x180), - GOTO(bhvClockHourHand + 1 + 1), + GOTO(bhvClockHourHand + 1 + 1 + 1), }; const BehaviorScript bhvClockHourHand[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvClockHourHand), SET_INT(oAngleVelRoll, -0x20), // Clock hand - common: OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), @@ -2226,6 +2404,7 @@ const BehaviorScript bhvClockHourHand[] = { const BehaviorScript bhvMacroUkiki[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvMacroUkiki), // Ukiki - common: OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_INT(oInteractType, INTERACT_GRABBABLE), @@ -2245,11 +2424,13 @@ const BehaviorScript bhvMacroUkiki[] = { const BehaviorScript bhvStub1D0C[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvStub1D0C), DEACTIVATE(), }; const BehaviorScript bhvLllRotatingHexagonalPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvLllRotatingHexagonalPlatform), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_hexagonal_platform), SET_HOME(), @@ -2262,6 +2443,7 @@ const BehaviorScript bhvLllRotatingHexagonalPlatform[] = { const BehaviorScript bhvLllSinkingRockBlock[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvLllSinkingRockBlock), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_floating_block), ADD_FLOAT(oPosY, -50), @@ -2274,11 +2456,13 @@ const BehaviorScript bhvLllSinkingRockBlock[] = { const BehaviorScript bhvStub1D70[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvStub1D70), BREAK(), }; const BehaviorScript bhvLllMovingOctagonalMeshPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvLllMovingOctagonalMeshPlatform), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), ADD_FLOAT(oPosY, -50), LOAD_COLLISION_DATA(lll_seg7_collision_octagonal_moving_platform), @@ -2294,6 +2478,7 @@ const BehaviorScript bhvSnowBall[] = { const BehaviorScript bhvLllRotatingBlockWithFireBars[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvLllRotatingBlockWithFireBars), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_rotating_fire_bars), SET_FLOAT(oCollisionDistance, 4000), @@ -2304,6 +2489,7 @@ const BehaviorScript bhvLllRotatingBlockWithFireBars[] = { const BehaviorScript bhvLllRotatingHexFlame[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvLllRotatingHexFlame), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_INTERACT_TYPE(INTERACT_FLAME), SET_HITBOX_WITH_OFFSET(/*Radius*/ 50, /*Height*/ 100, /*Downwards offset*/ 50), @@ -2317,6 +2503,7 @@ const BehaviorScript bhvLllRotatingHexFlame[] = { const BehaviorScript bhvLllWoodPiece[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvLllWoodPiece), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_wood_piece), SET_HOME(), @@ -2328,6 +2515,7 @@ const BehaviorScript bhvLllWoodPiece[] = { const BehaviorScript bhvLllFloatingWoodBridge[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvLllFloatingWoodBridge), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_MODEL(MODEL_NONE), BEGIN_LOOP(), @@ -2337,6 +2525,7 @@ const BehaviorScript bhvLllFloatingWoodBridge[] = { const BehaviorScript bhvVolcanoFlames[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvVolcanoFlames), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), BEGIN_LOOP(), @@ -2347,6 +2536,7 @@ const BehaviorScript bhvVolcanoFlames[] = { const BehaviorScript bhvLllRotatingHexagonalRing[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvLllRotatingHexagonalRing), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_rotating_platform), BEGIN_LOOP(), @@ -2357,6 +2547,7 @@ const BehaviorScript bhvLllRotatingHexagonalRing[] = { const BehaviorScript bhvLllSinkingRectangularPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvLllSinkingRectangularPlatform), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_slow_tilting_platform), SET_FLOAT(oCollisionDistance, 2000), @@ -2369,6 +2560,7 @@ const BehaviorScript bhvLllSinkingRectangularPlatform[] = { const BehaviorScript bhvLllSinkingSquarePlatforms[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvLllSinkingSquarePlatforms), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_sinking_pyramids), ADD_FLOAT(oPosY, 5), @@ -2382,6 +2574,7 @@ const BehaviorScript bhvLllSinkingSquarePlatforms[] = { const BehaviorScript bhvLllTiltingInvertedPyramid[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvLllTiltingInvertedPyramid), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_inverted_pyramid), ADD_FLOAT(oPosY, 5), @@ -2395,12 +2588,14 @@ const BehaviorScript bhvLllTiltingInvertedPyramid[] = { const BehaviorScript bhvUnused1F30[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvUnused1F30), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BREAK(), }; const BehaviorScript bhvKoopaShell[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvKoopaShell), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), BEGIN_LOOP(), @@ -2410,6 +2605,7 @@ const BehaviorScript bhvKoopaShell[] = { const BehaviorScript bhvKoopaShellFlame[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvKoopaShellFlame), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INTERACT_TYPE(INTERACT_FLAME), BILLBOARD(), @@ -2421,6 +2617,7 @@ const BehaviorScript bhvKoopaShellFlame[] = { const BehaviorScript bhvToxBox[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvToxBox), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(ssl_seg7_collision_tox_box), ADD_FLOAT(oPosY, 256), @@ -2433,6 +2630,7 @@ const BehaviorScript bhvToxBox[] = { const BehaviorScript bhvPiranhaPlant[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvPiranhaPlant), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, piranha_plant_seg6_anims_0601C31C), ANIMATE(0), @@ -2452,6 +2650,7 @@ const BehaviorScript bhvPiranhaPlant[] = { const BehaviorScript bhvLllHexagonalMesh[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvLllHexagonalMesh), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(lll_hexagonal_mesh_seg3_collision_0301CECC), BEGIN_LOOP(), @@ -2461,6 +2660,7 @@ const BehaviorScript bhvLllHexagonalMesh[] = { const BehaviorScript bhvLllBowserPuzzlePiece[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvLllBowserPuzzlePiece), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_puzzle_piece), SET_HOME(), @@ -2473,6 +2673,7 @@ const BehaviorScript bhvLllBowserPuzzlePiece[] = { const BehaviorScript bhvLllBowserPuzzle[] = { BEGIN(OBJ_LIST_SPAWNER), + ID(id_bhvLllBowserPuzzle), DISABLE_RENDERING(), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), ADD_FLOAT(oPosZ, -50), @@ -2483,6 +2684,7 @@ const BehaviorScript bhvLllBowserPuzzle[] = { const BehaviorScript bhvTuxiesMother[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvTuxiesMother), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, penguin_seg5_anims_05008B74), ANIMATE(3), @@ -2498,16 +2700,19 @@ const BehaviorScript bhvTuxiesMother[] = { const BehaviorScript bhvPenguinBaby[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvPenguinBaby), BREAK(), }; const BehaviorScript bhvUnused20E0[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvUnused20E0), BREAK(), }; const BehaviorScript bhvSmallPenguin[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvSmallPenguin), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), LOAD_ANIMATIONS(oAnimations, penguin_seg5_anims_05008B74), @@ -2525,18 +2730,21 @@ const BehaviorScript bhvSmallPenguin[] = { const BehaviorScript bhvFish2[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvFish2), SET_INT(oBehParams2ndByte, 0), - GOTO(bhvLargeFishGroup + 1), + GOTO(bhvLargeFishGroup + 1 + 1), }; const BehaviorScript bhvFish3[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvFish3), SET_INT(oBehParams2ndByte, 1), - GOTO(bhvLargeFishGroup + 1), + GOTO(bhvLargeFishGroup + 1 + 1), }; const BehaviorScript bhvLargeFishGroup[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvLargeFishGroup), // Large fish group - common: DISABLE_RENDERING(), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), @@ -2547,6 +2755,7 @@ const BehaviorScript bhvLargeFishGroup[] = { const BehaviorScript bhvFish[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvFish), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), BEGIN_LOOP(), @@ -2556,6 +2765,7 @@ const BehaviorScript bhvFish[] = { const BehaviorScript bhvWdwExpressElevator[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvWdwExpressElevator), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wdw_seg7_collision_express_elevator_platform), SET_HOME(), @@ -2567,6 +2777,7 @@ const BehaviorScript bhvWdwExpressElevator[] = { const BehaviorScript bhvWdwExpressElevatorPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvWdwExpressElevatorPlatform), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wdw_seg7_collision_express_elevator_platform), SET_HOME(), @@ -2577,6 +2788,7 @@ const BehaviorScript bhvWdwExpressElevatorPlatform[] = { const BehaviorScript bhvChirpChirp[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvChirpChirp), SET_INT(oBirdChirpChirpUnkF4, 1), GOTO(bhvChirpChirpUnused), }; @@ -2591,6 +2803,7 @@ const BehaviorScript bhvChirpChirpUnused[] = { const BehaviorScript bhvBub[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBub), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, bub_seg6_anims_06012354), ANIMATE(0), @@ -2606,6 +2819,7 @@ const BehaviorScript bhvBub[] = { const BehaviorScript bhvExclamationBox[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvExclamationBox), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(exclamation_box_outline_seg8_collision_08025F78), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), @@ -2618,6 +2832,7 @@ const BehaviorScript bhvExclamationBox[] = { const BehaviorScript bhvRotatingExclamationMark[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvRotatingExclamationMark), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SCALE(/*Unused*/ 0, /*Field*/ 200), BEGIN_LOOP(), @@ -2628,6 +2843,7 @@ const BehaviorScript bhvRotatingExclamationMark[] = { const BehaviorScript bhvSoundSpawner[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvSoundSpawner), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), DELAY(3), CALL_NATIVE(bhv_sound_spawner_init), @@ -2637,6 +2853,7 @@ const BehaviorScript bhvSoundSpawner[] = { const BehaviorScript bhvRockSolid[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvRockSolid), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(jrb_seg7_collision_rock_solid), BEGIN_LOOP(), @@ -2646,6 +2863,7 @@ const BehaviorScript bhvRockSolid[] = { const BehaviorScript bhvBowserSubDoor[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvBowserSubDoor), OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(ddd_seg7_collision_bowser_sub_door), SET_FLOAT(oDrawingDistance, 20000), @@ -2658,6 +2876,7 @@ const BehaviorScript bhvBowserSubDoor[] = { const BehaviorScript bhvBowsersSub[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvBowsersSub), OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_FLOAT(oDrawingDistance, 20000), SET_FLOAT(oCollisionDistance, 20000), @@ -2670,6 +2889,7 @@ const BehaviorScript bhvBowsersSub[] = { const BehaviorScript bhvSushiShark[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvSushiShark), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, sushi_seg5_anims_0500AE54), SPAWN_OBJ(/*Model*/ MODEL_NONE, /*Behavior*/ bhvSushiSharkCollisionChild), @@ -2686,6 +2906,7 @@ const BehaviorScript bhvSushiShark[] = { const BehaviorScript bhvSushiSharkCollisionChild[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvSushiSharkCollisionChild), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), DISABLE_RENDERING(), BEGIN_LOOP(), @@ -2695,6 +2916,7 @@ const BehaviorScript bhvSushiSharkCollisionChild[] = { const BehaviorScript bhvJrbSlidingBox[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvJrbSlidingBox), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(jrb_seg7_collision_floating_box), SET_HOME(), @@ -2706,6 +2928,7 @@ const BehaviorScript bhvJrbSlidingBox[] = { const BehaviorScript bhvShipPart3[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvShipPart3), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HOME(), BEGIN_LOOP(), @@ -2715,6 +2938,7 @@ const BehaviorScript bhvShipPart3[] = { const BehaviorScript bhvInSunkenShip3[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvInSunkenShip3), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(jrb_seg7_collision_in_sunken_ship_3), SET_HOME(), @@ -2727,6 +2951,7 @@ const BehaviorScript bhvInSunkenShip3[] = { const BehaviorScript bhvSunkenShipPart[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvSunkenShipPart), OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SCALE(/*Unused*/ 0, /*Field*/ 50), SET_HOME(), @@ -2744,6 +2969,7 @@ const BehaviorScript bhvSunkenShipSetRotation[] = { const BehaviorScript bhvSunkenShipPart2[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvSunkenShipPart2), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SCALE(/*Unused*/ 0, /*Field*/ 100), SET_FLOAT(oDrawingDistance, 6000), @@ -2754,12 +2980,14 @@ const BehaviorScript bhvSunkenShipPart2[] = { const BehaviorScript bhvInSunkenShip[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvInSunkenShip), LOAD_COLLISION_DATA(jrb_seg7_collision_in_sunken_ship), - GOTO(bhvInSunkenShip2 + 1 + 2), + GOTO(bhvInSunkenShip2 + 1 + 2 + 1), }; const BehaviorScript bhvInSunkenShip2[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvInSunkenShip2), LOAD_COLLISION_DATA(jrb_seg7_collision_in_sunken_ship_2), // Sunken ship - common: OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), @@ -2772,6 +3000,7 @@ const BehaviorScript bhvInSunkenShip2[] = { const BehaviorScript bhvMistParticleSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvMistParticleSpawner), PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_DUST), DISABLE_RENDERING(), SPAWN_CHILD(/*Model*/ MODEL_MIST, /*Behavior*/ bhvWhitePuff1), @@ -2782,6 +3011,7 @@ const BehaviorScript bhvMistParticleSpawner[] = { const BehaviorScript bhvWhitePuff1[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvWhitePuff1), PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_DUST), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), @@ -2792,6 +3022,7 @@ const BehaviorScript bhvWhitePuff1[] = { const BehaviorScript bhvWhitePuff2[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvWhitePuff2), OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_INT(oAnimState, -1), @@ -2804,6 +3035,7 @@ const BehaviorScript bhvWhitePuff2[] = { const BehaviorScript bhvWhitePuffSmoke2[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvWhitePuffSmoke2), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_INT(oAnimState, -1), @@ -2817,12 +3049,14 @@ const BehaviorScript bhvWhitePuffSmoke2[] = { const BehaviorScript bhvPurpleSwitchHiddenBoxes[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvPurpleSwitchHiddenBoxes), SET_INT(oBehParams2ndByte, 2), - GOTO(bhvFloorSwitchHardcodedModel + 1), + GOTO(bhvFloorSwitchHardcodedModel + 1 + 1), }; const BehaviorScript bhvBlueCoinSwitch[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvBlueCoinSwitch), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(blue_coin_switch_seg8_collision_08000E98), BEGIN_LOOP(), @@ -2832,6 +3066,7 @@ const BehaviorScript bhvBlueCoinSwitch[] = { const BehaviorScript bhvHiddenBlueCoin[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvHiddenBlueCoin), SET_INT(oInteractType, INTERACT_COIN), OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), @@ -2847,6 +3082,7 @@ const BehaviorScript bhvHiddenBlueCoin[] = { const BehaviorScript bhvOpenableCageDoor[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvOpenableCageDoor), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), CALL_NATIVE(bhv_openable_cage_door_loop), @@ -2856,6 +3092,7 @@ const BehaviorScript bhvOpenableCageDoor[] = { const BehaviorScript bhvOpenableGrill[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvOpenableGrill), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), CALL_NATIVE(bhv_openable_grill_loop), @@ -2864,6 +3101,7 @@ const BehaviorScript bhvOpenableGrill[] = { const BehaviorScript bhvWaterLevelDiamond[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvWaterLevelDiamond), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HITBOX(/*Radius*/ 70, /*Height*/ 30), SET_FLOAT(oCollisionDistance, 200), @@ -2875,6 +3113,7 @@ const BehaviorScript bhvWaterLevelDiamond[] = { const BehaviorScript bhvInitializeChangingWaterLevel[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvInitializeChangingWaterLevel), BEGIN_LOOP(), CALL_NATIVE(bhv_init_changing_water_level_loop), END_LOOP(), @@ -2882,6 +3121,7 @@ const BehaviorScript bhvInitializeChangingWaterLevel[] = { const BehaviorScript bhvTweesterSandParticle[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvTweesterSandParticle), OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), BEGIN_LOOP(), @@ -2891,6 +3131,7 @@ const BehaviorScript bhvTweesterSandParticle[] = { const BehaviorScript bhvTweester[] = { BEGIN(OBJ_LIST_POLELIKE), + ID(id_bhvTweester), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0), DROP_TO_FLOOR(), @@ -2902,6 +3143,7 @@ const BehaviorScript bhvTweester[] = { const BehaviorScript bhvMerryGoRoundBooManager[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvMerryGoRoundBooManager), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), CALL_NATIVE(bhv_merry_go_round_boo_manager_loop), @@ -2910,6 +3152,7 @@ const BehaviorScript bhvMerryGoRoundBooManager[] = { const BehaviorScript bhvAnimatedTexture[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvAnimatedTexture), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -70, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), BILLBOARD(), @@ -2922,6 +3165,7 @@ const BehaviorScript bhvAnimatedTexture[] = { const BehaviorScript bhvBooInCastle[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBooInCastle), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), SET_FLOAT(oGraphYOffset, 60), @@ -2934,6 +3178,7 @@ const BehaviorScript bhvBooInCastle[] = { const BehaviorScript bhvBooWithCage[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBooWithCage), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), SET_INT(oDamageOrCoinValue, 3), @@ -2950,21 +3195,24 @@ const BehaviorScript bhvBooWithCage[] = { const BehaviorScript bhvBalconyBigBoo[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBalconyBigBoo), SET_INT(oBehParams2ndByte, 2), SET_INT(oBigBooNumMinionBoosKilled, 10), - GOTO(bhvGhostHuntBigBoo + 1), + GOTO(bhvGhostHuntBigBoo + 1 + 1), }; const BehaviorScript bhvMerryGoRoundBigBoo[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvMerryGoRoundBigBoo), SET_INT(oBehParams2ndByte, 1), // Set number of minion boos killed to 10, which is greater than 5 so that the boo always loads without needing to kill any boos. SET_INT(oBigBooNumMinionBoosKilled, 10), - GOTO(bhvGhostHuntBigBoo + 1), + GOTO(bhvGhostHuntBigBoo + 1 + 1), }; const BehaviorScript bhvGhostHuntBigBoo[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvGhostHuntBigBoo), // Big boo - common: OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), @@ -2978,6 +3226,7 @@ const BehaviorScript bhvGhostHuntBigBoo[] = { const BehaviorScript bhvCourtyardBooTriplet[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvCourtyardBooTriplet), DISABLE_RENDERING(), CALL_NATIVE(bhv_courtyard_boo_triplet_init), DEACTIVATE(), @@ -2985,18 +3234,21 @@ const BehaviorScript bhvCourtyardBooTriplet[] = { const BehaviorScript bhvBoo[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBoo), SET_INT(oBehParams2ndByte, 1), - GOTO(bhvGhostHuntBoo + 1), + GOTO(bhvGhostHuntBoo + 1 + 1), }; const BehaviorScript bhvMerryGoRoundBoo[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvMerryGoRoundBoo), SET_INT(oBehParams2ndByte, 2), - GOTO(bhvGhostHuntBoo + 1), + GOTO(bhvGhostHuntBoo + 1 + 1), }; const BehaviorScript bhvGhostHuntBoo[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvGhostHuntBoo), // Boo - common: OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_INT(oIntangibleTimer, 0), @@ -3016,6 +3268,7 @@ const BehaviorScript bhvGhostHuntBoo[] = { const BehaviorScript bhvHiddenStaircaseStep[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvHiddenStaircaseStep), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(bbh_seg7_collision_staircase_step), SET_INT(oRoom, 1), @@ -3028,6 +3281,7 @@ const BehaviorScript bhvHiddenStaircaseStep[] = { const BehaviorScript bhvBooBossSpawnedBridge[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvBooBossSpawnedBridge), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(bbh_seg7_collision_staircase_step), SET_INT(oRoom, 1), @@ -3041,6 +3295,7 @@ const BehaviorScript bhvBooBossSpawnedBridge[] = { const BehaviorScript bhvBbhTiltingTrapPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvBbhTiltingTrapPlatform), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(bbh_seg7_collision_tilt_floor_platform), SET_HOME(), @@ -3053,6 +3308,7 @@ const BehaviorScript bhvBbhTiltingTrapPlatform[] = { const BehaviorScript bhvHauntedBookshelf[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvHauntedBookshelf), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(bbh_seg7_collision_haunted_bookshelf), SET_HOME(), @@ -3065,6 +3321,7 @@ const BehaviorScript bhvHauntedBookshelf[] = { const BehaviorScript bhvMeshElevator[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvMeshElevator), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(bbh_seg7_collision_mesh_elevator), SET_HOME(), @@ -3079,6 +3336,7 @@ const BehaviorScript bhvMeshElevator[] = { const BehaviorScript bhvMerryGoRound[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvMerryGoRound), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(bbh_seg7_collision_merry_go_round), SET_FLOAT(oCollisionDistance, 2000), @@ -3092,6 +3350,7 @@ const BehaviorScript bhvMerryGoRound[] = { #ifndef VERSION_JP const BehaviorScript bhvPlaysMusicTrackWhenTouched[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvPlaysMusicTrackWhenTouched), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), CALL_NATIVE(bhv_play_music_track_when_touched_loop), @@ -3105,6 +3364,7 @@ const BehaviorScript bhvInsideCannon[] = { const BehaviorScript bhvBetaBowserAnchor[] = { BEGIN(OBJ_LIST_DESTRUCTIVE), + ID(id_bhvBetaBowserAnchor), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_HOME(), @@ -3118,6 +3378,7 @@ const BehaviorScript bhvBetaBowserAnchor[] = { const BehaviorScript bhvStaticCheckeredPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvStaticCheckeredPlatform), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(checkerboard_platform_seg8_collision_0800D710), SET_HOME(), @@ -3129,6 +3390,7 @@ const BehaviorScript bhvStaticCheckeredPlatform[] = { const BehaviorScript bhvUnused2A10[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvUnused2A10), BILLBOARD(), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BREAK(), @@ -3136,6 +3398,7 @@ const BehaviorScript bhvUnused2A10[] = { const BehaviorScript bhvUnusedFakeStar[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvUnusedFakeStar), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_LOOP(), ADD_INT(oFaceAnglePitch, 0x100), @@ -3153,17 +3416,20 @@ static const BehaviorScript unused_1[] = { const BehaviorScript bhvStaticObject[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvStaticObject), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BREAK(), }; const BehaviorScript bhvUnused2A54[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvUnused2A54), BREAK(), }; const BehaviorScript bhvCastleFloorTrap[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvCastleFloorTrap), DISABLE_RENDERING(), CALL_NATIVE(bhv_castle_floor_trap_init), BEGIN_LOOP(), @@ -3173,6 +3439,7 @@ const BehaviorScript bhvCastleFloorTrap[] = { const BehaviorScript bhvFloorTrapInCastle[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvFloorTrapInCastle), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(inside_castle_seg7_collision_floor_trap), BEGIN_LOOP(), @@ -3183,6 +3450,7 @@ const BehaviorScript bhvFloorTrapInCastle[] = { const BehaviorScript bhvTree[] = { BEGIN(OBJ_LIST_POLELIKE), + ID(id_bhvTree), #ifdef BETTERCAMERA CYLBOARD(), #else @@ -3199,6 +3467,7 @@ const BehaviorScript bhvTree[] = { const BehaviorScript bhvSparkle[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvSparkle), BILLBOARD(), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INT(oAnimState, -1), @@ -3210,6 +3479,7 @@ const BehaviorScript bhvSparkle[] = { const BehaviorScript bhvSparkleSpawn[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvSparkleSpawn), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_LOOP(), CALL_NATIVE(bhv_sparkle_spawn_loop), @@ -3218,6 +3488,7 @@ const BehaviorScript bhvSparkleSpawn[] = { const BehaviorScript bhvSparkleParticleSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvSparkleParticleSpawner), PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_SPARKLES), BEGIN(OBJ_LIST_UNIMPORTANT), BILLBOARD(), @@ -3238,6 +3509,7 @@ const BehaviorScript bhvSparkleParticleSpawner[] = { const BehaviorScript bhvScuttlebug[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvScuttlebug), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, scuttlebug_seg6_anims_06015064), ANIMATE(0), @@ -3251,6 +3523,7 @@ const BehaviorScript bhvScuttlebug[] = { const BehaviorScript bhvScuttlebugSpawn[] = { BEGIN(OBJ_LIST_SPAWNER), + ID(id_bhvScuttlebugSpawn), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), CALL_NATIVE(bhv_scuttlebug_spawn_loop), @@ -3259,13 +3532,15 @@ const BehaviorScript bhvScuttlebugSpawn[] = { const BehaviorScript bhvWhompKingBoss[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvWhompKingBoss), SET_INT(oBehParams2ndByte, 1), SET_INT(oHealth, 3), - GOTO(bhvSmallWhomp + 1 + 1), + GOTO(bhvSmallWhomp + 1 + 1 + 1), }; const BehaviorScript bhvSmallWhomp[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvSmallWhomp), SET_INT(oNumLootCoins, 5), // Whomp - common: OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), @@ -3282,6 +3557,7 @@ const BehaviorScript bhvSmallWhomp[] = { // The large splash Mario makes when he jumps into a pool of water. const BehaviorScript bhvWaterSplash[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvWaterSplash), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_INT(oAnimState, -1), @@ -3302,6 +3578,7 @@ const BehaviorScript bhvWaterSplash[] = { // Droplets of water that spawn as a result of various water splashes. const BehaviorScript bhvWaterDroplet[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvWaterDroplet), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), BEGIN_LOOP(), @@ -3312,6 +3589,7 @@ const BehaviorScript bhvWaterDroplet[] = { // Small splashes that are seen when a water droplet lands back into the water. const BehaviorScript bhvWaterDropletSplash[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvWaterDropletSplash), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), #ifndef VERSION_JP SET_INT(oFaceAnglePitch, 0), @@ -3330,6 +3608,7 @@ const BehaviorScript bhvWaterDropletSplash[] = { // The splash created when an air bubble hits the surface of the water. const BehaviorScript bhvBubbleSplash[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBubbleSplash), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), #ifdef VERSION_JP SET_FLOAT(oFaceAnglePitch, 0), @@ -3352,6 +3631,7 @@ const BehaviorScript bhvBubbleSplash[] = { // The water wave surrounding Mario when he is idle in a pool of water. const BehaviorScript bhvIdleWaterWave[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvIdleWaterWave), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), #ifdef VERSION_JP SET_FLOAT(oFaceAnglePitch, 0), @@ -3379,6 +3659,7 @@ const BehaviorScript bhvIdleWaterWave[] = { // Unlike water droplet splashes, they are unimportant objects. const BehaviorScript bhvObjectWaterSplash[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvObjectWaterSplash), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), #ifdef VERSION_JP SET_FLOAT(oFaceAnglePitch, 0), @@ -3400,6 +3681,7 @@ const BehaviorScript bhvObjectWaterSplash[] = { // Waves that are generated when running in shallow water. const BehaviorScript bhvShallowWaterWave[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvShallowWaterWave), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), DISABLE_RENDERING(), BEGIN_REPEAT(5), @@ -3415,6 +3697,7 @@ const BehaviorScript bhvShallowWaterWave[] = { // It has a 1 in 256 chance of spawning the fish particle easter egg. const BehaviorScript bhvShallowWaterSplash[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvShallowWaterSplash), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), DISABLE_RENDERING(), BEGIN_REPEAT(18), @@ -3430,13 +3713,15 @@ const BehaviorScript bhvShallowWaterSplash[] = { // Unlike Mario's waves, they are unimportant objects. const BehaviorScript bhvObjectWaveTrail[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvObjectWaveTrail), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), - GOTO(bhvWaveTrail + 1 + 1 + 2), // Wave trail - common + GOTO(bhvWaveTrail + 1 + 1 + 2 + 1), // Wave trail - common }; // The waves created by Mario while he is swimming. const BehaviorScript bhvWaveTrail[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvWaveTrail), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_WAVE_TRAIL), // Wave trail - common: @@ -3457,6 +3742,7 @@ const BehaviorScript bhvWaveTrail[] = { // As they are unimportant objects, they don't have collision with Mario. const BehaviorScript bhvTinyStrongWindParticle[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvTinyStrongWindParticle), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), BEGIN_LOOP(), @@ -3467,6 +3753,7 @@ const BehaviorScript bhvTinyStrongWindParticle[] = { // Strong wind particles generated by the Snowman and Fwoosh that blow Mario back and knock his cap off. const BehaviorScript bhvStrongWindParticle[] = { BEGIN(OBJ_LIST_POLELIKE), + ID(id_bhvStrongWindParticle), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), BEGIN_LOOP(), @@ -3477,6 +3764,7 @@ const BehaviorScript bhvStrongWindParticle[] = { // The handler for the strong wind blown by the Snowman in SL. Triggers dialog and then aims towards Mario. const BehaviorScript bhvSLSnowmanWind[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvSLSnowmanWind), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), BEGIN_LOOP(), @@ -3488,6 +3776,7 @@ const BehaviorScript bhvSLSnowmanWind[] = { // Blocks strong wind particles, allowing Mario to walk behind it. const BehaviorScript bhvSLWalkingPenguin[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvSLWalkingPenguin), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(penguin_seg5_collision_05008B88), LOAD_ANIMATIONS(oAnimations, penguin_seg5_anims_05008B74), @@ -3503,6 +3792,7 @@ const BehaviorScript bhvSLWalkingPenguin[] = { const BehaviorScript bhvYellowBall[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvYellowBall), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), BREAK(), @@ -3511,6 +3801,7 @@ const BehaviorScript bhvYellowBall[] = { UNUSED static const u64 behavior_data_unused_0 = 0; const BehaviorScript bhvMario[] = { BEGIN(OBJ_LIST_PLAYER), + ID(id_bhvMario), SET_INT(oIntangibleTimer, 0), OR_INT(oFlags, OBJ_FLAG_0100), OR_INT(oUnk94, 0x0001), @@ -3524,6 +3815,7 @@ const BehaviorScript bhvMario[] = { const BehaviorScript bhvMario2[] = { BEGIN(OBJ_LIST_PLAYER), + ID(id_bhvMario2), SET_INT(oIntangibleTimer, 0), OR_INT(oFlags, OBJ_FLAG_0100), OR_INT(oUnk94, 0x0001), @@ -3535,6 +3827,7 @@ const BehaviorScript bhvMario2[] = { const BehaviorScript bhvToadMessage[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvToadMessage), OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, toad_seg6_anims_0600FB58), ANIMATE(6), @@ -3550,6 +3843,7 @@ const BehaviorScript bhvToadMessage[] = { const BehaviorScript bhvUnlockDoorStar[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvUnlockDoorStar), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), CALL_NATIVE(bhv_unlock_door_star_init), BEGIN_LOOP(), @@ -3616,6 +3910,7 @@ const BehaviorScript bhvSwimmingWarp[] = { UNUSED static const u64 behavior_data_unused_1 = 0; const BehaviorScript bhvRandomAnimatedTexture[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvRandomAnimatedTexture), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_FLOAT(oGraphYOffset, -16), BILLBOARD(), @@ -3627,6 +3922,7 @@ const BehaviorScript bhvRandomAnimatedTexture[] = { const BehaviorScript bhvYellowBackgroundInMenu[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvYellowBackgroundInMenu), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(beh_yellow_background_menu_init), BEGIN_LOOP(), @@ -3637,6 +3933,7 @@ const BehaviorScript bhvYellowBackgroundInMenu[] = { const BehaviorScript bhvMenuButton[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvMenuButton), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_menu_button_init), BEGIN_LOOP(), @@ -3647,6 +3944,7 @@ const BehaviorScript bhvMenuButton[] = { const BehaviorScript bhvMenuButtonManager[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvMenuButtonManager), OR_INT(oFlags, (OBJ_FLAG_SET_THROW_MATRIX_FROM_TRANSFORM | OBJ_FLAG_0020 | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), CALL_NATIVE(bhv_menu_button_manager_init), BEGIN_LOOP(), @@ -3657,6 +3955,7 @@ const BehaviorScript bhvMenuButtonManager[] = { const BehaviorScript bhvActSelectorStarType[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvActSelectorStarType), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HOME(), BEGIN_LOOP(), @@ -3666,6 +3965,7 @@ const BehaviorScript bhvActSelectorStarType[] = { const BehaviorScript bhvActSelector[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvActSelector), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_act_selector_init), BEGIN_LOOP(), @@ -3675,6 +3975,7 @@ const BehaviorScript bhvActSelector[] = { const BehaviorScript bhvMovingYellowCoin[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvMovingYellowCoin), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_HITBOX(/*Radius*/ 100, /*Height*/ 64), @@ -3690,6 +3991,7 @@ const BehaviorScript bhvMovingYellowCoin[] = { const BehaviorScript bhvMovingBlueCoin[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvMovingBlueCoin), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_INT(oIntangibleTimer, 0), @@ -3703,6 +4005,7 @@ const BehaviorScript bhvMovingBlueCoin[] = { const BehaviorScript bhvBlueCoinSliding[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBlueCoinSliding), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_INT(oIntangibleTimer, 0), @@ -3716,6 +4019,7 @@ const BehaviorScript bhvBlueCoinSliding[] = { const BehaviorScript bhvBlueCoinJumping[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBlueCoinJumping), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_INT(oIntangibleTimer, 0), @@ -3729,6 +4033,7 @@ const BehaviorScript bhvBlueCoinJumping[] = { const BehaviorScript bhvSeaweed[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvSeaweed), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_ANIMATIONS(oAnimations, seaweed_seg6_anims_0600A4D4), ANIMATE(0), @@ -3739,6 +4044,7 @@ const BehaviorScript bhvSeaweed[] = { const BehaviorScript bhvSeaweedBundle[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvSeaweedBundle), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), DROP_TO_FLOOR(), CALL_NATIVE(bhv_seaweed_bundle_init), @@ -3748,6 +4054,7 @@ const BehaviorScript bhvSeaweedBundle[] = { const BehaviorScript bhvBobomb[] = { BEGIN(OBJ_LIST_DESTRUCTIVE), + ID(id_bhvBobomb), OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, bobomb_seg8_anims_0802396C), DROP_TO_FLOOR(), @@ -3762,6 +4069,7 @@ const BehaviorScript bhvBobomb[] = { const BehaviorScript bhvBobombFuseSmoke[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBobombFuseSmoke), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_INT(oAnimState, -1), @@ -3775,6 +4083,7 @@ const BehaviorScript bhvBobombFuseSmoke[] = { const BehaviorScript bhvBobombBuddy[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBobombBuddy), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, bobomb_seg8_anims_0802396C), SET_INTERACT_TYPE(INTERACT_TEXT), @@ -3793,6 +4102,7 @@ const BehaviorScript bhvBobombBuddy[] = { // The only difference between this and the previous behavior are what oFlags and oBobombBuddyRole are set to, why didn't they just use a jump? const BehaviorScript bhvBobombBuddyOpensCannon[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBobombBuddyOpensCannon), OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, bobomb_seg8_anims_0802396C), SET_INTERACT_TYPE(INTERACT_TEXT), @@ -3810,6 +4120,7 @@ const BehaviorScript bhvBobombBuddyOpensCannon[] = { const BehaviorScript bhvCannonClosed[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvCannonClosed), OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(cannon_lid_seg8_collision_08004950), SET_HOME(), @@ -3822,6 +4133,7 @@ const BehaviorScript bhvCannonClosed[] = { const BehaviorScript bhvWhirlpool[] = { BEGIN(OBJ_LIST_POLELIKE), + ID(id_bhvWhirlpool), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), CALL_NATIVE(bhv_whirlpool_init), BEGIN_LOOP(), @@ -3831,6 +4143,7 @@ const BehaviorScript bhvWhirlpool[] = { const BehaviorScript bhvJetStream[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvJetStream), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), CALL_NATIVE(bhv_jet_stream_loop), @@ -3839,6 +4152,7 @@ const BehaviorScript bhvJetStream[] = { const BehaviorScript bhvMessagePanel[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvMessagePanel), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(wooden_signpost_seg3_collision_0302DD80), SET_INTERACT_TYPE(INTERACT_TEXT), @@ -3855,6 +4169,7 @@ const BehaviorScript bhvMessagePanel[] = { const BehaviorScript bhvSignOnWall[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvSignOnWall), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INTERACT_TYPE(INTERACT_TEXT), SET_INT(oInteractionSubtype, INT_SUBTYPE_SIGN), @@ -3868,6 +4183,7 @@ const BehaviorScript bhvSignOnWall[] = { const BehaviorScript bhvHomingAmp[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvHomingAmp), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, amp_seg8_anims_08004034), ANIMATE(0), @@ -3881,6 +4197,7 @@ const BehaviorScript bhvHomingAmp[] = { const BehaviorScript bhvCirclingAmp[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvCirclingAmp), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, amp_seg8_anims_08004034), ANIMATE(0), @@ -3894,6 +4211,7 @@ const BehaviorScript bhvCirclingAmp[] = { const BehaviorScript bhvButterfly[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvButterfly), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, butterfly_seg3_anims_030056B0), DROP_TO_FLOOR(), @@ -3906,6 +4224,7 @@ const BehaviorScript bhvButterfly[] = { const BehaviorScript bhvHoot[] = { BEGIN(OBJ_LIST_POLELIKE), + ID(id_bhvHoot), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, hoot_seg5_anims_05005768), SET_INT(oInteractType, INTERACT_HOOT), @@ -3918,6 +4237,7 @@ const BehaviorScript bhvHoot[] = { const BehaviorScript bhvBetaHoldableObject[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBetaHoldableObject), OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_INT(oInteractType, INTERACT_GRABBABLE), DROP_TO_FLOOR(), @@ -3931,36 +4251,43 @@ const BehaviorScript bhvBetaHoldableObject[] = { const BehaviorScript bhvCarrySomething1[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvCarrySomething1), BREAK(), }; const BehaviorScript bhvCarrySomething2[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvCarrySomething2), BREAK(), }; const BehaviorScript bhvCarrySomething3[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvCarrySomething3), BREAK(), }; const BehaviorScript bhvCarrySomething4[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvCarrySomething4), BREAK(), }; const BehaviorScript bhvCarrySomething5[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvCarrySomething5), BREAK(), }; const BehaviorScript bhvCarrySomething6[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvCarrySomething6), BREAK(), }; const BehaviorScript bhvObjectBubble[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvObjectBubble), OR_INT(oFlags, (OBJ_FLAG_MOVE_Y_WITH_TERMINAL_VEL | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), @@ -3976,6 +4303,7 @@ const BehaviorScript bhvObjectBubble[] = { const BehaviorScript bhvObjectWaterWave[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvObjectWaterWave), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_FLOAT(oFaceAnglePitch, 0), SET_FLOAT(oFaceAngleYaw, 0), @@ -3995,6 +4323,7 @@ const BehaviorScript bhvObjectWaterWave[] = { const BehaviorScript bhvExplosion[] = { BEGIN(OBJ_LIST_DESTRUCTIVE), + ID(id_bhvExplosion), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_INTERACT_TYPE(INTERACT_DAMAGE), @@ -4011,6 +4340,7 @@ const BehaviorScript bhvExplosion[] = { const BehaviorScript bhvBobombBullyDeathSmoke[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvBobombBullyDeathSmoke), OR_INT(oFlags, (OBJ_FLAG_MOVE_Y_WITH_TERMINAL_VEL | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_INT(oAnimState, -1), @@ -4024,6 +4354,7 @@ const BehaviorScript bhvBobombBullyDeathSmoke[] = { const BehaviorScript bhvSmoke[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvSmoke), OR_INT(oFlags, (OBJ_FLAG_MOVE_Y_WITH_TERMINAL_VEL | OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_INT(oAnimState, -1), @@ -4036,6 +4367,7 @@ const BehaviorScript bhvSmoke[] = { const BehaviorScript bhvBobombExplosionBubble[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBobombExplosionBubble), BILLBOARD(), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_bobomb_explosion_bubble_init), @@ -4058,6 +4390,7 @@ const BehaviorScript bhvBobombExplosionBubble3600[] = { const BehaviorScript bhvRespawner[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvRespawner), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_LOOP(), CALL_NATIVE(bhv_respawner_loop), @@ -4066,6 +4399,7 @@ const BehaviorScript bhvRespawner[] = { const BehaviorScript bhvSmallBully[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvSmallBully), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, bully_seg5_anims_0500470C), DROP_TO_FLOOR(), @@ -4079,6 +4413,7 @@ const BehaviorScript bhvSmallBully[] = { const BehaviorScript bhvBigBully[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBigBully), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, bully_seg5_anims_0500470C), DROP_TO_FLOOR(), @@ -4092,6 +4427,7 @@ const BehaviorScript bhvBigBully[] = { const BehaviorScript bhvBigBullyWithMinions[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBigBullyWithMinions), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, bully_seg5_anims_0500470C), SET_HOME(), @@ -4104,6 +4440,7 @@ const BehaviorScript bhvBigBullyWithMinions[] = { const BehaviorScript bhvSmallChillBully[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvSmallChillBully), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, chilly_chief_seg6_anims_06003994), DROP_TO_FLOOR(), @@ -4118,6 +4455,7 @@ const BehaviorScript bhvSmallChillBully[] = { const BehaviorScript bhvBigChillBully[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBigChillBully), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, chilly_chief_seg6_anims_06003994), DROP_TO_FLOOR(), @@ -4132,6 +4470,7 @@ const BehaviorScript bhvBigChillBully[] = { const BehaviorScript bhvJetStreamRingSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvJetStreamRingSpawner), HIDE(), BEGIN_LOOP(), CALL_NATIVE(bhv_jet_stream_ring_spawner_loop), @@ -4140,6 +4479,7 @@ const BehaviorScript bhvJetStreamRingSpawner[] = { const BehaviorScript bhvJetStreamWaterRing[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvJetStreamWaterRing), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_ANIMATIONS(oAnimations, water_ring_seg6_anims_06013F7C), SET_HITBOX_WITH_OFFSET(/*Radius*/ 75, /*Height*/ 20, /*Downwards offset*/ 20), @@ -4155,6 +4495,7 @@ const BehaviorScript bhvJetStreamWaterRing[] = { const BehaviorScript bhvMantaRayWaterRing[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvMantaRayWaterRing), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_ANIMATIONS(oAnimations, water_ring_seg6_anims_06013F7C), SET_HITBOX_WITH_OFFSET(/*Radius*/ 75, /*Height*/ 20, /*Downwards offset*/ 20), @@ -4170,12 +4511,14 @@ const BehaviorScript bhvMantaRayWaterRing[] = { const BehaviorScript bhvMantaRayRingManager[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvMantaRayRingManager), BEGIN_LOOP(), END_LOOP(), }; const BehaviorScript bhvBowserBomb[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBowserBomb), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INT(oIntangibleTimer, 0), SET_HITBOX_WITH_OFFSET(/*Radius*/ 40, /*Height*/ 40, /*Downwards offset*/ 40), @@ -4188,6 +4531,7 @@ const BehaviorScript bhvBowserBomb[] = { const BehaviorScript bhvBowserBombExplosion[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBowserBombExplosion), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_FLOAT(oGraphYOffset, -288), @@ -4199,6 +4543,7 @@ const BehaviorScript bhvBowserBombExplosion[] = { const BehaviorScript bhvBowserBombSmoke[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBowserBombSmoke), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_FLOAT(oGraphYOffset, -288), @@ -4211,6 +4556,7 @@ const BehaviorScript bhvBowserBombSmoke[] = { const BehaviorScript bhvCelebrationStar[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvCelebrationStar), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_celebration_star_init), BEGIN_LOOP(), @@ -4220,6 +4566,7 @@ const BehaviorScript bhvCelebrationStar[] = { const BehaviorScript bhvCelebrationStarSparkle[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvCelebrationStarSparkle), BILLBOARD(), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_FLOAT(oGraphYOffset, 25), @@ -4232,6 +4579,7 @@ const BehaviorScript bhvCelebrationStarSparkle[] = { const BehaviorScript bhvStarKeyCollectionPuffSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvStarKeyCollectionPuffSpawner), BILLBOARD(), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INT(oAnimState, -1), @@ -4242,6 +4590,7 @@ const BehaviorScript bhvStarKeyCollectionPuffSpawner[] = { const BehaviorScript bhvLllDrawbridgeSpawner[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvLllDrawbridgeSpawner), HIDE(), BEGIN_LOOP(), CALL_NATIVE(bhv_lll_drawbridge_spawner_loop), @@ -4250,6 +4599,7 @@ const BehaviorScript bhvLllDrawbridgeSpawner[] = { const BehaviorScript bhvLllDrawbridge[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvLllDrawbridge), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(lll_seg7_collision_drawbridge), BEGIN_LOOP(), @@ -4260,6 +4610,7 @@ const BehaviorScript bhvLllDrawbridge[] = { const BehaviorScript bhvSmallBomp[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvSmallBomp), OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wf_seg7_collision_small_bomp), CALL_NATIVE(bhv_small_bomp_init), @@ -4271,6 +4622,7 @@ const BehaviorScript bhvSmallBomp[] = { const BehaviorScript bhvLargeBomp[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvLargeBomp), OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wf_seg7_collision_large_bomp), CALL_NATIVE(bhv_large_bomp_init), @@ -4282,6 +4634,7 @@ const BehaviorScript bhvLargeBomp[] = { const BehaviorScript bhvWfSlidingPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvWfSlidingPlatform), OR_INT(oFlags, (OBJ_FLAG_MOVE_XZ_USING_FVEL | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wf_seg7_collision_sliding_brick_platform), CALL_NATIVE(bhv_wf_sliding_platform_init), @@ -4293,6 +4646,7 @@ const BehaviorScript bhvWfSlidingPlatform[] = { const BehaviorScript bhvMoneybag[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvMoneybag), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, moneybag_seg6_anims_06005E5C), DROP_TO_FLOOR(), @@ -4306,6 +4660,7 @@ const BehaviorScript bhvMoneybag[] = { const BehaviorScript bhvMoneybagHidden[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvMoneybagHidden), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_FLOAT(oGraphYOffset, 27), BILLBOARD(), @@ -4320,6 +4675,7 @@ const BehaviorScript bhvMoneybagHidden[] = { const BehaviorScript bhvPitBowlingBall[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvPitBowlingBall), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_FLOAT(oGraphYOffset, 130), @@ -4331,6 +4687,7 @@ const BehaviorScript bhvPitBowlingBall[] = { const BehaviorScript bhvFreeBowlingBall[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvFreeBowlingBall), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_FLOAT(oGraphYOffset, 130), @@ -4342,6 +4699,7 @@ const BehaviorScript bhvFreeBowlingBall[] = { const BehaviorScript bhvBowlingBall[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBowlingBall), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_FLOAT(oGraphYOffset, 130), @@ -4353,6 +4711,7 @@ const BehaviorScript bhvBowlingBall[] = { const BehaviorScript bhvTtmBowlingBallSpawner[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvTtmBowlingBallSpawner), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INT(oBBallSpawnerPeriodMinus1, 63), CALL_NATIVE(bhv_generic_bowling_ball_spawner_init), @@ -4363,6 +4722,7 @@ const BehaviorScript bhvTtmBowlingBallSpawner[] = { const BehaviorScript bhvBobBowlingBallSpawner[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBobBowlingBallSpawner), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INT(oBBallSpawnerPeriodMinus1, 127), CALL_NATIVE(bhv_generic_bowling_ball_spawner_init), @@ -4373,6 +4733,7 @@ const BehaviorScript bhvBobBowlingBallSpawner[] = { const BehaviorScript bhvThiBowlingBallSpawner[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvThiBowlingBallSpawner), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_LOOP(), CALL_NATIVE(bhv_thi_bowling_ball_spawner_loop), @@ -4381,6 +4742,7 @@ const BehaviorScript bhvThiBowlingBallSpawner[] = { const BehaviorScript bhvRrCruiserWing[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvRrCruiserWing), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_rr_cruiser_wing_init), BEGIN_LOOP(), @@ -4390,6 +4752,7 @@ const BehaviorScript bhvRrCruiserWing[] = { const BehaviorScript bhvSpindel[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvSpindel), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(ssl_seg7_collision_spindel), CALL_NATIVE(bhv_spindel_init), @@ -4401,6 +4764,7 @@ const BehaviorScript bhvSpindel[] = { const BehaviorScript bhvSslMovingPyramidWall[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvSslMovingPyramidWall), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(ssl_seg7_collision_0702808C), CALL_NATIVE(bhv_ssl_moving_pyramid_wall_init), @@ -4412,6 +4776,7 @@ const BehaviorScript bhvSslMovingPyramidWall[] = { const BehaviorScript bhvPyramidElevator[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvPyramidElevator), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(ssl_seg7_collision_pyramid_elevator), SET_HOME(), @@ -4425,6 +4790,7 @@ const BehaviorScript bhvPyramidElevator[] = { const BehaviorScript bhvPyramidElevatorTrajectoryMarkerBall[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvPyramidElevatorTrajectoryMarkerBall), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), BEGIN_LOOP(), @@ -4434,6 +4800,7 @@ const BehaviorScript bhvPyramidElevatorTrajectoryMarkerBall[] = { const BehaviorScript bhvPyramidTop[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvPyramidTop), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(ssl_seg7_collision_pyramid_top), SET_HOME(), @@ -4447,6 +4814,7 @@ const BehaviorScript bhvPyramidTop[] = { const BehaviorScript bhvPyramidTopFragment[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvPyramidTopFragment), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_pyramid_top_fragment_init), BEGIN_LOOP(), @@ -4456,6 +4824,7 @@ const BehaviorScript bhvPyramidTopFragment[] = { const BehaviorScript bhvPyramidPillarTouchDetector[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvPyramidPillarTouchDetector), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HITBOX(/*Radius*/ 50, /*Height*/ 50), SET_INT(oIntangibleTimer, 0), @@ -4466,6 +4835,7 @@ const BehaviorScript bhvPyramidPillarTouchDetector[] = { const BehaviorScript bhvWaterfallSoundLoop[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvWaterfallSoundLoop), BEGIN_LOOP(), CALL_NATIVE(bhv_waterfall_sound_loop), END_LOOP(), @@ -4473,6 +4843,7 @@ const BehaviorScript bhvWaterfallSoundLoop[] = { const BehaviorScript bhvVolcanoSoundLoop[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvVolcanoSoundLoop), BEGIN_LOOP(), CALL_NATIVE(bhv_volcano_sound_loop), END_LOOP(), @@ -4480,6 +4851,7 @@ const BehaviorScript bhvVolcanoSoundLoop[] = { const BehaviorScript bhvCastleFlagWaving[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvCastleFlagWaving), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_ANIMATIONS(oAnimations, castle_grounds_seg7_anims_flags), ANIMATE(0), @@ -4490,6 +4862,7 @@ const BehaviorScript bhvCastleFlagWaving[] = { const BehaviorScript bhvBirdsSoundLoop[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBirdsSoundLoop), BEGIN_LOOP(), CALL_NATIVE(bhv_birds_sound_loop), END_LOOP(), @@ -4497,6 +4870,7 @@ const BehaviorScript bhvBirdsSoundLoop[] = { const BehaviorScript bhvAmbientSounds[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvAmbientSounds), CALL_NATIVE(bhv_ambient_sounds_init), BEGIN_LOOP(), END_LOOP(), @@ -4504,6 +4878,7 @@ const BehaviorScript bhvAmbientSounds[] = { const BehaviorScript bhvSandSoundLoop[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvSandSoundLoop), BEGIN_LOOP(), CALL_NATIVE(bhv_sand_sound_loop), END_LOOP(), @@ -4511,6 +4886,7 @@ const BehaviorScript bhvSandSoundLoop[] = { const BehaviorScript bhvHiddenAt120Stars[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvHiddenAt120Stars), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(castle_grounds_seg7_collision_cannon_grill), SET_FLOAT(oCollisionDistance, 4000), @@ -4522,6 +4898,7 @@ const BehaviorScript bhvHiddenAt120Stars[] = { const BehaviorScript bhvSnowmansBottom[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvSnowmansBottom), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), SET_INT(oIntangibleTimer, 0), @@ -4533,6 +4910,7 @@ const BehaviorScript bhvSnowmansBottom[] = { const BehaviorScript bhvSnowmansHead[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvSnowmansHead), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), SET_FLOAT(oGraphYOffset, 110), @@ -4544,6 +4922,7 @@ const BehaviorScript bhvSnowmansHead[] = { const BehaviorScript bhvSnowmansBodyCheckpoint[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvSnowmansBodyCheckpoint), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_LOOP(), CALL_NATIVE(bhv_snowmans_body_checkpoint_loop), @@ -4552,6 +4931,7 @@ const BehaviorScript bhvSnowmansBodyCheckpoint[] = { const BehaviorScript bhvBigSnowmanWhole[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBigSnowmanWhole), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_FLOAT(oGraphYOffset, 180), SET_INTERACT_TYPE(INTERACT_TEXT), @@ -4563,6 +4943,7 @@ const BehaviorScript bhvBigSnowmanWhole[] = { const BehaviorScript bhvBigBoulder[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBigBoulder), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_FLOAT(oGraphYOffset, 180), CALL_NATIVE(bhv_big_boulder_init), @@ -4575,6 +4956,7 @@ const BehaviorScript bhvBigBoulder[] = { const BehaviorScript bhvBigBoulderGenerator[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBigBoulderGenerator), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_LOOP(), CALL_NATIVE(bhv_big_boulder_generator_loop), @@ -4583,6 +4965,7 @@ const BehaviorScript bhvBigBoulderGenerator[] = { const BehaviorScript bhvWingCap[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvWingCap), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), CALL_NATIVE(bhv_wing_cap_init), BEGIN_LOOP(), @@ -4592,6 +4975,7 @@ const BehaviorScript bhvWingCap[] = { const BehaviorScript bhvMetalCap[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvMetalCap), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), CALL_NATIVE(bhv_metal_cap_init), BEGIN_LOOP(), @@ -4601,6 +4985,7 @@ const BehaviorScript bhvMetalCap[] = { const BehaviorScript bhvNormalCap[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvNormalCap), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), CALL_NATIVE(bhv_normal_cap_init), BEGIN_LOOP(), @@ -4611,6 +4996,7 @@ const BehaviorScript bhvNormalCap[] = { const BehaviorScript bhvVanishCap[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvVanishCap), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), CALL_NATIVE(bhv_vanish_cap_init), BEGIN_LOOP(), @@ -4620,6 +5006,7 @@ const BehaviorScript bhvVanishCap[] = { const BehaviorScript bhvStar[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvStar), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_init_room), CALL_NATIVE(bhv_collect_star_init), @@ -4630,6 +5017,7 @@ const BehaviorScript bhvStar[] = { const BehaviorScript bhvStarSpawnCoordinates[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvStarSpawnCoordinates), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_collect_star_init), CALL_NATIVE(bhv_star_spawn_init), @@ -4640,6 +5028,7 @@ const BehaviorScript bhvStarSpawnCoordinates[] = { const BehaviorScript bhvHiddenRedCoinStar[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvHiddenRedCoinStar), OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), CALL_NATIVE(bhv_hidden_red_coin_star_init), BEGIN_LOOP(), @@ -4649,6 +5038,7 @@ const BehaviorScript bhvHiddenRedCoinStar[] = { const BehaviorScript bhvRedCoin[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvRedCoin), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_INT(oIntangibleTimer, 0), @@ -4663,6 +5053,7 @@ const BehaviorScript bhvRedCoin[] = { const BehaviorScript bhvBowserCourseRedCoinStar[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvBowserCourseRedCoinStar), OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), CALL_NATIVE(bhv_bowser_course_red_coin_star_loop), @@ -4671,6 +5062,7 @@ const BehaviorScript bhvBowserCourseRedCoinStar[] = { const BehaviorScript bhvHiddenStar[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvHiddenStar), OR_INT(oFlags, (OBJ_FLAG_PERSISTENT_RESPAWN | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), CALL_NATIVE(bhv_hidden_star_init), BEGIN_LOOP(), @@ -4680,6 +5072,7 @@ const BehaviorScript bhvHiddenStar[] = { const BehaviorScript bhvHiddenStarTrigger[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvHiddenStarTrigger), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HITBOX(/*Radius*/ 100, /*Height*/ 100), SET_INT(oIntangibleTimer, 0), @@ -4690,6 +5083,7 @@ const BehaviorScript bhvHiddenStarTrigger[] = { const BehaviorScript bhvTtmRollingLog[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvTtmRollingLog), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(ttm_seg7_collision_pitoune_2), SET_HOME(), @@ -4703,6 +5097,7 @@ const BehaviorScript bhvTtmRollingLog[] = { const BehaviorScript bhvLllVolcanoFallingTrap[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvLllVolcanoFallingTrap), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(lll_seg7_collision_falling_wall), SET_HOME(), @@ -4714,6 +5109,7 @@ const BehaviorScript bhvLllVolcanoFallingTrap[] = { const BehaviorScript bhvLllRollingLog[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvLllRollingLog), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(lll_seg7_collision_pitoune), SET_HOME(), @@ -4727,6 +5123,7 @@ const BehaviorScript bhvLllRollingLog[] = { const BehaviorScript bhv1upWalking[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhv1upWalking), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0), @@ -4739,6 +5136,7 @@ const BehaviorScript bhv1upWalking[] = { const BehaviorScript bhv1upRunningAway[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhv1upRunningAway), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0), @@ -4751,6 +5149,7 @@ const BehaviorScript bhv1upRunningAway[] = { const BehaviorScript bhv1upSliding[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhv1upSliding), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0), @@ -4764,6 +5163,7 @@ const BehaviorScript bhv1upSliding[] = { const BehaviorScript bhv1Up[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhv1Up), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0), @@ -4777,6 +5177,7 @@ const BehaviorScript bhv1Up[] = { const BehaviorScript bhv1upJumpOnApproach[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhv1upJumpOnApproach), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0), @@ -4790,6 +5191,7 @@ const BehaviorScript bhv1upJumpOnApproach[] = { const BehaviorScript bhvHidden1up[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvHidden1up), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0), @@ -4803,6 +5205,7 @@ const BehaviorScript bhvHidden1up[] = { const BehaviorScript bhvHidden1upTrigger[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvHidden1upTrigger), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HITBOX(/*Radius*/ 100, /*Height*/ 100), SET_INT(oIntangibleTimer, 0), @@ -4813,6 +5216,7 @@ const BehaviorScript bhvHidden1upTrigger[] = { const BehaviorScript bhvHidden1upInPole[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvHidden1upInPole), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_HITBOX_WITH_OFFSET(/*Radius*/ 30, /*Height*/ 30, /*Downwards offset*/ 0), @@ -4826,6 +5230,7 @@ const BehaviorScript bhvHidden1upInPole[] = { const BehaviorScript bhvHidden1upInPoleTrigger[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvHidden1upInPoleTrigger), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HITBOX(/*Radius*/ 100, /*Height*/ 100), SET_INT(oIntangibleTimer, 0), @@ -4836,6 +5241,7 @@ const BehaviorScript bhvHidden1upInPoleTrigger[] = { const BehaviorScript bhvHidden1upInPoleSpawner[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvHidden1upInPoleSpawner), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_LOOP(), CALL_NATIVE(bhv_1up_hidden_in_pole_spawner_loop), @@ -4844,6 +5250,7 @@ const BehaviorScript bhvHidden1upInPoleSpawner[] = { const BehaviorScript bhvControllablePlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvControllablePlatform), OR_INT(oFlags, (OBJ_FLAG_SET_THROW_MATRIX_FROM_TRANSFORM | OBJ_FLAG_0020 | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(hmc_seg7_collision_controllable_platform), SET_HOME(), @@ -4856,6 +5263,7 @@ const BehaviorScript bhvControllablePlatform[] = { const BehaviorScript bhvControllablePlatformSub[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvControllablePlatformSub), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(hmc_seg7_collision_controllable_platform_sub), BEGIN_LOOP(), @@ -4866,6 +5274,7 @@ const BehaviorScript bhvControllablePlatformSub[] = { const BehaviorScript bhvBreakableBoxSmall[] = { BEGIN(OBJ_LIST_DESTRUCTIVE), + ID(id_bhvBreakableBoxSmall), OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), SET_HOME(), @@ -4878,6 +5287,7 @@ const BehaviorScript bhvBreakableBoxSmall[] = { const BehaviorScript bhvSlidingSnowMound[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvSlidingSnowMound), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(sl_seg7_collision_sliding_snow_mound), SET_HOME(), @@ -4889,6 +5299,7 @@ const BehaviorScript bhvSlidingSnowMound[] = { const BehaviorScript bhvSnowMoundSpawn[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvSnowMoundSpawn), BEGIN_LOOP(), CALL_NATIVE(bhv_snow_mound_spawn_loop), END_LOOP(), @@ -4896,6 +5307,7 @@ const BehaviorScript bhvSnowMoundSpawn[] = { const BehaviorScript bhvWdwSquareFloatingPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvWdwSquareFloatingPlatform), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wdw_seg7_collision_square_floating_platform), SET_FLOAT(oFloatingPlatformUnkFC, 64), @@ -4908,6 +5320,7 @@ const BehaviorScript bhvWdwSquareFloatingPlatform[] = { const BehaviorScript bhvWdwRectangularFloatingPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvWdwRectangularFloatingPlatform), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(wdw_seg7_collision_rect_floating_platform), SET_FLOAT(oFloatingPlatformUnkFC, 64), @@ -4920,6 +5333,7 @@ const BehaviorScript bhvWdwRectangularFloatingPlatform[] = { const BehaviorScript bhvJrbFloatingPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvJrbFloatingPlatform), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_COLLISION_DATA(jrb_seg7_collision_floating_platform), SET_FLOAT(oFloatingPlatformUnkFC, 64), @@ -4932,6 +5346,7 @@ const BehaviorScript bhvJrbFloatingPlatform[] = { const BehaviorScript bhvArrowLift[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvArrowLift), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(wdw_seg7_collision_arrow_lift), SET_INT_RAND_RSHIFT(oArrowLiftUnk100, /*Minimum*/ 1, /*Right shift*/ 32), @@ -4944,6 +5359,7 @@ const BehaviorScript bhvArrowLift[] = { const BehaviorScript bhvOrangeNumber[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvOrangeNumber), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_HOME(), @@ -4955,6 +5371,7 @@ const BehaviorScript bhvOrangeNumber[] = { const BehaviorScript bhvMantaRay[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvMantaRay), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, manta_seg5_anims_05008EB4), ANIMATE(0), @@ -4967,6 +5384,7 @@ const BehaviorScript bhvMantaRay[] = { const BehaviorScript bhvFallingPillar[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvFallingPillar), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), CALL_NATIVE(bhv_falling_pillar_init), @@ -4977,6 +5395,7 @@ const BehaviorScript bhvFallingPillar[] = { const BehaviorScript bhvFallingPillarHitbox[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvFallingPillarHitbox), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HOME(), BEGIN_LOOP(), @@ -4986,6 +5405,7 @@ const BehaviorScript bhvFallingPillarHitbox[] = { const BehaviorScript bhvPillarBase[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvPillarBase), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(jrb_seg7_collision_pillar_base), BEGIN_LOOP(), @@ -4995,6 +5415,7 @@ const BehaviorScript bhvPillarBase[] = { const BehaviorScript bhvJrbFloatingBox[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvJrbFloatingBox), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_COLLISION_DATA(jrb_seg7_collision_floating_box), SET_HOME(), @@ -5006,6 +5427,7 @@ const BehaviorScript bhvJrbFloatingBox[] = { const BehaviorScript bhvDecorativePendulum[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvDecorativePendulum), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_decorative_pendulum_init), BEGIN_LOOP(), @@ -5015,6 +5437,7 @@ const BehaviorScript bhvDecorativePendulum[] = { const BehaviorScript bhvTreasureChestsShip[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvTreasureChestsShip), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), DROP_TO_FLOOR(), CALL_NATIVE(bhv_treasure_chest_ship_init), @@ -5025,6 +5448,7 @@ const BehaviorScript bhvTreasureChestsShip[] = { const BehaviorScript bhvTreasureChestsJrb[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvTreasureChestsJrb), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), DROP_TO_FLOOR(), CALL_NATIVE(bhv_treasure_chest_jrb_init), @@ -5035,6 +5459,7 @@ const BehaviorScript bhvTreasureChestsJrb[] = { const BehaviorScript bhvTreasureChests[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvTreasureChests), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), DROP_TO_FLOOR(), CALL_NATIVE(bhv_treasure_chest_init), @@ -5045,6 +5470,7 @@ const BehaviorScript bhvTreasureChests[] = { const BehaviorScript bhvTreasureChestBottom[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvTreasureChestBottom), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), DROP_TO_FLOOR(), CALL_NATIVE(bhv_treasure_chest_bottom_init), @@ -5056,6 +5482,7 @@ const BehaviorScript bhvTreasureChestBottom[] = { const BehaviorScript bhvTreasureChestTop[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvTreasureChestTop), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_HOME(), BEGIN_LOOP(), @@ -5065,6 +5492,7 @@ const BehaviorScript bhvTreasureChestTop[] = { const BehaviorScript bhvMips[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvMips), OR_INT(oFlags, (OBJ_FLAG_HOLDABLE | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, mips_seg6_anims_06015634), SET_INT(oInteractType, INTERACT_GRABBABLE), @@ -5079,6 +5507,7 @@ const BehaviorScript bhvMips[] = { const BehaviorScript bhvYoshi[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvYoshi), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, yoshi_seg5_anims_05024100), SET_INTERACT_TYPE(INTERACT_TEXT), @@ -5095,6 +5524,7 @@ const BehaviorScript bhvYoshi[] = { const BehaviorScript bhvKoopa[] = { BEGIN(OBJ_LIST_PUSHABLE), + ID(id_bhvKoopa), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), LOAD_ANIMATIONS(oAnimations, koopa_seg6_anims_06011364), @@ -5111,6 +5541,7 @@ const BehaviorScript bhvKoopa[] = { const BehaviorScript bhvKoopaRaceEndpoint[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvKoopaRaceEndpoint), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), SPAWN_CHILD_WITH_PARAM(/*Bhv param*/ 0, /*Model*/ MODEL_KOOPA_FLAG, /*Behavior*/ bhvKoopaFlag), @@ -5121,6 +5552,7 @@ const BehaviorScript bhvKoopaRaceEndpoint[] = { const BehaviorScript bhvKoopaFlag[] = { BEGIN(OBJ_LIST_POLELIKE), + ID(id_bhvKoopaFlag), SET_INTERACT_TYPE(INTERACT_POLE), SET_HITBOX(/*Radius*/ 80, /*Height*/ 700), SET_INT(oIntangibleTimer, 0), @@ -5135,6 +5567,7 @@ const BehaviorScript bhvKoopaFlag[] = { const BehaviorScript bhvPokey[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvPokey), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), SET_HOME(), @@ -5146,6 +5579,7 @@ const BehaviorScript bhvPokey[] = { const BehaviorScript bhvPokeyBodyPart[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvPokeyBodyPart), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 60, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), BILLBOARD(), @@ -5156,6 +5590,7 @@ const BehaviorScript bhvPokeyBodyPart[] = { const BehaviorScript bhvSwoop[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvSwoop), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, swoop_seg6_anims_060070D0), SET_HOME(), @@ -5169,6 +5604,7 @@ const BehaviorScript bhvSwoop[] = { const BehaviorScript bhvFlyGuy[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvFlyGuy), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, flyguy_seg8_anims_08011A64), ANIMATE(0), @@ -5185,6 +5621,7 @@ const BehaviorScript bhvFlyGuy[] = { const BehaviorScript bhvGoomba[] = { BEGIN(OBJ_LIST_PUSHABLE), + ID(id_bhvGoomba), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), LOAD_ANIMATIONS(oAnimations, goomba_seg8_anims_0801DA4C), @@ -5198,6 +5635,7 @@ const BehaviorScript bhvGoomba[] = { const BehaviorScript bhvGoombaTripletSpawner[] = { BEGIN(OBJ_LIST_PUSHABLE), + ID(id_bhvGoombaTripletSpawner), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), BEGIN_LOOP(), @@ -5207,6 +5645,7 @@ const BehaviorScript bhvGoombaTripletSpawner[] = { const BehaviorScript bhvChainChomp[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvChainChomp), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), LOAD_ANIMATIONS(oAnimations, chain_chomp_seg6_anims_06025178), @@ -5224,6 +5663,7 @@ const BehaviorScript bhvChainChomp[] = { const BehaviorScript bhvChainChompChainPart[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvChainChompChainPart), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), @@ -5236,6 +5676,7 @@ const BehaviorScript bhvChainChompChainPart[] = { const BehaviorScript bhvWoodenPost[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvWoodenPost), LOAD_COLLISION_DATA(poundable_pole_collision_06002490), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), @@ -5251,6 +5692,7 @@ const BehaviorScript bhvWoodenPost[] = { const BehaviorScript bhvChainChompGate[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvChainChompGate), LOAD_COLLISION_DATA(bob_seg7_collision_chain_chomp_gate), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), CALL_NATIVE(bhv_chain_chomp_gate_init), @@ -5262,6 +5704,7 @@ const BehaviorScript bhvChainChompGate[] = { const BehaviorScript bhvWigglerHead[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvWigglerHead), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), LOAD_ANIMATIONS(oAnimations, wiggler_seg5_anims_0500EC8C), @@ -5277,6 +5720,7 @@ const BehaviorScript bhvWigglerHead[] = { const BehaviorScript bhvWigglerBody[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvWigglerBody), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_ANIMATIONS(oAnimations, wiggler_seg5_anims_0500C874), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), @@ -5288,6 +5732,7 @@ const BehaviorScript bhvWigglerBody[] = { const BehaviorScript bhvEnemyLakitu[] = { BEGIN(OBJ_LIST_PUSHABLE), + ID(id_bhvEnemyLakitu), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, lakitu_enemy_seg5_anims_050144D4), ANIMATE(0), @@ -5300,6 +5745,7 @@ const BehaviorScript bhvEnemyLakitu[] = { const BehaviorScript bhvCameraLakitu[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvCameraLakitu), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, lakitu_seg6_anims_060058F8), ANIMATE(0), @@ -5312,6 +5758,7 @@ const BehaviorScript bhvCameraLakitu[] = { const BehaviorScript bhvCloud[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvCloud), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_HOME(), @@ -5323,6 +5770,7 @@ const BehaviorScript bhvCloud[] = { const BehaviorScript bhvCloudPart[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvCloudPart), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_INT(oOpacity, 240), BEGIN_LOOP(), @@ -5332,6 +5780,7 @@ const BehaviorScript bhvCloudPart[] = { const BehaviorScript bhvSpiny[] = { BEGIN(OBJ_LIST_PUSHABLE), + ID(id_bhvSpiny), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, spiny_seg5_anims_05016EAC), ANIMATE(0), @@ -5343,6 +5792,7 @@ const BehaviorScript bhvSpiny[] = { const BehaviorScript bhvMontyMole[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvMontyMole), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), LOAD_ANIMATIONS(oAnimations, monty_mole_seg5_anims_05007248), @@ -5361,6 +5811,7 @@ const BehaviorScript bhvMontyMole[] = { const BehaviorScript bhvMontyMoleHole[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvMontyMoleHole), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), SCALE(/*Unused*/ 0, /*Field*/ 150), @@ -5371,6 +5822,7 @@ const BehaviorScript bhvMontyMoleHole[] = { const BehaviorScript bhvMontyMoleRock[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvMontyMoleRock), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), @@ -5383,6 +5835,7 @@ const BehaviorScript bhvMontyMoleRock[] = { const BehaviorScript bhvPlatformOnTrack[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvPlatformOnTrack), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 50, /*Gravity*/ -100, /*Bounciness*/ -50, /*Drag strength*/ 100, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), CALL_NATIVE(bhv_init_room), @@ -5395,6 +5848,7 @@ const BehaviorScript bhvPlatformOnTrack[] = { const BehaviorScript bhvTrackBall[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvTrackBall), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), CALL_NATIVE(bhv_init_room), @@ -5406,6 +5860,7 @@ const BehaviorScript bhvTrackBall[] = { const BehaviorScript bhvSeesawPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvSeesawPlatform), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), CALL_NATIVE(bhv_seesaw_platform_init), BEGIN_LOOP(), @@ -5416,6 +5871,7 @@ const BehaviorScript bhvSeesawPlatform[] = { const BehaviorScript bhvFerrisWheelAxle[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvFerrisWheelAxle), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), ADD_INT(oMoveAngleYaw, 0x4000), CALL_NATIVE(bhv_ferris_wheel_axle_init), @@ -5427,6 +5883,7 @@ const BehaviorScript bhvFerrisWheelAxle[] = { const BehaviorScript bhvFerrisWheelPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvFerrisWheelPlatform), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_LOOP(), CALL_NATIVE(bhv_ferris_wheel_platform_update), @@ -5436,6 +5893,7 @@ const BehaviorScript bhvFerrisWheelPlatform[] = { const BehaviorScript bhvWaterBombSpawner[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvWaterBombSpawner), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), BEGIN_LOOP(), @@ -5445,6 +5903,7 @@ const BehaviorScript bhvWaterBombSpawner[] = { const BehaviorScript bhvWaterBomb[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvWaterBomb), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 120, /*Gravity*/ -400, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), BEGIN_LOOP(), @@ -5454,6 +5913,7 @@ const BehaviorScript bhvWaterBomb[] = { const BehaviorScript bhvWaterBombShadow[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvWaterBombShadow), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SCALE(/*Unused*/ 0, /*Field*/ 150), BEGIN_LOOP(), @@ -5463,6 +5923,7 @@ const BehaviorScript bhvWaterBombShadow[] = { const BehaviorScript bhvTTCRotatingSolid[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvTTCRotatingSolid), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), SET_FLOAT(oCollisionDistance, 450), @@ -5476,6 +5937,7 @@ const BehaviorScript bhvTTCRotatingSolid[] = { const BehaviorScript bhvTTCPendulum[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvTTCPendulum), LOAD_COLLISION_DATA(ttc_seg7_collision_clock_pendulum), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_FLOAT(oCollisionDistance, 1500), @@ -5489,6 +5951,7 @@ const BehaviorScript bhvTTCPendulum[] = { const BehaviorScript bhvTTCTreadmill[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvTTCTreadmill), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_FLOAT(oCollisionDistance, 750), CALL_NATIVE(bhv_ttc_treadmill_init), @@ -5502,6 +5965,7 @@ const BehaviorScript bhvTTCTreadmill[] = { const BehaviorScript bhvTTCMovingBar[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvTTCMovingBar), LOAD_COLLISION_DATA(ttc_seg7_collision_sliding_surface), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), @@ -5515,6 +5979,7 @@ const BehaviorScript bhvTTCMovingBar[] = { const BehaviorScript bhvTTCCog[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvTTCCog), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_FLOAT(oCollisionDistance, 400), CALL_NATIVE(bhv_ttc_cog_init), @@ -5526,6 +5991,7 @@ const BehaviorScript bhvTTCCog[] = { const BehaviorScript bhvTTCPitBlock[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvTTCPitBlock), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), SET_FLOAT(oCollisionDistance, 350), @@ -5538,6 +6004,7 @@ const BehaviorScript bhvTTCPitBlock[] = { const BehaviorScript bhvTTCElevator[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvTTCElevator), LOAD_COLLISION_DATA(ttc_seg7_collision_clock_platform), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), @@ -5552,6 +6019,7 @@ const BehaviorScript bhvTTCElevator[] = { const BehaviorScript bhvTTC2DRotator[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvTTC2DRotator), LOAD_COLLISION_DATA(ttc_seg7_collision_clock_main_rotation), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_FLOAT(oCollisionDistance, 1800), @@ -5563,6 +6031,7 @@ const BehaviorScript bhvTTC2DRotator[] = { const BehaviorScript bhvTTCSpinner[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvTTCSpinner), LOAD_COLLISION_DATA(ttc_seg7_collision_rotating_clock_platform2), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_FLOAT(oCollisionDistance, 450), @@ -5574,6 +6043,7 @@ const BehaviorScript bhvTTCSpinner[] = { const BehaviorScript bhvMrBlizzard[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvMrBlizzard), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), LOAD_ANIMATIONS(oAnimations, snowman_seg5_anims_0500D118), @@ -5589,6 +6059,7 @@ const BehaviorScript bhvMrBlizzard[] = { const BehaviorScript bhvMrBlizzardSnowball[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvMrBlizzardSnowball), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -300, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), @@ -5604,6 +6075,7 @@ const BehaviorScript bhvMrBlizzardSnowball[] = { const BehaviorScript bhvSlidingPlatform2[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvSlidingPlatform2), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), CALL_NATIVE(bhv_sliding_plat_2_init), @@ -5615,6 +6087,7 @@ const BehaviorScript bhvSlidingPlatform2[] = { const BehaviorScript bhvOctagonalPlatformRotating[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvOctagonalPlatformRotating), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), CALL_NATIVE(bhv_rotating_octagonal_plat_init), BEGIN_LOOP(), @@ -5625,6 +6098,7 @@ const BehaviorScript bhvOctagonalPlatformRotating[] = { const BehaviorScript bhvAnimatesOnFloorSwitchPress[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvAnimatesOnFloorSwitchPress), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_FLOAT(oCollisionDistance, 8000), CALL_NATIVE(bhv_animates_on_floor_switch_press_init), @@ -5636,6 +6110,7 @@ const BehaviorScript bhvAnimatesOnFloorSwitchPress[] = { const BehaviorScript bhvActivatedBackAndForthPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvActivatedBackAndForthPlatform), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), CALL_NATIVE(bhv_activated_back_and_forth_platform_init), @@ -5647,6 +6122,7 @@ const BehaviorScript bhvActivatedBackAndForthPlatform[] = { const BehaviorScript bhvRecoveryHeart[] = { BEGIN(OBJ_LIST_LEVEL), + ID(id_bhvRecoveryHeart), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), CALL_NATIVE(bhv_recovery_heart_loop), @@ -5655,6 +6131,7 @@ const BehaviorScript bhvRecoveryHeart[] = { const BehaviorScript bhvWaterBombCannon[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvWaterBombCannon), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), CALL_NATIVE(bhv_water_bomb_cannon_loop), @@ -5663,6 +6140,7 @@ const BehaviorScript bhvWaterBombCannon[] = { const BehaviorScript bhvCannonBarrelBubbles[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvCannonBarrelBubbles), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), CALL_NATIVE(bhv_bubble_cannon_barrel_loop), @@ -5671,6 +6149,7 @@ const BehaviorScript bhvCannonBarrelBubbles[] = { const BehaviorScript bhvUnagi[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvUnagi), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, unagi_seg5_anims_05012824), ANIMATE(6), @@ -5685,6 +6164,7 @@ const BehaviorScript bhvUnagi[] = { const BehaviorScript bhvUnagiSubobject[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvUnagiSubobject), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), CALL_NATIVE(bhv_unagi_subobject_loop), @@ -5693,6 +6173,7 @@ const BehaviorScript bhvUnagiSubobject[] = { const BehaviorScript bhvDorrie[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvDorrie), LOAD_COLLISION_DATA(dorrie_seg6_collision_0600F644), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, dorrie_seg6_anims_0600F638), @@ -5708,6 +6189,7 @@ const BehaviorScript bhvDorrie[] = { const BehaviorScript bhvHauntedChair[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvHauntedChair), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), LOAD_ANIMATIONS(oAnimations, chair_seg5_anims_05005784), @@ -5723,6 +6205,7 @@ const BehaviorScript bhvHauntedChair[] = { const BehaviorScript bhvMadPiano[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvMadPiano), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), LOAD_ANIMATIONS(oAnimations, mad_piano_seg5_anims_05009B14), @@ -5737,6 +6220,7 @@ const BehaviorScript bhvMadPiano[] = { const BehaviorScript bhvFlyingBookend[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvFlyingBookend), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, bookend_seg5_anims_05002540), ANIMATE(0), @@ -5751,6 +6235,7 @@ const BehaviorScript bhvFlyingBookend[] = { const BehaviorScript bhvBookendSpawn[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBookendSpawn), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), CALL_NATIVE(bhv_init_room), BEGIN_LOOP(), @@ -5760,6 +6245,7 @@ const BehaviorScript bhvBookendSpawn[] = { const BehaviorScript bhvHauntedBookshelfManager[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvHauntedBookshelfManager), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), CALL_NATIVE(bhv_init_room), BEGIN_LOOP(), @@ -5769,6 +6255,7 @@ const BehaviorScript bhvHauntedBookshelfManager[] = { const BehaviorScript bhvBookSwitch[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBookSwitch), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), SET_FLOAT(oGraphYOffset, 30), @@ -5781,6 +6268,7 @@ const BehaviorScript bhvBookSwitch[] = { const BehaviorScript bhvFirePiranhaPlant[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvFirePiranhaPlant), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), LOAD_ANIMATIONS(oAnimations, piranha_plant_seg6_anims_0601C31C), @@ -5795,6 +6283,7 @@ const BehaviorScript bhvFirePiranhaPlant[] = { const BehaviorScript bhvSmallPiranhaFlame[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvSmallPiranhaFlame), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), @@ -5806,6 +6295,7 @@ const BehaviorScript bhvSmallPiranhaFlame[] = { const BehaviorScript bhvFireSpitter[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvFireSpitter), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SCALE(/*Unused*/ 0, /*Field*/ 40), @@ -5816,6 +6306,7 @@ const BehaviorScript bhvFireSpitter[] = { const BehaviorScript bhvFlyguyFlame[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvFlyguyFlame), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BILLBOARD(), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 0, /*Gravity*/ 200, /*Bounciness*/ 0, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), @@ -5827,6 +6318,7 @@ const BehaviorScript bhvFlyguyFlame[] = { const BehaviorScript bhvSnufit[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvSnufit), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 0, /*Unused*/ 0, 0), @@ -5839,6 +6331,7 @@ const BehaviorScript bhvSnufit[] = { const BehaviorScript bhvSnufitBalls[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvSnufitBalls), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BILLBOARD(), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 10, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0), @@ -5852,6 +6345,7 @@ const BehaviorScript bhvSnufitBalls[] = { const BehaviorScript bhvHorizontalGrindel[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvHorizontalGrindel), LOAD_COLLISION_DATA(ssl_seg7_collision_grindel), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), DROP_TO_FLOOR(), @@ -5868,6 +6362,7 @@ const BehaviorScript bhvHorizontalGrindel[] = { const BehaviorScript bhvEyerokBoss[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvEyerokBoss), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), BEGIN_LOOP(), @@ -5877,6 +6372,7 @@ const BehaviorScript bhvEyerokBoss[] = { const BehaviorScript bhvEyerokHand[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvEyerokHand), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, eyerok_seg5_anims_050116E4), ANIMATE(6), @@ -5890,6 +6386,7 @@ const BehaviorScript bhvEyerokHand[] = { const BehaviorScript bhvKlepto[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvKlepto), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, klepto_seg5_anims_05008CFC), ANIMATE(0), @@ -5903,6 +6400,7 @@ const BehaviorScript bhvKlepto[] = { const BehaviorScript bhvBird[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBird), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, birds_seg5_anims_050009E8), ANIMATE(0), @@ -5915,6 +6413,7 @@ const BehaviorScript bhvBird[] = { const BehaviorScript bhvRacingPenguin[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvRacingPenguin), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, penguin_seg5_anims_05008B74), ANIMATE(3), @@ -5928,6 +6427,7 @@ const BehaviorScript bhvRacingPenguin[] = { const BehaviorScript bhvPenguinRaceFinishLine[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvPenguinRaceFinishLine), OR_INT(oFlags, (OBJ_FLAG_ACTIVE_FROM_AFAR | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), CALL_NATIVE(bhv_penguin_race_finish_line_update), @@ -5936,6 +6436,7 @@ const BehaviorScript bhvPenguinRaceFinishLine[] = { const BehaviorScript bhvPenguinRaceShortcutCheck[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvPenguinRaceShortcutCheck), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), BEGIN_LOOP(), CALL_NATIVE(bhv_penguin_race_shortcut_check_update), @@ -5944,6 +6445,7 @@ const BehaviorScript bhvPenguinRaceShortcutCheck[] = { const BehaviorScript bhvCoffinSpawner[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvCoffinSpawner), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), CALL_NATIVE(bhv_init_room), BEGIN_LOOP(), @@ -5953,6 +6455,7 @@ const BehaviorScript bhvCoffinSpawner[] = { const BehaviorScript bhvCoffin[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvCoffin), LOAD_COLLISION_DATA(bbh_seg7_collision_coffin), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), @@ -5964,6 +6467,7 @@ const BehaviorScript bhvCoffin[] = { const BehaviorScript bhvClamShell[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvClamShell), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), DROP_TO_FLOOR(), LOAD_ANIMATIONS(oAnimations, clam_shell_seg5_anims_05001744), @@ -5975,6 +6479,7 @@ const BehaviorScript bhvClamShell[] = { const BehaviorScript bhvSkeeter[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvSkeeter), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, skeeter_seg6_anims_06007DE0), SET_HOME(), @@ -5986,6 +6491,7 @@ const BehaviorScript bhvSkeeter[] = { const BehaviorScript bhvSkeeterWave[] = { BEGIN(OBJ_LIST_UNIMPORTANT), + ID(id_bhvSkeeterWave), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_LOOP(), CALL_NATIVE(bhv_skeeter_wave_update), @@ -5994,6 +6500,7 @@ const BehaviorScript bhvSkeeterWave[] = { const BehaviorScript bhvSwingPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvSwingPlatform), LOAD_COLLISION_DATA(rr_seg7_collision_pendulum), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), SET_FLOAT(oCollisionDistance, 2000), @@ -6006,6 +6513,7 @@ const BehaviorScript bhvSwingPlatform[] = { const BehaviorScript bhvDonutPlatformSpawner[] = { BEGIN(OBJ_LIST_SPAWNER), + ID(id_bhvDonutPlatformSpawner), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_LOOP(), CALL_NATIVE(bhv_donut_platform_spawner_update), @@ -6014,6 +6522,7 @@ const BehaviorScript bhvDonutPlatformSpawner[] = { const BehaviorScript bhvDonutPlatform[] = { BEGIN(OBJ_LIST_SURFACE), + ID(id_bhvDonutPlatform), LOAD_COLLISION_DATA(rr_seg7_collision_donut_platform), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), @@ -6024,6 +6533,7 @@ const BehaviorScript bhvDonutPlatform[] = { const BehaviorScript bhvDDDPole[] = { BEGIN(OBJ_LIST_POLELIKE), + ID(id_bhvDDDPole), SET_INTERACT_TYPE(INTERACT_POLE), SET_HITBOX(/*Radius*/ 80, /*Height*/ 800), SET_INT(oIntangibleTimer, 0), @@ -6039,6 +6549,7 @@ const BehaviorScript bhvDDDPole[] = { const BehaviorScript bhvRedCoinStarMarker[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvRedCoinStarMarker), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), DROP_TO_FLOOR(), SCALE(/*Unused*/ 0, /*Field*/ 150), @@ -6052,6 +6563,7 @@ const BehaviorScript bhvRedCoinStarMarker[] = { const BehaviorScript bhvTripletButterfly[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvTripletButterfly), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, butterfly_seg3_anims_030056B0), ANIMATE(0), @@ -6066,6 +6578,7 @@ const BehaviorScript bhvTripletButterfly[] = { const BehaviorScript bhvBubba[] = { BEGIN(OBJ_LIST_GENACTOR), + ID(id_bhvBubba), OR_INT(oFlags, (OBJ_FLAG_COMPUTE_ANGLE_TO_MARIO | OBJ_FLAG_COMPUTE_DIST_TO_MARIO | OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), SET_HOME(), SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 200, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 0, /*Unused*/ 0, 0), @@ -6077,6 +6590,7 @@ const BehaviorScript bhvBubba[] = { const BehaviorScript bhvBeginningLakitu[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBeginningLakitu), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_ANIMATIONS(oAnimations, lakitu_seg6_anims_060058F8), ANIMATE(0), @@ -6088,6 +6602,7 @@ const BehaviorScript bhvBeginningLakitu[] = { const BehaviorScript bhvBeginningPeach[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvBeginningPeach), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), LOAD_ANIMATIONS(oAnimations, peach_seg5_anims_0501C41C), ANIMATE(0), @@ -6098,6 +6613,7 @@ const BehaviorScript bhvBeginningPeach[] = { const BehaviorScript bhvEndBirds1[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvEndBirds1), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, birds_seg5_anims_050009E8), ANIMATE(0), @@ -6108,6 +6624,7 @@ const BehaviorScript bhvEndBirds1[] = { const BehaviorScript bhvEndBirds2[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvEndBirds2), OR_INT(oFlags, (OBJ_FLAG_SET_FACE_ANGLE_TO_MOVE_ANGLE | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)), LOAD_ANIMATIONS(oAnimations, birds_seg5_anims_050009E8), ANIMATE(0), @@ -6118,6 +6635,7 @@ const BehaviorScript bhvEndBirds2[] = { const BehaviorScript bhvIntroScene[] = { BEGIN(OBJ_LIST_DEFAULT), + ID(id_bhvIntroScene), OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE), BEGIN_LOOP(), CALL_NATIVE(bhv_intro_scene_loop), diff --git a/data/behavior_table.c b/data/behavior_table.c new file mode 100644 index 000000000..806e17654 --- /dev/null +++ b/data/behavior_table.c @@ -0,0 +1,527 @@ +#include +#include "behavior_table.h" + +const BehaviorScript* gBehaviorTable[id_bhv_max_count] = { + [id_bhvStarDoor] = bhvStarDoor, + [id_bhvMrI] = bhvMrI, + [id_bhvMrIBody] = bhvMrIBody, + [id_bhvMrIParticle] = bhvMrIParticle, + [id_bhvPurpleParticle] = bhvPurpleParticle, + [id_bhvGiantPole] = bhvGiantPole, + [id_bhvPoleGrabbing] = bhvPoleGrabbing, + [id_bhvThiHugeIslandTop] = bhvThiHugeIslandTop, + [id_bhvThiTinyIslandTop] = bhvThiTinyIslandTop, + [id_bhvCapSwitchBase] = bhvCapSwitchBase, + [id_bhvCapSwitch] = bhvCapSwitch, + [id_bhvKingBobomb] = bhvKingBobomb, + [id_bhvBobombAnchorMario] = bhvBobombAnchorMario, + [id_bhvBetaChestBottom] = bhvBetaChestBottom, + [id_bhvBetaChestLid] = bhvBetaChestLid, + [id_bhvBubbleParticleSpawner] = bhvBubbleParticleSpawner, + [id_bhvBubbleMaybe] = bhvBubbleMaybe, + [id_bhvSmallWaterWave] = bhvSmallWaterWave, + [id_bhvWaterAirBubble] = bhvWaterAirBubble, + [id_bhvSmallParticle] = bhvSmallParticle, + [id_bhvPlungeBubble] = bhvPlungeBubble, + [id_bhvSmallParticleSnow] = bhvSmallParticleSnow, + [id_bhvSmallParticleBubbles] = bhvSmallParticleBubbles, + [id_bhvFishGroup] = bhvFishGroup, + [id_bhvCannon] = bhvCannon, + [id_bhvCannonBarrel] = bhvCannonBarrel, + [id_bhvCannonBaseUnused] = bhvCannonBaseUnused, + [id_bhvChuckya] = bhvChuckya, + [id_bhvChuckyaAnchorMario] = bhvChuckyaAnchorMario, + [id_bhvUnused05A8] = bhvUnused05A8, + [id_bhvRotatingPlatform] = bhvRotatingPlatform, + [id_bhvTower] = bhvTower, + [id_bhvBulletBillCannon] = bhvBulletBillCannon, + [id_bhvWfBreakableWallRight] = bhvWfBreakableWallRight, + [id_bhvWfBreakableWallLeft] = bhvWfBreakableWallLeft, + [id_bhvKickableBoard] = bhvKickableBoard, + [id_bhvTowerDoor] = bhvTowerDoor, + [id_bhvRotatingCounterClockwise] = bhvRotatingCounterClockwise, + [id_bhvWfRotatingWoodenPlatform] = bhvWfRotatingWoodenPlatform, + [id_bhvKoopaShellUnderwater] = bhvKoopaShellUnderwater, + [id_bhvExitPodiumWarp] = bhvExitPodiumWarp, + [id_bhvFadingWarp] = bhvFadingWarp, + [id_bhvWarp] = bhvWarp, + [id_bhvWarpPipe] = bhvWarpPipe, + [id_bhvWhitePuffExplosion] = bhvWhitePuffExplosion, + [id_bhvSpawnedStar] = bhvSpawnedStar, + [id_bhvSpawnedStarNoLevelExit] = bhvSpawnedStarNoLevelExit, + [id_bhvMrIBlueCoin] = bhvMrIBlueCoin, + [id_bhvCoinInsideBoo] = bhvCoinInsideBoo, + [id_bhvCoinFormationSpawn] = bhvCoinFormationSpawn, + [id_bhvCoinFormation] = bhvCoinFormation, + [id_bhvOneCoin] = bhvOneCoin, + [id_bhvYellowCoin] = bhvYellowCoin, + [id_bhvTemporaryYellowCoin] = bhvTemporaryYellowCoin, + [id_bhvThreeCoinsSpawn] = bhvThreeCoinsSpawn, + [id_bhvTenCoinsSpawn] = bhvTenCoinsSpawn, + [id_bhvSingleCoinGetsSpawned] = bhvSingleCoinGetsSpawned, + [id_bhvCoinSparkles] = bhvCoinSparkles, + [id_bhvGoldenCoinSparkles] = bhvGoldenCoinSparkles, + [id_bhvWallTinyStarParticle] = bhvWallTinyStarParticle, + [id_bhvVertStarParticleSpawner] = bhvVertStarParticleSpawner, + [id_bhvPoundTinyStarParticle] = bhvPoundTinyStarParticle, + [id_bhvHorStarParticleSpawner] = bhvHorStarParticleSpawner, + [id_bhvPunchTinyTriangle] = bhvPunchTinyTriangle, + [id_bhvTriangleParticleSpawner] = bhvTriangleParticleSpawner, + [id_bhvDoorWarp] = bhvDoorWarp, + [id_bhvDoor] = bhvDoor, + [id_bhvGrindel] = bhvGrindel, + [id_bhvThwomp2] = bhvThwomp2, + [id_bhvThwomp] = bhvThwomp, + [id_bhvTumblingBridgePlatform] = bhvTumblingBridgePlatform, + [id_bhvWfTumblingBridge] = bhvWfTumblingBridge, + [id_bhvBbhTumblingBridge] = bhvBbhTumblingBridge, + [id_bhvLllTumblingBridge] = bhvLllTumblingBridge, + [id_bhvFlame] = bhvFlame, + [id_bhvAnotherElavator] = bhvAnotherElavator, + [id_bhvRrElevatorPlatform] = bhvRrElevatorPlatform, + [id_bhvHmcElevatorPlatform] = bhvHmcElevatorPlatform, + [id_bhvWaterMist] = bhvWaterMist, + [id_bhvBreathParticleSpawner] = bhvBreathParticleSpawner, + [id_bhvBreakBoxTriangle] = bhvBreakBoxTriangle, + [id_bhvWaterMist2] = bhvWaterMist2, + [id_bhvUnused0DFC] = bhvUnused0DFC, + [id_bhvMistCircParticleSpawner] = bhvMistCircParticleSpawner, + [id_bhvDirtParticleSpawner] = bhvDirtParticleSpawner, + [id_bhvSnowParticleSpawner] = bhvSnowParticleSpawner, + [id_bhvWind] = bhvWind, + [id_bhvEndToad] = bhvEndToad, + [id_bhvEndPeach] = bhvEndPeach, + [id_bhvUnusedParticleSpawn] = bhvUnusedParticleSpawn, + [id_bhvUkiki] = bhvUkiki, + [id_bhvUkikiCageChild] = bhvUkikiCageChild, + [id_bhvUkikiCageStar] = bhvUkikiCageStar, + [id_bhvUkikiCage] = bhvUkikiCage, + [id_bhvBitfsSinkingPlatforms] = bhvBitfsSinkingPlatforms, + [id_bhvBitfsSinkingCagePlatform] = bhvBitfsSinkingCagePlatform, + [id_bhvDddMovingPole] = bhvDddMovingPole, + [id_bhvBitfsTiltingInvertedPyramid] = bhvBitfsTiltingInvertedPyramid, + [id_bhvSquishablePlatform] = bhvSquishablePlatform, + [id_bhvCutOutObject] = bhvCutOutObject, + [id_bhvBetaMovingFlames] = bhvBetaMovingFlames, + [id_bhvRrRotatingBridgePlatform] = bhvRrRotatingBridgePlatform, + [id_bhvFlamethrower] = bhvFlamethrower, + [id_bhvFlamethrowerFlame] = bhvFlamethrowerFlame, + [id_bhvBouncingFireball] = bhvBouncingFireball, + [id_bhvBouncingFireballFlame] = bhvBouncingFireballFlame, + [id_bhvBowserShockWave] = bhvBowserShockWave, + [id_bhvFireParticleSpawner] = bhvFireParticleSpawner, + [id_bhvBlackSmokeMario] = bhvBlackSmokeMario, + [id_bhvBlackSmokeBowser] = bhvBlackSmokeBowser, + [id_bhvBlackSmokeUpward] = bhvBlackSmokeUpward, + [id_bhvBetaFishSplashSpawner] = bhvBetaFishSplashSpawner, + [id_bhvSpindrift] = bhvSpindrift, + [id_bhvTowerPlatformGroup] = bhvTowerPlatformGroup, + [id_bhvWfSlidingTowerPlatform] = bhvWfSlidingTowerPlatform, + [id_bhvWfElevatorTowerPlatform] = bhvWfElevatorTowerPlatform, + [id_bhvWfSolidTowerPlatform] = bhvWfSolidTowerPlatform, + [id_bhvLeafParticleSpawner] = bhvLeafParticleSpawner, + [id_bhvTreeSnow] = bhvTreeSnow, + [id_bhvTreeLeaf] = bhvTreeLeaf, + [id_bhvAnotherTiltingPlatform] = bhvAnotherTiltingPlatform, + [id_bhvSquarishPathMoving] = bhvSquarishPathMoving, + [id_bhvPiranhaPlantBubble] = bhvPiranhaPlantBubble, + [id_bhvPiranhaPlantWakingBubbles] = bhvPiranhaPlantWakingBubbles, + [id_bhvFloorSwitchAnimatesObject] = bhvFloorSwitchAnimatesObject, + [id_bhvFloorSwitchGrills] = bhvFloorSwitchGrills, + [id_bhvFloorSwitchHardcodedModel] = bhvFloorSwitchHardcodedModel, + [id_bhvFloorSwitchHiddenObjects] = bhvFloorSwitchHiddenObjects, + [id_bhvHiddenObject] = bhvHiddenObject, + [id_bhvBreakableBox] = bhvBreakableBox, + [id_bhvPushableMetalBox] = bhvPushableMetalBox, + [id_bhvHeaveHo] = bhvHeaveHo, + [id_bhvHeaveHoThrowMario] = bhvHeaveHoThrowMario, + [id_bhvCcmTouchedStarSpawn] = bhvCcmTouchedStarSpawn, + [id_bhvUnusedPoundablePlatform] = bhvUnusedPoundablePlatform, + [id_bhvBetaTrampolineTop] = bhvBetaTrampolineTop, + [id_bhvBetaTrampolineSpring] = bhvBetaTrampolineSpring, + [id_bhvJumpingBox] = bhvJumpingBox, + [id_bhvBooCage] = bhvBooCage, + [id_bhvStub] = bhvStub, + [id_bhvIgloo] = bhvIgloo, + [id_bhvBowserKey] = bhvBowserKey, + [id_bhvGrandStar] = bhvGrandStar, + [id_bhvBetaBooKey] = bhvBetaBooKey, + [id_bhvAlphaBooKey] = bhvAlphaBooKey, + [id_bhvBulletBill] = bhvBulletBill, + [id_bhvWhitePuffSmoke] = bhvWhitePuffSmoke, + [id_bhvUnused1820] = bhvUnused1820, + [id_bhvBowserTailAnchor] = bhvBowserTailAnchor, + [id_bhvBowser] = bhvBowser, + [id_bhvBowserBodyAnchor] = bhvBowserBodyAnchor, + [id_bhvBowserFlameSpawn] = bhvBowserFlameSpawn, + [id_bhvTiltingBowserLavaPlatform] = bhvTiltingBowserLavaPlatform, + [id_bhvFallingBowserPlatform] = bhvFallingBowserPlatform, + [id_bhvBlueBowserFlame] = bhvBlueBowserFlame, + [id_bhvFlameFloatingLanding] = bhvFlameFloatingLanding, + [id_bhvBlueFlamesGroup] = bhvBlueFlamesGroup, + [id_bhvFlameBouncing] = bhvFlameBouncing, + [id_bhvFlameMovingForwardGrowing] = bhvFlameMovingForwardGrowing, + [id_bhvFlameBowser] = bhvFlameBowser, + [id_bhvFlameLargeBurningOut] = bhvFlameLargeBurningOut, + [id_bhvBlueFish] = bhvBlueFish, + [id_bhvTankFishGroup] = bhvTankFishGroup, + [id_bhvCheckerboardElevatorGroup] = bhvCheckerboardElevatorGroup, + [id_bhvCheckerboardPlatformSub] = bhvCheckerboardPlatformSub, + [id_bhvBowserKeyUnlockDoor] = bhvBowserKeyUnlockDoor, + [id_bhvBowserKeyCourseExit] = bhvBowserKeyCourseExit, + [id_bhvInvisibleObjectsUnderBridge] = bhvInvisibleObjectsUnderBridge, + [id_bhvWaterLevelPillar] = bhvWaterLevelPillar, + [id_bhvDddWarp] = bhvDddWarp, + [id_bhvMoatGrills] = bhvMoatGrills, + [id_bhvClockMinuteHand] = bhvClockMinuteHand, + [id_bhvClockHourHand] = bhvClockHourHand, + [id_bhvMacroUkiki] = bhvMacroUkiki, + [id_bhvStub1D0C] = bhvStub1D0C, + [id_bhvLllRotatingHexagonalPlatform] = bhvLllRotatingHexagonalPlatform, + [id_bhvLllSinkingRockBlock] = bhvLllSinkingRockBlock, + [id_bhvStub1D70] = bhvStub1D70, + [id_bhvLllMovingOctagonalMeshPlatform] = bhvLllMovingOctagonalMeshPlatform, + [id_bhvLllRotatingBlockWithFireBars] = bhvLllRotatingBlockWithFireBars, + [id_bhvLllRotatingHexFlame] = bhvLllRotatingHexFlame, + [id_bhvLllWoodPiece] = bhvLllWoodPiece, + [id_bhvLllFloatingWoodBridge] = bhvLllFloatingWoodBridge, + [id_bhvVolcanoFlames] = bhvVolcanoFlames, + [id_bhvLllRotatingHexagonalRing] = bhvLllRotatingHexagonalRing, + [id_bhvLllSinkingRectangularPlatform] = bhvLllSinkingRectangularPlatform, + [id_bhvLllSinkingSquarePlatforms] = bhvLllSinkingSquarePlatforms, + [id_bhvLllTiltingInvertedPyramid] = bhvLllTiltingInvertedPyramid, + [id_bhvUnused1F30] = bhvUnused1F30, + [id_bhvKoopaShell] = bhvKoopaShell, + [id_bhvKoopaShellFlame] = bhvKoopaShellFlame, + [id_bhvToxBox] = bhvToxBox, + [id_bhvPiranhaPlant] = bhvPiranhaPlant, + [id_bhvLllHexagonalMesh] = bhvLllHexagonalMesh, + [id_bhvLllBowserPuzzlePiece] = bhvLllBowserPuzzlePiece, + [id_bhvLllBowserPuzzle] = bhvLllBowserPuzzle, + [id_bhvTuxiesMother] = bhvTuxiesMother, + [id_bhvPenguinBaby] = bhvPenguinBaby, + [id_bhvUnused20E0] = bhvUnused20E0, + [id_bhvSmallPenguin] = bhvSmallPenguin, + [id_bhvFish2] = bhvFish2, + [id_bhvFish3] = bhvFish3, + [id_bhvLargeFishGroup] = bhvLargeFishGroup, + [id_bhvFish] = bhvFish, + [id_bhvWdwExpressElevator] = bhvWdwExpressElevator, + [id_bhvWdwExpressElevatorPlatform] = bhvWdwExpressElevatorPlatform, + [id_bhvChirpChirp] = bhvChirpChirp, + [id_bhvBub] = bhvBub, + [id_bhvExclamationBox] = bhvExclamationBox, + [id_bhvRotatingExclamationMark] = bhvRotatingExclamationMark, + [id_bhvSoundSpawner] = bhvSoundSpawner, + [id_bhvRockSolid] = bhvRockSolid, + [id_bhvBowserSubDoor] = bhvBowserSubDoor, + [id_bhvBowsersSub] = bhvBowsersSub, + [id_bhvSushiShark] = bhvSushiShark, + [id_bhvSushiSharkCollisionChild] = bhvSushiSharkCollisionChild, + [id_bhvJrbSlidingBox] = bhvJrbSlidingBox, + [id_bhvShipPart3] = bhvShipPart3, + [id_bhvInSunkenShip3] = bhvInSunkenShip3, + [id_bhvSunkenShipPart] = bhvSunkenShipPart, + [id_bhvSunkenShipPart2] = bhvSunkenShipPart2, + [id_bhvInSunkenShip] = bhvInSunkenShip, + [id_bhvInSunkenShip2] = bhvInSunkenShip2, + [id_bhvMistParticleSpawner] = bhvMistParticleSpawner, + [id_bhvWhitePuff1] = bhvWhitePuff1, + [id_bhvWhitePuff2] = bhvWhitePuff2, + [id_bhvWhitePuffSmoke2] = bhvWhitePuffSmoke2, + [id_bhvPurpleSwitchHiddenBoxes] = bhvPurpleSwitchHiddenBoxes, + [id_bhvBlueCoinSwitch] = bhvBlueCoinSwitch, + [id_bhvHiddenBlueCoin] = bhvHiddenBlueCoin, + [id_bhvOpenableCageDoor] = bhvOpenableCageDoor, + [id_bhvOpenableGrill] = bhvOpenableGrill, + [id_bhvWaterLevelDiamond] = bhvWaterLevelDiamond, + [id_bhvInitializeChangingWaterLevel] = bhvInitializeChangingWaterLevel, + [id_bhvTweesterSandParticle] = bhvTweesterSandParticle, + [id_bhvTweester] = bhvTweester, + [id_bhvMerryGoRoundBooManager] = bhvMerryGoRoundBooManager, + [id_bhvAnimatedTexture] = bhvAnimatedTexture, + [id_bhvBooInCastle] = bhvBooInCastle, + [id_bhvBooWithCage] = bhvBooWithCage, + [id_bhvBalconyBigBoo] = bhvBalconyBigBoo, + [id_bhvMerryGoRoundBigBoo] = bhvMerryGoRoundBigBoo, + [id_bhvGhostHuntBigBoo] = bhvGhostHuntBigBoo, + [id_bhvCourtyardBooTriplet] = bhvCourtyardBooTriplet, + [id_bhvBoo] = bhvBoo, + [id_bhvMerryGoRoundBoo] = bhvMerryGoRoundBoo, + [id_bhvGhostHuntBoo] = bhvGhostHuntBoo, + [id_bhvHiddenStaircaseStep] = bhvHiddenStaircaseStep, + [id_bhvBooBossSpawnedBridge] = bhvBooBossSpawnedBridge, + [id_bhvBbhTiltingTrapPlatform] = bhvBbhTiltingTrapPlatform, + [id_bhvHauntedBookshelf] = bhvHauntedBookshelf, + [id_bhvMeshElevator] = bhvMeshElevator, + [id_bhvMerryGoRound] = bhvMerryGoRound, + [id_bhvPlaysMusicTrackWhenTouched] = bhvPlaysMusicTrackWhenTouched, + [id_bhvBetaBowserAnchor] = bhvBetaBowserAnchor, + [id_bhvStaticCheckeredPlatform] = bhvStaticCheckeredPlatform, + [id_bhvUnused2A10] = bhvUnused2A10, + [id_bhvUnusedFakeStar] = bhvUnusedFakeStar, + [id_bhvStaticObject] = bhvStaticObject, + [id_bhvUnused2A54] = bhvUnused2A54, + [id_bhvCastleFloorTrap] = bhvCastleFloorTrap, + [id_bhvFloorTrapInCastle] = bhvFloorTrapInCastle, + [id_bhvTree] = bhvTree, + [id_bhvSparkle] = bhvSparkle, + [id_bhvSparkleSpawn] = bhvSparkleSpawn, + [id_bhvSparkleParticleSpawner] = bhvSparkleParticleSpawner, + [id_bhvScuttlebug] = bhvScuttlebug, + [id_bhvScuttlebugSpawn] = bhvScuttlebugSpawn, + [id_bhvWhompKingBoss] = bhvWhompKingBoss, + [id_bhvSmallWhomp] = bhvSmallWhomp, + [id_bhvWaterSplash] = bhvWaterSplash, + [id_bhvWaterDroplet] = bhvWaterDroplet, + [id_bhvWaterDropletSplash] = bhvWaterDropletSplash, + [id_bhvBubbleSplash] = bhvBubbleSplash, + [id_bhvIdleWaterWave] = bhvIdleWaterWave, + [id_bhvObjectWaterSplash] = bhvObjectWaterSplash, + [id_bhvShallowWaterWave] = bhvShallowWaterWave, + [id_bhvShallowWaterSplash] = bhvShallowWaterSplash, + [id_bhvObjectWaveTrail] = bhvObjectWaveTrail, + [id_bhvWaveTrail] = bhvWaveTrail, + [id_bhvTinyStrongWindParticle] = bhvTinyStrongWindParticle, + [id_bhvStrongWindParticle] = bhvStrongWindParticle, + [id_bhvSLSnowmanWind] = bhvSLSnowmanWind, + [id_bhvSLWalkingPenguin] = bhvSLWalkingPenguin, + [id_bhvYellowBall] = bhvYellowBall, + [id_bhvMario] = bhvMario, + [id_bhvMario2] = bhvMario2, + [id_bhvToadMessage] = bhvToadMessage, + [id_bhvUnlockDoorStar] = bhvUnlockDoorStar, + [id_bhvRandomAnimatedTexture] = bhvRandomAnimatedTexture, + [id_bhvYellowBackgroundInMenu] = bhvYellowBackgroundInMenu, + [id_bhvMenuButton] = bhvMenuButton, + [id_bhvMenuButtonManager] = bhvMenuButtonManager, + [id_bhvActSelectorStarType] = bhvActSelectorStarType, + [id_bhvActSelector] = bhvActSelector, + [id_bhvMovingYellowCoin] = bhvMovingYellowCoin, + [id_bhvMovingBlueCoin] = bhvMovingBlueCoin, + [id_bhvBlueCoinSliding] = bhvBlueCoinSliding, + [id_bhvBlueCoinJumping] = bhvBlueCoinJumping, + [id_bhvSeaweed] = bhvSeaweed, + [id_bhvSeaweedBundle] = bhvSeaweedBundle, + [id_bhvBobomb] = bhvBobomb, + [id_bhvBobombFuseSmoke] = bhvBobombFuseSmoke, + [id_bhvBobombBuddy] = bhvBobombBuddy, + [id_bhvBobombBuddyOpensCannon] = bhvBobombBuddyOpensCannon, + [id_bhvCannonClosed] = bhvCannonClosed, + [id_bhvWhirlpool] = bhvWhirlpool, + [id_bhvJetStream] = bhvJetStream, + [id_bhvMessagePanel] = bhvMessagePanel, + [id_bhvSignOnWall] = bhvSignOnWall, + [id_bhvHomingAmp] = bhvHomingAmp, + [id_bhvCirclingAmp] = bhvCirclingAmp, + [id_bhvButterfly] = bhvButterfly, + [id_bhvHoot] = bhvHoot, + [id_bhvBetaHoldableObject] = bhvBetaHoldableObject, + [id_bhvCarrySomething1] = bhvCarrySomething1, + [id_bhvCarrySomething2] = bhvCarrySomething2, + [id_bhvCarrySomething3] = bhvCarrySomething3, + [id_bhvCarrySomething4] = bhvCarrySomething4, + [id_bhvCarrySomething5] = bhvCarrySomething5, + [id_bhvCarrySomething6] = bhvCarrySomething6, + [id_bhvObjectBubble] = bhvObjectBubble, + [id_bhvObjectWaterWave] = bhvObjectWaterWave, + [id_bhvExplosion] = bhvExplosion, + [id_bhvBobombBullyDeathSmoke] = bhvBobombBullyDeathSmoke, + [id_bhvSmoke] = bhvSmoke, + [id_bhvBobombExplosionBubble] = bhvBobombExplosionBubble, + [id_bhvRespawner] = bhvRespawner, + [id_bhvSmallBully] = bhvSmallBully, + [id_bhvBigBully] = bhvBigBully, + [id_bhvBigBullyWithMinions] = bhvBigBullyWithMinions, + [id_bhvSmallChillBully] = bhvSmallChillBully, + [id_bhvBigChillBully] = bhvBigChillBully, + [id_bhvJetStreamRingSpawner] = bhvJetStreamRingSpawner, + [id_bhvJetStreamWaterRing] = bhvJetStreamWaterRing, + [id_bhvMantaRayWaterRing] = bhvMantaRayWaterRing, + [id_bhvMantaRayRingManager] = bhvMantaRayRingManager, + [id_bhvBowserBomb] = bhvBowserBomb, + [id_bhvBowserBombExplosion] = bhvBowserBombExplosion, + [id_bhvBowserBombSmoke] = bhvBowserBombSmoke, + [id_bhvCelebrationStar] = bhvCelebrationStar, + [id_bhvCelebrationStarSparkle] = bhvCelebrationStarSparkle, + [id_bhvStarKeyCollectionPuffSpawner] = bhvStarKeyCollectionPuffSpawner, + [id_bhvLllDrawbridgeSpawner] = bhvLllDrawbridgeSpawner, + [id_bhvLllDrawbridge] = bhvLllDrawbridge, + [id_bhvSmallBomp] = bhvSmallBomp, + [id_bhvLargeBomp] = bhvLargeBomp, + [id_bhvWfSlidingPlatform] = bhvWfSlidingPlatform, + [id_bhvMoneybag] = bhvMoneybag, + [id_bhvMoneybagHidden] = bhvMoneybagHidden, + [id_bhvPitBowlingBall] = bhvPitBowlingBall, + [id_bhvFreeBowlingBall] = bhvFreeBowlingBall, + [id_bhvBowlingBall] = bhvBowlingBall, + [id_bhvTtmBowlingBallSpawner] = bhvTtmBowlingBallSpawner, + [id_bhvBobBowlingBallSpawner] = bhvBobBowlingBallSpawner, + [id_bhvThiBowlingBallSpawner] = bhvThiBowlingBallSpawner, + [id_bhvRrCruiserWing] = bhvRrCruiserWing, + [id_bhvSpindel] = bhvSpindel, + [id_bhvSslMovingPyramidWall] = bhvSslMovingPyramidWall, + [id_bhvPyramidElevator] = bhvPyramidElevator, + [id_bhvPyramidElevatorTrajectoryMarkerBall] = bhvPyramidElevatorTrajectoryMarkerBall, + [id_bhvPyramidTop] = bhvPyramidTop, + [id_bhvPyramidTopFragment] = bhvPyramidTopFragment, + [id_bhvPyramidPillarTouchDetector] = bhvPyramidPillarTouchDetector, + [id_bhvWaterfallSoundLoop] = bhvWaterfallSoundLoop, + [id_bhvVolcanoSoundLoop] = bhvVolcanoSoundLoop, + [id_bhvCastleFlagWaving] = bhvCastleFlagWaving, + [id_bhvBirdsSoundLoop] = bhvBirdsSoundLoop, + [id_bhvAmbientSounds] = bhvAmbientSounds, + [id_bhvSandSoundLoop] = bhvSandSoundLoop, + [id_bhvHiddenAt120Stars] = bhvHiddenAt120Stars, + [id_bhvSnowmansBottom] = bhvSnowmansBottom, + [id_bhvSnowmansHead] = bhvSnowmansHead, + [id_bhvSnowmansBodyCheckpoint] = bhvSnowmansBodyCheckpoint, + [id_bhvBigSnowmanWhole] = bhvBigSnowmanWhole, + [id_bhvBigBoulder] = bhvBigBoulder, + [id_bhvBigBoulderGenerator] = bhvBigBoulderGenerator, + [id_bhvWingCap] = bhvWingCap, + [id_bhvMetalCap] = bhvMetalCap, + [id_bhvNormalCap] = bhvNormalCap, + [id_bhvVanishCap] = bhvVanishCap, + [id_bhvStar] = bhvStar, + [id_bhvStarSpawnCoordinates] = bhvStarSpawnCoordinates, + [id_bhvHiddenRedCoinStar] = bhvHiddenRedCoinStar, + [id_bhvRedCoin] = bhvRedCoin, + [id_bhvBowserCourseRedCoinStar] = bhvBowserCourseRedCoinStar, + [id_bhvHiddenStar] = bhvHiddenStar, + [id_bhvHiddenStarTrigger] = bhvHiddenStarTrigger, + [id_bhvTtmRollingLog] = bhvTtmRollingLog, + [id_bhvLllVolcanoFallingTrap] = bhvLllVolcanoFallingTrap, + [id_bhvLllRollingLog] = bhvLllRollingLog, + [id_bhv1upWalking] = bhv1upWalking, + [id_bhv1upRunningAway] = bhv1upRunningAway, + [id_bhv1upSliding] = bhv1upSliding, + [id_bhv1Up] = bhv1Up, + [id_bhv1upJumpOnApproach] = bhv1upJumpOnApproach, + [id_bhvHidden1up] = bhvHidden1up, + [id_bhvHidden1upTrigger] = bhvHidden1upTrigger, + [id_bhvHidden1upInPole] = bhvHidden1upInPole, + [id_bhvHidden1upInPoleTrigger] = bhvHidden1upInPoleTrigger, + [id_bhvHidden1upInPoleSpawner] = bhvHidden1upInPoleSpawner, + [id_bhvControllablePlatform] = bhvControllablePlatform, + [id_bhvControllablePlatformSub] = bhvControllablePlatformSub, + [id_bhvBreakableBoxSmall] = bhvBreakableBoxSmall, + [id_bhvSlidingSnowMound] = bhvSlidingSnowMound, + [id_bhvSnowMoundSpawn] = bhvSnowMoundSpawn, + [id_bhvWdwSquareFloatingPlatform] = bhvWdwSquareFloatingPlatform, + [id_bhvWdwRectangularFloatingPlatform] = bhvWdwRectangularFloatingPlatform, + [id_bhvJrbFloatingPlatform] = bhvJrbFloatingPlatform, + [id_bhvArrowLift] = bhvArrowLift, + [id_bhvOrangeNumber] = bhvOrangeNumber, + [id_bhvMantaRay] = bhvMantaRay, + [id_bhvFallingPillar] = bhvFallingPillar, + [id_bhvFallingPillarHitbox] = bhvFallingPillarHitbox, + [id_bhvPillarBase] = bhvPillarBase, + [id_bhvJrbFloatingBox] = bhvJrbFloatingBox, + [id_bhvDecorativePendulum] = bhvDecorativePendulum, + [id_bhvTreasureChestsShip] = bhvTreasureChestsShip, + [id_bhvTreasureChestsJrb] = bhvTreasureChestsJrb, + [id_bhvTreasureChests] = bhvTreasureChests, + [id_bhvTreasureChestBottom] = bhvTreasureChestBottom, + [id_bhvTreasureChestTop] = bhvTreasureChestTop, + [id_bhvMips] = bhvMips, + [id_bhvYoshi] = bhvYoshi, + [id_bhvKoopa] = bhvKoopa, + [id_bhvKoopaRaceEndpoint] = bhvKoopaRaceEndpoint, + [id_bhvKoopaFlag] = bhvKoopaFlag, + [id_bhvPokey] = bhvPokey, + [id_bhvPokeyBodyPart] = bhvPokeyBodyPart, + [id_bhvSwoop] = bhvSwoop, + [id_bhvFlyGuy] = bhvFlyGuy, + [id_bhvGoomba] = bhvGoomba, + [id_bhvGoombaTripletSpawner] = bhvGoombaTripletSpawner, + [id_bhvChainChomp] = bhvChainChomp, + [id_bhvChainChompChainPart] = bhvChainChompChainPart, + [id_bhvWoodenPost] = bhvWoodenPost, + [id_bhvChainChompGate] = bhvChainChompGate, + [id_bhvWigglerHead] = bhvWigglerHead, + [id_bhvWigglerBody] = bhvWigglerBody, + [id_bhvEnemyLakitu] = bhvEnemyLakitu, + [id_bhvCameraLakitu] = bhvCameraLakitu, + [id_bhvCloud] = bhvCloud, + [id_bhvCloudPart] = bhvCloudPart, + [id_bhvSpiny] = bhvSpiny, + [id_bhvMontyMole] = bhvMontyMole, + [id_bhvMontyMoleHole] = bhvMontyMoleHole, + [id_bhvMontyMoleRock] = bhvMontyMoleRock, + [id_bhvPlatformOnTrack] = bhvPlatformOnTrack, + [id_bhvTrackBall] = bhvTrackBall, + [id_bhvSeesawPlatform] = bhvSeesawPlatform, + [id_bhvFerrisWheelAxle] = bhvFerrisWheelAxle, + [id_bhvFerrisWheelPlatform] = bhvFerrisWheelPlatform, + [id_bhvWaterBombSpawner] = bhvWaterBombSpawner, + [id_bhvWaterBomb] = bhvWaterBomb, + [id_bhvWaterBombShadow] = bhvWaterBombShadow, + [id_bhvTTCRotatingSolid] = bhvTTCRotatingSolid, + [id_bhvTTCPendulum] = bhvTTCPendulum, + [id_bhvTTCTreadmill] = bhvTTCTreadmill, + [id_bhvTTCMovingBar] = bhvTTCMovingBar, + [id_bhvTTCCog] = bhvTTCCog, + [id_bhvTTCPitBlock] = bhvTTCPitBlock, + [id_bhvTTCElevator] = bhvTTCElevator, + [id_bhvTTC2DRotator] = bhvTTC2DRotator, + [id_bhvTTCSpinner] = bhvTTCSpinner, + [id_bhvMrBlizzard] = bhvMrBlizzard, + [id_bhvMrBlizzardSnowball] = bhvMrBlizzardSnowball, + [id_bhvSlidingPlatform2] = bhvSlidingPlatform2, + [id_bhvOctagonalPlatformRotating] = bhvOctagonalPlatformRotating, + [id_bhvAnimatesOnFloorSwitchPress] = bhvAnimatesOnFloorSwitchPress, + [id_bhvActivatedBackAndForthPlatform] = bhvActivatedBackAndForthPlatform, + [id_bhvRecoveryHeart] = bhvRecoveryHeart, + [id_bhvWaterBombCannon] = bhvWaterBombCannon, + [id_bhvCannonBarrelBubbles] = bhvCannonBarrelBubbles, + [id_bhvUnagi] = bhvUnagi, + [id_bhvUnagiSubobject] = bhvUnagiSubobject, + [id_bhvDorrie] = bhvDorrie, + [id_bhvHauntedChair] = bhvHauntedChair, + [id_bhvMadPiano] = bhvMadPiano, + [id_bhvFlyingBookend] = bhvFlyingBookend, + [id_bhvBookendSpawn] = bhvBookendSpawn, + [id_bhvHauntedBookshelfManager] = bhvHauntedBookshelfManager, + [id_bhvBookSwitch] = bhvBookSwitch, + [id_bhvFirePiranhaPlant] = bhvFirePiranhaPlant, + [id_bhvSmallPiranhaFlame] = bhvSmallPiranhaFlame, + [id_bhvFireSpitter] = bhvFireSpitter, + [id_bhvFlyguyFlame] = bhvFlyguyFlame, + [id_bhvSnufit] = bhvSnufit, + [id_bhvSnufitBalls] = bhvSnufitBalls, + [id_bhvHorizontalGrindel] = bhvHorizontalGrindel, + [id_bhvEyerokBoss] = bhvEyerokBoss, + [id_bhvEyerokHand] = bhvEyerokHand, + [id_bhvKlepto] = bhvKlepto, + [id_bhvBird] = bhvBird, + [id_bhvRacingPenguin] = bhvRacingPenguin, + [id_bhvPenguinRaceFinishLine] = bhvPenguinRaceFinishLine, + [id_bhvPenguinRaceShortcutCheck] = bhvPenguinRaceShortcutCheck, + [id_bhvCoffinSpawner] = bhvCoffinSpawner, + [id_bhvCoffin] = bhvCoffin, + [id_bhvClamShell] = bhvClamShell, + [id_bhvSkeeter] = bhvSkeeter, + [id_bhvSkeeterWave] = bhvSkeeterWave, + [id_bhvSwingPlatform] = bhvSwingPlatform, + [id_bhvDonutPlatformSpawner] = bhvDonutPlatformSpawner, + [id_bhvDonutPlatform] = bhvDonutPlatform, + [id_bhvDDDPole] = bhvDDDPole, + [id_bhvRedCoinStarMarker] = bhvRedCoinStarMarker, + [id_bhvTripletButterfly] = bhvTripletButterfly, + [id_bhvBubba] = bhvBubba, + [id_bhvBeginningLakitu] = bhvBeginningLakitu, + [id_bhvBeginningPeach] = bhvBeginningPeach, + [id_bhvEndBirds1] = bhvEndBirds1, + [id_bhvEndBirds2] = bhvEndBirds2, + [id_bhvIntroScene] = bhvIntroScene, +}; + + +enum BehaviorId get_id_from_behavior(const BehaviorScript* behavior) { + return (enum BehaviorId)(behavior[1] & 0xFFFF); +} + +const BehaviorScript* get_behavior_from_id(enum BehaviorId id) { + return gBehaviorTable[id]; +} diff --git a/include/behavior_table.h b/include/behavior_table.h new file mode 100644 index 000000000..facc9a918 --- /dev/null +++ b/include/behavior_table.h @@ -0,0 +1,529 @@ +#ifndef BEHAVIOR_TABLE_H +#define BEHAVIOR_TABLE_H + +#include "behavior_data.h" + +extern const BehaviorScript* gBehaviorTable[]; + +enum BehaviorId { + id_bhvStarDoor, + id_bhvMrI, + id_bhvMrIBody, + id_bhvMrIParticle, + id_bhvPurpleParticle, + id_bhvGiantPole, + id_bhvPoleGrabbing, + id_bhvThiHugeIslandTop, + id_bhvThiTinyIslandTop, + id_bhvCapSwitchBase, + id_bhvCapSwitch, + id_bhvKingBobomb, + id_bhvBobombAnchorMario, + id_bhvBetaChestBottom, + id_bhvBetaChestLid, + id_bhvBubbleParticleSpawner, + id_bhvBubbleMaybe, + id_bhvSmallWaterWave, + id_bhvWaterAirBubble, + id_bhvSmallParticle, + id_bhvPlungeBubble, + id_bhvSmallParticleSnow, + id_bhvSmallParticleBubbles, + id_bhvFishGroup, + id_bhvCannon, + id_bhvCannonBarrel, + id_bhvCannonBaseUnused, + id_bhvChuckya, + id_bhvChuckyaAnchorMario, + id_bhvUnused05A8, + id_bhvRotatingPlatform, + id_bhvTower, + id_bhvBulletBillCannon, + id_bhvWfBreakableWallRight, + id_bhvWfBreakableWallLeft, + id_bhvKickableBoard, + id_bhvTowerDoor, + id_bhvRotatingCounterClockwise, + id_bhvWfRotatingWoodenPlatform, + id_bhvKoopaShellUnderwater, + id_bhvExitPodiumWarp, + id_bhvFadingWarp, + id_bhvWarp, + id_bhvWarpPipe, + id_bhvWhitePuffExplosion, + id_bhvSpawnedStar, + id_bhvSpawnedStarNoLevelExit, + id_bhvMrIBlueCoin, + id_bhvCoinInsideBoo, + id_bhvCoinFormationSpawn, + id_bhvCoinFormation, + id_bhvOneCoin, + id_bhvYellowCoin, + id_bhvTemporaryYellowCoin, + id_bhvThreeCoinsSpawn, + id_bhvTenCoinsSpawn, + id_bhvSingleCoinGetsSpawned, + id_bhvCoinSparkles, + id_bhvGoldenCoinSparkles, + id_bhvWallTinyStarParticle, + id_bhvVertStarParticleSpawner, + id_bhvPoundTinyStarParticle, + id_bhvHorStarParticleSpawner, + id_bhvPunchTinyTriangle, + id_bhvTriangleParticleSpawner, + id_bhvDoorWarp, + id_bhvDoor, + id_bhvGrindel, + id_bhvThwomp2, + id_bhvThwomp, + id_bhvTumblingBridgePlatform, + id_bhvWfTumblingBridge, + id_bhvBbhTumblingBridge, + id_bhvLllTumblingBridge, + id_bhvFlame, + id_bhvAnotherElavator, + id_bhvRrElevatorPlatform, + id_bhvHmcElevatorPlatform, + id_bhvWaterMist, + id_bhvBreathParticleSpawner, + id_bhvBreakBoxTriangle, + id_bhvWaterMist2, + id_bhvUnused0DFC, + id_bhvMistCircParticleSpawner, + id_bhvDirtParticleSpawner, + id_bhvSnowParticleSpawner, + id_bhvWind, + id_bhvEndToad, + id_bhvEndPeach, + id_bhvUnusedParticleSpawn, + id_bhvUkiki, + id_bhvUkikiCageChild, + id_bhvUkikiCageStar, + id_bhvUkikiCage, + id_bhvBitfsSinkingPlatforms, + id_bhvBitfsSinkingCagePlatform, + id_bhvDddMovingPole, + id_bhvBitfsTiltingInvertedPyramid, + id_bhvSquishablePlatform, + id_bhvCutOutObject, + id_bhvBetaMovingFlames, + id_bhvRrRotatingBridgePlatform, + id_bhvFlamethrower, + id_bhvFlamethrowerFlame, + id_bhvBouncingFireball, + id_bhvBouncingFireballFlame, + id_bhvBowserShockWave, + id_bhvFireParticleSpawner, + id_bhvBlackSmokeMario, + id_bhvBlackSmokeBowser, + id_bhvBlackSmokeUpward, + id_bhvBetaFishSplashSpawner, + id_bhvSpindrift, + id_bhvTowerPlatformGroup, + id_bhvWfSlidingTowerPlatform, + id_bhvWfElevatorTowerPlatform, + id_bhvWfSolidTowerPlatform, + id_bhvLeafParticleSpawner, + id_bhvTreeSnow, + id_bhvTreeLeaf, + id_bhvAnotherTiltingPlatform, + id_bhvSquarishPathMoving, + id_bhvPiranhaPlantBubble, + id_bhvPiranhaPlantWakingBubbles, + id_bhvFloorSwitchAnimatesObject, + id_bhvFloorSwitchGrills, + id_bhvFloorSwitchHardcodedModel, + id_bhvFloorSwitchHiddenObjects, + id_bhvHiddenObject, + id_bhvBreakableBox, + id_bhvPushableMetalBox, + id_bhvHeaveHo, + id_bhvHeaveHoThrowMario, + id_bhvCcmTouchedStarSpawn, + id_bhvUnusedPoundablePlatform, + id_bhvBetaTrampolineTop, + id_bhvBetaTrampolineSpring, + id_bhvJumpingBox, + id_bhvBooCage, + id_bhvStub, + id_bhvIgloo, + id_bhvBowserKey, + id_bhvGrandStar, + id_bhvBetaBooKey, + id_bhvAlphaBooKey, + id_bhvBulletBill, + id_bhvWhitePuffSmoke, + id_bhvUnused1820, + id_bhvBowserTailAnchor, + id_bhvBowser, + id_bhvBowserBodyAnchor, + id_bhvBowserFlameSpawn, + id_bhvTiltingBowserLavaPlatform, + id_bhvFallingBowserPlatform, + id_bhvBlueBowserFlame, + id_bhvFlameFloatingLanding, + id_bhvBlueFlamesGroup, + id_bhvFlameBouncing, + id_bhvFlameMovingForwardGrowing, + id_bhvFlameBowser, + id_bhvFlameLargeBurningOut, + id_bhvBlueFish, + id_bhvTankFishGroup, + id_bhvCheckerboardElevatorGroup, + id_bhvCheckerboardPlatformSub, + id_bhvBowserKeyUnlockDoor, + id_bhvBowserKeyCourseExit, + id_bhvInvisibleObjectsUnderBridge, + id_bhvWaterLevelPillar, + id_bhvDddWarp, + id_bhvMoatGrills, + id_bhvClockMinuteHand, + id_bhvClockHourHand, + id_bhvMacroUkiki, + id_bhvStub1D0C, + id_bhvLllRotatingHexagonalPlatform, + id_bhvLllSinkingRockBlock, + id_bhvStub1D70, + id_bhvLllMovingOctagonalMeshPlatform, + id_bhvLllRotatingBlockWithFireBars, + id_bhvLllRotatingHexFlame, + id_bhvLllWoodPiece, + id_bhvLllFloatingWoodBridge, + id_bhvVolcanoFlames, + id_bhvLllRotatingHexagonalRing, + id_bhvLllSinkingRectangularPlatform, + id_bhvLllSinkingSquarePlatforms, + id_bhvLllTiltingInvertedPyramid, + id_bhvUnused1F30, + id_bhvKoopaShell, + id_bhvKoopaShellFlame, + id_bhvToxBox, + id_bhvPiranhaPlant, + id_bhvLllHexagonalMesh, + id_bhvLllBowserPuzzlePiece, + id_bhvLllBowserPuzzle, + id_bhvTuxiesMother, + id_bhvPenguinBaby, + id_bhvUnused20E0, + id_bhvSmallPenguin, + id_bhvFish2, + id_bhvFish3, + id_bhvLargeFishGroup, + id_bhvFish, + id_bhvWdwExpressElevator, + id_bhvWdwExpressElevatorPlatform, + id_bhvChirpChirp, + id_bhvBub, + id_bhvExclamationBox, + id_bhvRotatingExclamationMark, + id_bhvSoundSpawner, + id_bhvRockSolid, + id_bhvBowserSubDoor, + id_bhvBowsersSub, + id_bhvSushiShark, + id_bhvSushiSharkCollisionChild, + id_bhvJrbSlidingBox, + id_bhvShipPart3, + id_bhvInSunkenShip3, + id_bhvSunkenShipPart, + id_bhvSunkenShipPart2, + id_bhvInSunkenShip, + id_bhvInSunkenShip2, + id_bhvMistParticleSpawner, + id_bhvWhitePuff1, + id_bhvWhitePuff2, + id_bhvWhitePuffSmoke2, + id_bhvPurpleSwitchHiddenBoxes, + id_bhvBlueCoinSwitch, + id_bhvHiddenBlueCoin, + id_bhvOpenableCageDoor, + id_bhvOpenableGrill, + id_bhvWaterLevelDiamond, + id_bhvInitializeChangingWaterLevel, + id_bhvTweesterSandParticle, + id_bhvTweester, + id_bhvMerryGoRoundBooManager, + id_bhvAnimatedTexture, + id_bhvBooInCastle, + id_bhvBooWithCage, + id_bhvBalconyBigBoo, + id_bhvMerryGoRoundBigBoo, + id_bhvGhostHuntBigBoo, + id_bhvCourtyardBooTriplet, + id_bhvBoo, + id_bhvMerryGoRoundBoo, + id_bhvGhostHuntBoo, + id_bhvHiddenStaircaseStep, + id_bhvBooBossSpawnedBridge, + id_bhvBbhTiltingTrapPlatform, + id_bhvHauntedBookshelf, + id_bhvMeshElevator, + id_bhvMerryGoRound, + id_bhvPlaysMusicTrackWhenTouched, + id_bhvBetaBowserAnchor, + id_bhvStaticCheckeredPlatform, + id_bhvUnused2A10, + id_bhvUnusedFakeStar, + id_bhvStaticObject, + id_bhvUnused2A54, + id_bhvCastleFloorTrap, + id_bhvFloorTrapInCastle, + id_bhvTree, + id_bhvSparkle, + id_bhvSparkleSpawn, + id_bhvSparkleParticleSpawner, + id_bhvScuttlebug, + id_bhvScuttlebugSpawn, + id_bhvWhompKingBoss, + id_bhvSmallWhomp, + id_bhvWaterSplash, + id_bhvWaterDroplet, + id_bhvWaterDropletSplash, + id_bhvBubbleSplash, + id_bhvIdleWaterWave, + id_bhvObjectWaterSplash, + id_bhvShallowWaterWave, + id_bhvShallowWaterSplash, + id_bhvObjectWaveTrail, + id_bhvWaveTrail, + id_bhvTinyStrongWindParticle, + id_bhvStrongWindParticle, + id_bhvSLSnowmanWind, + id_bhvSLWalkingPenguin, + id_bhvYellowBall, + id_bhvMario, + id_bhvMario2, + id_bhvToadMessage, + id_bhvUnlockDoorStar, + id_bhvRandomAnimatedTexture, + id_bhvYellowBackgroundInMenu, + id_bhvMenuButton, + id_bhvMenuButtonManager, + id_bhvActSelectorStarType, + id_bhvActSelector, + id_bhvMovingYellowCoin, + id_bhvMovingBlueCoin, + id_bhvBlueCoinSliding, + id_bhvBlueCoinJumping, + id_bhvSeaweed, + id_bhvSeaweedBundle, + id_bhvBobomb, + id_bhvBobombFuseSmoke, + id_bhvBobombBuddy, + id_bhvBobombBuddyOpensCannon, + id_bhvCannonClosed, + id_bhvWhirlpool, + id_bhvJetStream, + id_bhvMessagePanel, + id_bhvSignOnWall, + id_bhvHomingAmp, + id_bhvCirclingAmp, + id_bhvButterfly, + id_bhvHoot, + id_bhvBetaHoldableObject, + id_bhvCarrySomething1, + id_bhvCarrySomething2, + id_bhvCarrySomething3, + id_bhvCarrySomething4, + id_bhvCarrySomething5, + id_bhvCarrySomething6, + id_bhvObjectBubble, + id_bhvObjectWaterWave, + id_bhvExplosion, + id_bhvBobombBullyDeathSmoke, + id_bhvSmoke, + id_bhvBobombExplosionBubble, + id_bhvRespawner, + id_bhvSmallBully, + id_bhvBigBully, + id_bhvBigBullyWithMinions, + id_bhvSmallChillBully, + id_bhvBigChillBully, + id_bhvJetStreamRingSpawner, + id_bhvJetStreamWaterRing, + id_bhvMantaRayWaterRing, + id_bhvMantaRayRingManager, + id_bhvBowserBomb, + id_bhvBowserBombExplosion, + id_bhvBowserBombSmoke, + id_bhvCelebrationStar, + id_bhvCelebrationStarSparkle, + id_bhvStarKeyCollectionPuffSpawner, + id_bhvLllDrawbridgeSpawner, + id_bhvLllDrawbridge, + id_bhvSmallBomp, + id_bhvLargeBomp, + id_bhvWfSlidingPlatform, + id_bhvMoneybag, + id_bhvMoneybagHidden, + id_bhvPitBowlingBall, + id_bhvFreeBowlingBall, + id_bhvBowlingBall, + id_bhvTtmBowlingBallSpawner, + id_bhvBobBowlingBallSpawner, + id_bhvThiBowlingBallSpawner, + id_bhvRrCruiserWing, + id_bhvSpindel, + id_bhvSslMovingPyramidWall, + id_bhvPyramidElevator, + id_bhvPyramidElevatorTrajectoryMarkerBall, + id_bhvPyramidTop, + id_bhvPyramidTopFragment, + id_bhvPyramidPillarTouchDetector, + id_bhvWaterfallSoundLoop, + id_bhvVolcanoSoundLoop, + id_bhvCastleFlagWaving, + id_bhvBirdsSoundLoop, + id_bhvAmbientSounds, + id_bhvSandSoundLoop, + id_bhvHiddenAt120Stars, + id_bhvSnowmansBottom, + id_bhvSnowmansHead, + id_bhvSnowmansBodyCheckpoint, + id_bhvBigSnowmanWhole, + id_bhvBigBoulder, + id_bhvBigBoulderGenerator, + id_bhvWingCap, + id_bhvMetalCap, + id_bhvNormalCap, + id_bhvVanishCap, + id_bhvStar, + id_bhvStarSpawnCoordinates, + id_bhvHiddenRedCoinStar, + id_bhvRedCoin, + id_bhvBowserCourseRedCoinStar, + id_bhvHiddenStar, + id_bhvHiddenStarTrigger, + id_bhvTtmRollingLog, + id_bhvLllVolcanoFallingTrap, + id_bhvLllRollingLog, + id_bhv1upWalking, + id_bhv1upRunningAway, + id_bhv1upSliding, + id_bhv1Up, + id_bhv1upJumpOnApproach, + id_bhvHidden1up, + id_bhvHidden1upTrigger, + id_bhvHidden1upInPole, + id_bhvHidden1upInPoleTrigger, + id_bhvHidden1upInPoleSpawner, + id_bhvControllablePlatform, + id_bhvControllablePlatformSub, + id_bhvBreakableBoxSmall, + id_bhvSlidingSnowMound, + id_bhvSnowMoundSpawn, + id_bhvWdwSquareFloatingPlatform, + id_bhvWdwRectangularFloatingPlatform, + id_bhvJrbFloatingPlatform, + id_bhvArrowLift, + id_bhvOrangeNumber, + id_bhvMantaRay, + id_bhvFallingPillar, + id_bhvFallingPillarHitbox, + id_bhvPillarBase, + id_bhvJrbFloatingBox, + id_bhvDecorativePendulum, + id_bhvTreasureChestsShip, + id_bhvTreasureChestsJrb, + id_bhvTreasureChests, + id_bhvTreasureChestBottom, + id_bhvTreasureChestTop, + id_bhvMips, + id_bhvYoshi, + id_bhvKoopa, + id_bhvKoopaRaceEndpoint, + id_bhvKoopaFlag, + id_bhvPokey, + id_bhvPokeyBodyPart, + id_bhvSwoop, + id_bhvFlyGuy, + id_bhvGoomba, + id_bhvGoombaTripletSpawner, + id_bhvChainChomp, + id_bhvChainChompChainPart, + id_bhvWoodenPost, + id_bhvChainChompGate, + id_bhvWigglerHead, + id_bhvWigglerBody, + id_bhvEnemyLakitu, + id_bhvCameraLakitu, + id_bhvCloud, + id_bhvCloudPart, + id_bhvSpiny, + id_bhvMontyMole, + id_bhvMontyMoleHole, + id_bhvMontyMoleRock, + id_bhvPlatformOnTrack, + id_bhvTrackBall, + id_bhvSeesawPlatform, + id_bhvFerrisWheelAxle, + id_bhvFerrisWheelPlatform, + id_bhvWaterBombSpawner, + id_bhvWaterBomb, + id_bhvWaterBombShadow, + id_bhvTTCRotatingSolid, + id_bhvTTCPendulum, + id_bhvTTCTreadmill, + id_bhvTTCMovingBar, + id_bhvTTCCog, + id_bhvTTCPitBlock, + id_bhvTTCElevator, + id_bhvTTC2DRotator, + id_bhvTTCSpinner, + id_bhvMrBlizzard, + id_bhvMrBlizzardSnowball, + id_bhvSlidingPlatform2, + id_bhvOctagonalPlatformRotating, + id_bhvAnimatesOnFloorSwitchPress, + id_bhvActivatedBackAndForthPlatform, + id_bhvRecoveryHeart, + id_bhvWaterBombCannon, + id_bhvCannonBarrelBubbles, + id_bhvUnagi, + id_bhvUnagiSubobject, + id_bhvDorrie, + id_bhvHauntedChair, + id_bhvMadPiano, + id_bhvFlyingBookend, + id_bhvBookendSpawn, + id_bhvHauntedBookshelfManager, + id_bhvBookSwitch, + id_bhvFirePiranhaPlant, + id_bhvSmallPiranhaFlame, + id_bhvFireSpitter, + id_bhvFlyguyFlame, + id_bhvSnufit, + id_bhvSnufitBalls, + id_bhvHorizontalGrindel, + id_bhvEyerokBoss, + id_bhvEyerokHand, + id_bhvKlepto, + id_bhvBird, + id_bhvRacingPenguin, + id_bhvPenguinRaceFinishLine, + id_bhvPenguinRaceShortcutCheck, + id_bhvCoffinSpawner, + id_bhvCoffin, + id_bhvClamShell, + id_bhvSkeeter, + id_bhvSkeeterWave, + id_bhvSwingPlatform, + id_bhvDonutPlatformSpawner, + id_bhvDonutPlatform, + id_bhvDDDPole, + id_bhvRedCoinStarMarker, + id_bhvTripletButterfly, + id_bhvBubba, + id_bhvBeginningLakitu, + id_bhvBeginningPeach, + id_bhvEndBirds1, + id_bhvEndBirds2, + id_bhvIntroScene, + id_bhv_max_count // must be the last in the list +}; + + +enum BehaviorId get_id_from_behavior(const BehaviorScript* behavior); +const BehaviorScript* get_behavior_from_id(enum BehaviorId id); + +#endif diff --git a/src/engine/behavior_script.c b/src/engine/behavior_script.c index 40bda1ed4..1537684e7 100644 --- a/src/engine/behavior_script.c +++ b/src/engine/behavior_script.c @@ -880,6 +880,13 @@ static s32 bhv_cmd_animate_texture(void) { return BHV_PROC_CONTINUE; } +// Command 0x39: Defines the id of the behavior script, used for synchronization +// Usage: ID(index) +static s32 bhv_cmd_id(void) { + gCurBhvCommand++; + return BHV_PROC_CONTINUE; +} + void stub_behavior_script_2(void) { } @@ -941,7 +948,8 @@ static BhvCommandProc BehaviorCmdTable[] = { bhv_cmd_disable_rendering, //35 bhv_cmd_set_int_unused, //36 bhv_cmd_spawn_water_droplet, //37 - bhv_cmd_cylboard //38 + bhv_cmd_cylboard, //38 + bhv_cmd_id //38 }; // Execute the behavior script of the current object, process the object flags, and other miscellaneous code for updating objects. diff --git a/src/pc/network/network.c b/src/pc/network/network.c index 5d2e496d9..1a9b4fe4d 100644 --- a/src/pc/network/network.c +++ b/src/pc/network/network.c @@ -5,8 +5,9 @@ #include "socket/socket.h" enum NetworkType networkType; -SOCKET gSocket; -unsigned short txPort; +static SOCKET gSocket; +static char* txIp = "127.0.0.1"; +static unsigned short txPort; void network_init(enum NetworkType inNetworkType) { networkType = inNetworkType; @@ -38,7 +39,7 @@ void network_send(struct Packet* p) { memcpy(&p->buffer[p->dataLength], &hash, sizeof(u32)); // send - int rc = socket_send(gSocket, "127.0.0.1", txPort, p->buffer, p->cursor + sizeof(u32)); + int rc = socket_send(gSocket, txIp, txPort, p->buffer, p->cursor + sizeof(u32)); if (rc != NO_ERROR) { return; } p->sent = true; } diff --git a/src/pc/network/packets/packet_collect_coin.c b/src/pc/network/packets/packet_collect_coin.c index db8f2d500..33f9da2ef 100644 --- a/src/pc/network/packets/packet_collect_coin.c +++ b/src/pc/network/packets/packet_collect_coin.c @@ -2,6 +2,7 @@ #include "../network.h" #include "object_fields.h" #include "object_constants.h" +#include "behavior_table.h" #include "course_table.h" #include "src/game/interaction.h" #include "src/engine/math_util.h" @@ -46,11 +47,12 @@ static struct Object* find_nearest_coin(const BehaviorScript *behavior, f32* pos } void network_send_collect_coin(struct Object* o) { + enum BehaviorId behaviorId = get_id_from_behavior(o->behavior); + struct Packet p; packet_init(&p, PACKET_COLLECT_COIN, true); - packet_write(&p, &localCoinId, sizeof(u8)); - packet_write(&p, &o->behavior, sizeof(void*)); + packet_write(&p, &behaviorId, sizeof(enum BehaviorId)); packet_write(&p, &o->oPosX, sizeof(f32) * 3); packet_write(&p, &gMarioStates[0].numCoins, sizeof(s16)); packet_write(&p, &o->oDamageOrCoinValue, sizeof(s32)); @@ -61,17 +63,20 @@ void network_send_collect_coin(struct Object* o) { void network_receive_collect_coin(struct Packet* p) { u8 remoteCoinId = 0; + enum BehaviorId behaviorId; void* behavior = NULL; f32 pos[3] = { 0 }; s16 numCoins = 0; s32 coinValue = 0; packet_read(p, &remoteCoinId, sizeof(u8)); - packet_read(p, &behavior, sizeof(void*)); + packet_read(p, &behaviorId, sizeof(enum BehaviorId)); packet_read(p, &pos, sizeof(f32) * 3); packet_read(p, &numCoins, sizeof(s16)); packet_read(p, &coinValue, sizeof(s32)); + behavior = get_behavior_from_id(behaviorId); + // check if remote coin id has already been seen for (int i = 0; i < MAX_REMOTE_COIN_IDS; i++) { if (remoteCoinIds[i] == remoteCoinId) { diff --git a/src/pc/network/packets/packet_collect_star.c b/src/pc/network/packets/packet_collect_star.c index c467bb51d..f81af50db 100644 --- a/src/pc/network/packets/packet_collect_star.c +++ b/src/pc/network/packets/packet_collect_star.c @@ -1,5 +1,6 @@ #include #include "../network.h" +#include "behavior_table.h" #include "course_table.h" #include "object_fields.h" #include "object_constants.h" @@ -40,13 +41,15 @@ static struct Object* find_nearest_star(const BehaviorScript* behavior, f32* pos } void network_send_collect_star(struct Object* o, s16 coinScore, s16 starIndex) { + enum BehaviorId behaviorId = get_id_from_behavior(o->behavior); + struct Packet p; packet_init(&p, PACKET_COLLECT_STAR, true); packet_write(&p, &gCurrSaveFileNum, sizeof(s16)); packet_write(&p, &gCurrCourseNum, sizeof(s16)); packet_write(&p, &o->oPosX, sizeof(u32) * 3); - packet_write(&p, &o->behavior, sizeof(void*)); + packet_write(&p, &behaviorId, sizeof(enum BehaviorId)); packet_write(&p, &coinScore, sizeof(s16)); packet_write(&p, &starIndex, sizeof(s16)); @@ -55,6 +58,7 @@ void network_send_collect_star(struct Object* o, s16 coinScore, s16 starIndex) { void network_receive_collect_star(struct Packet* p) { u32 pos[3] = { 0 }; + enum BehaviorId behaviorId; void* behavior = NULL; s16 coinScore, starIndex; s16 lastSaveFileNum = gCurrSaveFileNum; @@ -63,10 +67,12 @@ void network_receive_collect_star(struct Packet* p) { packet_read(p, &gCurrSaveFileNum, sizeof(s16)); packet_read(p, &gCurrCourseNum, sizeof(s16)); packet_read(p, &pos, sizeof(u32) * 3); - packet_read(p, &behavior, sizeof(void*)); + packet_read(p, &behaviorId, sizeof(enum BehaviorId)); packet_read(p, &coinScore, sizeof(s16)); packet_read(p, &starIndex, sizeof(s16)); + behavior = get_behavior_from_id(behaviorId); + save_file_collect_star_or_key(coinScore, starIndex); s32 numStars = save_file_get_total_star_count(gCurrSaveFileNum - 1, COURSE_MIN - 1, COURSE_MAX - 1); diff --git a/src/pc/network/packets/packet_object.c b/src/pc/network/packets/packet_object.c index 48589d505..4f3463258 100644 --- a/src/pc/network/packets/packet_object.c +++ b/src/pc/network/packets/packet_object.c @@ -4,6 +4,7 @@ #include "object_fields.h" #include "object_constants.h" #include "behavior_data.h" +#include "behavior_table.h" u8 nextSyncID = 1; struct SyncObject syncObjects[MAX_SYNC_OBJECTS] = { 0 }; @@ -62,12 +63,14 @@ void network_send_object(struct Object* o) { so->onEventId++; + enum BehaviorId behaviorId = get_id_from_behavior(o->behavior); bool reliable = (o->activeFlags == ACTIVE_FLAG_DEACTIVATED || so->maxSyncDistance == SYNC_DISTANCE_ONLY_EVENTS); + struct Packet p; packet_init(&p, PACKET_OBJECT, reliable); packet_write(&p, &o->oSyncID, 4); packet_write(&p, &so->onEventId, sizeof(u16)); - packet_write(&p, &so->behavior, sizeof(void*)); + packet_write(&p, &behaviorId, sizeof(enum BehaviorId)); if (so->maxSyncDistance != SYNC_DISTANCE_ONLY_EVENTS) { packet_write(&p, &o->activeFlags, sizeof(s16)); @@ -135,7 +138,9 @@ void network_receive_object(struct Packet* p) { so->onEventId = eventId; // make sure the behaviors match - packet_read(p, &so->behavior, sizeof(void*)); + enum BehaviorId behaviorId; + packet_read(p, &behaviorId, sizeof(enum BehaviorId)); + so->behavior = get_behavior_from_id(behaviorId); if (o->behavior != so->behavior) { printf("network_receive_object() BEHAVIOR MISMATCH!\n"); forget_sync_object(so); diff --git a/src/pc/network/packets/packet_spawn_objects.c b/src/pc/network/packets/packet_spawn_objects.c index 766a8b280..bcd00e225 100644 --- a/src/pc/network/packets/packet_spawn_objects.c +++ b/src/pc/network/packets/packet_spawn_objects.c @@ -3,6 +3,7 @@ #include "object_fields.h" #include "object_constants.h" #include "behavior_data.h" +#include "behavior_table.h" static u8 localSpawnId = 1; @@ -17,7 +18,7 @@ static u8 onRemoteSpawnId = 0; struct SpawnObjectData { u8 parentId; u32 model; - void* behavior; + enum BehaviorId behaviorId; s16 activeFlags; s32 rawData[80]; }; @@ -49,9 +50,10 @@ void network_send_spawn_objects(struct Object* objects[], u32 models[], u8 objec struct Object* o = objects[i]; u32 model = models[i]; u8 parentId = generate_parent_id(objects, i); + enum BehaviorId behaviorId = get_id_from_behavior(o->behavior); packet_write(&p, &parentId, sizeof(u8)); packet_write(&p, &model, sizeof(u32)); - packet_write(&p, &o->behavior, sizeof(void*)); + packet_write(&p, &behaviorId, sizeof(enum BehaviorId)); packet_write(&p, &o->activeFlags, sizeof(s16)); packet_write(&p, o->rawData.asU32, sizeof(s32) * 80); assert(o->oSyncID == 0); @@ -86,7 +88,7 @@ void network_receive_spawn_objects(struct Packet* p) { struct SpawnObjectData data = { 0 }; packet_read(p, &data.parentId, sizeof(u8)); packet_read(p, &data.model, sizeof(u32)); - packet_read(p, &data.behavior, sizeof(void*)); + packet_read(p, &data.behaviorId, sizeof(enum BehaviorId)); packet_read(p, &data.activeFlags, sizeof(s16)); packet_read(p, &data.rawData, sizeof(s32) * 80); @@ -95,7 +97,8 @@ void network_receive_spawn_objects(struct Packet* p) { : spawned[data.parentId]; if (parentObj == NULL) { continue; } - struct Object* o = spawn_object(parentObj, data.model, data.behavior); + void* behavior = get_behavior_from_id(data.behaviorId); + struct Object* o = spawn_object(parentObj, data.model, behavior); memcpy(o->rawData.asU32, data.rawData, sizeof(u32) * 80); spawned[i] = o;