mm/tools/gitable.py
Anghelo Carvajal efc9df3f56
ovl_player_actor: Dawn of a new PR (#1227)
* Rename Player_UpdateBottleHeld

* Match func_808497A0

* func_80852290 NON_MATCHING

* Match func_8083B3B4

* Params cleanup

* Match func_8083FBC4

* sfxId cleanups and others

* Fix declaration of functions from D_8085D990

* Change D_8085BE84 to be a 2D array

* ARRAY_COUNT_2D

* Match func_8085ADA0

* func_808426F0 nonmatching

* Match func_80852290

* Match func_808426F0

Co-authored-by: engineer124 <engineer124engineer124@gmail.com>

* Add notes to Player_SetDoAction

* Name putAwayCountdown

* rebase

* Match func_80856918

* format

* func_8084933C nonmatching
small amount of boomerang documentation

* Progress on moving data near where it is used

* finish moving data

* format

* cleanup up remaining data

* more match

* Some minor cleanups

* PlayerCsMode enum

* func_80851F18 nonmatching

* Fix unk_B10

* Purge ExchangeItemID enum

* Rename `targetActor` to `talkActor`

* Name `targetedActor`

* PLAYER_LIMB_BUF_SIZE

Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com>

* Change SkelAnime Player functions to take a void pointer for the corresponding buffers

* Use PlayerAnimationFrame on Player_DrawImpl

* Match func_8082F1AC

* Match func_8083D23C

* cleanup

* Match and clean up func_808373F8

* Match and document func_8083A98C

* PLAYER_PARAMS macro and PlayerInitMode enum

* Preliminary names for InitMode functions

* Match func_8083C8E8

* remove redundant externs

* Match func_8084933C

* cleanup func_8084933C

* Access D_8085BE84 directly instead of using a macro

* Match func_8084AC84

* Fix boomearng typo

* OK boomerang

* cleanup func_8083D168

* untargetedRotY

* this->unk_14E = ABS_ALT(var_v1);

* GIFIELD macros

* sort of a match

* Match func_8084C16C

Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com>

* Use the same trick to match func_808573A4

* Add note on Deku spinning

* Match func_8084D18C

* Match func_80850D68

* Improve func_80832660

* Match func_80854EFC

Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com>

* Rename unk_B2A to getItemDrawId

* Some cleanup

* fix merge issues

* format

* minor anim docs

* Match func_808553F4

* Cleanup func_808553F4

* func_8083D860 nonmatching

* Match func_8083D860

* Defake func_80859BA8

* ()

* Add notes to PlayerAnimGroup enum

* underwaterTimer

Co-authored-by: engineer124 <engineer124engineer124@gmail.com>

* some stateFlags cleaning

* more stateFlags cleaning

* some notes and minor cleanups

* more general cleanups

* Slightly less fake func_80832CAC

* Document some melee weapon damage stuff

* Mark lunge storage

* Note PCS patch

* match

* add notes to bss

* yeet extra indentation

* add reloc as nonmatching to spec

* floorSfxOffset

* Player_GetFloorSfx

* Player_GetFloorSfxByAge

* Comments for AnimSfx dunctions

* Name some AnimSfx functions

* Name AnimSfx stuff

* Some PlayerAgeProperties notes

* use animflag defines

* Player_SpawnExplosive

* fix enum and some other minor fixes

* Bit more misc. cleanup

* Use OoT's version of func_808333CC

* Note on quickspin buffer

* Final nonmatching, func_80851F18

Co-authored-by: Synray <31429825+Synray@users.noreply.github.com>

* RIP player.c

* Name Player_StopHorizontalMovement

* misc fixes

* Actor_DeactivateLens

* fixes

* typos and tweaks

* minor stuff

* add names as comments on the animgoup array

* Correct some function names and data type

* add anim commets to ageproperties

* some notes

* De-fake func_80840F90

* Defake & clean up func_8085ADA0

* Improve func_80859BA8

* Enums in func_80852B28

* Name some secret-related things

* 3 small things

* stuff

* Player_TalkWithPlayer

* SurfaceType_GetFloorType

* SurfaceType_GetWallFlags

* and more bgcheck stuff

* more bss naming

* sPlayerControlInput

* clean up func_80836F10 a bit

* name the parameters of func_80835BF8

* door stuff

* remove NON_MATCHING

* remove D_8085D2B0 padding

* Name some Player_Cutscene_ functions

* various cleanups

* format

* remainingHopsCounter

* some cleanups on the struct

* Actor_RequestRumble

* this->exchangeItemId = PLAYER_AP_NONE;

* fix merge stuff

* format

* PlayerUnkAA5

* Name two cylinder-related functions

* BSS

* Add MagicConsume's enum, treat lensActive as bool

* Update func_808332A0 based on better info

* fix merge

* fix merge issues

* remove redundant comments

* Name Player_AddQuake

* ANIM_FLAG_UPDATE*_*Y

* Format

* AT_TYPE_ENEMY

* fix merge issues

* format

* fix uintptr_ts

* Rename

* Name leftHandMf

* fix merge issues

* format

* exchangeItemId <= PLAYER_IA_MINUS1

* getItemDrawIdPlusOne

* currentActorCsIndex

* <= PLAYER_IA_MINUS1

* fix merge issues

* format

* namefixer and bss

* fix build

* bombs parameters cleanup

* bss

* Fix building

* fix building

* Fix building

* Fix building and cleanups

* Pre-PR cleanup

* really...

* format

* review

* stateFlag Mistakes

* 268 * 0.1f

* z64door.h

* fix cutscene stuff

* bss

* Update include/z64player.h

Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>

* Update include/z64player.h

Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>

* reiew

* PR Review

* collision

* review

* format and a few stuff i missed

* EnBomExplosiveType

* weekeventregconvert and eventinfconvert

* more review

* review

* bss

* review

* re format sGetItemTable

* Entangle PlayerMask and PlayerItemAction

* a few extra cases i missed

* bss

* review

* EnArrow stuff

* ARROW_MAGIC_DEKU_BUBBLE

* minor format

* merge

* fix bss

* review

* !ARROW_IS_ARROW

* review

* bool cleanup

* fix merge

* review

* Player_StopCutscene

* Player_RequestQuake

* quakeIndex

* Player_RequestQuakeAndRumble

* knobDoor and slidingDoor

* bss

* fix

* review

* dog and float

---------

Co-authored-by: Elliptic Ellipsis <elliptic.ellipsis@gmail.com>
Co-authored-by: engineer124 <engineer124engineer124@gmail.com>
Co-authored-by: petrie911 <pmontag@PHYS-S129.iowa.uiowa.edu>
Co-authored-by: petrie911 <69443847+petrie911@users.noreply.github.com>
Co-authored-by: Synray <31429825+Synray@users.noreply.github.com>
2023-05-28 17:41:37 -04:00

1172 lines
33 KiB
Python
Executable File

#!/usr/bin/env python3
import argparse
from cgitb import text
import dataclasses
import os
import struct
import sys
import typing
GETITEMENTRY_FORMAT = ">BBbBH"
GETITEMENTRY_LENGTH = struct.calcsize(GETITEMENTRY_FORMAT)
# MM US: 0x2E964
itemId_names = {
0x00: "ITEM_OCARINA",
0x01: "ITEM_BOW",
0x02: "ITEM_ARROW_FIRE",
0x03: "ITEM_ARROW_ICE",
0x04: "ITEM_ARROW_LIGHT",
0x05: "ITEM_OCARINA_FAIRY",
0x06: "ITEM_BOMB",
0x07: "ITEM_BOMBCHU",
0x08: "ITEM_STICK",
0x09: "ITEM_NUT",
0x0A: "ITEM_MAGIC_BEANS",
0x0B: "ITEM_SLINGSHOT",
0x0C: "ITEM_POWDER_KEG",
0x0D: "ITEM_PICTO_BOX",
0x0E: "ITEM_LENS",
0x0F: "ITEM_HOOKSHOT",
0x10: "ITEM_SWORD_GREAT_FAIRY",
0x11: "ITEM_LONGSHOT",
0x12: "ITEM_BOTTLE",
0x13: "ITEM_POTION_RED",
0x14: "ITEM_POTION_GREEN",
0x15: "ITEM_POTION_BLUE",
0x16: "ITEM_FAIRY",
0x17: "ITEM_DEKU_PRINCESS",
0x18: "ITEM_MILK_BOTTLE",
0x19: "ITEM_MILK_HALF",
0x1A: "ITEM_FISH",
0x1B: "ITEM_BUG",
0x1C: "ITEM_BLUE_FIRE",
0x1D: "ITEM_POE",
0x1E: "ITEM_BIG_POE",
0x1F: "ITEM_SPRING_WATER",
0x20: "ITEM_HOT_SPRING_WATER",
0x21: "ITEM_ZORA_EGG",
0x22: "ITEM_GOLD_DUST",
0x23: "ITEM_MUSHROOM",
0x24: "ITEM_SEAHORSE",
0x25: "ITEM_CHATEAU",
0x26: "ITEM_HYLIAN_LOACH",
0x27: "ITEM_OBABA_DRINK",
0x28: "ITEM_MOON_TEAR",
0x29: "ITEM_DEED_LAND",
0x2A: "ITEM_DEED_SWAMP",
0x2B: "ITEM_DEED_MOUNTAIN",
0x2C: "ITEM_DEED_OCEAN",
0x2D: "ITEM_ROOM_KEY",
0x2E: "ITEM_LETTER_MAMA",
0x2F: "ITEM_LETTER_TO_KAFEI",
0x30: "ITEM_PENDANT_OF_MEMORIES",
0x31: "ITEM_TINGLE_MAP",
0x32: "ITEM_MASK_DEKU",
0x33: "ITEM_MASK_GORON",
0x34: "ITEM_MASK_ZORA",
0x35: "ITEM_MASK_FIERCE_DEITY",
0x36: "ITEM_MASK_TRUTH",
0x37: "ITEM_MASK_KAFEIS_MASK",
0x38: "ITEM_MASK_ALL_NIGHT",
0x39: "ITEM_MASK_BUNNY",
0x3A: "ITEM_MASK_KEATON",
0x3B: "ITEM_MASK_GARO",
0x3C: "ITEM_MASK_ROMANI",
0x3D: "ITEM_MASK_CIRCUS_LEADER",
0x3E: "ITEM_MASK_POSTMAN",
0x3F: "ITEM_MASK_COUPLE",
0x40: "ITEM_MASK_GREAT_FAIRY",
0x41: "ITEM_MASK_GIBDO",
0x42: "ITEM_MASK_DON_GERO",
0x43: "ITEM_MASK_KAMARO",
0x44: "ITEM_MASK_CAPTAIN",
0x45: "ITEM_MASK_STONE",
0x46: "ITEM_MASK_BREMEN",
0x47: "ITEM_MASK_BLAST",
0x48: "ITEM_MASK_SCENTS",
0x49: "ITEM_MASK_GIANT",
0x4A: "ITEM_BOW_ARROW_FIRE",
0x4B: "ITEM_BOW_ARROW_ICE",
0x4C: "ITEM_BOW_ARROW_LIGHT",
0x4D: "ITEM_SWORD_KOKIRI",
0x4E: "ITEM_SWORD_RAZOR",
0x4F: "ITEM_SWORD_GILDED",
0x50: "ITEM_SWORD_DEITY",
0x51: "ITEM_SHIELD_HERO",
0x52: "ITEM_SHIELD_MIRROR",
0x53: "ITEM_QUIVER_30",
0x54: "ITEM_QUIVER_40",
0x55: "ITEM_QUIVER_50",
0x56: "ITEM_BOMB_BAG_20",
0x57: "ITEM_BOMB_BAG_30",
0x58: "ITEM_BOMB_BAG_40",
0x59: "ITEM_WALLET_DEFAULT",
0x5A: "ITEM_WALLET_ADULT",
0x5B: "ITEM_WALLET_GIANT",
0x5C: "ITEM_FISHING_POLE",
0x5D: "ITEM_REMAINS_ODOLWA",
0x5E: "ITEM_REMAINS_GOHT",
0x5F: "ITEM_REMAINS_GYORG",
0x60: "ITEM_REMAINS_TWINMOLD",
0x61: "ITEM_SONG_SONATA",
0x62: "ITEM_SONG_LULLABY",
0x63: "ITEM_SONG_NOVA",
0x64: "ITEM_SONG_ELEGY",
0x65: "ITEM_SONG_OATH",
0x66: "ITEM_SONG_SARIA",
0x67: "ITEM_SONG_TIME",
0x68: "ITEM_SONG_HEALING",
0x69: "ITEM_SONG_EPONA",
0x6A: "ITEM_SONG_SOARING",
0x6B: "ITEM_SONG_STORMS",
0x6C: "ITEM_SONG_SUN",
0x6D: "ITEM_BOMBERS_NOTEBOOK",
0x6E: "ITEM_SKULL_TOKEN",
0x6F: "ITEM_HEART_CONTAINER",
0x70: "ITEM_HEART_PIECE",
0x73: "ITEM_SONG_LULLABY_INTRO" ,
0x74: "ITEM_KEY_BOSS",
0x75: "ITEM_COMPASS",
0x76: "ITEM_DUNGEON_MAP",
0x77: "ITEM_STRAY_FAIRIES",
0x78: "ITEM_KEY_SMALL",
0x79: "ITEM_MAGIC_SMALL",
0x7A: "ITEM_MAGIC_LARGE",
0x7B: "ITEM_HEART_PIECE_2",
0x7C: "ITEM_INVALID_1",
0x7D: "ITEM_INVALID_2",
0x7E: "ITEM_INVALID_3",
0x7F: "ITEM_INVALID_4",
0x80: "ITEM_INVALID_5",
0x81: "ITEM_INVALID_6",
0x82: "ITEM_INVALID_7",
0x83: "ITEM_RECOVERY_HEART",
0x84: "ITEM_RUPEE_GREEN",
0x85: "ITEM_RUPEE_BLUE",
0x86: "ITEM_RUPEE_10",
0x87: "ITEM_RUPEE_RED",
0x88: "ITEM_RUPEE_PURPLE",
0x89: "ITEM_RUPEE_SILVER",
0x8A: "ITEM_RUPEE_HUGE",
0x8B: "ITEM_STICKS_5",
0x8C: "ITEM_STICKS_10",
0x8D: "ITEM_NUTS_5",
0x8E: "ITEM_NUTS_10",
0x8F: "ITEM_BOMBS_5",
0x90: "ITEM_BOMBS_10",
0x91: "ITEM_BOMBS_20",
0x92: "ITEM_BOMBS_30",
0x93: "ITEM_ARROWS_10",
0x94: "ITEM_ARROWS_30",
0x95: "ITEM_ARROWS_40",
0x96: "ITEM_ARROWS_50",
0x97: "ITEM_BOMBCHUS_20",
0x98: "ITEM_BOMBCHUS_10",
0x99: "ITEM_BOMBCHUS_1",
0x9A: "ITEM_BOMBCHUS_5",
0x9B: "ITEM_STICK_UPGRADE_20",
0x9C: "ITEM_STICK_UPGRADE_30",
0x9D: "ITEM_NUT_UPGRADE_30",
0x9E: "ITEM_NUT_UPGRADE_40",
0x9F: "ITEM_CHATEAU_2",
0xA0: "ITEM_MILK",
0xA1: "ITEM_GOLD_DUST_2",
0xA2: "ITEM_HYLIAN_LOACH_2",
0xA3: "ITEM_SEAHORSE_CAUGHT",
0xF0: "ITEM_F0" ,
0xF1: "ITEM_F1",
0xF2: "ITEM_F2",
0xFC: "ITEM_FC" ,
0xFD: "ITEM_FD",
0xFE: "ITEM_FE",
0xFF: "ITEM_NONE",
}
getItemId_names = {
0x00: "GI_NONE",
0x01: "GI_RUPEE_GREEN",
0x02: "GI_RUPEE_BLUE",
0x03: "GI_RUPEE_10",
0x04: "GI_RUPEE_RED",
0x05: "GI_RUPEE_PURPLE",
0x06: "GI_RUPEE_SILVER",
0x07: "GI_RUPEE_HUGE",
0x08: "GI_WALLET_ADULT",
0x09: "GI_WALLET_GIANT",
0x0A: "GI_RECOVERY_HEART",
0x0C: "GI_HEART_PIECE",
0x0D: "GI_HEART_CONTAINER",
0x0E: "GI_MAGIC_SMALL",
0x0F: "GI_MAGIC_LARGE",
0x11: "GI_STRAY_FAIRY",
0x14: "GI_BOMBS_1",
0x15: "GI_BOMBS_5",
0x16: "GI_BOMBS_10",
0x17: "GI_BOMBS_20",
0x18: "GI_BOMBS_30",
0x19: "GI_STICKS_1",
0x1A: "GI_BOMBCHUS_10",
0x1B: "GI_BOMB_BAG_20",
0x1C: "GI_BOMB_BAG_30",
0x1D: "GI_BOMB_BAG_40",
0x1E: "GI_ARROWS_10",
0x1F: "GI_ARROWS_30",
0x20: "GI_ARROWS_40",
0x21: "GI_ARROWS_50",
0x22: "GI_QUIVER_30",
0x23: "GI_QUIVER_40",
0x24: "GI_QUIVER_50",
0x25: "GI_ARROW_FIRE",
0x26: "GI_ARROW_ICE",
0x27: "GI_ARROW_LIGHT",
0x28: "GI_NUTS_1",
0x29: "GI_NUTS_5",
0x2A: "GI_NUTS_10",
0x2E: "GI_BOMBCHUS_20",
0x32: "GI_SHIELD_HERO",
0x33: "GI_SHIELD_MIRROR",
0x34: "GI_POWDER_KEG",
0x35: "GI_MAGIC_BEANS",
0x36: "GI_BOMBCHUS_1",
0x37: "GI_SWORD_KOKIRI",
0x38: "GI_SWORD_RAZOR",
0x39: "GI_SWORD_GILDED",
0x3A: "GI_BOMBCHUS_5",
0x3B: "GI_SWORD_GREAT_FAIRY",
0x3C: "GI_KEY_SMALL",
0x3D: "GI_KEY_BOSS",
0x3E: "GI_MAP",
0x3F: "GI_COMPASS",
0x40: "GI_40",
0x41: "GI_HOOKSHOT",
0x42: "GI_LENS",
0x43: "GI_PICTO_BOX",
0x4C: "GI_OCARINA",
0x50: "GI_BOMBERS_NOTEBOOK",
0x52: "GI_SKULL_TOKEN",
0x55: "GI_REMAINS_ODOLWA",
0x56: "GI_REMAINS_GOHT",
0x57: "GI_REMAINS_GYORG",
0x58: "GI_REMAINS_TWINMOLD",
0x59: "GI_POTION_RED_BOTTLE",
0x5A: "GI_BOTTLE",
0x5B: "GI_POTION_RED",
0x5C: "GI_POTION_GREEN",
0x5D: "GI_POTION_BLUE",
0x5E: "GI_FAIRY",
0x5F: "GI_DEKU_PRINCESS",
0x60: "GI_MILK_BOTTLE",
0x61: "GI_MILK_HALF",
0x62: "GI_FISH",
0x63: "GI_BUG",
0x64: "GI_BLUE_FIRE",
0x65: "GI_POE",
0x66: "GI_BIG_POE",
0x67: "GI_SPRING_WATER",
0x68: "GI_HOT_SPRING_WATER",
0x69: "GI_ZORA_EGG",
0x6A: "GI_GOLD_DUST",
0x6B: "GI_MUSHROOM",
0x6C: "GI_6C",
0x6D: "GI_6D",
0x6E: "GI_SEAHORSE",
0x6F: "GI_CHATEAU_BOTTLE",
0x70: "GI_70",
0x75: "GI_75",
0x76: "GI_ICE_TRAP",
0x78: "GI_MASK_DEKU",
0x79: "GI_MASK_GORON",
0x7A: "GI_MASK_ZORA",
0x7B: "GI_MASK_FIERCE_DEITY",
0x7C: "GI_MASK_CAPTAIN",
0x7D: "GI_MASK_GIANT",
0x7E: "GI_MASK_ALL_NIGHT",
0x7F: "GI_MASK_BUNNY",
0x80: "GI_MASK_KEATON",
0x81: "GI_MASK_GARO",
0x82: "GI_MASK_ROMANI",
0x83: "GI_MASK_CIRCUS_LEADER",
0x84: "GI_MASK_POSTMAN",
0x85: "GI_MASK_COUPLE",
0x86: "GI_MASK_GREAT_FAIRY",
0x87: "GI_MASK_GIBDO",
0x88: "GI_MASK_DON_GERO",
0x89: "GI_MASK_KAMARO",
0x8A: "GI_MASK_TRUTH",
0x8B: "GI_MASK_STONE",
0x8C: "GI_MASK_BREMEN",
0x8D: "GI_MASK_BLAST",
0x8E: "GI_MASK_SCENTS",
0x8F: "GI_MASK_KAFEIS_MASK",
0x91: "GI_CHATEAU",
0x92: "GI_MILK",
0x93: "GI_GOLD_DUST_2",
0x94: "GI_HYLIAN_LOACH",
0x95: "GI_SEAHORSE_CAUGHT",
0x96: "GI_MOON_TEAR",
0x97: "GI_DEED_LAND",
0x98: "GI_DEED_SWAMP",
0x99: "GI_DEED_MOUNTAIN",
0x9A: "GI_DEED_OCEAN",
0x9B: "GI_SWORD_GREAT_FAIRY_STOLEN",
0x9C: "GI_SWORD_KOKIRI_STOLEN",
0x9D: "GI_SWORD_RAZOR_STOLEN",
0x9E: "GI_SWORD_GILDED_STOLEN",
0x9F: "GI_SHIELD_HERO_STOLEN",
0xA0: "GI_ROOM_KEY",
0xA1: "GI_LETTER_TO_MAMA",
0xA2: "GI_A2",
0xA3: "GI_A3",
0xA4: "GI_A4",
0xA5: "GI_A5",
0xA6: "GI_A6",
0xA7: "GI_A7",
0xA8: "GI_A8",
0xA9: "GI_BOTTLE_STOLEN",
0xAA: "GI_LETTER_TO_KAFEI",
0xAB: "GI_PENDANT_OF_MEMORIES",
0xB4: "GI_TINGLE_MAP_CLOCK_TOWN",
0xB5: "GI_TINGLE_MAP_WOODFALL",
0xB6: "GI_TINGLE_MAP_SNOWHEAD",
0xB7: "GI_TINGLE_MAP_ROMANI_RANCH",
0xB8: "GI_TINGLE_MAP_GREAT_BAY",
0xB9: "GI_TINGLE_MAP_STONE_TOWER",
0xBA: "GI_MAX" # I pity the fool
}
getItemDrawId_names = {
0x00: "GID_BOTTLE",
0x01: "GID_KEY_SMALL",
0x02: "GID_MASK_KAMARO",
0x03: "GID_MASK_COUPLE",
0x04: "GID_04",
0x05: "GID_05",
0x06: "GID_06",
0x07: "GID_07",
0x08: "GID_RECOVERY_HEART",
0x09: "GID_KEY_BOSS",
0x0A: "GID_COMPASS",
0x0B: "GID_BOMBERS_NOTEBOOK",
0x0C: "GID_MASK_STONE",
0x0D: "GID_MASK_KAFEIS_MASK",
0x0E: "GID_MASK_CIRCUS_LEADER",
0x0F: "GID_MASK_BREMEN",
0x10: "GID_MASK_ALL_NIGHT",
0x11: "GID_NUTS",
0x12: "GID_HEART_CONTAINER",
0x13: "GID_HEART_PIECE",
0x14: "GID_QUIVER_30",
0x15: "GID_QUIVER_40",
0x16: "GID_QUIVER_50",
0x17: "GID_BOMB_BAG_20",
0x18: "GID_BOMB_BAG_30",
0x19: "GID_BOMB_BAG_40",
0x1A: "GID_STICK",
0x1B: "GID_DUNGEON_MAP",
0x1C: "GID_MAGIC_SMALL",
0x1D: "GID_MAGIC_LARGE",
0x1E: "GID_BOMB",
0x1F: "GID_STONE_OF_AGONY",
0x20: "GID_WALLET_ADULT",
0x21: "GID_WALLET_GIANT",
0x22: "GID_MASK_DON_GERO",
0x23: "GID_ARROWS_SMALL",
0x24: "GID_ARROWS_MEDIUM",
0x25: "GID_ARROWS_LARGE",
0x26: "GID_BOMBCHU",
0x27: "GID_SHIELD_HERO",
0x28: "GID_HOOKSHOT",
0x29: "GID_29",
0x2A: "GID_OCARINA",
0x2B: "GID_MILK",
0x2C: "GID_MASK_KEATON",
0x2D: "GID_TINGLE_MAP",
0x2E: "GID_BOW",
0x2F: "GID_LENS",
0x30: "GID_POTION_GREEN",
0x31: "GID_POTION_RED",
0x32: "GID_POTION_BLUE",
0x33: "GID_SHIELD_MIRROR",
0x34: "GID_MAGIC_BEANS",
0x35: "GID_FISH",
0x36: "GID_LETTER_MAMA",
0x37: "GID_37",
0x38: "GID_SWORD_BGS",
0x39: "GID_MASK_SUN",
0x3A: "GID_MASK_BLAST",
0x3B: "GID_FAIRY",
0x3C: "GID_MASK_SCENTS",
0x3D: "GID_MASK_CAPTAIN",
0x3E: "GID_MASK_BUNNY",
0x3F: "GID_MASK_TRUTH",
0x40: "GID_DEED_SWAMP",
0x41: "GID_DEED_MOUNTAIN",
0x42: "GID_RUPEE_HUGE",
0x43: "GID_DEED_OCEAN",
0x44: "GID_MASK_GORON",
0x45: "GID_MASK_ZORA",
0x46: "GID_46",
0x47: "GID_ARROW_FIRE",
0x48: "GID_ARROW_ICE",
0x49: "GID_ARROW_LIGHT",
0x4A: "GID_SKULL_TOKEN",
0x4B: "GID_BUG",
0x4C: "GID_4C",
0x4D: "GID_POE",
0x4E: "GID_FAIRY_2",
0x4F: "GID_RUPEE_GREEN",
0x50: "GID_RUPEE_BLUE",
0x51: "GID_RUPEE_RED",
0x52: "GID_BIG_POE",
0x53: "GID_RUPEE_PURPLE",
0x54: "GID_RUPEE_SILVER",
0x55: "GID_SWORD_KOKIRI",
0x56: "GID_SKULL_TOKEN_2",
0x57: "GID_57",
0x58: "GID_ZORA_EGG",
0x59: "GID_MOON_TEAR",
0x5A: "GID_DEED_LAND",
0x5B: "GID_MASK_DEKU",
0x5C: "GID_REMAINS_ODOLWA",
0x5D: "GID_POWDER_KEG",
0x5E: "GID_GOLD_DUST",
0x5F: "GID_SEAHORSE",
0x60: "GID_60",
0x61: "GID_HYLIAN_LOACH",
0x62: "GID_SEAHORSE_CAUGHT",
0x63: "GID_REMAINS_GOHT",
0x64: "GID_REMAINS_GYORG",
0x65: "GID_REMAINS_TWINMOLD",
0x66: "GID_SWORD_RAZOR",
0x67: "GID_SWORD_GILDED",
0x68: "GID_SWORD_GREAT_FAIRY",
0x69: "GID_MASK_GARO",
0x6A: "GID_MASK_GREAT_FAIRY",
0x6B: "GID_MASK_GIBDO",
0x6C: "GID_ROOM_KEY",
0x6D: "GID_LETTER_TO_KAFEI",
0x6E: "GID_PENDANT_OF_MEMORIES",
0x6F: "GID_MUSHROOM",
0x70: "GID_MASK_ROMANI",
0x71: "GID_MASK_POSTMAN",
0x72: "GID_MASK_GIANT",
0x73: "GID_CHATEAU",
0x74: "GID_PICTO_BOX",
0x75: "GID_MASK_FIERCE_DEITY",
0x76: "GID_MAX",
-1: "GID_NONE",
}
objectId_names = {
0x000: "OBJECT_UNSET_0",
0x001: "GAMEPLAY_KEEP",
0x002: "GAMEPLAY_FIELD_KEEP",
0x003: "GAMEPLAY_DANGEON_KEEP",
0x004: "OBJECT_NB",
0x005: "OBJECT_OKUTA",
0x006: "OBJECT_CROW",
0x007: "OBJECT_AH",
0x008: "OBJECT_DY_OBJ",
0x009: "OBJECT_WALLMASTER",
0x00A: "OBJECT_DODONGO",
0x00B: "OBJECT_FIREFLY",
0x00C: "OBJECT_BOX",
0x00D: "OBJECT_AL",
0x00E: "OBJECT_BUBBLE",
0x00F: "OBJECT_NIW",
0x010: "OBJECT_LINK_BOY",
0x011: "OBJECT_LINK_CHILD",
0x012: "OBJECT_TITE",
0x013: "OBJECT_TAB",
0x014: "OBJECT_PH",
0x015: "OBJECT_AND",
0x016: "OBJECT_MSMO",
0x017: "OBJECT_DINOFOS",
0x018: "OBJECT_DRS",
0x019: "OBJECT_ZL1",
0x01A: "OBJECT_AN4",
0x01B: "OBJECT_UNSET_1B",
0x01C: "OBJECT_TEST3",
0x01D: "OBJECT_FAMOS",
0x01E: "OBJECT_UNSET_1E",
0x01F: "OBJECT_UNSET_1F",
0x020: "OBJECT_ST",
0x021: "OBJECT_UNSET_21",
0x022: "OBJECT_THIEFBIRD",
0x023: "OBJECT_UNSET_23",
0x024: "OBJECT_UNSET_24",
0x025: "OBJECT_UNSET_25",
0x026: "OBJECT_UNSET_26",
0x027: "OBJECT_UNSET_27",
0x028: "OBJECT_UNSET_28",
0x029: "OBJECT_UNSET_29",
0x02A: "OBJECT_BOMBF",
0x02B: "OBJECT_UNSET_2B",
0x02C: "OBJECT_UNSET_2C",
0x02D: "OBJECT_UNSET_2D",
0x02E: "OBJECT_UNSET_2E",
0x02F: "OBJECT_UNSET_2F",
0x030: "OBJECT_AM",
0x031: "OBJECT_DEKUBABA",
0x032: "OBJECT_UNSET_32",
0x033: "OBJECT_UNSET_33",
0x034: "OBJECT_UNSET_34",
0x035: "OBJECT_UNSET_35",
0x036: "OBJECT_UNSET_36",
0x037: "OBJECT_UNSET_37",
0x038: "OBJECT_UNSET_38",
0x039: "OBJECT_UNSET_39",
0x03A: "OBJECT_UNSET_3A",
0x03B: "OBJECT_UNSET_3B",
0x03C: "OBJECT_UNSET_3C",
0x03D: "OBJECT_UNSET_3D",
0x03E: "OBJECT_WARP1",
0x03F: "OBJECT_B_HEART",
0x040: "OBJECT_DEKUNUTS",
0x041: "OBJECT_UNSET_41",
0x042: "OBJECT_UNSET_42",
0x043: "OBJECT_UNSET_43",
0x044: "OBJECT_UNSET_44",
0x045: "OBJECT_UNSET_45",
0x046: "OBJECT_UNSET_46",
0x047: "OBJECT_UNSET_47",
0x048: "OBJECT_UNSET_48",
0x049: "OBJECT_UNSET_49",
0x04A: "OBJECT_UNSET_4A",
0x04B: "OBJECT_UNSET_4B",
0x04C: "OBJECT_UNSET_4C",
0x04D: "OBJECT_UNSET_4D",
0x04E: "OBJECT_UNSET_4E",
0x04F: "OBJECT_UNSET_4F",
0x050: "OBJECT_UNSET_50",
0x051: "OBJECT_BB",
0x052: "OBJECT_DEATH",
0x053: "OBJECT_UNSET_53",
0x054: "OBJECT_UNSET_54",
0x055: "OBJECT_UNSET_55",
0x056: "OBJECT_UNSET_56",
0x057: "OBJECT_UNSET_57",
0x058: "OBJECT_UNSET_58",
0x059: "OBJECT_UNSET_59",
0x05A: "OBJECT_UNSET_5A",
0x05B: "OBJECT_UNSET_5B",
0x05C: "OBJECT_F40_OBJ",
0x05D: "OBJECT_PO_COMPOSER",
0x05E: "OBJECT_UNSET_5E",
0x05F: "OBJECT_HATA",
0x060: "OBJECT_UNSET_60",
0x061: "OBJECT_WOOD02",
0x062: "OBJECT_UNSET_62",
0x063: "OBJECT_UNSET_63",
0x064: "OBJECT_TRAP",
0x065: "OBJECT_UNSET_65",
0x066: "OBJECT_UNSET_66",
0x067: "OBJECT_UNSET_67",
0x068: "OBJECT_UNSET_68",
0x069: "OBJECT_UNSET_69",
0x06A: "OBJECT_VM",
0x06B: "OBJECT_UNSET_6B",
0x06C: "OBJECT_UNSET_6C",
0x06D: "OBJECT_UNSET_6D",
0x06E: "OBJECT_UNSET_6E",
0x06F: "OBJECT_UNSET_6F",
0x070: "OBJECT_EFC_STAR_FIELD",
0x071: "OBJECT_UNSET_71",
0x072: "OBJECT_UNSET_72",
0x073: "OBJECT_UNSET_73",
0x074: "OBJECT_UNSET_74",
0x075: "OBJECT_RD",
0x076: "OBJECT_YUKIMURA_OBJ",
0x077: "OBJECT_HEAVY_OBJECT",
0x078: "OBJECT_UNSET_78",
0x079: "OBJECT_UNSET_79",
0x07A: "OBJECT_UNSET_7A",
0x07B: "OBJECT_UNSET_7B",
0x07C: "OBJECT_UNSET_7C",
0x07D: "OBJECT_HORSE_LINK_CHILD",
0x07E: "OBJECT_UNSET_7E",
0x07F: "OBJECT_UNSET_7F",
0x080: "OBJECT_SYOKUDAI",
0x081: "OBJECT_UNSET_81",
0x082: "OBJECT_UNSET_82",
0x083: "OBJECT_UNSET_83",
0x084: "OBJECT_EFC_TW",
0x085: "OBJECT_UNSET_85",
0x086: "OBJECT_GI_KEY",
0x087: "OBJECT_MIR_RAY",
0x088: "OBJECT_CTOWER_ROT",
0x089: "OBJECT_UNSET_89",
0x08A: "OBJECT_BDOOR",
0x08B: "OBJECT_UNSET_8B",
0x08C: "OBJECT_UNSET_8C",
0x08D: "OBJECT_UNSET_8D",
0x08E: "OBJECT_SB",
0x08F: "OBJECT_GI_MELODY",
0x090: "OBJECT_GI_HEART",
0x091: "OBJECT_GI_COMPASS",
0x092: "OBJECT_GI_BOSSKEY",
0x093: "OBJECT_UNSET_93",
0x094: "OBJECT_GI_NUTS",
0x095: "OBJECT_UNSET_95",
0x096: "OBJECT_GI_HEARTS",
0x097: "OBJECT_GI_ARROWCASE",
0x098: "OBJECT_GI_BOMBPOUCH",
0x099: "OBJECT_IN",
0x09A: "OBJECT_UNSET_9A",
0x09B: "OBJECT_UNSET_9B",
0x09C: "OBJECT_UNSET_9C",
0x09D: "OBJECT_OS_ANIME",
0x09E: "OBJECT_GI_BOTTLE",
0x09F: "OBJECT_GI_STICK",
0x0A0: "OBJECT_GI_MAP",
0x0A1: "OBJECT_OF1D_MAP",
0x0A2: "OBJECT_RU2",
0x0A3: "OBJECT_UNSET_A3",
0x0A4: "OBJECT_GI_MAGICPOT",
0x0A5: "OBJECT_GI_BOMB_1",
0x0A6: "OBJECT_UNSET_A6",
0x0A7: "OBJECT_MA2",
0x0A8: "OBJECT_GI_PURSE",
0x0A9: "OBJECT_UNSET_A9",
0x0AA: "OBJECT_UNSET_AA",
0x0AB: "OBJECT_RR",
0x0AC: "OBJECT_UNSET_AC",
0x0AD: "OBJECT_UNSET_AD",
0x0AE: "OBJECT_UNSET_AE",
0x0AF: "OBJECT_GI_ARROW",
0x0B0: "OBJECT_GI_BOMB_2",
0x0B1: "OBJECT_UNSET_B1",
0x0B2: "OBJECT_UNSET_B2",
0x0B3: "OBJECT_GI_SHIELD_2",
0x0B4: "OBJECT_GI_HOOKSHOT",
0x0B5: "OBJECT_GI_OCARINA",
0x0B6: "OBJECT_GI_MILK",
0x0B7: "OBJECT_MA1",
0x0B8: "OBJECT_UNSET_B8",
0x0B9: "OBJECT_UNSET_B9",
0x0BA: "OBJECT_UNSET_BA",
0x0BB: "OBJECT_NY",
0x0BC: "OBJECT_FR",
0x0BD: "OBJECT_UNSET_BD",
0x0BE: "OBJECT_UNSET_BE",
0x0BF: "OBJECT_GI_BOW",
0x0C0: "OBJECT_GI_GLASSES",
0x0C1: "OBJECT_GI_LIQUID",
0x0C2: "OBJECT_ANI",
0x0C3: "OBJECT_GI_SHIELD_3",
0x0C4: "OBJECT_UNSET_C4",
0x0C5: "OBJECT_UNSET_C5",
0x0C6: "OBJECT_GI_BEAN",
0x0C7: "OBJECT_GI_FISH",
0x0C8: "OBJECT_UNSET_C8",
0x0C9: "OBJECT_UNSET_C9",
0x0CA: "OBJECT_UNSET_CA",
0x0CB: "OBJECT_GI_LONGSWORD",
0x0CC: "OBJECT_UNSET_CC",
0x0CD: "OBJECT_UNSET_CD",
0x0CE: "OBJECT_UNSET_CE",
0x0CF: "OBJECT_UNSET_CF",
0x0D0: "OBJECT_ZO",
0x0D1: "OBJECT_UNSET_D1",
0x0D2: "OBJECT_UMAJUMP",
0x0D3: "OBJECT_UNSET_D3",
0x0D4: "OBJECT_UNSET_D4",
0x0D5: "OBJECT_MASTERGOLON",
0x0D6: "OBJECT_MASTERZOORA",
0x0D7: "OBJECT_AOB",
0x0D8: "OBJECT_IK",
0x0D9: "OBJECT_AHG",
0x0DA: "OBJECT_CNE",
0x0DB: "OBJECT_UNSET_DB",
0x0DC: "OBJECT_UNSET_DC",
0x0DD: "OBJECT_AN3",
0x0DE: "OBJECT_BJI",
0x0DF: "OBJECT_BBA",
0x0E0: "OBJECT_AN2",
0x0E1: "OBJECT_UNSET_E1",
0x0E2: "OBJECT_AN1",
0x0E3: "OBJECT_BOJ",
0x0E4: "OBJECT_FZ",
0x0E5: "OBJECT_BOB",
0x0E6: "OBJECT_GE1",
0x0E7: "OBJECT_YABUSAME_POINT",
0x0E8: "OBJECT_UNSET_E8",
0x0E9: "OBJECT_UNSET_E9",
0x0EA: "OBJECT_UNSET_EA",
0x0EB: "OBJECT_UNSET_EB",
0x0EC: "OBJECT_D_HSBLOCK",
0x0ED: "OBJECT_D_LIFT",
0x0EE: "OBJECT_MAMENOKI",
0x0EF: "OBJECT_GOROIWA",
0x0F0: "OBJECT_TORYO",
0x0F1: "OBJECT_DAIKU",
0x0F2: "OBJECT_NWC",
0x0F3: "OBJECT_GM",
0x0F4: "OBJECT_MS",
0x0F5: "OBJECT_HS",
0x0F6: "OBJECT_UNSET_F6",
0x0F7: "OBJECT_LIGHTSWITCH",
0x0F8: "OBJECT_KUSA",
0x0F9: "OBJECT_TSUBO",
0x0FA: "OBJECT_UNSET_FA",
0x0FB: "OBJECT_UNSET_FB",
0x0FC: "OBJECT_KANBAN",
0x0FD: "OBJECT_OWL",
0x0FE: "OBJECT_MK",
0x0FF: "OBJECT_FU",
0x100: "OBJECT_GI_KI_TAN_MASK",
0x101: "OBJECT_UNSET_101",
0x102: "OBJECT_GI_MASK18",
0x103: "OBJECT_GI_RABIT_MASK",
0x104: "OBJECT_GI_TRUTH_MASK",
0x105: "OBJECT_UNSET_105",
0x106: "OBJECT_STREAM",
0x107: "OBJECT_MM",
0x108: "OBJECT_UNSET_108",
0x109: "OBJECT_UNSET_109",
0x10A: "OBJECT_UNSET_10A",
0x10B: "OBJECT_UNSET_10B",
0x10C: "OBJECT_UNSET_10C",
0x10D: "OBJECT_UNSET_10D",
0x10E: "OBJECT_UNSET_10E",
0x10F: "OBJECT_JS",
0x110: "OBJECT_CS",
0x111: "OBJECT_UNSET_111",
0x112: "OBJECT_UNSET_112",
0x113: "OBJECT_GI_SOLDOUT",
0x114: "OBJECT_UNSET_114",
0x115: "OBJECT_MAG",
0x116: "OBJECT_UNSET_116",
0x117: "OBJECT_UNSET_117",
0x118: "OBJECT_UNSET_118",
0x119: "OBJECT_GI_GOLONMASK",
0x11A: "OBJECT_GI_ZORAMASK",
0x11B: "OBJECT_UNSET_11B",
0x11C: "OBJECT_UNSET_11C",
0x11D: "OBJECT_KA",
0x11E: "OBJECT_UNSET_11E",
0x11F: "OBJECT_ZG",
0x120: "OBJECT_UNSET_120",
0x121: "OBJECT_GI_M_ARROW",
0x122: "OBJECT_DS2",
0x123: "OBJECT_UNSET_123",
0x124: "OBJECT_FISH",
0x125: "OBJECT_GI_SUTARU",
0x126: "OBJECT_UNSET_126",
0x127: "OBJECT_SSH",
0x128: "OBJECT_BIGSLIME",
0x129: "OBJECT_BG",
0x12A: "OBJECT_BOMBIWA",
0x12B: "OBJECT_HINTNUTS",
0x12C: "OBJECT_RS",
0x12D: "OBJECT_UNSET_12D",
0x12E: "OBJECT_GLA",
0x12F: "OBJECT_UNSET_12F",
0x130: "OBJECT_GELDB",
0x131: "OBJECT_UNSET_131",
0x132: "OBJECT_DOG",
0x133: "OBJECT_KIBAKO2",
0x134: "OBJECT_DNS",
0x135: "OBJECT_DNK",
0x136: "OBJECT_UNSET_136",
0x137: "OBJECT_GI_INSECT",
0x138: "OBJECT_UNSET_138",
0x139: "OBJECT_GI_GHOST",
0x13A: "OBJECT_GI_SOUL",
0x13B: "OBJECT_UNSET_13B",
0x13C: "OBJECT_UNSET_13C",
0x13D: "OBJECT_UNSET_13D",
0x13E: "OBJECT_UNSET_13E",
0x13F: "OBJECT_GI_RUPY",
0x140: "OBJECT_MU",
0x141: "OBJECT_WF",
0x142: "OBJECT_SKB",
0x143: "OBJECT_GS",
0x144: "OBJECT_PS",
0x145: "OBJECT_OMOYA_OBJ",
0x146: "OBJECT_COW",
0x147: "OBJECT_UNSET_147",
0x148: "OBJECT_GI_SWORD_1",
0x149: "OBJECT_UNSET_149",
0x14A: "OBJECT_UNSET_14A",
0x14B: "OBJECT_ZL4",
0x14C: "OBJECT_LINK_GORON",
0x14D: "OBJECT_LINK_ZORA",
0x14E: "OBJECT_GRASSHOPPER",
0x14F: "OBJECT_BOYO",
0x150: "OBJECT_UNSET_150",
0x151: "OBJECT_UNSET_151",
0x152: "OBJECT_UNSET_152",
0x153: "OBJECT_FWALL",
0x154: "OBJECT_LINK_NUTS",
0x155: "OBJECT_JSO",
0x156: "OBJECT_KNIGHT",
0x157: "OBJECT_ICICLE",
0x158: "OBJECT_SPDWEB",
0x159: "OBJECT_UNSET_159",
0x15A: "OBJECT_BOSS01",
0x15B: "OBJECT_BOSS02",
0x15C: "OBJECT_BOSS03",
0x15D: "OBJECT_BOSS04",
0x15E: "OBJECT_BOSS05",
0x15F: "OBJECT_BOSS06",
0x160: "OBJECT_BOSS07",
0x161: "OBJECT_RAF",
0x162: "OBJECT_FUNEN",
0x163: "OBJECT_RAILLIFT",
0x164: "OBJECT_NUMA_OBJ",
0x165: "OBJECT_FLOWERPOT",
0x166: "OBJECT_SPINYROLL",
0x167: "OBJECT_ICE_BLOCK",
0x168: "OBJECT_UNSET_168",
0x169: "OBJECT_KEIKOKU_DEMO",
0x16A: "OBJECT_SLIME",
0x16B: "OBJECT_PR",
0x16C: "OBJECT_F52_OBJ",
0x16D: "OBJECT_F53_OBJ",
0x16E: "OBJECT_UNSET_16E",
0x16F: "OBJECT_KIBAKO",
0x170: "OBJECT_SEK",
0x171: "OBJECT_GMO",
0x172: "OBJECT_BAT",
0x173: "OBJECT_SEKIHIL",
0x174: "OBJECT_SEKIHIG",
0x175: "OBJECT_SEKIHIN",
0x176: "OBJECT_SEKIHIZ",
0x177: "OBJECT_UNSET_177",
0x178: "OBJECT_WIZ",
0x179: "OBJECT_LADDER",
0x17A: "OBJECT_MKK",
0x17B: "OBJECT_UNSET_17B",
0x17C: "OBJECT_UNSET_17C",
0x17D: "OBJECT_UNSET_17D",
0x17E: "OBJECT_KEIKOKU_OBJ",
0x17F: "OBJECT_SICHITAI_OBJ",
0x180: "OBJECT_DEKUCITY_ANA_OBJ",
0x181: "OBJECT_RAT",
0x182: "OBJECT_WATER_EFFECT",
0x183: "OBJECT_UNSET_183",
0x184: "OBJECT_DBLUE_OBJECT",
0x185: "OBJECT_BAL",
0x186: "OBJECT_WARP_UZU",
0x187: "OBJECT_DRIFTICE",
0x188: "OBJECT_FALL",
0x189: "OBJECT_HANAREYAMA_OBJ",
0x18A: "OBJECT_CRACE_OBJECT",
0x18B: "OBJECT_DNQ",
0x18C: "OBJECT_OBJ_TOKEIDAI",
0x18D: "OBJECT_EG",
0x18E: "OBJECT_TRU",
0x18F: "OBJECT_TRT",
0x190: "OBJECT_HAKUGIN_OBJ",
0x191: "OBJECT_HORSE_GAME_CHECK",
0x192: "OBJECT_STK",
0x193: "OBJECT_UNSET_193",
0x194: "OBJECT_UNSET_194",
0x195: "OBJECT_MNK",
0x196: "OBJECT_GI_BOTTLE_RED",
0x197: "OBJECT_TOKEI_TOBIRA",
0x198: "OBJECT_AZ",
0x199: "OBJECT_TWIG",
0x19A: "OBJECT_DEKUCITY_OBJ",
0x19B: "OBJECT_PO_FUSEN",
0x19C: "OBJECT_RACETSUBO",
0x19D: "OBJECT_HA",
0x19E: "OBJECT_BIGOKUTA",
0x19F: "OBJECT_OPEN_OBJ",
0x1A0: "OBJECT_FU_KAITEN",
0x1A1: "OBJECT_FU_MATO",
0x1A2: "OBJECT_MTORIDE",
0x1A3: "OBJECT_OSN",
0x1A4: "OBJECT_TOKEI_STEP",
0x1A5: "OBJECT_LOTUS",
0x1A6: "OBJECT_TL",
0x1A7: "OBJECT_DKJAIL_OBJ",
0x1A8: "OBJECT_VISIBLOCK",
0x1A9: "OBJECT_TSN",
0x1AA: "OBJECT_DS2N",
0x1AB: "OBJECT_FSN",
0x1AC: "OBJECT_SHN",
0x1AD: "OBJECT_BIGICICLE",
0x1AE: "OBJECT_GI_BOTTLE_15",
0x1AF: "OBJECT_TK",
0x1B0: "OBJECT_MARKET_OBJ",
0x1B1: "OBJECT_GI_RESERVE00",
0x1B2: "OBJECT_GI_RESERVE01",
0x1B3: "OBJECT_LIGHTBLOCK",
0x1B4: "OBJECT_TAKARAYA_OBJECTS",
0x1B5: "OBJECT_WDHAND",
0x1B6: "OBJECT_SDN",
0x1B7: "OBJECT_SNOWWD",
0x1B8: "OBJECT_GIANT",
0x1B9: "OBJECT_COMB",
0x1BA: "OBJECT_HANA",
0x1BB: "OBJECT_BOSS_HAKUGIN",
0x1BC: "OBJECT_MEGANEANA_OBJ",
0x1BD: "OBJECT_GI_NUTSMASK",
0x1BE: "OBJECT_STK2",
0x1BF: "OBJECT_SPOT11_OBJ",
0x1C0: "OBJECT_DANPEI_OBJECT",
0x1C1: "OBJECT_DHOUSE",
0x1C2: "OBJECT_HAKAISI",
0x1C3: "OBJECT_PO",
0x1C4: "OBJECT_SNOWMAN",
0x1C5: "OBJECT_PO_SISTERS",
0x1C6: "OBJECT_PP",
0x1C7: "OBJECT_GORONSWITCH",
0x1C8: "OBJECT_DELF",
0x1C9: "OBJECT_BOTIHASIRA",
0x1CA: "OBJECT_GI_BIGBOMB",
0x1CB: "OBJECT_PST",
0x1CC: "OBJECT_BSMASK",
0x1CD: "OBJECT_SPIDERTENT",
0x1CE: "OBJECT_ZORAEGG",
0x1CF: "OBJECT_KBT",
0x1D0: "OBJECT_GG",
0x1D1: "OBJECT_MARUTA",
0x1D2: "OBJECT_GHAKA",
0x1D3: "OBJECT_OYU",
0x1D4: "OBJECT_DNP",
0x1D5: "OBJECT_DAI",
0x1D6: "OBJECT_KGY",
0x1D7: "OBJECT_FB",
0x1D8: "OBJECT_TAISOU",
0x1D9: "OBJECT_MASK_BU_SAN",
0x1DA: "OBJECT_MASK_KI_TAN",
0x1DB: "OBJECT_MASK_RABIT",
0x1DC: "OBJECT_MASK_SKJ",
0x1DD: "OBJECT_MASK_BAKURETU",
0x1DE: "OBJECT_MASK_TRUTH",
0x1DF: "OBJECT_GK",
0x1E0: "OBJECT_HAKA_OBJ",
0x1E1: "OBJECT_MASK_GORON",
0x1E2: "OBJECT_MASK_ZORA",
0x1E3: "OBJECT_MASK_NUTS",
0x1E4: "OBJECT_MASK_BOY",
0x1E5: "OBJECT_DNT",
0x1E6: "OBJECT_YUKIYAMA",
0x1E7: "OBJECT_ICEFLOE",
0x1E8: "OBJECT_GI_GOLD_DUST",
0x1E9: "OBJECT_GI_BOTTLE_16",
0x1EA: "OBJECT_GI_BOTTLE_22",
0x1EB: "OBJECT_BEE",
0x1EC: "OBJECT_OT",
0x1ED: "OBJECT_UTUBO",
0x1EE: "OBJECT_DORA",
0x1EF: "OBJECT_GI_LOACH",
0x1F0: "OBJECT_GI_SEAHORSE",
0x1F1: "OBJECT_BIGPO",
0x1F2: "OBJECT_HARIKO",
0x1F3: "OBJECT_DNO",
0x1F4: "OBJECT_SINKAI_KABE",
0x1F5: "OBJECT_KIN2_OBJ",
0x1F6: "OBJECT_ISHI",
0x1F7: "OBJECT_HAKUGIN_DEMO",
0x1F8: "OBJECT_JG",
0x1F9: "OBJECT_GI_SWORD_2",
0x1FA: "OBJECT_GI_SWORD_3",
0x1FB: "OBJECT_GI_SWORD_4",
0x1FC: "OBJECT_UM",
0x1FD: "OBJECT_MASK_GIBUDO",
0x1FE: "OBJECT_MASK_JSON",
0x1FF: "OBJECT_MASK_KERFAY",
0x200: "OBJECT_MASK_BIGELF",
0x201: "OBJECT_RB",
0x202: "OBJECT_MBAR_OBJ",
0x203: "OBJECT_IKANA_OBJ",
0x204: "OBJECT_KZ",
0x205: "OBJECT_TOKEI_TURRET",
0x206: "OBJECT_ZOG",
0x207: "OBJECT_ROTLIFT",
0x208: "OBJECT_POSTHOUSE_OBJ",
0x209: "OBJECT_GI_MASK09",
0x20A: "OBJECT_GI_MASK14",
0x20B: "OBJECT_GI_MASK15",
0x20C: "OBJECT_INIBS_OBJECT",
0x20D: "OBJECT_TREE",
0x20E: "OBJECT_KAIZOKU_OBJ",
0x20F: "OBJECT_GI_RESERVE_B_00",
0x210: "OBJECT_GI_RESERVE_C_00",
0x211: "OBJECT_ZOB",
0x212: "OBJECT_MILKBAR",
0x213: "OBJECT_DMASK",
0x214: "OBJECT_MASK_KYOJIN",
0x215: "OBJECT_GI_RESERVE_C_01",
0x216: "OBJECT_ZOD",
0x217: "OBJECT_KUMO30",
0x218: "OBJECT_OBJ_YASI",
0x219: "OBJECT_MASK_ROMERNY",
0x21A: "OBJECT_TANRON1",
0x21B: "OBJECT_TANRON2",
0x21C: "OBJECT_TANRON3",
0x21D: "OBJECT_GI_MAGICMUSHROOM",
0x21E: "OBJECT_OBJ_CHAN",
0x21F: "OBJECT_GI_MASK10",
0x220: "OBJECT_ZOS",
0x221: "OBJECT_MASK_POSTHAT",
0x222: "OBJECT_F40_SWITCH",
0x223: "OBJECT_LODMOON",
0x224: "OBJECT_TRO",
0x225: "OBJECT_GI_MASK12",
0x226: "OBJECT_GI_MASK23",
0x227: "OBJECT_GI_BOTTLE_21",
0x228: "OBJECT_GI_CAMERA",
0x229: "OBJECT_KAMEJIMA",
0x22A: "OBJECT_HARFGIBUD",
0x22B: "OBJECT_ZOV",
0x22C: "OBJECT_HGDOOR",
0x22D: "OBJECT_UNSET_22D",
0x22E: "OBJECT_UNSET_22E",
0x22F: "OBJECT_UNSET_22F",
0x230: "OBJECT_DOR01",
0x231: "OBJECT_DOR02",
0x232: "OBJECT_DOR03",
0x233: "OBJECT_DOR04",
0x234: "OBJECT_LAST_OBJ",
0x235: "OBJECT_REDEAD_OBJ",
0x236: "OBJECT_IKNINSIDE_OBJ",
0x237: "OBJECT_IKNV_OBJ",
0x238: "OBJECT_PAMERA",
0x239: "OBJECT_HSSTUMP",
0x23A: "OBJECT_ZM",
0x23B: "OBJECT_BIG_FWALL",
0x23C: "OBJECT_SECOM_OBJ",
0x23D: "OBJECT_HUNSUI",
0x23E: "OBJECT_UCH",
0x23F: "OBJECT_TANRON4",
0x240: "OBJECT_TANRON5",
0x241: "OBJECT_DT",
0x242: "OBJECT_GI_MASK03",
0x243: "OBJECT_CHA",
0x244: "OBJECT_OBJ_DINNER",
0x245: "OBJECT_GI_RESERVE_B_01",
0x246: "OBJECT_LASTDAY",
0x247: "OBJECT_BAI",
0x248: "OBJECT_IN2",
0x249: "OBJECT_IKN_DEMO",
0x24A: "OBJECT_YB",
0x24B: "OBJECT_RZ",
0x24C: "OBJECT_MASK_ZACHO",
0x24D: "OBJECT_GI_FIELDMAP",
0x24E: "OBJECT_MASK_STONE",
0x24F: "OBJECT_BJT",
0x250: "OBJECT_TARU",
0x251: "OBJECT_MOONSTON",
0x252: "OBJECT_MASK_BREE",
0x253: "OBJECT_GI_SCHEDULE",
0x254: "OBJECT_GI_STONEMASK",
0x255: "OBJECT_ZORABAND",
0x256: "OBJECT_KEPN_KOYA",
0x257: "OBJECT_OBJ_USIYANE",
0x258: "OBJECT_GI_MASK05",
0x259: "OBJECT_GI_MASK11",
0x25A: "OBJECT_GI_MASK20",
0x25B: "OBJECT_NNH",
0x25C: "OBJECT_MASK_GERO",
0x25D: "OBJECT_MASK_YOFUKASI",
0x25E: "OBJECT_MASK_MEOTO",
0x25F: "OBJECT_MASK_DANCER",
0x260: "OBJECT_KZSAKU",
0x261: "OBJECT_OBJ_MILK_BIN",
0x262: "OBJECT_RANDOM_OBJ",
0x263: "OBJECT_KUJIYA",
0x264: "OBJECT_KITAN",
0x265: "OBJECT_GI_MASK06",
0x266: "OBJECT_GI_MASK16",
0x267: "OBJECT_ASTR_OBJ",
0x268: "OBJECT_BSB",
0x269: "OBJECT_FALL2",
0x26A: "OBJECT_STH",
0x26B: "OBJECT_GI_MSSA",
0x26C: "OBJECT_SMTOWER",
0x26D: "OBJECT_GI_MASK21",
0x26E: "OBJECT_YADO_OBJ",
0x26F: "OBJECT_SYOTEN",
0x270: "OBJECT_MOONEND",
0x271: "OBJECT_OB",
0x272: "OBJECT_GI_BOTTLE_04",
0x273: "OBJECT_OBJ_DANPEILIFT",
0x274: "OBJECT_WDOR01",
0x275: "OBJECT_WDOR02",
0x276: "OBJECT_WDOR03",
0x277: "OBJECT_STK3",
0x278: "OBJECT_KINSTA1_OBJ",
0x279: "OBJECT_KINSTA2_OBJ",
0x27A: "OBJECT_BH",
0x27B: "OBJECT_WDOR04",
0x27C: "OBJECT_WDOR05",
0x27D: "OBJECT_GI_MASK17",
0x27E: "OBJECT_GI_MASK22",
0x27F: "OBJECT_LBFSHOT",
0x280: "OBJECT_FUSEN",
0x281: "OBJECT_ENDING_OBJ",
0x282: "OBJECT_GI_MASK13",
0x283: "OBJECT_ID_MAX",
}
@dataclasses.dataclass
class GetItemEntry:
getItemId: int
itemId: int
field: int
gi: int
textId: int
objectId: int
def __str__(self) -> str:
itemId_name = itemId_names.get(self.itemId, f"NOT FOUND: 0x{self.itemId:X}")
gid = abs(self.gi) - 1
getitemDrawId_name = getItemDrawId_names.get(gid, f"NOT FOUND: 0x{abs(self.gi) - 1:X}")
if self.gi == 0:
chest_anim = 0
else:
chest_anim = "CHEST_ANIM_SHORT" if self.gi < 0 else "CHEST_ANIM_LONG"
objectId_name = objectId_names.get(self.objectId, f"NOT FOUND: 0x{abs(self.objectId):X}")
ret = f"/* 0x{self.getItemId:02X} */ GET_ITEM({itemId_name}, {objectId_name}, {getitemDrawId_name}, 0x{self.textId:X}, 0x{self.field:X}, {chest_anim})"
return ret
def main() -> None:
description = "Extract and print the GetItem table"
epilog = ""
parser = argparse.ArgumentParser(description=description, epilog=epilog, formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument("file", help="binary file to read")
parser.add_argument("offset", help="offset at which to start reading")
parser.add_argument("count", help="number of entries to extract")
parser.add_argument("-g", help="look further back for glitched items from Get Item Manipulation", action="store_true")
args = parser.parse_args()
start = int(args.offset, 0)
count = int(args.count, 0)
glitched = args.g
pos_start = 0
with open(args.file, "rb") as f:
if glitched:
start -= GETITEMENTRY_LENGTH * count
pos_start -= count
count *= 2
f.seek(start, os.SEEK_SET)
data = f.read(GETITEMENTRY_LENGTH * count)
unpacked_data = struct.iter_unpack(GETITEMENTRY_FORMAT, data)
get_item_entries: typing.List[GetItemEntry] = []
for i,entry in enumerate(unpacked_data):
get_item_entries.append(GetItemEntry(pos_start + i+1, *entry))
for entry in get_item_entries:
print(f"{entry},")
if __name__ == "__main__":
main()