1
0
mirror of https://github.com/zeldaret/oot.git synced 2024-09-21 12:54:51 +00:00
oot/include/z64actor.h
louist103 75b72af8de
Item00 BSS OK (#881)
* bss OK

* Small fix

* Pr fixes (Dragorn) and some named symbols

* added the comment Fig requested

* rip jenkins box

* Update src/code/z_en_item00.c

Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>

* Change combined if to 2 ifs

* GI enum

Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com>
2021-08-04 12:41:56 -04:00

785 lines
29 KiB
C

#ifndef _Z64ACTOR_H_
#define _Z64ACTOR_H_
#include "z64dma.h"
#include "z64animation.h"
#include "z64math.h"
#include "z64collision_check.h"
#define ACTOR_NUMBER_MAX 200
#define INVISIBLE_ACTOR_MAX 20
#define AM_FIELD_SIZE 0x27A0
#define MASS_IMMOVABLE 0xFF // Cannot be pushed by OC collisions
#define MASS_HEAVY 0xFE // Can only be pushed by OC collisions with IMMOVABLE and HEAVY objects.
struct Actor;
struct GlobalContext;
struct Lights;
typedef void (*ActorFunc)(struct Actor*, struct GlobalContext*);
typedef void (*ActorShadowFunc)(struct Actor*, struct Lights*, struct GlobalContext*);
typedef u16 (*callback1_800343CC)(struct GlobalContext*, struct Actor*);
typedef s16 (*callback2_800343CC)(struct GlobalContext*, struct Actor*);
typedef struct {
Vec3f pos;
Vec3s rot;
} PosRot; // size = 0x14
typedef struct {
/* 0x00 */ s16 id;
/* 0x02 */ u8 category; // Classifies actor and determines when it will update or draw
/* 0x04 */ u32 flags;
/* 0x08 */ s16 objectId;
/* 0x0C */ u32 instanceSize;
/* 0x10 */ ActorFunc init; // Constructor
/* 0x14 */ ActorFunc destroy; // Destructor
/* 0x18 */ ActorFunc update; // Update Function
/* 0x1C */ ActorFunc draw; // Draw function
} ActorInit; // size = 0x20
typedef enum {
/* 0 */ ALLOCTYPE_NORMAL,
/* 1 */ ALLOCTYPE_ABSOLUTE,
/* 2 */ ALLOCTYPE_PERMANENT
} AllocType;
typedef struct {
/* 0x00 */ u32 vromStart;
/* 0x04 */ u32 vromEnd;
/* 0x08 */ void* vramStart;
/* 0x0C */ void* vramEnd;
/* 0x10 */ void* loadedRamAddr; // original name: "allocp"
/* 0x14 */ ActorInit* initInfo;
/* 0x18 */ char* name;
/* 0x1C */ u16 allocType;
/* 0x1E */ s8 nbLoaded; // original name: "clients"
} ActorOverlay; // size = 0x20
typedef struct {
u8 table[32];
} DamageTable;
typedef struct {
/* 0x00 */ u8 health;
/* 0x02 */ s16 cylRadius;
/* 0x04 */ s16 cylHeight;
/* 0x06 */ u8 mass;
} CollisionCheckInfoInit;
typedef struct {
/* 0x00 */ u8 health;
/* 0x02 */ s16 cylRadius;
/* 0x04 */ s16 cylHeight;
/* 0x06 */ s16 cylYShift;
/* 0x08 */ u8 mass;
} CollisionCheckInfoInit2;
typedef struct {
/* 0x00 */ DamageTable* damageTable;
/* 0x04 */ Vec3f displacement; // Amount to correct velocity (0x5C) by when colliding into a body
/* 0x10 */ s16 cylRadius; // Used for various purposes
/* 0x12 */ s16 cylHeight; // Used for various purposes
/* 0x14 */ s16 cylYShift; // Unused. Purpose inferred from Cylinder16 and CollisionCheck_CylSideVsLineSeg
/* 0x16 */ u8 mass; // Used to compute displacement for OC collisions
/* 0x17 */ u8 health; // Note: some actors may use their own health variable instead of this one
/* 0x18 */ u8 damage; // Amount to decrement health by
/* 0x19 */ u8 damageEffect; // Stores what effect should occur when hit by a weapon
/* 0x1A */ u8 atHitEffect; // Stores what effect should occur when AT connects with an AC
/* 0x1B */ u8 acHitEffect; // Stores what effect should occur when AC is touched by an AT
} CollisionCheckInfo; // size = 0x1C
typedef struct {
/* 0x00 */ Vec3s rot; // Current actor shape rotation
/* 0x06 */ s16 face; // Used to index eyebrow/eye/mouth textures. Only used by player
/* 0x08 */ f32 yOffset; // Model y axis offset. Represents model space units
/* 0x0C */ ActorShadowFunc shadowDraw; // Shadow draw function
/* 0x10 */ f32 shadowScale; // Changes the size of the shadow
/* 0x14 */ u8 shadowAlpha; // Default is 255
/* 0x15 */ u8 feetFloorFlags; // Set if the actor's foot is clipped under the floor. & 1 is right foot, & 2 is left
/* 0x18 */ Vec3f feetPos[2]; // Update by using `Actor_SetFeetPos` in PostLimbDraw
} ActorShape; // size = 0x30
typedef struct Actor {
/* 0x000 */ s16 id; // Actor ID
/* 0x002 */ u8 category; // Actor category. Refer to the corresponding enum for values
/* 0x003 */ s8 room; // Room number the actor is in. -1 denotes that the actor won't despawn on a room change
/* 0x004 */ u32 flags; // Flags used for various purposes
/* 0x008 */ PosRot home; // Initial position/rotation when spawned. Can be used for other purposes
/* 0x01C */ s16 params; // Configurable variable set by the actor's spawn data; original name: "args_data"
/* 0x01E */ s8 objBankIndex; // Object bank index of the actor's object dependency; original name: "bank"
/* 0x01F */ s8 targetMode; // Controls how far the actor can be targeted from and how far it can stay locked on
/* 0x020 */ u16 sfx; // SFX ID to play. Sound plays when value is set, then is cleared the following update cycle
/* 0x024 */ PosRot world; // Position/rotation in the world
/* 0x038 */ PosRot focus; // Target reticle focuses on this position. For player this represents head pos and rot
/* 0x04C */ f32 targetArrowOffset; // Height offset of the target arrow relative to `focus` position
/* 0x050 */ Vec3f scale; // Scale of the actor in each axis
/* 0x05C */ Vec3f velocity; // Velocity of the actor in each axis
/* 0x068 */ f32 speedXZ; // How fast the actor is traveling along the XZ plane
/* 0x06C */ f32 gravity; // Acceleration due to gravity. Value is added to Y velocity every frame
/* 0x070 */ f32 minVelocityY; // Sets the lower bounds cap on velocity along the Y axis
/* 0x074 */ CollisionPoly* wallPoly; // Wall polygon the actor is touching
/* 0x078 */ CollisionPoly* floorPoly; // Floor polygon directly below the actor
/* 0x07C */ u8 wallBgId; // Bg ID of the wall polygon the actor is touching
/* 0x07D */ u8 floorBgId; // Bg ID of the floor polygon directly below the actor
/* 0x07E */ s16 wallYaw; // Y rotation of the wall polygon the actor is touching
/* 0x080 */ f32 floorHeight; // Y position of the floor polygon directly below the actor
/* 0x084 */ f32 yDistToWater; // Distance to the surface of active waterbox. Negative value means above water
/* 0x088 */ u16 bgCheckFlags; // See comments below actor struct for wip docs. TODO: macros for these flags
/* 0x08A */ s16 yawTowardsPlayer; // Y rotation difference between the actor and the player
/* 0x08C */ f32 xyzDistToPlayerSq; // Squared distance between the actor and the player in the x,y,z axis
/* 0x090 */ f32 xzDistToPlayer; // Distance between the actor and the player in the XZ plane
/* 0x094 */ f32 yDistToPlayer; // Dist is negative if the actor is above the player
/* 0x098 */ CollisionCheckInfo colChkInfo; // Variables related to the Collision Check system
/* 0x0B4 */ ActorShape shape; // Variables related to the physical shape of the actor
/* 0x0E4 */ Vec3f projectedPos; // Position of the actor in projected space
/* 0x0F0 */ f32 projectedW; // w component of the projected actor position
/* 0x0F4 */ f32 uncullZoneForward; // Amount to increase the uncull zone forward by (in projected space)
/* 0x0F8 */ f32 uncullZoneScale; // Amount to increase the uncull zone scale by (in projected space)
/* 0x0FC */ f32 uncullZoneDownward; // Amount to increase uncull zone downward by (in projected space)
/* 0x100 */ Vec3f prevPos; // World position from the previous update cycle
/* 0x10C */ u8 isTargeted; // Set to true if the actor is currently being targeted by the player
/* 0x10D */ u8 targetPriority; // Lower values have higher priority. Resets to 0 when player stops targeting
/* 0x10E */ u16 textId; // Text ID to pass to link/display when interacting with the actor
/* 0x110 */ u16 freezeTimer; // Actor does not update when set. Timer decrements automatically
/* 0x112 */ u16 colorFilterParams; // Set color filter to red, blue, or white. Toggle opa or xlu
/* 0x114 */ u8 colorFilterTimer; // A non-zero value enables the color filter. Decrements automatically
/* 0x115 */ u8 isDrawn; // Set to true if the actor is currently being drawn. Always stays false for lens actors
/* 0x116 */ u8 dropFlag; // Configures what item is dropped by the actor from `Item_DropCollectibleRandom`
/* 0x117 */ u8 naviEnemyId; // Sets what 0600 dialog to display when talking to navi. Default 0xFF
/* 0x118 */ struct Actor* parent; // Usage is actor specific. Set if actor is spawned via `Actor_SpawnAsChild`
/* 0x11C */ struct Actor* child; // Usage is actor specific. Set if actor is spawned via `Actor_SpawnAsChild`
/* 0x120 */ struct Actor* prev; // Previous actor of this category
/* 0x124 */ struct Actor* next; // Next actor of this category
/* 0x128 */ ActorFunc init; // Initialization Routine. Called by `Actor_Init` or `Actor_UpdateAll`
/* 0x12C */ ActorFunc destroy; // Destruction Routine. Called by `Actor_Destroy`
/* 0x130 */ ActorFunc update; // Update Routine. Called by `Actor_UpdateAll`
/* 0x134 */ ActorFunc draw; // Draw Routine. Called by `Actor_Draw`
/* 0x138 */ ActorOverlay* overlayEntry; // Pointer to the overlay table entry for this actor
/* 0x13C */ char dbgPad[0x10]; // Padding that only exists in the debug rom
} Actor; // size = 0x14C
typedef enum {
/* 0 */ FOOT_LEFT,
/* 1 */ FOOT_RIGHT
} ActorFootIndex;
/*
BgCheckFlags WIP documentation:
& 0x001 : Standing on the ground
& 0x002 : Has touched the ground (only active for 1 frame)
& 0x004 : Has left the ground (only active for 1 frame)
& 0x008 : Touching a wall
& 0x010 : Touching a ceiling
& 0x020 : On or below water surface
& 0x040 : Has touched water (actor is responsible for unsetting this the frame it touches the water)
& 0x080 : Similar to & 0x1 but with no velocity check and is cleared every frame
& 0x100 : Crushed between a floor and ceiling (triggers a void for player)
& 0x200 : Unknown (only set/used by player so far)
*/
/*
colorFilterParams WIP documentation
& 0x8000 : white
& 0x4000 : red
if neither of the above are set : blue
(& 0x1F00 >> 5) | 7 : color intensity
0x2000 : translucent, else opaque
*/
typedef struct DynaPolyActor {
/* 0x000 */ struct Actor actor;
/* 0x14C */ s32 bgId;
/* 0x150 */ f32 unk_150;
/* 0x154 */ f32 unk_154;
/* 0x158 */ s16 unk_158; // y rotation?
/* 0x15A */ u16 unk_15A;
/* 0x15C */ u32 unk_15C;
/* 0x160 */ u8 unk_160;
/* 0x162 */ s16 unk_162;
} DynaPolyActor; // size = 0x164
typedef struct {
/* 0x00 */ MtxF* matrices;
/* 0x04 */ s16* objectIds;
/* 0x08 */ s16 count;
/* 0x0C */ Gfx** dLists;
/* 0x10 */ s32 val; // used for various purposes: both a status indicator and counter
/* 0x14 */ s32 prevLimbIndex;
} BodyBreak;
#define BODYBREAK_OBJECT_DEFAULT -1 // use the same object as the actor
#define BODYBREAK_STATUS_READY -1
#define BODYBREAK_STATUS_FINISHED 0
typedef enum {
/* 0x00 */ ITEM00_RUPEE_GREEN,
/* 0x01 */ ITEM00_RUPEE_BLUE,
/* 0x02 */ ITEM00_RUPEE_RED,
/* 0x03 */ ITEM00_HEART,
/* 0x04 */ ITEM00_BOMBS_A,
/* 0x05 */ ITEM00_ARROWS_SINGLE,
/* 0x06 */ ITEM00_HEART_PIECE,
/* 0x07 */ ITEM00_HEART_CONTAINER,
/* 0x08 */ ITEM00_ARROWS_SMALL,
/* 0x09 */ ITEM00_ARROWS_MEDIUM,
/* 0x0A */ ITEM00_ARROWS_LARGE,
/* 0x0B */ ITEM00_BOMBS_B,
/* 0x0C */ ITEM00_NUTS,
/* 0x0D */ ITEM00_STICK,
/* 0x0E */ ITEM00_MAGIC_LARGE,
/* 0x0F */ ITEM00_MAGIC_SMALL,
/* 0x10 */ ITEM00_SEEDS,
/* 0x11 */ ITEM00_SMALL_KEY,
/* 0x12 */ ITEM00_FLEXIBLE,
/* 0x13 */ ITEM00_RUPEE_ORANGE,
/* 0x14 */ ITEM00_RUPEE_PURPLE,
/* 0x15 */ ITEM00_SHIELD_DEKU,
/* 0x16 */ ITEM00_SHIELD_HYLIAN,
/* 0x17 */ ITEM00_TUNIC_ZORA,
/* 0x18 */ ITEM00_TUNIC_GORON,
/* 0x19 */ ITEM00_BOMBS_SPECIAL
} Item00Type;
struct EnItem00;
typedef void (*EnItem00ActionFunc)(struct EnItem00*, struct GlobalContext*);
typedef struct EnItem00 {
/* 0x000 */ Actor actor;
/* 0x14C */ EnItem00ActionFunc actionFunc;
/* 0x150 */ s16 collectibleFlag;
/* 0x152 */ s16 getItemId;
/* 0x154 */ s16 unk_154;
/* 0x156 */ s16 unk_156;
/* 0x158 */ s16 unk_158;
/* 0x15A */ s16 unk_15A;
/* 0x15C */ f32 scale;
/* 0x160 */ ColliderCylinder collider;
} EnItem00; // size = 0x1AC
typedef enum {
/* 0x00 */ A_OBJ_BLOCK_SMALL,
/* 0x01 */ A_OBJ_BLOCK_LARGE,
/* 0x02 */ A_OBJ_BLOCK_HUGE,
/* 0x03 */ A_OBJ_BLOCK_SMALL_ROT,
/* 0x04 */ A_OBJ_BLOCK_LARGE_ROT,
/* 0x05 */ A_OBJ_CUBE_SMALL,
/* 0x06 */ A_OBJ_UNKNOWN_6,
/* 0x07 */ A_OBJ_GRASS_CLUMP,
/* 0x08 */ A_OBJ_TREE_STUMP,
/* 0x09 */ A_OBJ_SIGNPOST_OBLONG,
/* 0x0A */ A_OBJ_SIGNPOST_ARROW,
/* 0x0B */ A_OBJ_KNOB
} AObjType;
struct EnAObj;
typedef void (*EnAObjActionFunc)(struct EnAObj*, struct GlobalContext*);
typedef struct EnAObj {
/* 0x000 */ DynaPolyActor dyna;
/* 0x164 */ EnAObjActionFunc actionFunc;
/* 0x168 */ s32 unk_168;
/* 0x16C */ s16 textId;
/* 0x16E */ s16 unk_16E;
/* 0x170 */ s16 unk_170;
/* 0x172 */ s16 unk_172;
/* 0x174 */ s16 unk_174;
/* 0x178 */ f32 unk_178;
/* 0x17C */ ColliderCylinder collider;
} EnAObj; // size = 0x1C8
typedef enum {
/* 0x00 */ ACTORCAT_SWITCH,
/* 0x01 */ ACTORCAT_BG,
/* 0x02 */ ACTORCAT_PLAYER,
/* 0x03 */ ACTORCAT_EXPLOSIVE,
/* 0x04 */ ACTORCAT_NPC,
/* 0x05 */ ACTORCAT_ENEMY,
/* 0x06 */ ACTORCAT_PROP,
/* 0x07 */ ACTORCAT_ITEMACTION,
/* 0x08 */ ACTORCAT_MISC,
/* 0x09 */ ACTORCAT_BOSS,
/* 0x0A */ ACTORCAT_DOOR,
/* 0x0B */ ACTORCAT_CHEST
} ActorCategory;
typedef enum {
/* 0x0000 */ ACTOR_PLAYER,
/* 0x0001 */ ACTOR_UNSET_1,
/* 0x0002 */ ACTOR_EN_TEST,
/* 0x0003 */ ACTOR_UNSET_3,
/* 0x0004 */ ACTOR_EN_GIRLA,
/* 0x0005 */ ACTOR_UNSET_5,
/* 0x0006 */ ACTOR_UNSET_6,
/* 0x0007 */ ACTOR_EN_PART,
/* 0x0008 */ ACTOR_EN_LIGHT,
/* 0x0009 */ ACTOR_EN_DOOR,
/* 0x000A */ ACTOR_EN_BOX, // Treasure Chest
/* 0x000B */ ACTOR_BG_DY_YOSEIZO,
/* 0x000C */ ACTOR_BG_HIDAN_FIREWALL,
/* 0x000D */ ACTOR_EN_POH,
/* 0x000E */ ACTOR_EN_OKUTA,
/* 0x000F */ ACTOR_BG_YDAN_SP,
/* 0x0010 */ ACTOR_EN_BOM,
/* 0x0011 */ ACTOR_EN_WALLMAS,
/* 0x0012 */ ACTOR_EN_DODONGO,
/* 0x0013 */ ACTOR_EN_FIREFLY,
/* 0x0014 */ ACTOR_EN_HORSE,
/* 0x0015 */ ACTOR_EN_ITEM00,
/* 0x0016 */ ACTOR_EN_ARROW,
/* 0x0017 */ ACTOR_UNSET_17,
/* 0x0018 */ ACTOR_EN_ELF,
/* 0x0019 */ ACTOR_EN_NIW,
/* 0x001A */ ACTOR_UNSET_1A,
/* 0x001B */ ACTOR_EN_TITE,
/* 0x001C */ ACTOR_EN_REEBA,
/* 0x001D */ ACTOR_EN_PEEHAT,
/* 0x001E */ ACTOR_EN_BUTTE,
/* 0x001F */ ACTOR_UNSET_1F,
/* 0x0020 */ ACTOR_EN_INSECT,
/* 0x0021 */ ACTOR_EN_FISH,
/* 0x0022 */ ACTOR_UNSET_22,
/* 0x0023 */ ACTOR_EN_HOLL,
/* 0x0024 */ ACTOR_EN_SCENE_CHANGE,
/* 0x0025 */ ACTOR_EN_ZF,
/* 0x0026 */ ACTOR_EN_HATA,
/* 0x0027 */ ACTOR_BOSS_DODONGO,
/* 0x0028 */ ACTOR_BOSS_GOMA,
/* 0x0029 */ ACTOR_EN_ZL1,
/* 0x002A */ ACTOR_EN_VIEWER,
/* 0x002B */ ACTOR_EN_GOMA,
/* 0x002C */ ACTOR_BG_PUSHBOX,
/* 0x002D */ ACTOR_EN_BUBBLE,
/* 0x002E */ ACTOR_DOOR_SHUTTER,
/* 0x002F */ ACTOR_EN_DODOJR,
/* 0x0030 */ ACTOR_EN_BDFIRE,
/* 0x0031 */ ACTOR_UNSET_31,
/* 0x0032 */ ACTOR_EN_BOOM,
/* 0x0033 */ ACTOR_EN_TORCH2,
/* 0x0034 */ ACTOR_EN_BILI,
/* 0x0035 */ ACTOR_EN_TP,
/* 0x0036 */ ACTOR_UNSET_36,
/* 0x0037 */ ACTOR_EN_ST,
/* 0x0038 */ ACTOR_EN_BW,
/* 0x0039 */ ACTOR_EN_A_OBJ,
/* 0x003A */ ACTOR_EN_EIYER,
/* 0x003B */ ACTOR_EN_RIVER_SOUND,
/* 0x003C */ ACTOR_EN_HORSE_NORMAL,
/* 0x003D */ ACTOR_EN_OSSAN,
/* 0x003E */ ACTOR_BG_TREEMOUTH,
/* 0x003F */ ACTOR_BG_DODOAGO,
/* 0x0040 */ ACTOR_BG_HIDAN_DALM,
/* 0x0041 */ ACTOR_BG_HIDAN_HROCK,
/* 0x0042 */ ACTOR_EN_HORSE_GANON,
/* 0x0043 */ ACTOR_BG_HIDAN_ROCK,
/* 0x0044 */ ACTOR_BG_HIDAN_RSEKIZOU,
/* 0x0045 */ ACTOR_BG_HIDAN_SEKIZOU,
/* 0x0046 */ ACTOR_BG_HIDAN_SIMA,
/* 0x0047 */ ACTOR_BG_HIDAN_SYOKU,
/* 0x0048 */ ACTOR_EN_XC,
/* 0x0049 */ ACTOR_BG_HIDAN_CURTAIN,
/* 0x004A */ ACTOR_BG_SPOT00_HANEBASI,
/* 0x004B */ ACTOR_EN_MB,
/* 0x004C */ ACTOR_EN_BOMBF,
/* 0x004D */ ACTOR_EN_ZL2,
/* 0x004E */ ACTOR_BG_HIDAN_FSLIFT,
/* 0x004F */ ACTOR_EN_OE2,
/* 0x0050 */ ACTOR_BG_YDAN_HASI,
/* 0x0051 */ ACTOR_BG_YDAN_MARUTA,
/* 0x0052 */ ACTOR_BOSS_GANONDROF,
/* 0x0053 */ ACTOR_UNSET_53,
/* 0x0054 */ ACTOR_EN_AM,
/* 0x0055 */ ACTOR_EN_DEKUBABA,
/* 0x0056 */ ACTOR_EN_M_FIRE1,
/* 0x0057 */ ACTOR_EN_M_THUNDER,
/* 0x0058 */ ACTOR_BG_DDAN_JD,
/* 0x0059 */ ACTOR_BG_BREAKWALL,
/* 0x005A */ ACTOR_EN_JJ,
/* 0x005B */ ACTOR_EN_HORSE_ZELDA,
/* 0x005C */ ACTOR_BG_DDAN_KD,
/* 0x005D */ ACTOR_DOOR_WARP1,
/* 0x005E */ ACTOR_OBJ_SYOKUDAI,
/* 0x005F */ ACTOR_ITEM_B_HEART,
/* 0x0060 */ ACTOR_EN_DEKUNUTS,
/* 0x0061 */ ACTOR_BG_MENKURI_KAITEN,
/* 0x0062 */ ACTOR_BG_MENKURI_EYE,
/* 0x0063 */ ACTOR_EN_VALI,
/* 0x0064 */ ACTOR_BG_MIZU_MOVEBG,
/* 0x0065 */ ACTOR_BG_MIZU_WATER,
/* 0x0066 */ ACTOR_ARMS_HOOK,
/* 0x0067 */ ACTOR_EN_FHG,
/* 0x0068 */ ACTOR_BG_MORI_HINERI,
/* 0x0069 */ ACTOR_EN_BB,
/* 0x006A */ ACTOR_BG_TOKI_HIKARI,
/* 0x006B */ ACTOR_EN_YUKABYUN,
/* 0x006C */ ACTOR_BG_TOKI_SWD,
/* 0x006D */ ACTOR_EN_FHG_FIRE,
/* 0x006E */ ACTOR_BG_MJIN,
/* 0x006F */ ACTOR_BG_HIDAN_KOUSI,
/* 0x0070 */ ACTOR_DOOR_TOKI,
/* 0x0071 */ ACTOR_BG_HIDAN_HAMSTEP,
/* 0x0072 */ ACTOR_EN_BIRD,
/* 0x0073 */ ACTOR_UNSET_73,
/* 0x0074 */ ACTOR_UNSET_74,
/* 0x0075 */ ACTOR_UNSET_75,
/* 0x0076 */ ACTOR_UNSET_76,
/* 0x0077 */ ACTOR_EN_WOOD02,
/* 0x0078 */ ACTOR_UNSET_78,
/* 0x0079 */ ACTOR_UNSET_79,
/* 0x007A */ ACTOR_UNSET_7A,
/* 0x007B */ ACTOR_UNSET_7B,
/* 0x007C */ ACTOR_EN_LIGHTBOX,
/* 0x007D */ ACTOR_EN_PU_BOX,
/* 0x007E */ ACTOR_UNSET_7E,
/* 0x007F */ ACTOR_UNSET_7F,
/* 0x0080 */ ACTOR_EN_TRAP,
/* 0x0081 */ ACTOR_EN_AROW_TRAP,
/* 0x0082 */ ACTOR_EN_VASE,
/* 0x0083 */ ACTOR_UNSET_83,
/* 0x0084 */ ACTOR_EN_TA,
/* 0x0085 */ ACTOR_EN_TK,
/* 0x0086 */ ACTOR_BG_MORI_BIGST,
/* 0x0087 */ ACTOR_BG_MORI_ELEVATOR,
/* 0x0088 */ ACTOR_BG_MORI_KAITENKABE,
/* 0x0089 */ ACTOR_BG_MORI_RAKKATENJO,
/* 0x008A */ ACTOR_EN_VM,
/* 0x008B */ ACTOR_DEMO_EFFECT,
/* 0x008C */ ACTOR_DEMO_KANKYO,
/* 0x008D */ ACTOR_BG_HIDAN_FWBIG,
/* 0x008E */ ACTOR_EN_FLOORMAS,
/* 0x008F */ ACTOR_EN_HEISHI1,
/* 0x0090 */ ACTOR_EN_RD,
/* 0x0091 */ ACTOR_EN_PO_SISTERS,
/* 0x0092 */ ACTOR_BG_HEAVY_BLOCK,
/* 0x0093 */ ACTOR_BG_PO_EVENT,
/* 0x0094 */ ACTOR_OBJ_MURE,
/* 0x0095 */ ACTOR_EN_SW,
/* 0x0096 */ ACTOR_BOSS_FD,
/* 0x0097 */ ACTOR_OBJECT_KANKYO,
/* 0x0098 */ ACTOR_EN_DU,
/* 0x0099 */ ACTOR_EN_FD,
/* 0x009A */ ACTOR_EN_HORSE_LINK_CHILD,
/* 0x009B */ ACTOR_DOOR_ANA,
/* 0x009C */ ACTOR_BG_SPOT02_OBJECTS,
/* 0x009D */ ACTOR_BG_HAKA,
/* 0x009E */ ACTOR_MAGIC_WIND,
/* 0x009F */ ACTOR_MAGIC_FIRE,
/* 0x00A0 */ ACTOR_UNSET_A0,
/* 0x00A1 */ ACTOR_EN_RU1,
/* 0x00A2 */ ACTOR_BOSS_FD2,
/* 0x00A3 */ ACTOR_EN_FD_FIRE,
/* 0x00A4 */ ACTOR_EN_DH,
/* 0x00A5 */ ACTOR_EN_DHA,
/* 0x00A6 */ ACTOR_EN_RL,
/* 0x00A7 */ ACTOR_EN_ENCOUNT1,
/* 0x00A8 */ ACTOR_DEMO_DU,
/* 0x00A9 */ ACTOR_DEMO_IM,
/* 0x00AA */ ACTOR_DEMO_TRE_LGT,
/* 0x00AB */ ACTOR_EN_FW,
/* 0x00AC */ ACTOR_BG_VB_SIMA,
/* 0x00AD */ ACTOR_EN_VB_BALL,
/* 0x00AE */ ACTOR_BG_HAKA_MEGANE,
/* 0x00AF */ ACTOR_BG_HAKA_MEGANEBG,
/* 0x00B0 */ ACTOR_BG_HAKA_SHIP,
/* 0x00B1 */ ACTOR_BG_HAKA_SGAMI,
/* 0x00B2 */ ACTOR_UNSET_B2,
/* 0x00B3 */ ACTOR_EN_HEISHI2,
/* 0x00B4 */ ACTOR_EN_ENCOUNT2,
/* 0x00B5 */ ACTOR_EN_FIRE_ROCK,
/* 0x00B6 */ ACTOR_EN_BROB,
/* 0x00B7 */ ACTOR_MIR_RAY,
/* 0x00B8 */ ACTOR_BG_SPOT09_OBJ,
/* 0x00B9 */ ACTOR_BG_SPOT18_OBJ,
/* 0x00BA */ ACTOR_BOSS_VA,
/* 0x00BB */ ACTOR_BG_HAKA_TUBO,
/* 0x00BC */ ACTOR_BG_HAKA_TRAP,
/* 0x00BD */ ACTOR_BG_HAKA_HUTA,
/* 0x00BE */ ACTOR_BG_HAKA_ZOU,
/* 0x00BF */ ACTOR_BG_SPOT17_FUNEN,
/* 0x00C0 */ ACTOR_EN_SYATEKI_ITM,
/* 0x00C1 */ ACTOR_EN_SYATEKI_MAN,
/* 0x00C2 */ ACTOR_EN_TANA,
/* 0x00C3 */ ACTOR_EN_NB,
/* 0x00C4 */ ACTOR_BOSS_MO,
/* 0x00C5 */ ACTOR_EN_SB,
/* 0x00C6 */ ACTOR_EN_BIGOKUTA,
/* 0x00C7 */ ACTOR_EN_KAREBABA,
/* 0x00C8 */ ACTOR_BG_BDAN_OBJECTS,
/* 0x00C9 */ ACTOR_DEMO_SA,
/* 0x00CA */ ACTOR_DEMO_GO,
/* 0x00CB */ ACTOR_EN_IN,
/* 0x00CC */ ACTOR_EN_TR,
/* 0x00CD */ ACTOR_BG_SPOT16_BOMBSTONE,
/* 0x00CE */ ACTOR_UNSET_CE,
/* 0x00CF */ ACTOR_BG_HIDAN_KOWARERUKABE,
/* 0x00D0 */ ACTOR_BG_BOMBWALL,
/* 0x00D1 */ ACTOR_BG_SPOT08_ICEBLOCK,
/* 0x00D2 */ ACTOR_EN_RU2,
/* 0x00D3 */ ACTOR_OBJ_DEKUJR,
/* 0x00D4 */ ACTOR_BG_MIZU_UZU,
/* 0x00D5 */ ACTOR_BG_SPOT06_OBJECTS,
/* 0x00D6 */ ACTOR_BG_ICE_OBJECTS,
/* 0x00D7 */ ACTOR_BG_HAKA_WATER,
/* 0x00D8 */ ACTOR_UNSET_D8,
/* 0x00D9 */ ACTOR_EN_MA2,
/* 0x00DA */ ACTOR_EN_BOM_CHU,
/* 0x00DB */ ACTOR_EN_HORSE_GAME_CHECK,
/* 0x00DC */ ACTOR_BOSS_TW,
/* 0x00DD */ ACTOR_EN_RR,
/* 0x00DE */ ACTOR_EN_BA,
/* 0x00DF */ ACTOR_EN_BX,
/* 0x00E0 */ ACTOR_EN_ANUBICE,
/* 0x00E1 */ ACTOR_EN_ANUBICE_FIRE,
/* 0x00E2 */ ACTOR_BG_MORI_HASHIGO,
/* 0x00E3 */ ACTOR_BG_MORI_HASHIRA4,
/* 0x00E4 */ ACTOR_BG_MORI_IDOMIZU,
/* 0x00E5 */ ACTOR_BG_SPOT16_DOUGHNUT,
/* 0x00E6 */ ACTOR_BG_BDAN_SWITCH,
/* 0x00E7 */ ACTOR_EN_MA1,
/* 0x00E8 */ ACTOR_BOSS_GANON,
/* 0x00E9 */ ACTOR_BOSS_SST,
/* 0x00EA */ ACTOR_UNSET_EA,
/* 0x00EB */ ACTOR_UNSET_EB,
/* 0x00EC */ ACTOR_EN_NY,
/* 0x00ED */ ACTOR_EN_FR,
/* 0x00EE */ ACTOR_ITEM_SHIELD,
/* 0x00EF */ ACTOR_BG_ICE_SHELTER,
/* 0x00F0 */ ACTOR_EN_ICE_HONO,
/* 0x00F1 */ ACTOR_ITEM_OCARINA,
/* 0x00F2 */ ACTOR_UNSET_F2,
/* 0x00F3 */ ACTOR_UNSET_F3,
/* 0x00F4 */ ACTOR_MAGIC_DARK,
/* 0x00F5 */ ACTOR_DEMO_6K,
/* 0x00F6 */ ACTOR_EN_ANUBICE_TAG,
/* 0x00F7 */ ACTOR_BG_HAKA_GATE,
/* 0x00F8 */ ACTOR_BG_SPOT15_SAKU,
/* 0x00F9 */ ACTOR_BG_JYA_GOROIWA,
/* 0x00FA */ ACTOR_BG_JYA_ZURERUKABE,
/* 0x00FB */ ACTOR_UNSET_FB,
/* 0x00FC */ ACTOR_BG_JYA_COBRA,
/* 0x00FD */ ACTOR_BG_JYA_KANAAMI,
/* 0x00FE */ ACTOR_FISHING,
/* 0x00FF */ ACTOR_OBJ_OSHIHIKI,
/* 0x0100 */ ACTOR_BG_GATE_SHUTTER,
/* 0x0101 */ ACTOR_EFF_DUST,
/* 0x0102 */ ACTOR_BG_SPOT01_FUSYA,
/* 0x0103 */ ACTOR_BG_SPOT01_IDOHASHIRA,
/* 0x0104 */ ACTOR_BG_SPOT01_IDOMIZU,
/* 0x0105 */ ACTOR_BG_PO_SYOKUDAI,
/* 0x0106 */ ACTOR_BG_GANON_OTYUKA,
/* 0x0107 */ ACTOR_BG_SPOT15_RRBOX,
/* 0x0108 */ ACTOR_BG_UMAJUMP,
/* 0x0109 */ ACTOR_UNSET_109,
/* 0x010A */ ACTOR_ARROW_FIRE,
/* 0x010B */ ACTOR_ARROW_ICE,
/* 0x010C */ ACTOR_ARROW_LIGHT,
/* 0x010D */ ACTOR_UNSET_10D,
/* 0x010E */ ACTOR_UNSET_10E,
/* 0x010F */ ACTOR_ITEM_ETCETERA,
/* 0x0110 */ ACTOR_OBJ_KIBAKO,
/* 0x0111 */ ACTOR_OBJ_TSUBO,
/* 0x0112 */ ACTOR_EN_WONDER_ITEM,
/* 0x0113 */ ACTOR_EN_IK,
/* 0x0114 */ ACTOR_DEMO_IK,
/* 0x0115 */ ACTOR_EN_SKJ,
/* 0x0116 */ ACTOR_EN_SKJNEEDLE,
/* 0x0117 */ ACTOR_EN_G_SWITCH,
/* 0x0118 */ ACTOR_DEMO_EXT,
/* 0x0119 */ ACTOR_DEMO_SHD,
/* 0x011A */ ACTOR_EN_DNS,
/* 0x011B */ ACTOR_ELF_MSG,
/* 0x011C */ ACTOR_EN_HONOTRAP,
/* 0x011D */ ACTOR_EN_TUBO_TRAP,
/* 0x011E */ ACTOR_OBJ_ICE_POLY,
/* 0x011F */ ACTOR_BG_SPOT03_TAKI,
/* 0x0120 */ ACTOR_BG_SPOT07_TAKI,
/* 0x0121 */ ACTOR_EN_FZ,
/* 0x0122 */ ACTOR_EN_PO_RELAY,
/* 0x0123 */ ACTOR_BG_RELAY_OBJECTS,
/* 0x0124 */ ACTOR_EN_DIVING_GAME,
/* 0x0125 */ ACTOR_EN_KUSA,
/* 0x0126 */ ACTOR_OBJ_BEAN,
/* 0x0127 */ ACTOR_OBJ_BOMBIWA,
/* 0x0128 */ ACTOR_UNSET_128,
/* 0x0129 */ ACTOR_UNSET_129,
/* 0x012A */ ACTOR_OBJ_SWITCH,
/* 0x012B */ ACTOR_OBJ_ELEVATOR,
/* 0x012C */ ACTOR_OBJ_LIFT,
/* 0x012D */ ACTOR_OBJ_HSBLOCK,
/* 0x012E */ ACTOR_EN_OKARINA_TAG,
/* 0x012F */ ACTOR_EN_YABUSAME_MARK,
/* 0x0130 */ ACTOR_EN_GOROIWA,
/* 0x0131 */ ACTOR_EN_EX_RUPPY,
/* 0x0132 */ ACTOR_EN_TORYO,
/* 0x0133 */ ACTOR_EN_DAIKU,
/* 0x0134 */ ACTOR_UNSET_134,
/* 0x0135 */ ACTOR_EN_NWC,
/* 0x0136 */ ACTOR_EN_BLKOBJ,
/* 0x0137 */ ACTOR_ITEM_INBOX,
/* 0x0138 */ ACTOR_EN_GE1,
/* 0x0139 */ ACTOR_OBJ_BLOCKSTOP,
/* 0x013A */ ACTOR_EN_SDA,
/* 0x013B */ ACTOR_EN_CLEAR_TAG,
/* 0x013C */ ACTOR_EN_NIW_LADY,
/* 0x013D */ ACTOR_EN_GM,
/* 0x013E */ ACTOR_EN_MS,
/* 0x013F */ ACTOR_EN_HS,
/* 0x0140 */ ACTOR_BG_INGATE,
/* 0x0141 */ ACTOR_EN_KANBAN,
/* 0x0142 */ ACTOR_EN_HEISHI3,
/* 0x0143 */ ACTOR_EN_SYATEKI_NIW,
/* 0x0144 */ ACTOR_EN_ATTACK_NIW,
/* 0x0145 */ ACTOR_BG_SPOT01_IDOSOKO,
/* 0x0146 */ ACTOR_EN_SA,
/* 0x0147 */ ACTOR_EN_WONDER_TALK,
/* 0x0148 */ ACTOR_BG_GJYO_BRIDGE,
/* 0x0149 */ ACTOR_EN_DS,
/* 0x014A */ ACTOR_EN_MK,
/* 0x014B */ ACTOR_EN_BOM_BOWL_MAN,
/* 0x014C */ ACTOR_EN_BOM_BOWL_PIT,
/* 0x014D */ ACTOR_EN_OWL,
/* 0x014E */ ACTOR_EN_ISHI,
/* 0x014F */ ACTOR_OBJ_HANA,
/* 0x0150 */ ACTOR_OBJ_LIGHTSWITCH,
/* 0x0151 */ ACTOR_OBJ_MURE2,
/* 0x0152 */ ACTOR_EN_GO,
/* 0x0153 */ ACTOR_EN_FU,
/* 0x0154 */ ACTOR_UNSET_154,
/* 0x0155 */ ACTOR_EN_CHANGER,
/* 0x0156 */ ACTOR_BG_JYA_MEGAMI,
/* 0x0157 */ ACTOR_BG_JYA_LIFT,
/* 0x0158 */ ACTOR_BG_JYA_BIGMIRROR,
/* 0x0159 */ ACTOR_BG_JYA_BOMBCHUIWA,
/* 0x015A */ ACTOR_BG_JYA_AMISHUTTER,
/* 0x015B */ ACTOR_BG_JYA_BOMBIWA,
/* 0x015C */ ACTOR_BG_SPOT18_BASKET,
/* 0x015D */ ACTOR_UNSET_15D,
/* 0x015E */ ACTOR_EN_GANON_ORGAN,
/* 0x015F */ ACTOR_EN_SIOFUKI,
/* 0x0160 */ ACTOR_EN_STREAM,
/* 0x0161 */ ACTOR_UNSET_161,
/* 0x0162 */ ACTOR_EN_MM,
/* 0x0163 */ ACTOR_EN_KO,
/* 0x0164 */ ACTOR_EN_KZ,
/* 0x0165 */ ACTOR_EN_WEATHER_TAG,
/* 0x0166 */ ACTOR_BG_SST_FLOOR,
/* 0x0167 */ ACTOR_EN_ANI,
/* 0x0168 */ ACTOR_EN_EX_ITEM,
/* 0x0169 */ ACTOR_BG_JYA_IRONOBJ,
/* 0x016A */ ACTOR_EN_JS,
/* 0x016B */ ACTOR_EN_JSJUTAN,
/* 0x016C */ ACTOR_EN_CS,
/* 0x016D */ ACTOR_EN_MD,
/* 0x016E */ ACTOR_EN_HY,
/* 0x016F */ ACTOR_EN_GANON_MANT,
/* 0x0170 */ ACTOR_EN_OKARINA_EFFECT,
/* 0x0171 */ ACTOR_EN_MAG,
/* 0x0172 */ ACTOR_DOOR_GERUDO,
/* 0x0173 */ ACTOR_ELF_MSG2,
/* 0x0174 */ ACTOR_DEMO_GT,
/* 0x0175 */ ACTOR_EN_PO_FIELD,
/* 0x0176 */ ACTOR_EFC_ERUPC,
/* 0x0177 */ ACTOR_BG_ZG,
/* 0x0178 */ ACTOR_EN_HEISHI4,
/* 0x0179 */ ACTOR_EN_ZL3,
/* 0x017A */ ACTOR_BOSS_GANON2,
/* 0x017B */ ACTOR_EN_KAKASI,
/* 0x017C */ ACTOR_EN_TAKARA_MAN,
/* 0x017D */ ACTOR_OBJ_MAKEOSHIHIKI,
/* 0x017E */ ACTOR_OCEFF_SPOT,
/* 0x017F */ ACTOR_END_TITLE,
/* 0x0180 */ ACTOR_UNSET_180,
/* 0x0181 */ ACTOR_EN_TORCH,
/* 0x0182 */ ACTOR_DEMO_EC,
/* 0x0183 */ ACTOR_SHOT_SUN,
/* 0x0184 */ ACTOR_EN_DY_EXTRA,
/* 0x0185 */ ACTOR_EN_WONDER_TALK2,
/* 0x0186 */ ACTOR_EN_GE2,
/* 0x0187 */ ACTOR_OBJ_ROOMTIMER,
/* 0x0188 */ ACTOR_EN_SSH,
/* 0x0189 */ ACTOR_EN_STH,
/* 0x018A */ ACTOR_OCEFF_WIPE,
/* 0x018B */ ACTOR_OCEFF_STORM,
/* 0x018C */ ACTOR_EN_WEIYER,
/* 0x018D */ ACTOR_BG_SPOT05_SOKO,
/* 0x018E */ ACTOR_BG_JYA_1FLIFT,
/* 0x018F */ ACTOR_BG_JYA_HAHENIRON,
/* 0x0190 */ ACTOR_BG_SPOT12_GATE,
/* 0x0191 */ ACTOR_BG_SPOT12_SAKU,
/* 0x0192 */ ACTOR_EN_HINTNUTS,
/* 0x0193 */ ACTOR_EN_NUTSBALL,
/* 0x0194 */ ACTOR_BG_SPOT00_BREAK,
/* 0x0195 */ ACTOR_EN_SHOPNUTS,
/* 0x0196 */ ACTOR_EN_IT,
/* 0x0197 */ ACTOR_EN_GELDB,
/* 0x0198 */ ACTOR_OCEFF_WIPE2,
/* 0x0199 */ ACTOR_OCEFF_WIPE3,
/* 0x019A */ ACTOR_EN_NIW_GIRL,
/* 0x019B */ ACTOR_EN_DOG,
/* 0x019C */ ACTOR_EN_SI,
/* 0x019D */ ACTOR_BG_SPOT01_OBJECTS2,
/* 0x019E */ ACTOR_OBJ_COMB,
/* 0x019F */ ACTOR_BG_SPOT11_BAKUDANKABE,
/* 0x01A0 */ ACTOR_OBJ_KIBAKO2,
/* 0x01A1 */ ACTOR_EN_DNT_DEMO,
/* 0x01A2 */ ACTOR_EN_DNT_JIJI,
/* 0x01A3 */ ACTOR_EN_DNT_NOMAL,
/* 0x01A4 */ ACTOR_EN_GUEST,
/* 0x01A5 */ ACTOR_BG_BOM_GUARD,
/* 0x01A6 */ ACTOR_EN_HS2,
/* 0x01A7 */ ACTOR_DEMO_KEKKAI,
/* 0x01A8 */ ACTOR_BG_SPOT08_BAKUDANKABE,
/* 0x01A9 */ ACTOR_BG_SPOT17_BAKUDANKABE,
/* 0x01AA */ ACTOR_UNSET_1AA,
/* 0x01AB */ ACTOR_OBJ_MURE3,
/* 0x01AC */ ACTOR_EN_TG,
/* 0x01AD */ ACTOR_EN_MU,
/* 0x01AE */ ACTOR_EN_GO2,
/* 0x01AF */ ACTOR_EN_WF,
/* 0x01B0 */ ACTOR_EN_SKB,
/* 0x01B1 */ ACTOR_DEMO_GJ,
/* 0x01B2 */ ACTOR_DEMO_GEFF,
/* 0x01B3 */ ACTOR_BG_GND_FIREMEIRO,
/* 0x01B4 */ ACTOR_BG_GND_DARKMEIRO,
/* 0x01B5 */ ACTOR_BG_GND_SOULMEIRO,
/* 0x01B6 */ ACTOR_BG_GND_NISEKABE,
/* 0x01B7 */ ACTOR_BG_GND_ICEBLOCK,
/* 0x01B8 */ ACTOR_EN_GB,
/* 0x01B9 */ ACTOR_EN_GS,
/* 0x01BA */ ACTOR_BG_MIZU_BWALL,
/* 0x01BB */ ACTOR_BG_MIZU_SHUTTER,
/* 0x01BC */ ACTOR_EN_DAIKU_KAKARIKO,
/* 0x01BD */ ACTOR_BG_BOWL_WALL,
/* 0x01BE */ ACTOR_EN_WALL_TUBO,
/* 0x01BF */ ACTOR_EN_PO_DESERT,
/* 0x01C0 */ ACTOR_EN_CROW,
/* 0x01C1 */ ACTOR_DOOR_KILLER,
/* 0x01C2 */ ACTOR_BG_SPOT11_OASIS,
/* 0x01C3 */ ACTOR_BG_SPOT18_FUTA,
/* 0x01C4 */ ACTOR_BG_SPOT18_SHUTTER,
/* 0x01C5 */ ACTOR_EN_MA3,
/* 0x01C6 */ ACTOR_EN_COW,
/* 0x01C7 */ ACTOR_BG_ICE_TURARA,
/* 0x01C8 */ ACTOR_BG_ICE_SHUTTER,
/* 0x01C9 */ ACTOR_EN_KAKASI2,
/* 0x01CA */ ACTOR_EN_KAKASI3,
/* 0x01CB */ ACTOR_OCEFF_WIPE4,
/* 0x01CC */ ACTOR_EN_EG,
/* 0x01CD */ ACTOR_BG_MENKURI_NISEKABE,
/* 0x01CE */ ACTOR_EN_ZO,
/* 0x01CF */ ACTOR_OBJ_MAKEKINSUTA,
/* 0x01D0 */ ACTOR_EN_GE3,
/* 0x01D1 */ ACTOR_OBJ_TIMEBLOCK,
/* 0x01D2 */ ACTOR_OBJ_HAMISHI,
/* 0x01D3 */ ACTOR_EN_ZL4,
/* 0x01D4 */ ACTOR_EN_MM2,
/* 0x01D5 */ ACTOR_BG_JYA_BLOCK,
/* 0x01D6 */ ACTOR_OBJ_WARP2BLOCK,
/* 0x01D7 */ ACTOR_ID_MAX // originally "ACTOR_DLF_MAX"
} ActorID;
#endif