Files
bigmak94andClaude Opus 5.5 4b395efe5c Add the Petari decompilation (SMGCommunity/Petari@0a5c660)
The sources of Petari (https://github.com/SMGCommunity/Petari), the
Super Mario Galaxy decompilation by the SMGCommunity, at commit
0a5c6608dc3b4c44a9aa68c2535d1793dc565f02, unchanged but for LF line
endings: LICENSE (as LICENSE-Petari.txt; CC0 1.0), include/, libs/ and
src/.  Left out: the game data Petari keeps from the original
executable, the error message archive (include/Game/System/
ErrorArchive.hpp) and two tables (src/Game/System/GalaxyID.bcsv and
StoryEvent.bcsv); GalaxyQuest's converter takes them from the player's
own disc.  The port's changes follow in the next commit, so
`git diff petari-base -- decomp` shows them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 01:59:38 +02:00

607 lines
28 KiB
C++

#pragma once
#include <JSystem/JGeometry/TVec.hpp>
#include <revolution.h>
class HitSensor;
class LiveActor;
enum {
ACTMES_PLAYER_ATTACK_START = 0x0,
ACTMES_PLAYER_PUNCH = 0x1,
ACTMES_PLAYER_TRAMPLE = 0x2,
ACTMES_PLAYER_HIP_DROP = 0x3,
ACTMES_PLAYER_HIP_DROP_FLOOR = 0x4,
ACTMES_PLAYER_UPPER_PUNCH = 0x5,
ACTMES_JET_TURTLE_ATTACK = 0x6,
ACTMES_FOO_ATTACK = 0x7,
ACTMES_FIREBALL_ATTACK = 0x8,
ACTMES_SEARCHLIGHT_ATTACK = 0x9,
ACTMES_FREEZE_ATTACK = 0xA,
ACTMES_INVINCIBLE_ATTACK = 0xB,
ACTMES_STAR_PIECE_ATTACK = 0xC,
ACTMES_IS_STAR_PIECE_REFLECT = 0xD,
ACTMES_IS_LOCKON_STAR_PIECE_SHOOT = 0xE,
ACTMES_STAR_PIECE_GIFT = 0xF,
ACTMES_STAR_PIECE_GIFT_1 = 0x10,
ACTMES_STAR_PIECE_GIFT_2 = 0x11,
ACTMES_STAR_PIECE_GIFT_3 = 0x12,
ACTMES_STAR_PIECE_GIFT_4 = 0x13,
ACTMES_STAR_PIECE_GIFT_5 = 0x14,
ACTMES_STAR_PIECE_GIFT_6 = 0x15,
ACTMES_STAR_PIECE_GIFT_7 = 0x16,
ACTMES_STAR_PIECE_GIFT_8 = 0x17,
ACTMES_STAR_PIECE_GIFT_9 = 0x18,
ACTMES_STAR_PIECE_GIFT_MAX = 0x19,
ACTMES_PLAYER_ATTACK_END = 0x1A,
ACTMES_IS_PUNCH_ENABLE = 0x1B,
ACTMES_HITMARK_EMIT = 0x1C,
ACTMES_INVALID_HIT = 0x1D,
ACTMES_TAKE = 0x1E,
ACTMES_TAKEN = 0x1F,
ACTMES_PUT = 0x20,
ACTMES_APART = 0x21,
ACTMES_THROW = 0x22,
ACTMES_DAMAGEDROP = 0x23,
ACTMES_RUSHDROP = 0x24,
ACTMES_ATTACKDROP = 0x25,
ACTMES_HANG_CANCEL = 0x26,
ACTMES_SHAKE_OFF_BEE = 0x27,
ACTMES_TAKE_TOUCH = 0x28,
ACTMES_PUSH = 0x29,
ACTMES_PUSH_FORCE = 0x2A,
ACTMES_KICK = 0x2B,
ACTMES_JUMP = 0x2C,
ACTMES_TOUCHJUMP = 0x2D,
ACTMES_BILLIARDJUMP = 0x2E,
ACTMES_AWAYJUMP = 0x2F,
ACTMES_BODY_ATTACK = 0x30,
ACTMES_TORNADO_ATTACK = 0x31,
ACTMES_TORNADO_STORM_RANGE = 0x32,
ACTMES_SPIN_STORM_RANGE = 0x33,
ACTMES_GIANT_ATTACK = 0x34,
ACTMES_BALL_TOUCH = 0x35,
ACTMES_BALL_TOUCH_WALL = 0x36,
ACTMES_BALL_TOUCH_GROUND = 0x37,
ACTMES_BALL_DASH = 0x38,
ACTMES_BALL_DASH_WALL = 0x39,
ACTMES_BALL_DASH_GROUND = 0x3A,
ACTMES_HAMMER_STAMP = 0x3B,
ACTMES_BIG_BUBBLE_MERGE = 0x3C,
ACTMES_BIG_BUBBLE_TOUCH = 0x3D,
ACTMES_BIG_BUBBLE_ASSIMILATE = 0x3E,
ACTMES_REFLECT = 0x3F,
ACTMES_REFLECT_V = 0x40,
ACTMES_IS_BROKEN = 0x41,
ACTMES_PASS_RING = 0x42,
ACTMES_FOUNTAINJUMP = 0x43,
ACTMES_TERESA_PLAYER_TOUCH = 0x44,
ACTMES_RUSH_PLAYER_TOUCH = 0x45,
ACTMES_BOMB_TERESA_TONGUE_TOUCH = 0x46,
ACTMES_PUDDLE_TOUCH_GROUND = 0x47,
ACTMES_WARP = 0x48,
ACTMES_ASK_HIDDEN_BY_SNOW = 0x49,
ACTMES_NOTIFY_DISCOVER_SNOW = 0x4A,
ACTMES_ENEMY_ATTACK_START = 0x4B,
ACTMES_ENEMY_ATTACK_FLIP_VERYWEAK = 0x4C,
ACTMES_ENEMY_ATTACK_FLIP_WEAK = 0x4D,
ACTMES_ENEMY_ATTACK_FLIP_WEAK_JUMP = 0x4E,
ACTMES_ENEMY_ATTACK_FLIP_JUMP = 0x4F,
ACTMES_ENEMY_ATTACK_FLIP = 0x50,
ACTMES_ENEMY_ATTACK_FLIP_ROT = 0x51,
ACTMES_ENEMY_ATTACK_FLIP_MAXIMUM = 0x52,
ACTMES_ENEMY_ATTACK = 0x53,
ACTMES_ENEMY_ATTACK_STRONG = 0x54,
ACTMES_ENEMY_ATTACK_MAXIMUM = 0x55,
ACTMES_ENEMY_ATTACK_EXPLOSION = 0x56,
ACTMES_ENEMY_ATTACK_FIREBACK = 0x57,
ACTMES_ENEMY_ATTACK_FIRERUN = 0x58,
ACTMES_ENEMY_ATTACK_FIRERUN_STRONG = 0x59,
ACTMES_ENEMY_ATTACK_ELECTRIC = 0x5A,
ACTMES_ENEMY_ATTACK_HEATBEAM = 0x5B,
ACTMES_ENEMY_ATTACK_ACID = 0x5C,
ACTMES_ENEMY_ATTACK_FREEZE = 0x5D,
ACTMES_ENEMY_ATTACK_CRUSH = 0x5E,
ACTMES_ENEMY_ATTACK_EXTRA_DAMAGE = 0x5F,
ACTMES_ENEMY_ATTACK_COUNTER_SPIN = 0x60,
ACTMES_ENEMY_ATTACK_COUNTER_HIPDROP = 0x61,
ACTMES_TO_ENEMY_ATTACK_BLOW = 0x62,
ACTMES_TO_ENEMY_ATTACK_TRAMPLE = 0x63,
ACTMES_TO_ENEMY_ATTACK_SHOCK_WAVE = 0x64,
ACTMES_ENEMY_ATTACK_END = 0x65,
ACTMES_SUCCESS = 0x66,
ACTMES_FAILURE = 0x67,
ACTMES_GROUP_MOVE_START = 0x68,
ACTMES_GROUP_MOVE_STOP = 0x69,
ACTMES_GROUP_ATTACK = 0x6A,
ACTMES_GROUP_SHOW = 0x6B,
ACTMES_GROUP_HIDE = 0x6C,
ACTMES_GROUP_LOD_LOW = 0x6D,
ACTMES_GROUP_LOD_HIGH = 0x6E,
ACTMES_START_DEMO = 0x6F,
ACTMES_END_DEMO = 0x70,
ACTMES_FORCE_KILL = 0x71,
ACTMES_PAUSE_OFF = 0x72,
ACTMES_INHALE_BLACK_HOLE = 0x73,
ACTMES_START_POWER_STAR_GET = 0x74,
ACTMES_RUSH_PUNCH_RIGHT = 0x75,
ACTMES_RUSH_PUNCH_LEFT = 0x76,
ACTMES_RUSH_KICK_RIGHT = 0x77,
ACTMES_RUSH_KICK_LEFT = 0x78,
ACTMES_RUSH_THRUST = 0x79,
ACTMES_RUSH_CRUSH = 0x7A,
ACTMES_RUSH_SHOOT_UP = 0x7B,
ACTMES_RUSH_AIR_STRIKE = 0x7C,
ACTMES_RUSH_GUARD = 0x7D,
ACTMES_RUSH_GUARD_RIGHT = 0x7E,
ACTMES_RUSH_GUARD_LEFT = 0x7F,
ACTMES_RUSH_LIFT_UP = 0x80,
ACTMES_RUSH_ROTATE_SWING = 0x81,
ACTMES_RUSH_THROW = 0x82,
ACTMES_RUSH_PULL_OUT_SUCCESS = 0x83,
ACTMES_RUSH_PULL_OUT_MISS = 0x84,
ACTMES_RUSH_FAILURE = 0x85,
ACTMES_RUSH_EVEN = 0x86,
ACTMES_ITEM_GET = 0x87,
ACTMES_IS_PULL_ENABLE = 0x88,
ACTMES_ITEM_PULL = 0x89,
ACTMES_ITEM_SHOW = 0x8A,
ACTMES_ITEM_HIDE = 0x8B,
ACTMES_ITEM_START_MOVE = 0x8C,
ACTMES_ITEM_END_MOVE = 0x8D,
ACTMES_OPD_SHOOT = 0x8E,
ACTMES_IS_OPD_SITE_IN = 0x8F,
ACTMES_RESET = 0x90,
ACTMES_RUSH_BEGIN = 0x91,
ACTMES_AUTORUSH_BEGIN = 0x92,
ACTMES_RUSH_CANCEL = 0x93,
ACTMES_RUSH_FORCE_CANCEL = 0x94,
ACTMES_RUSH_DAMAGE_CANCEL = 0x95,
ACTMES_RUSH_END = 0x96,
ACTMES_IS_RUSH_ENABLE = 0x97,
ACTMES_IS_RUSH_TAKEOVER = 0x98,
ACTMES_IS_RUSH_REQUEST = 0x99,
ACTMES_SLING_SHOOT_START_BIND = 0x9A,
ACTMES_SLING_SHOOT_ACTOR_HANG_START = 0x9B,
ACTMES_SLING_SHOOT_ACTOR_HANG_END = 0x9C,
ACTMES_SLING_SHOOT_ACTOR_APART = 0x9D,
ACTMES_SLING_SHOOT_ATTACK = 0x9E,
ACTMES_SLING_SHOOT_PASS_THROUGH_ENABLE = 0x9F,
ACTMES_SLING_SHOOT_IS_LAST_DAMAGE = 0xA0,
ACTMES_UPDATE_BASEMTX = 0xA1,
ACTMES_IS_CAMERA_FIX_POINT = 0xA2,
ACTMES_BOSSCRAB_SHOOT_DOWN = 0xA3,
ACTMES_BOSSCRAB_CANNON_BROKEN = 0xA4,
ACTMES_IKSPIDER_ACTIVE = 0xA5,
ACTMES_IKSPIDER_CATCH = 0xA6,
ACTMES_IKSPIDER_LAST_LEG = 0xA7,
ACTMES_IKSPIDER_RELEASE = 0xA8,
ACTMES_TRIPODBOSS_LEG_IS_DAMAGE = 0xA9,
ACTMES_TRIPODBOSS_STARTED = 0xAA,
ACTMES_DISPERSE_BOMB_TERESA = 0xAB,
ACTMES_BREAK_POLTA_GROUND_ROCK = 0xAC,
ACTMES_SPHERE_PLAYER_BINDED = 0xAD,
ACTMES_SET_UP_JUMP_HOLE = 0xAE,
ACTMES_SHOOT_JUMP_HOLE = 0xAF,
ACTMES_END_JUMP_HOLE = 0xB0,
ACTMES_END_RAIL_DASH = 0xB1,
ACTMES_END_BALL_RAIL = 0xB2,
ACTMES_END_BALL_BIND = 0xB3,
ACTMES_FLOOR_TOUCH = 0xB4,
ACTMES_WALL_TOUCH = 0xB5,
ACTMES_CEIL_TOUCH = 0xB6,
ACTMES_REQUEST_CLAP = 0xB7,
ACTMES_DINO_PACKUN_PUNCHED_BALL = 0xB8,
ACTMES_DINO_PACKUN_PULLED_TAIL = 0xB9,
ACTMES_DINO_PACKUN_BALL_ATTACK = 0xBA,
ACTMES_TOMB_SPIDER_BATTLE_START = 0xBB,
ACTMES_TOMB_SPIDER_DEMO_START = 0xBC,
ACTMES_TOMB_SPIDER_DEMO_END = 0xBD,
ACTMES_SKELETAL_FISH_BOSS_BATTLE_START = 0xBE,
ACTMES_SKELETAL_FISH_BOSS_BATTLE_END = 0xBF,
ACTMES_KOOPA_HIP_DROP_ATTACK = 0xC0,
ACTMES_KOOPA_PLAYER_DAMAGE = 0xC1,
ACTMES_KOOPA_PLATE_DAMAGE = 0xC2,
ACTMES_TICO_RAIL_TOUCH = 0xC3,
ACTMES_IS_REFLECTION_G_CAPTURE = 0xC4,
ACTMES_IS_NO_BREAK_G_CAPTURE = 0xC5,
ACTMES_TURNIP_ATTACK = 0xC6,
ACTMES_PAKKUN_BALL_ATTACK = 0xC7,
ACTMES_IS_PUNCH_LEFT = 0xC8,
ACTMES_IS_PUNCH_CENTER = 0xC9,
ACTMES_MAPPARTS_ON_PLAYER = 0xCA,
ACTMES_MAPPARTS_START_ROTATE_AT_POINT = 0xCB,
ACTMES_MAPPARTS_END_ROTATE_AT_POINT = 0xCC,
ACTMES_MAPPARTS_START_ROTATE_BETWEEN_POINTS = 0xCD,
ACTMES_MAPPARTS_BREAK_START = 0xCE,
ACTMES_MAPPARTS_DISAPPEAR_WITH_BLINK = 0xCF,
ACTMES_NPC_EVENT_START = 0xD0,
ACTMES_NPC_EVENT_END = 0xD1,
ACTMES_NPC_EVENT_TALK_ENABLE = 0xD2,
ACTMES_NPC_EVENT_TALK_DISABLE = 0xD3,
ACTMES_NPC_TALK_NEXT = 0xD4,
ACTMES_MENU_GAME_START = 0xD5,
ACTMES_MENU_APPEAR_FROM_BLOCK = 0xD6,
ACTMES_MENU_BLOCK_BREAK = 0xD7,
ACTMES_MENU_GOAL_POLE_START = 0xD8,
ACTMES_MENU_GOAL_POLE_END = 0xD9,
ACTMES_DPD_TOUCH = 0xDA,
ACTMES_DPD_ATTACK_TARGET_LOCK = 0xDB,
ACTMES_DPD_ATTACK_TARGET_UNLOCK = 0xDC,
ACTMES_DPD_TARGET_END = 0xDD,
ACTMES_DPD_BUTTON_ACTION = 0xDE,
ACTMES_DPD_SWING_ACTION = 0xDF,
ACTMES_SPHERE_SELECTOR_SELECT_START = 0xE0,
ACTMES_SPHERE_SELECTOR_SELECT_END = 0xE1,
ACTMES_SPHERE_SELECTOR_CONFIRM_START = 0xE2,
ACTMES_SPHERE_SELECTOR_CONFIRM_CANCEL = 0xE3,
ACTMES_SPHERE_SELECTOR_CONFIRMED = 0xE4,
ACTMES_SPHERE_SELECTOR_TARGET_SELECTED = 0xE5,
ACTMES_TUTORIAL_START = 0xE6,
ACTMES_TUTORIAL_NEXT = 0xE7,
ACTMES_TUTORIAL_PREV = 0xE8,
ACTMES_TUTORIAL_PASS = 0xE9,
ACTMES_TUTORIAL_END = 0xEA,
ACTMES_TUTORIAL_OMIT = 0xEB,
ACTMES_RACE_READY = 0xEC,
ACTMES_RACE_START = 0xED,
ACTMES_RACE_GOAL = 0xEE,
ACTMES_RACE_RESET = 0xEF,
ACTMES_HEAVENSDOOR_RUNAWAY_RABBIT_WAIT = 0xF0,
ACTMES_HEAVENSDOOR_RUNAWAY_RABBIT_START = 0xF1,
ACTMES_LAUNCHER_BREAKABLE = 0xF2,
ACTMES_PLANT_GROUP_EMIT_ITEM = 0xF3,
};
enum {
ATYPE_PLAYER_START = 0x0,
ATYPE_PLAYER = 0x1,
ATYPE_PUPPETEER = 0x2,
ATYPE_PLAYER_END = 0x3,
ATYPE_NPC_START = 0x4,
ATYPE_NPC = 0x5,
ATYPE_NPC_END = 0x6,
ATYPE_ANIMAL = 0x7,
ATYPE_RIDE_START = 0x8,
ATYPE_RIDE = 0x9,
ATYPE_SPHERE_PLAYER = 0xA,
ATYPE_SPHERE_PLAYER_HIT = 0xB,
ATYPE_SPRING_ATTACKER = 0xC,
ATYPE_SPRING_ATTACKER_KINOPIO = 0xD,
ATYPE_SPRING_ATTACKER_KINOPIO_BIND = 0xE,
ATYPE_JET_TURTLE = 0xF,
ATYPE_JET_TURTLE_SLOW = 0x10,
ATYPE_SPECIAL_WEAPON = 0x11,
ATYPE_RIDE_END = 0x12,
ATYPE_ENEMY_START = 0x13,
ATYPE_ENEMY = 0x14,
ATYPE_ENEMY_SIMPLE = 0x15,
ATYPE_ENEMY_ATTACK = 0x16,
ATYPE_COCO_NUT = 0x17,
ATYPE_WATER_PRESSURE_BULLET = 0x18,
ATYPE_BOMBHEI = 0x19,
ATYPE_TAKOBO = 0x1A,
ATYPE_KURIBO = 0x1B,
ATYPE_KARIKARI = 0x1C,
ATYPE_BEGOMAN = 0x1D,
ATYPE_KILLER_TARGET_ENEMY = 0x1E,
ATYPE_PLAYER_AUTO_JUMP = 0x1F,
ATYPE_MOGUCCHI_REFUSE_TERRITORY = 0x20,
ATYPE_BIG_BUBBLE = 0x21,
ATYPE_NOKONOKO = 0x22,
ATYPE_PUKUPUKU = 0x23,
ATYPE_UNIZO = 0x24,
ATYPE_SAMBO_HEAD = 0x25,
ATYPE_SAMBO_BODY = 0x26,
ATYPE_HOMING_FIRE = 0x27,
ATYPE_HOMING_FIRE_SHOOTER = 0x28,
ATYPE_HOMING_KILLER = 0x29,
ATYPE_ROCK = 0x2A,
ATYPE_WANWAN = 0x2B,
ATYPE_TRIPODBOSS_GUARD_WALL = 0x2C,
ATYPE_TRIPODBOSS_KILLER_GENERATER = 0x2D,
ATYPE_TOMB_SPIDER_BODY = 0x2E,
ATYPE_TOMB_SPIDER_EYE = 0x2F,
ATYPE_TOMB_SPIDER_HIP = 0x30,
ATYPE_TOMB_SPIDER_MOUTH = 0x31,
ATYPE_TOMB_SPIDER_ATTACKER = 0x32,
ATYPE_TOMB_SPIDER_GLAND_FRONT_L = 0x33,
ATYPE_TOMB_SPIDER_GLAND_FRONT_L_ATTACKER = 0x34,
ATYPE_TOMB_SPIDER_GLAND_FRONT_R = 0x35,
ATYPE_TOMB_SPIDER_GLAND_FRONT_R_ATTACKER = 0x36,
ATYPE_TOMB_SPIDER_GLAND_REAR_L = 0x37,
ATYPE_TOMB_SPIDER_GLAND_REAR_L_ATTACKER = 0x38,
ATYPE_TOMB_SPIDER_GLAND_REAR_R = 0x39,
ATYPE_TOMB_SPIDER_GLAND_REAR_R_ATTACKER = 0x3A,
ATYPE_TOMB_SPIDER_VITAL_SPOT_C = 0x3B,
ATYPE_TOMB_SPIDER_VITAL_SPOT_L = 0x3C,
ATYPE_TOMB_SPIDER_VITAL_SPOT_R = 0x3D,
ATYPE_TOMB_SPIDER_COCOON = 0x3E,
ATYPE_SAND_GOLEM_BLOCK = 0x3F,
ATYPE_SAND_GOLEM = 0x40,
ATYPE_KOOPA_ATTACK = 0x41,
ATYPE_KOOPA_FIRE = 0x42,
ATYPE_KOOPA_BALL = 0x43,
ATYPE_ENEMY_END = 0x44,
ATYPE_MAPOBJ_START = 0x45,
ATYPE_MAP_OBJ = 0x46,
ATYPE_MAP_OBJ_SIMPLE = 0x47,
ATYPE_MAP_OBJ_MOVE_COLLISION = 0x48,
ATYPE_CLIP_FIELD_MAP_PARTS = 0x49,
ATYPE_COIN = 0x4A,
ATYPE_COIN_RED = 0x4B,
ATYPE_STAR_PIECE = 0x4C,
ATYPE_KINOKO_ONEUP = 0x4D,
ATYPE_COINTHROW = 0x4E,
ATYPE_SWITCH = 0x4F,
ATYPE_MORPH_ITEM = 0x50,
ATYPE_GOLF_CUP = 0x51,
ATYPE_BREAKABLE_CAGE = 0x52,
ATYPE_BEE_FLOWER = 0x53,
ATYPE_KILLER_TARGET_MAPOBJ = 0x54,
ATYPE_PUNCH_BOX = 0x55,
ATYPE_WATER_BAZOOKA_CAPSULE = 0x56,
ATYPE_ICEJUMP_WALL = 0x57,
ATYPE_KEY_SWITCH_AVOID = 0x58,
ATYPE_KAMECK_BARRIER = 0x59,
ATYPE_KOOPA_PUSH = 0x5A,
ATYPE_KOOPA_RECEIVER = 0x5B,
ATYPE_KOOPA_DAMAGE_PLATE = 0x5C,
ATYPE_KOOPA_COIN_PLATE = 0x5D,
ATYPE_KOOPA_PLATE = 0x5E,
ATYPE_MAPOBJ_END = 0x5F,
ATYPE_AUTO_RUSH_OBJ_START = 0x60,
ATYPE_BINDER = 0x61,
ATYPE_TRANSFERABLE_BINDER = 0x62,
ATYPE_PRIOR_BINDER = 0x63,
ATYPE_SPIN_DRIVER_BIND = 0x64,
ATYPE_SPIN_CANNON_BIND = 0x65,
ATYPE_SPHERE_PLAYER_BIND = 0x66,
ATYPE_POWER_STAR_BIND = 0x67,
ATYPE_G_CAPTURE_BIND = 0x68,
ATYPE_SPRING_ATTACKER_BIND = 0x69,
ATYPE_WATER_PRESSURE_BULLET_BIND = 0x6A,
ATYPE_MARIO_LAUNCHER_BIND = 0x6B,
ATYPE_QUESTION_COIN_BIND = 0x6C,
ATYPE_SCENARIO_STARTER_BIND = 0x6D,
ATYPE_AUTO_RUSH_OBJ_END = 0x6E,
ATYPE_RUSH_OBJ_START = 0x6F,
ATYPE_RUSH_ENEMY = 0x70,
ATYPE_COCO_NUT_BIND = 0x71,
ATYPE_TURNIP_BIND = 0x72,
ATYPE_SWITCH_BIND = 0x73,
ATYPE_RUSH_OBJ_END = 0x74,
ATYPE_PRESS_OBJ_START = 0x75,
ATYPE_MAP_OBJ_PRESS = 0x76,
ATYPE_PRESS_OBJ_END = 0x77,
ATYPE_SPHERE_MOVER_OBJ_START = 0x78,
ATYPE_JUMP_HOLE = 0x79,
ATYPE_SPHERE_DASH = 0x7A,
ATYPE_BALL_RAIL = 0x7B,
ATYPE_SPHERE_MOVER_OBJ_END = 0x7C,
ATYPE_SPECIAL_START = 0x7D,
ATYPE_SYSTEM_SENSOR = 0x7E,
ATYPE_EYE = 0x7F,
ATYPE_PUSH = 0x80,
ATYPE_DEMO = 0x81,
ATYPE_SWITCH_MESSENGER = 0x82,
ATYPE_MESSAGE_SENSOR = 0x83,
ATYPE_RECEIVER = 0x84,
ATYPE_SPECIAL_END = 0x85,
};
namespace MR {
HitSensor* addHitSensor(LiveActor* pActor, const char* pName, u32 type, u16 groupSize, f32 radius, const TVec3f& rOffset);
HitSensor* addHitSensorBinder(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, const TVec3f& rOffset);
HitSensor* addHitSensorTransferableBinder(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, const TVec3f& rOffset);
HitSensor* addHitSensorPriorBinder(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, const TVec3f& rOffset);
HitSensor* addHitSensorRide(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, const TVec3f& rOffset);
HitSensor* addHitSensorMapObj(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, const TVec3f& rOffset);
HitSensor* addHitSensorMapObjPress(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, const TVec3f& rOffset);
HitSensor* addHitSensorMapObjSimple(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, const TVec3f& rOffset);
HitSensor* addHitSensorMapObjMoveCollision(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, const TVec3f& rOffset);
HitSensor* addHitSensorEnemy(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, const TVec3f& rOffset);
HitSensor* addHitSensorEnemySimple(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, const TVec3f& rOffset);
HitSensor* addHitSensorEnemyAttack(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, const TVec3f& rOffset);
HitSensor* addHitSensorNpc(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, const TVec3f& rOffset);
HitSensor* addHitSensorEye(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, const TVec3f& rOffset);
HitSensor* addHitSensorPush(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, const TVec3f& rOffset);
HitSensor* addHitSensorPosBinder(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, const TVec3f* pPos, const TVec3f& rOffset);
HitSensor* addHitSensorPosRide(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, const TVec3f* pPos, const TVec3f& rOffset);
HitSensor* addHitSensorPosMapObj(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, const TVec3f* pPos, const TVec3f& rOffset);
HitSensor* addHitSensorPosEye(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, const TVec3f* pPos, const TVec3f& rOffset);
HitSensor* addHitSensorMtx(LiveActor* pActor, const char* pName, u32 type, u16 groupSize, f32 radius, MtxPtr pMtx, const TVec3f& rOffset);
HitSensor* addHitSensorMtxRide(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, MtxPtr pMtx, const TVec3f& rOffset);
HitSensor* addHitSensorMtxMapObj(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, MtxPtr pMtx, const TVec3f& rOffset);
HitSensor* addHitSensorMtxEnemy(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, MtxPtr pMtx, const TVec3f& rOffset);
HitSensor* addHitSensorMtxEnemyAttack(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, MtxPtr pMtx, const TVec3f& rOffset);
HitSensor* addHitSensorMtxNpc(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, MtxPtr pMtx, const TVec3f& rOffset);
HitSensor* addHitSensorMtxAnimal(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius, MtxPtr pMtx, const TVec3f& rOffset);
HitSensor* addHitSensorAtJoint(LiveActor* pActor, const char* pName, const char* pJointName, u32 type, u16 groupSize, f32 radius,
const TVec3f& rOffset);
HitSensor* addHitSensorAtJointRide(LiveActor* pActor, const char* pName, const char* pJointName, u16 groupSize, f32 radius,
const TVec3f& rOffset);
HitSensor* addHitSensorAtJointMapObj(LiveActor* pActor, const char* pName, const char* pJointName, u16 groupSize, f32 radius,
const TVec3f& rOffset);
HitSensor* addHitSensorAtJointMapObjSimple(LiveActor* pActor, const char* pName, const char* pJointName, u16 groupSize, f32 radius,
const TVec3f& rOffset);
HitSensor* addHitSensorAtJointEnemy(LiveActor* pActor, const char* pName, const char* pJointName, u16 groupSize, f32 radius,
const TVec3f& rOffset);
HitSensor* addHitSensorAtJointEnemySimple(LiveActor* pActor, const char* pName, const char* pJointName, u16 groupSize, f32 radius,
const TVec3f& rOffset);
HitSensor* addHitSensorAtJointEnemyAttack(LiveActor* pActor, const char* pName, const char* pJointName, u16 groupSize, f32 radius,
const TVec3f& rOffset);
HitSensor* addHitSensorAtJointNpc(LiveActor* pActor, const char* pName, const char* pJointName, u16 groupSize, f32 radius, const TVec3f& rOffset);
HitSensor* addHitSensorAtJointEye(LiveActor* pActor, const char* pName, const char* pJointName, u16 groupSize, f32 radius, const TVec3f& rOffset);
HitSensor* addHitSensorCallback(LiveActor* pActor, const char* pName, u32 type, u16 groupSize, f32 radius);
HitSensor* addHitSensorCallbackBinder(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius);
HitSensor* addHitSensorCallbackPriorBinder(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius);
HitSensor* addHitSensorCallbackRide(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius);
HitSensor* addHitSensorCallbackMapObj(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius);
HitSensor* addHitSensorCallbackMapObjSimple(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius);
HitSensor* addHitSensorCallbackEnemy(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius);
HitSensor* addHitSensorCallbackEnemyAttack(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius);
HitSensor* addHitSensorCallbackEye(LiveActor* pActor, const char* pName, u16 groupSize, f32 radius);
HitSensor* addBodyMessageSensorReceiver(LiveActor* pActor);
HitSensor* addBodyMessageSensorMapObj(LiveActor* pActor);
HitSensor* addBodyMessageSensorMapObjPress(LiveActor* pActor);
HitSensor* addBodyMessageSensorMapObjMoveCollision(LiveActor* pActor);
HitSensor* addBodyMessageSensorEnemy(LiveActor* pActor);
HitSensor* addMessageSensorReceiver(LiveActor* pActor, const char* pName);
HitSensor* addMessageSensorMapObj(LiveActor* pActor, const char* pName);
HitSensor* addMessageSensorMapObjMoveCollision(LiveActor* pActor, const char* pName);
HitSensor* addMessageSensorEnemy(LiveActor* pActor, const char* pName);
bool tryUpdateHitSensorsAll(LiveActor* pActor);
void updateHitSensorsAll(LiveActor* pActor);
bool isSensorType(const HitSensor* pSensor, u32 type);
HitSensor* getSensorWithIndex(LiveActor* pActor, int index);
HitSensor* getTaking(const LiveActor* pActor);
HitSensor* getTaken(const LiveActor* pActor);
void setSensorPos(HitSensor* pSensor, const TVec3f& rPos);
void setSensorOffset(LiveActor* pActor, const char* pName, const TVec3f& rOffset);
void setSensorRadius(LiveActor* pActor, const char* pName, f32 radius);
void setHitSensorApart(HitSensor* pSender, HitSensor* pReceiver);
void validateHitSensors(LiveActor* pActor);
void invalidateHitSensors(LiveActor* pActor);
void validateHitSensor(LiveActor* pActor, const char* pName);
void invalidateHitSensor(LiveActor* pActor, const char* pName);
bool isValidHitSensor(LiveActor* pActor, const char* pName);
void clearHitSensors(LiveActor* pActor);
HitSensor* getSensor(LiveActor* pActor, int index);
LiveActor* getSensorHost(const HitSensor* pSensor);
bool isSensor(const HitSensor* pSensor, const char* pName);
bool isSensorPlayer(const HitSensor* pSensor);
bool isSensorBinder(const HitSensor* pSensor);
bool isSensorRide(const HitSensor* pSensor);
bool isSensorPlayerOrRide(const HitSensor* pSensor);
bool isSensorEnemy(const HitSensor* pSensor);
bool isSensorEnemyAttack(const HitSensor* pSensor);
bool isSensorNpc(const HitSensor* pSensor);
bool isSensorMapObj(const HitSensor* pSensor);
bool isSensorAutoRush(const HitSensor* pSensor);
bool isSensorRush(const HitSensor* pSensor);
bool isSensorPressObj(const HitSensor* pSensor);
bool isSensorEye(const HitSensor* pSensor);
bool isSensorPush(const HitSensor* pSensor);
bool isSensorItem(const HitSensor* pSensor);
bool tryGetItem(HitSensor* pSender, HitSensor* pReceiver);
const TVec3f& getSensorPos(const HitSensor* pSensor);
void calcSensorDirection(TVec3f* pDir, const HitSensor* pSensor1, const HitSensor* pSensor2);
void calcSensorDirectionNormalize(TVec3f* pDir, const HitSensor* pSensor1, const HitSensor* pSensor2);
void calcSensorHorizonNormalize(TVec3f* pHorizon, const TVec3f& rGravity, const HitSensor* pSensor1, const HitSensor* pSensor2);
HitSensor* getMessageSensor();
bool sendArbitraryMsg(u32 msg, HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgPush(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgPlayerTrample(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgPlayerPunch(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgJump(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgTouchJump(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgTaken(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgKick(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgAwayJump(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgEnemyAttackMsgToDir(u32 msg, HitSensor* pReceiver, HitSensor* pSender, const TVec3f& rDir);
bool sendMsgEnemyAttackFlipWeak(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgEnemyAttackFlipWeakJump(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgEnemyAttackFlip(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgEnemyAttackFlipToDir(HitSensor* pReceiver, HitSensor* pSender, const TVec3f& rDir);
bool sendMsgEnemyAttackFlipJump(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgEnemyAttackFlipRot(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgEnemyAttackFlipMaximum(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgEnemyAttackFlipMaximumToDir(HitSensor* pReceiver, HitSensor* pSender, const TVec3f& rDir);
bool sendMsgEnemyAttack(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgEnemyAttackStrong(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgEnemyAttackStrongToDir(HitSensor* pReceiver, HitSensor* pSender, const TVec3f& rDir);
bool sendMsgEnemyAttackFire(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgEnemyAttackFireStrong(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgEnemyAttackElectric(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgEnemyAttackFreeze(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgEnemyAttackHeatBeam(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgEnemyAttackExplosion(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgEnemyAttackCounterSpin(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgEnemyAttackCounterHipDrop(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgLockOnStarPieceShoot(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgStarPieceAttack(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgStarPieceGift(HitSensor* pReceiver, HitSensor* pSender, u32 num);
bool sendMsgEnemyAttackMaximum(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgEnemyAttackMaximumToDir(HitSensor* pReceiver, HitSensor* pSender, const TVec3f& rDir);
bool sendMsgEnemyAttackToBindedSensor(LiveActor* pActor, HitSensor* pSender);
bool sendMsgEnemyAttackExplosionToBindedSensor(LiveActor* pActor, HitSensor* pSender);
bool sendSimpleMsgToActor(u32 msg, LiveActor* pActor);
bool sendMsgToBindedSensor(u32 msg, LiveActor* pActor, HitSensor* pSender);
bool sendMsgToBindedSensor(u32 msg, HitSensor* pSender);
bool sendMsgToGroundSensor(u32 msg, HitSensor* pSender);
bool sendMsgToWallSensor(u32 msg, HitSensor* pSender);
bool sendMsgStartDemo(LiveActor* pActor);
bool sendMsgToEnemyAttackBlow(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgToEnemyAttackTrample(HitSensor* pReceiver, HitSensor* pSender);
bool sendMsgToEnemyAttackBlowOrTrample(HitSensor* pReceiver, HitSensor* pSender, f32 ratio);
bool sendMsgToEnemyAttackShockWave(HitSensor* pReceiver, HitSensor* pSender);
void sendMsgToAllLiveActor(u32 msg, LiveActor* pActor);
void sendMsgToGroupMember(u32 msg, LiveActor* pActor, HitSensor* pSensor, const char* pName);
void sendMsgExplosionToNearActor(HitSensor* pSender, f32 distance);
bool isInSpinStormRange(u32 msg, HitSensor* pSender, HitSensor* pReceiver, f32 range);
bool receiveItemShowMsg(u32 msg, HitSensor* pSender, HitSensor* pReceiver);
bool receiveItemHideMsg(u32 msg, HitSensor* pSender, HitSensor* pReceiver);
HitSensor* getGroundSensor(const LiveActor* pActor) NO_INLINE;
HitSensor* getRoofSensor(const LiveActor* pActor) NO_INLINE;
HitSensor* getWallSensor(const LiveActor* pActor) NO_INLINE;
bool isMsgPlayerHitAll(u32 msg);
bool isMsgPlayerSpinAttack(u32 msg);
bool isMsgPlayerTrample(u32 msg);
bool isMsgPlayerHipDrop(u32 msg);
bool isMsgPlayerHipDropFloor(u32 msg);
bool isMsgPlayerUpperPunch(u32 msg);
bool isMsgPlayerKick(u32 msg);
bool isMsgJetTurtleAttack(u32 msg);
bool isMsgFireBallAttack(u32 msg);
bool isMsgSearchlightAttack(u32 msg);
bool isMsgFreezeAttack(u32 msg);
bool isMsgInvincibleAttack(u32 msg);
bool isMsgInvalidHit(u32 msg);
bool isMsgAutoRushBegin(u32 msg);
bool isMsgRushBegin(u32 msg);
bool isMsgUpdateBaseMtx(u32 msg);
bool isMsgRushCancel(u32 msg);
bool isMsgIsRushTakeOver(u32 msg);
bool isMsgFloorTouch(u32 msg);
bool isMsgWallTouch(u32 msg);
bool isMsgCeilTouch(u32 msg);
bool isMsgItemGet(u32 msg);
bool isMsgItemPull(u32 msg);
bool isMsgItemShow(u32 msg);
bool isMsgItemHide(u32 msg);
bool isMsgItemStartMove(u32 msg);
bool isMsgItemEndMove(u32 msg);
bool isMsgInhaleBlackHole(u32 msg);
bool isMsgEnemyAttack(u32 msg);
bool isMsgEnemyAttackFire(u32 msg);
bool isMsgEnemyAttackFireStrong(u32 msg);
bool isMsgEnemyAttackElectric(u32 msg);
bool isMsgExplosionAttack(u32 msg);
bool isMsgToEnemyAttackBlow(u32 msg);
bool isMsgToEnemyAttackTrample(u32 msg);
bool isMsgToEnemyAttackShockWave(u32 msg);
bool isMsgSpinStormRange(u32 msg);
bool isMsgTutorialStart(u32 msg);
bool isMsgTutorialNext(u32 msg);
bool isMsgTutorialPrev(u32 msg);
bool isMsgTutorialPass(u32 msg);
bool isMsgTutorialOmit(u32 msg);
bool isMsgRaceReady(u32 msg);
bool isMsgRaceStart(u32 msg);
bool isMsgRaceReset(u32 msg);
bool isMsgLockOnStarPieceShoot(u32 msg);
bool isMsgBallDashWall(u32 msg);
bool isMsgBallDashGround(u32 msg);
bool isMsgStartPowerStarGet(u32 msg);
bool isMsgTouchPlantItem(u32 msg);
bool isMsgHitmarkEmit(u32 msg);
bool isMsgStarPieceAttack(u32 msg);
bool isMsgStarPieceReflect(u32 msg);
bool isMsgStarPieceGift(u32 msg);
s32 getNumStarPieceGift(u32 msg);
void calcPosBetweenSensors(TVec3f* pPos, const HitSensor* pSensor1, const HitSensor* pSensor2, f32 offset);
bool tryForceKillIfMsgStartPowerStarGet(LiveActor* pActor, u32 msg);
HitSensor* addBodyMessageSensor(LiveActor* pActor, u32 type);
}; // namespace MR