Files
dockipelago/worlds/apeescape3/data/Addresses.py
Jonathan Tinney 7971961166
Some checks failed
Analyze modified files / flake8 (push) Failing after 2m28s
Build / build-win (push) Has been cancelled
Build / build-ubuntu2204 (push) Has been cancelled
ctest / Test C++ ubuntu-latest (push) Has been cancelled
ctest / Test C++ windows-latest (push) Has been cancelled
Analyze modified files / mypy (push) Has been cancelled
Build and Publish Docker Images / Push Docker image to Docker Hub (push) Successful in 5m4s
Native Code Static Analysis / scan-build (push) Failing after 5m2s
type check / pyright (push) Successful in 1m7s
unittests / Test Python 3.11.2 ubuntu-latest (push) Failing after 16m23s
unittests / Test Python 3.12 ubuntu-latest (push) Failing after 28m19s
unittests / Test Python 3.13 ubuntu-latest (push) Failing after 14m49s
unittests / Test hosting with 3.13 on ubuntu-latest (push) Successful in 5m0s
unittests / Test Python 3.13 macos-latest (push) Has been cancelled
unittests / Test Python 3.11 windows-latest (push) Has been cancelled
unittests / Test Python 3.13 windows-latest (push) Has been cancelled
add schedule I, sonic 1/frontiers/heroes, spirit island
2026-04-02 23:46:36 -07:00

1150 lines
58 KiB
Python

from typing import Dict, Sequence
from abc import ABC
from .Strings import Itm, Loc, Game, Meta
### [< --- HELPERS --- >]
class VersionAddresses(ABC):
"""Base Class to access easily change target memory addresses depending on Game Version used"""
Items : Dict[str, int]
Locations : Dict[str, int]
GameStates : Dict[str, int]
Pointers : Dict[str, Sequence[int]]
GADGETS : Sequence[int]
MORPHS_B : Sequence[int]
MORPHS_G : Sequence[int]
BUTTONS_BY_INTERNAL : Sequence[int]
BUTTONS_BY_INTUIT : Sequence[int]
def __init__(self):
self._do_init()
def _do_init(self):
if not self.Items and not self.GameStates:
return
gadgets: list[int] = []
morphs_b : list[int] = []
morphs_g : list[int] = []
buttons_internal: list[int] = []
buttons_intuit: list[int] = []
# Create Sequence of Gadgets by ID in Quick Gadget Swap (Water Net is index 0 for convenience)
for gadget in Itm.get_gadgets_ordered():
if gadget in self.Items:
gadgets.append(self.Items[gadget])
else:
gadgets.clear()
break
self.GADGETS = gadgets
# Create Sequence of Morph Duration Addresses for Satoru/Kei
for morph in Game.get_morph_duration():
if morph in self.GameStates:
morphs_b.append(self.GameStates[morph])
else:
morphs_b.clear()
break
self.MORPHS_B = morphs_b
# Create Sequence of Morph Duration Addresses for Sayaka/Yumi
for morph in Game.get_morph_duration(True):
if morph in self.GameStates:
morphs_g.append(self.GameStates[morph])
else:
morphs_g.clear()
break
self.MORPHS_G = morphs_g
# Get Face Buttons in order of ID used by Gadget Selected (Circle, Cross, Square, Triangle)
for button in Game.get_buttons_by_internal_index():
if button in self.GameStates:
buttons_internal.append(self.GameStates[button])
else:
buttons_internal.clear()
break
self.BUTTONS_BY_INTERNAL = buttons_internal
# Get Face Buttons by order in which gadgets may intuitively be equipped (Triangle, Cross, Square, Circle)
for button in Game.get_buttons_by_intuitive_index():
if button in self.GameStates:
buttons_intuit.append(self.GameStates[button])
else:
buttons_intuit.clear()
break
self.BUTTONS_BY_INTUIT = buttons_intuit
def get_gadget_id(self, address: int):
if not self.GADGETS:
return -1
if address not in self.GADGETS:
return -1
gadget_id: int = self.GADGETS.index(address)
# Return immediately if Gadget is part of normal set (the first 7)
if gadget_id <= 7:
return gadget_id
# Last 3 items are RC Car variants, so return the RC Car Address for them
return self.GADGETS.index(self.Items[Itm.gadget_rcc.value])
def get_morph_duration_addresses(self, character : int = 0):
if character == 0:
return self.MORPHS_B
else:
return self.MORPHS_G
### [< --- ADDRESSES --- >]
class NTSCU(VersionAddresses):
"""Container for memory addresses in the NTSC-U (SCUS-97501) version of Ape Escape 3."""
Items: Dict[str, int] = {
# Gadgets
Itm.gadget_club.value : 0x649950,
Itm.gadget_net.value : 0x649954,
Itm.gadget_radar.value : 0x649958,
Itm.gadget_hoop.value : 0x64995c,
Itm.gadget_sling.value : 0x649960,
Itm.gadget_rcc.value : 0x649964,
Itm.gadget_fly.value : 0x649968,
Itm.gadget_swim.value : 0x649978,
# Morphs
Itm.morph_knight.value : 0x649930,
Itm.morph_cowboy.value : 0x649934,
Itm.morph_ninja.value : 0x649938,
Itm.morph_magician.value : 0x64993c,
Itm.morph_kungfu.value : 0x649940,
Itm.morph_hero.value : 0x649944,
Itm.morph_monkey.value : 0x649948,
# Accessories
Itm.chassis_twin.value : 0x6499A0, # boolean (0x00 - 0x01)
Itm.chassis_black.value : 0x6499A1, # boolean (0x00 - 0x01)
Itm.chassis_pudding.value : 0x6499A2, # boolean (0x00 - 0x01)
## Functional Chassis Values
Itm.real_chassis_twin.value : 0x649c98,
Itm.real_chassis_black.value : 0x649c99,
Itm.real_chassis_pudding.value : 0x649c9a,
}
Locations: Dict[str, int] = {
# Monkeys
# <!> Values are on/off between 0x00 and 0x01 respectively unless commented otherwise.
## TV Station/Zero
Loc.zero_ukki_pan.value : 0x649b4e,
## Seaside Resort
Loc.seaside_nessal.value : 0x6499dd,
Loc.seaside_ukki_pia.value : 0x6499de,
Loc.seaside_sarubo.value : 0x6499df,
Loc.seaside_salurin.value : 0x6499e0,
Loc.seaside_ukkitan.value : 0x649b4f,
Loc.seaside_morella.value : 0x649b99,
Loc.seaside_ukki_ben.value : 0x6499e1,
Loc.seaside_kankichi.value : 0x649b5e,
Loc.seaside_tomezo.value : 0x649b5f,
Loc.seaside_kamayan.value : 0x649b60,
Loc.seaside_taizo.value : 0x649b61,
## Hide-n-Seek Forest
Loc.woods_ukki_pon.value : 0x6499e2,
Loc.woods_ukkian.value : 0x6499e3,
Loc.woods_ukki_red.value : 0x6499e4,
Loc.woods_rosalin.value : 0x649b4b,
Loc.woods_salubon.value : 0x6499e5,
Loc.woods_wolfmon.value : 0x6499e6,
Loc.woods_ukiko.value : 0x649be8,
Loc.woods_lambymon.value : 0x6499e7,
Loc.woods_kreemon.value : 0x6499e8,
Loc.woods_ukkilei.value : 0x6499e9,
Loc.woods_spork.value : 0x649be7,
Loc.woods_king_goat.value : 0x649b62,
Loc.woods_marukichi.value : 0x649b63,
Loc.woods_kikimon.value : 0x649b64,
Loc.woods_kominato.value : 0x649b65,
## Saru-mon's Castle
Loc.castle_ukkido.value : 0x6499ea,
Loc.castle_pipo_guard.value : 0x6499eb,
Loc.castle_monderella.value : 0x6499ec,
Loc.castle_ukki_ichi.value : 0x6499ed,
Loc.castle_ukkinee.value : 0x6499ee,
Loc.castle_saru_mon.value : 0x6499ef,
Loc.castle_monga.value : 0x6499f0,
Loc.castle_ukkiton.value : 0x6499f1,
Loc.castle_king_leo.value : 0x6499f2,
Loc.castle_ukkii.value : 0x6499f3,
Loc.castle_saluto.value : 0x6499f4,
Loc.castle_kings_double.value : 0x649b68,
Loc.castle_mattsun.value : 0x649b69,
Loc.castle_miya.value : 0x649b6a,
Loc.castle_mon_san.value : 0x649b6b,
Loc.castle_sal_1000.value : 0x649be4,
## Monkey White Battle!
Loc.boss_monkey_white.value : 0x649b40,
## The Big City
Loc.ciscocity_ukima.value : 0x6499f5,
Loc.ciscocity_monbolo.value : 0x6499f6,
Loc.ciscocity_pipo_mondy.value : 0x6499f7,
Loc.ciscocity_ukki_mattan.value : 0x6499f8,
Loc.ciscocity_bemucho.value : 0x6499f9,
Loc.ciscocity_ukki_nader.value : 0x649be5,
Loc.ciscocity_sabu_sabu.value : 0x649b5b,
Loc.ciscocity_ginjiro.value : 0x649b5c,
Loc.ciscocity_kichiemon.value : 0x649b5d,
Loc.ciscocity_ukkilun.value : 0x6499fb,
Loc.ciscocity_bully_mon.value : 0x6499fc,
Loc.ciscocity_ukki_joe.value : 0x6499fd,
Loc.ciscocity_tamaki.value : 0x6499fe,
Loc.ciscocity_mickey_oou.value : 0x6499ff,
Loc.ciscocity_sally_kokoroe.value : 0x649b6c,
Loc.ciscocity_monkey_manager.value : 0x649b6d,
Loc.ciscocity_supervisor_chimp.value : 0x649b6e,
Loc.ciscocity_boss_ape.value : 0x649b6f,
## Specter TV Studio
Loc.studio_ukki_yan.value : 0x649a00,
Loc.studio_ukkipuss.value : 0x649a01,
Loc.studio_minoh.value : 0x649a02,
Loc.studio_monta.value : 0x649a03,
Loc.studio_pipopam.value : 0x649a04,
Loc.studio_monpii_ukkichi.value : 0x649a05,
Loc.studio_gabimon.value : 0x649a06,
Loc.studio_bananamon.value : 0x649a07,
Loc.studio_mokinza.value : 0x649a08,
Loc.studio_ukki_lee_ukki.value : 0x649a09,
Loc.studio_ukkida_jiro.value : 0x649a0a,
Loc.studio_sal_ukindo.value : 0x649a0b,
Loc.studio_gimminey.value : 0x649a9e,
Loc.studio_hant.value : 0x649aab,
Loc.studio_chippino.value : 0x649bd8,
Loc.studio_ukki_paul.value : 0x649b70,
Loc.studio_sally_mon.value : 0x649b71,
Loc.studio_bonly.value : 0x649b72,
Loc.studio_monly.value : 0x649b73,
## Bootown
Loc.halloween_monkichiro.value : 0x649a0c,
Loc.halloween_leomon.value : 0x649a0d,
Loc.halloween_uikkun.value : 0x649a0e,
Loc.halloween_take_ukita.value : 0x649a0f,
Loc.halloween_bonbon.value : 0x649a10,
Loc.halloween_chichi.value : 0x649a11,
Loc.halloween_ukkisuke.value : 0x649a13,
Loc.halloween_chibi_sally.value : 0x649a14,
Loc.halloween_ukkison.value : 0x649a15,
Loc.halloween_saruhotep.value : 0x649a16,
Loc.halloween_ukkito.value : 0x649a17,
Loc.halloween_monzally.value : 0x649a18,
Loc.halloween_ukkiami.value : 0x649a19,
Loc.halloween_monjan.value : 0x649b74,
Loc.halloween_nattchan.value : 0x649b75,
Loc.halloween_kabochin.value : 0x649b76,
Loc.halloween_ukki_mon.value : 0x649b77,
Loc.halloween_mumpkin.value : 0x649a12,
## Wild West Town
Loc.western_morrey.value : 0x649a1a,
Loc.western_jomi.value : 0x649a1b,
Loc.western_tammy.value : 0x649a1c,
Loc.western_ukki_gigolo.value : 0x649a1e,
Loc.western_monboron.value : 0x649a1f,
Loc.western_west_ukki.value : 0x649a28,
Loc.western_lucky_woo.value : 0x649b78,
Loc.western_pamela.value : 0x649b79,
Loc.western_ukki_monber.value : 0x649b7a,
Loc.western_gaukichi.value : 0x649b7b,
Loc.western_shaluron.value : 0x649a20,
Loc.western_jay_mohn.value : 0x649a21,
Loc.western_munkee_joe.value : 0x649a22,
Loc.western_saru_chison.value : 0x649a23,
Loc.western_jaja_jamo.value : 0x649a24,
Loc.western_chammy_mo.value : 0x649a25,
Loc.western_golon_moe.value : 0x649a26,
Loc.western_golozo.value : 0x649a27,
Loc.western_ukkia_munbo.value : 0x649a1d,
Loc.western_mon_johny.value : 0x649b1a,
## Monkey Blue Battle!
Loc.boss_monkey_blue.value : 0x649b41,
## The Hot Springs
Loc.onsen_chabimon.value : 0x649a29,
Loc.onsen_saru_sam.value : 0x649a2a,
Loc.onsen_kiichiro.value : 0x649a2b,
Loc.onsen_tome_san.value : 0x649a2c,
Loc.onsen_michiyan.value : 0x649a2d,
Loc.onsen_ukki_ichiro.value : 0x649a41,
Loc.onsen_ukki_emon.value : 0x649a2e,
Loc.onsen_moki.value : 0x649a2f,
Loc.onsen_ukimi.value : 0x649a30,
Loc.onsen_domobeh.value : 0x649a31,
Loc.onsen_sam_san.value : 0x649b81,
Loc.onsen_donkichi.value : 0x649b82,
Loc.onsen_minokichi.value : 0x649b83,
Loc.onsen_tatabo.value : 0x649B84,
Loc.onsen_kimi_san.value : 0x649a34,
Loc.onsen_michiro.value : 0x649a35,
Loc.onsen_gen_san.value : 0x649bde,
Loc.onsen_mujakin.value : 0x649a36,
Loc.onsen_mihachin.value : 0x649a37,
Loc.onsen_fuji_chan.value : 0x649a38,
## Winterville
Loc.snowfesta_kimisuke.value : 0x649a39,
Loc.snowfesta_konzo.value : 0x649a3a,
Loc.snowfesta_saburota.value : 0x649a3b,
Loc.snowfesta_mitsuro.value : 0x649a3c,
Loc.snowfesta_takuo.value : 0x649a94,
Loc.snowfesta_konkichi.value : 0x649aa6,
Loc.snowfesta_fumikichi.value : 0x649a3d,
Loc.snowfesta_pipotron_yellow.value : 0x649be3,
Loc.snowfesta_tamubeh.value : 0x649a3e,
Loc.snowfesta_kimikichi.value : 0x649a3f,
Loc.snowfesta_gonbeh.value : 0x649a40,
Loc.snowfesta_shimmy.value : 0x649be0,
Loc.snowfesta_mako.value : 0x649a43,
Loc.snowfesta_miko.value : 0x649a44,
Loc.snowfesta_tamio.value : 0x649a45,
Loc.snowfesta_jeitan.value : 0x649a46,
Loc.snowfesta_ukki_jii.value : 0x649a47,
Loc.snowfesta_akki_bon.value : 0x649bd7,
Loc.snowfesta_kimi_chan.value : 0x649b85,
Loc.snowfesta_sae_chan.value : 0x649b86,
Loc.snowfesta_tassan.value : 0x649b87,
Loc.snowfesta_tomokun.value : 0x649b88,
## The Emperor's Castle
Loc.edotown_pipo_tobi.value : 0x649a48,
Loc.edotown_masan.value : 0x649a49,
Loc.edotown_mohachi.value : 0x649a4a,
Loc.edotown_mon_ninpo.value : 0x649a4c,
Loc.edotown_yosio.value : 0x649a4d,
Loc.edotown_fatty_mcfats.value : 0x649a4e,
Loc.edotown_kikimaru.value : 0x649a4f,
Loc.edotown_tomoku_chan.value : 0x649a50,
Loc.edotown_uziko.value : 0x649a51,
Loc.edotown_gp.value : 0x649a52,
Loc.edotown_walter.value : 0x649a53,
Loc.edotown_monkibeth.value : 0x649a54,
Loc.edotown_babuzo.value : 0x649a55,
Loc.edotown_fishy_feet.value : 0x649a56,
Loc.edotown_pipo_torin.value : 0x649a57,
Loc.edotown_tomi.value : 0x649a58,
Loc.edotown_master_pan.value : 0x649a59,
Loc.edotown_monchin_chi.value : 0x649b89,
Loc.edotown_masachi.value : 0x649b8a,
Loc.edotown_golota.value : 0x649b8b,
Loc.edotown_kinsuke.value : 0x649b8c,
## Monkey Blue Battle!
Loc.boss_monkey_yellow.value : 0x649b42,
## Mount Amazing
Loc.heaven_ukkichi.value : 0x649a5a,
Loc.heaven_chomon.value : 0x649a5b,
Loc.heaven_ukkido.value : 0x649a5c,
Loc.heaven_kyamio.value : 0x649a5d,
Loc.heaven_talupon.value : 0x649a5e,
Loc.heaven_bokitan.value : 0x649a5f,
Loc.heaven_tami.value : 0x649a66,
Loc.heaven_micchino.value : 0x649a67,
Loc.heaven_talurin.value : 0x649a60,
Loc.heaven_occhimon.value : 0x649a61,
Loc.heaven_mikkurin.value : 0x649a62,
Loc.heaven_kicchino.value : 0x649a63,
Loc.heaven_kimurin.value : 0x649a64,
Loc.heaven_sakkano.value : 0x649a65,
Loc.heaven_camino.value : 0x649a68,
Loc.heaven_valuccha.value : 0x649a69,
Loc.heaven_pisuke.value : 0x649b8d,
Loc.heaven_kansuke.value : 0x649b8e,
Loc.heaven_pohta.value : 0x649b8f,
Loc.heaven_keisuke.value : 0x649b90,
## Toytown
Loc.toyhouse_pikkori.value : 0x649a6a,
Loc.toyhouse_talukki.value : 0x649a6b,
Loc.toyhouse_pinkino.value : 0x649a6c,
Loc.toyhouse_bon_mota.value : 0x649a6d,
Loc.toyhouse_bon_verna.value : 0x649a6e,
Loc.toyhouse_bon_papa.value : 0x649a6f,
Loc.toyhouse_bon_mama.value : 0x649a70,
Loc.toyhouse_kalkin.value : 0x649aa8,
Loc.toyhouse_pakun.value : 0x649a71,
Loc.toyhouse_ukki_x.value : 0x649a72,
Loc.toyhouse_mon_gareji.value : 0x649a73,
Loc.toyhouse_shouji.value : 0x649bdc,
Loc.toyhouse_woo_makka.value : 0x649bdd,
Loc.toyhouse_monto.value : 0x649a74,
Loc.toyhouse_mokitani.value : 0x649a75,
Loc.toyhouse_namigo.value : 0x649bda,
Loc.toyhouse_pipotron_red.value : 0x649be1,
Loc.toyhouse_master_loafy.value : 0x649a77,
Loc.toyhouse_golonero.value : 0x649a78,
Loc.toyhouse_kocho.value : 0x649bdb,
Loc.toyhouse_tam_konta.value : 0x649b91,
Loc.toyhouse_tam_mimiko.value : 0x649b92,
Loc.toyhouse_tam_papa.value : 0x649b93,
Loc.toyhouse_tam_mama.value : 0x649b94,
## Arctice Wonderland
Loc.iceland_bikupuri.value : 0x649a7b,
Loc.iceland_ukkisu.value : 0x649a7c,
Loc.iceland_ukki_ami.value : 0x649a7d,
Loc.iceland_balio.value : 0x649a93,
Loc.iceland_kimkon.value : 0x649a79,
Loc.iceland_ukkina.value : 0x649a7a,
Loc.iceland_kushachin.value : 0x649a82,
Loc.iceland_malikko.value : 0x649a7e,
Loc.iceland_bolikko.value : 0x649a7f,
Loc.iceland_iceymon.value : 0x649a80,
Loc.iceland_mokkidon.value : 0x649a81,
Loc.iceland_jolly_mon.value : 0x649a83,
Loc.iceland_hikkori.value : 0x649a84,
Loc.iceland_rammy.value : 0x649a85,
Loc.iceland_monkino.value : 0x649b95,
Loc.iceland_kyam.value : 0x649b96,
Loc.iceland_kappino.value : 0x649b97,
Loc.iceland_kris_krimon.value : 0x649b98,
## Mirage Town
Loc.arabian_scorpi_mon.value : 0x649a86,
Loc.arabian_minimon.value : 0x649a87,
Loc.arabian_moontero.value : 0x649a88,
Loc.arabian_ukki_son.value : 0x649a89,
Loc.arabian_ukki_jeff.value : 0x649a8a,
Loc.arabian_saru_maru.value : 0x649a8b,
Loc.arabian_genghis_mon.value : 0x649a8c,
Loc.arabian_cup_o_mon.value : 0x649a8d,
Loc.arabian_nijal.value : 0x649a8e,
Loc.arabian_apey_jones.value : 0x649a8f,
Loc.arabian_ukki_mamba.value : 0x649a90,
Loc.arabian_golden_mon.value : 0x649a91,
Loc.arabian_crazy_ol_mon.value : 0x649a92,
Loc.arabian_shamila.value : 0x649a95,
Loc.arabian_tamiyanya.value : 0x649a96,
Loc.arabian_salteenz.value : 0x649a98,
Loc.arabian_dancing_mia.value : 0x649a99,
Loc.arabian_miccho.value : 0x649bbb,
Loc.arabian_kisha.value : 0x649bbc,
Loc.arabian_gimuccho.value : 0x649bbd,
Loc.arabian_wojin.value : 0x649bbe,
Loc.arabian_princess_judy.value : 0x649a97,
## Monkey Pink Battle!
Loc.boss_monkey_pink.value : 0x649b43,
## Eversummer Island
Loc.asia_ukki_mat.value : 0x649a9a,
Loc.asia_salumani.value : 0x649a9b,
Loc.asia_salulu.value : 0x649a9c,
Loc.asia_baku.value : 0x649a9d,
Loc.asia_salunch.value : 0x649aa7,
Loc.asia_pincher_mon.value : 0x649aaa,
Loc.asia_mong_popo.value : 0x649aa0,
Loc.asia_mohcha.value : 0x649aa1,
Loc.asia_kamcha.value : 0x649aa2,
Loc.asia_bimocha.value : 0x649aa3,
Loc.asia_gimchin.value : 0x649aa4,
Loc.asia_kamaccha.value : 0x649aa5,
Loc.asia_gyamu.value : 0x649aac,
Loc.asia_takumon.value : 0x649aad,
Loc.asia_ukki_ether.value : 0x649aae,
Loc.asia_tartan.value : 0x649aaf,
Loc.asia_molzone.value : 0x649ab0,
Loc.asia_chappio.value : 0x649ab1,
Loc.asia_pomoah.value : 0x649ab2,
Loc.asia_gucchai.value : 0x649bbf,
Loc.asia_makaccho.value : 0x649bc0,
Loc.asia_gamaran.value : 0x649bc1,
Loc.asia_larry.value : 0x649bc2,
## Airplane Squadron
Loc.plane_romo.value : 0x649ab3,
Loc.plane_temko.value : 0x649ab4,
Loc.plane_ukkigawa.value : 0x649ab5,
Loc.plane_mokkido.value : 0x649ab6,
Loc.plane_pont.value : 0x649ab7,
Loc.plane_gamish.value : 0x649ab8,
Loc.plane_prince_bertus.value : 0x649ab9,
Loc.plane_takmon.value : 0x649aba,
Loc.plane_chai_bunny.value : 0x649abb,
Loc.plane_mukita.value : 0x649be6,
Loc.plane_tamrai.value : 0x649abc,
Loc.plane_kemunpa.value : 0x649abd,
Loc.plane_pipotron_blue.value : 0x649be2,
Loc.plane_mabaras.value : 0x649abe,
Loc.plane_tamoos.value : 0x649abf,
Loc.plane_kimoto.value : 0x649ac0,
Loc.plane_octavian.value : 0x649ac3,
Loc.plane_samuel.value : 0x649bc3,
Loc.plane_coril.value : 0x649bc4,
Loc.plane_bont.value : 0x649bc5,
Loc.plane_delly.value : 0x649bc6,
Loc.plane_jeloh.value : 0x649ac1,
Loc.plane_bongo.value : 0x649ac2,
## Kung-Fu Alley
Loc.hong_dally.value : 0x649ac4,
Loc.hong_nak_nayo.value : 0x649ac5,
Loc.hong_donto_koi.value : 0x649ac6,
Loc.hong_po_kin_ki.value : 0x649ac7,
Loc.hong_ukki_chan.value : 0x649ac8,
Loc.hong_uki_uki.value : 0x649ac9,
Loc.hong_muki_muki.value : 0x649aca,
Loc.hong_shinchi.value : 0x649acb,
Loc.hong_doh_tsuitaro.value : 0x649acd,
Loc.hong_hi_uchi_ishi.value : 0x649ace,
Loc.hong_gala_waruo.value : 0x649acf,
Loc.hong_bassili_ukki.value : 0x649ad0,
Loc.hong_danchi.value : 0x649ad1,
Loc.hong_pikon.value : 0x649ad2,
Loc.hong_bankan.value : 0x649ad3,
Loc.hong_sukei.value : 0x649ad4,
Loc.hong_giyan.value : 0x649ad5,
Loc.hong_muchaki.value : 0x649ada,
Loc.hong_yoh_kitana.value : 0x649adb,
Loc.hong_goshi_andos.value : 0x649adc,
Loc.hong_pukuman.value : 0x649add,
Loc.hong_block_master.value : 0x649adf,
Loc.hong_tompo.value : 0x649bc7,
Loc.hong_wootan.value : 0x649bc8,
Loc.hong_chechin.value : 0x649bc9,
Loc.hong_hapcho.value : 0x649bca,
Loc.hong_bonmos.value : 0x649ad7,
Loc.hong_dark_master.value : 0x649bdf,
Loc.hong_teh_isu.value : 0x649ad8,
Loc.hong_ponja.value : 0x649ad9,
## Monkey Red Battle!
Loc.boss_monkey_red.value : 0x649b44,
Loc.bay_nadamon.value : 0x649ae0,
Loc.bay_patoya.value : 0x649ae1,
Loc.bay_gumbo.value : 0x649ae2,
Loc.bay_pehyan.value : 0x649ae3,
Loc.bay_mokito.value : 0x649ae4,
Loc.bay_pipo_kate.value : 0x649ae5,
Loc.bay_samtan.value : 0x649ae6,
Loc.bay_pokkine.value : 0x649ae7,
Loc.bay_daban.value : 0x649ae8,
Loc.bay_shiny_pete.value : 0x649aa9,
Loc.bay_keiichi.value : 0x649ae9,
Loc.bay_landon.value : 0x649aea,
Loc.bay_mcbreezy.value : 0x649aeb,
Loc.bay_ronson.value : 0x649aec,
Loc.bay_gimo.value : 0x649aed,
Loc.bay_hiroshi.value : 0x649aee,
Loc.bay_nakabi.value : 0x649aef,
Loc.bay_mibon.value : 0x649af0,
Loc.bay_bololon.value : 0x649af1,
Loc.bay_gimi_gimi.value : 0x649acc,
Loc.bay_doemos.value : 0x649af2,
Loc.bay_kazuo.value : 0x649af3,
Loc.bay_pokkini.value : 0x649af4,
Loc.bay_jimo.value : 0x649af5,
Loc.bay_bokino.value : 0x649af6,
Loc.bay_makidon.value : 0x649bcb,
Loc.bay_dogy.value : 0x649bcc,
Loc.bay_gibdon.value : 0x649bcd,
Loc.bay_buligie.value : 0x649bce,
Loc.tomo_kichibeh.value : 0x649af8,
Loc.tomo_bonchicchi.value : 0x649af9,
Loc.tomo_mikibon.value : 0x649afa,
Loc.tomo_dj_tamo.value : 0x649afb,
Loc.tomo_ukkinaka.value : 0x649afc,
Loc.tomo_ukkine.value : 0x649afd,
Loc.tomo_pon_jiro.value : 0x649aff,
Loc.tomo_chimpy.value : 0x649b00,
Loc.tomo_kajitan.value : 0x649b01,
Loc.tomo_uka_uka.value : 0x649b02,
Loc.tomo_mil_mil.value : 0x649b03,
Loc.tomo_taimon.value : 0x649b07,
Loc.tomo_goro_san.value : 0x649b08,
Loc.tomo_reiji.value : 0x649b09,
Loc.tomo_ponta.value : 0x649b0a,
Loc.tomo_tomio.value : 0x649b0b,
Loc.tomo_gario.value : 0x649b0c,
Loc.tomo_dj_pari.value : 0x649b0d,
Loc.tomo_mitsuo.value : 0x649b0e,
Loc.tomo_riley.value : 0x649b0f,
Loc.tomo_pipo_ron.value : 0x649b10,
Loc.tomo_mikita.value : 0x649b11,
Loc.tomo_sal_13.value : 0x649b12,
Loc.tomo_sal_12.value : 0x649b13,
Loc.tomo_tomu.value : 0x649bcf,
Loc.tomo_breadacus.value : 0x649bd0,
Loc.tomo_ukkigoro.value : 0x649bd1,
Loc.tomo_ukiji.value : 0x649bd2,
Loc.tomo_tomimon.value : 0x649af7,
Loc.boss_tomoki.value : 0x647a58,
Loc.space_poko.value : 0x649b14,
Loc.space_gamuo.value : 0x649b15,
Loc.space_mukikko.value : 0x649b3c,
Loc.space_moto_ukki.value : 0x649b16,
Loc.space_jimi_jami.value : 0x649b17,
Loc.space_genbo.value : 0x649b18,
Loc.space_twin_mitty.value : 0x649b19,
Loc.space_uttey.value : 0x649b1d,
Loc.space_emma.value : 0x649b1e,
Loc.space_dokicchi.value : 0x649b1f,
Loc.space_kamicchi.value : 0x649b20,
Loc.space_ukki_monda.value : 0x649b21,
Loc.space_porokko.value : 0x649b22,
Loc.space_zonelin.value : 0x649b23,
Loc.space_tamano.value : 0x649b24,
Loc.space_nelson.value : 0x649b25,
Loc.space_koloneh.value : 0x649b26,
Loc.space_miluchy.value : 0x649b27,
Loc.space_robert.value : 0x649b28,
Loc.space_fronson.value : 0x649b29,
Loc.space_demekin.value : 0x649b2a,
Loc.space_kikuyoshi.value : 0x649b2b,
Loc.space_freet.value : 0x649b2c,
Loc.space_chico.value : 0x649b2d,
Loc.space_gamurin.value : 0x649b2e,
Loc.space_pipo_mon.value : 0x649b2f,
Loc.space_gam_gam.value : 0x649b30,
Loc.space_doronbo.value : 0x649b31,
Loc.space_benja.value : 0x649b32,
Loc.space_macchan.value : 0x649b33,
Loc.space_rokkun.value : 0x649b34,
Loc.space_ukki_love.value : 0x649b35,
Loc.space_momongo.value : 0x649b36,
Loc.space_moepi.value : 0x649b37,
Loc.space_pumon.value : 0x649b38,
Loc.space_makiban.value : 0x649b39,
Loc.space_upis.value : 0x649bd3,
Loc.space_mondatta.value : 0x649bd4,
Loc.space_gicchom.value : 0x649bd5,
Loc.space_barire.value : 0x649bd6,
Loc.space_sal_10.value : 0x649b3d,
Loc.space_sal_11.value : 0x649b3e,
Loc.space_sal_3000.value : 0x649beb,
# Specter
Loc.boss_specter.value : 0x649bec,
Loc.boss_specter_final.value : 0x649b46,
# Permanent Boss Check Addresses
## These are used to store permanently store the status of these locations,
## as their real addresses affect and may even hinder game use and progression
Loc.boss_alt_white.value : 0x649b50,
Loc.boss_alt_blue.value : 0x649b51,
Loc.boss_alt_yellow.value : 0x649b52,
Loc.boss_alt_pink.value : 0x649b53,
Loc.boss_alt_red.value : 0x649b54,
Loc.boss_alt_tomoki.value : 0x649b55,
Loc.boss_alt_specter.value : 0x649b56,
Loc.boss_alt_specter_final.value : 0x649b57,
# Pipo Camera
Loc.pipo_camera.value : 0x1F4,
Loc.seaside_cam.value : 0x649B9A,
Loc.woods_cam.value : 0x649B9B,
Loc.castle_cam.value : 0x649B9C,
Loc.ciscocity_cam.value : 0x649B9D,
Loc.studio_cam.value : 0x649B9E,
Loc.halloween_cam.value : 0x649B9F,
Loc.western_cam.value : 0x649BA0,
Loc.onsen_cam.value : 0x649BA1,
Loc.snowfesta_cam.value : 0x649BA2,
Loc.edotown_cam.value : 0x649BA3,
Loc.heaven_cam.value : 0x649BA4,
Loc.toyhouse_cam.value : 0x649BA5,
Loc.iceland_cam.value : 0x649BA6,
Loc.arabian_cam.value : 0x649BA7,
Loc.asia_cam.value : 0x649BA8,
Loc.plane_cam.value : 0x649BA9,
Loc.hong_cam.value : 0x649BAA,
Loc.bay_cam.value : 0x649BAB,
Loc.tomo_cam.value : 0x649BAC,
Loc.space_cam.value : 0x649BAD,
# Cellphones
Loc.tele_000.value : 0x649BB0,
Loc.tele_001.value : 0x649BB1,
Loc.tele_002.value : 0x649BB2,
Loc.tele_003.value : 0x649BB3,
Loc.tele_004ss.value : 0x649BB4,
Loc.tele_004wo.value : 0x649BB5,
Loc.tele_006.value : 0x649BB6,
Loc.tele_007.value : 0x649BB7,
Loc.tele_008.value : 0x649BB8,
Loc.tele_009.value : 0x649BB9,
Loc.tele_010.value : 0x649BBA,
Loc.tele_011.value : 0x649BD9,
Loc.tele_012cc.value : 0x649BED,
Loc.tele_012tv.value : 0x649BEE,
Loc.tele_013.value : 0x649BEF,
Loc.tele_014.value : 0x649BF0,
Loc.tele_015.value : 0x649BF1,
Loc.tele_016.value : 0x649BF2,
Loc.tele_017.value : 0x649BF3,
Loc.tele_018.value : 0x649BF4,
Loc.tele_019.value : 0x649BF5,
Loc.tele_020.value : 0x649BF6,
Loc.tele_021on.value : 0x649BF7,
Loc.tele_021ic.value : 0x649BF8,
Loc.tele_022sf.value : 0x649BF9,
Loc.tele_022pl.value : 0x649BFA,
Loc.tele_023.value : 0x649BFB,
Loc.tele_024.value : 0x649BFC,
Loc.tele_025.value : 0x649BFD,
Loc.tele_026.value : 0x649BFE,
Loc.tele_028.value : 0x649BFF,
Loc.tele_029.value : 0x649C00,
Loc.tele_030tv.value : 0x649C01,
Loc.tele_030ty.value : 0x649C02,
Loc.tele_031.value : 0x649C03,
Loc.tele_032.value : 0x649C04,
Loc.tele_033.value : 0x649C05,
Loc.tele_034.value : 0x649C06,
Loc.tele_035.value : 0x649C07,
Loc.tele_037.value : 0x649C08,
Loc.tele_039.value : 0x649C09,
Loc.tele_040h_a.value : 0x649C0A,
Loc.tele_040h_b.value : 0x649C0B,
Loc.tele_042ar.value : 0x649C0C,
Loc.tele_042ho.value : 0x649C0D,
Loc.tele_044.value : 0x649C0E,
Loc.tele_045.value : 0x649C0F,
Loc.tele_047.value : 0x649C10,
Loc.tele_048.value : 0x649C11,
Loc.tele_051.value : 0x649C12,
Loc.tele_052.value : 0x649C13,
Loc.tele_062.value : 0x649C14,
Loc.tele_063.value : 0x649C15,
# Shopping Area
## Monkey Mart
Loc.shop_morph_stock.value : 0x100,
## Book Shop
Loc.hint_book.value : 0x01,
Loc.mon_fiction.value : 0x15,
Loc.channel_guide.value : 0x29,
Loc.hint_book_1.value : 0x649c84,
Loc.hint_book_2.value : 0x649c85,
Loc.hint_book_3.value : 0x649c86,
Loc.hint_book_4.value : 0x649c87,
Loc.hint_book_5.value : 0x649c88,
Loc.hint_book_6.value : 0x649c89,
Loc.hint_book_7.value : 0x649c8A,
Loc.hint_book_8.value : 0x649c8B,
Loc.hint_book_9.value : 0x649c8C,
Loc.hint_book_10.value : 0x649c8D,
Loc.hint_book_11.value : 0x649c8E,
Loc.hint_book_12.value : 0x649c8F,
Loc.hint_book_13.value : 0x649c90,
Loc.hint_book_14.value : 0x649c91,
Loc.hint_book_15.value : 0x649c92,
Loc.hint_book_16.value : 0x649c93,
Loc.hint_book_17.value : 0x649c94,
Loc.hint_book_18.value : 0x649c95,
Loc.hint_book_19.value : 0x649c96,
Loc.hint_book_20.value : 0x649c97,
Loc.mon_fiction_1.value : 0x649cb2,
Loc.mon_fiction_2.value : 0x649cb3,
Loc.mon_fiction_3.value : 0x649cb4,
Loc.mon_fiction_4.value : 0x649cb5,
Loc.mon_fiction_5.value : 0x649cb6,
Loc.mon_fiction_6.value : 0x649cb7,
Loc.mon_fiction_7.value : 0x649cb8,
Loc.mon_fiction_8.value : 0x649cb9,
Loc.mon_fiction_9.value : 0x649cba,
Loc.mon_fiction_10.value : 0x649cbb,
Loc.mon_fiction_11.value : 0x649cbc,
Loc.mon_fiction_12.value : 0x649cbd,
Loc.mon_fiction_13.value : 0x649cbe,
Loc.mon_fiction_14.value : 0x649cbf,
Loc.mon_fiction_15.value : 0x649cc0,
Loc.mon_fiction_16.value : 0x649cc1,
Loc.mon_fiction_17.value : 0x649cc2,
Loc.mon_fiction_18.value : 0x649cc3,
Loc.mon_fiction_19.value : 0x649cc4,
Loc.mon_fiction_20.value : 0x649cc5,
Loc.channel_guide_1.value : 0x649c9e,
Loc.channel_guide_2.value : 0x649c9f,
Loc.channel_guide_3.value : 0x649ca0,
Loc.channel_guide_4.value : 0x649ca1,
Loc.channel_guide_5.value : 0x649ca2,
Loc.channel_guide_6.value : 0x649ca3,
Loc.channel_guide_7.value : 0x649ca4,
Loc.channel_guide_8.value : 0x649ca5,
Loc.channel_guide_9.value : 0x649ca6,
Loc.channel_guide_10.value : 0x649ca7,
Loc.channel_guide_11.value : 0x649ca8,
Loc.channel_guide_12.value : 0x649ca9,
Loc.channel_guide_13.value : 0x649caa,
Loc.channel_guide_14.value : 0x649cab,
Loc.channel_guide_15.value : 0x649cac,
Loc.channel_guide_16.value : 0x649cad,
Loc.channel_guide_17.value : 0x649cae,
Loc.channel_guide_18.value : 0x649caf,
Loc.channel_guide_19.value : 0x649cb0,
Loc.channel_guide_20.value : 0x649cb1,
## Hobby Shop
Loc.bonus_rc_cars.value : 0x3D,
Loc.lucky_photo.value : 0x40,
Loc.bonus_rc_cars_1.value : 0x6499A3,
Loc.bonus_rc_cars_2.value : 0x6499A4,
Loc.bonus_rc_cars_3.value : 0x6499A5,
Loc.shop_super_monkey_throw_stadium.value : 0x649c9b,
Loc.shop_ultim_ape_fighter.value : 0x649c9c,
Loc.shop_mesal_gear_solid.value : 0x649c9d,
Loc.weird_photos_1.value : 0x649c52,
Loc.weird_photos_2.value : 0x649c53,
Loc.weird_photos_3.value : 0x649c54,
Loc.weird_photos_4.value : 0x649c55,
Loc.weird_photos_5.value : 0x649c56,
Loc.weird_photos_6.value : 0x649c57,
Loc.weird_photos_7.value : 0x649c58,
Loc.weird_photos_8.value : 0x649c59,
Loc.weird_photos_9.value : 0x649c5a,
Loc.weird_photos_10.value : 0x649c5b,
Loc.weird_photos_11.value : 0x649c5c,
Loc.weird_photos_12.value : 0x649c5d,
Loc.weird_photos_13.value : 0x649c5e,
Loc.weird_photos_14.value : 0x649c5f,
Loc.weird_photos_15.value : 0x649c60,
Loc.weird_photos_16.value : 0x649c61,
Loc.weird_photos_17.value : 0x649c62,
Loc.weird_photos_18.value : 0x649c63,
Loc.weird_photos_19.value : 0x649c64,
Loc.weird_photos_20.value : 0x649c65,
Loc.secret_photos_1.value : 0x649c66,
Loc.secret_photos_2.value : 0x649c67,
Loc.secret_photos_3.value : 0x649c68,
Loc.secret_photos_4.value : 0x649c69,
Loc.secret_photos_5.value : 0x649c6a,
Loc.secret_photos_6.value : 0x649c6b,
Loc.secret_photos_7.value : 0x649c6c,
Loc.secret_photos_8.value : 0x649c6d,
Loc.secret_photos_9.value : 0x649c6e,
Loc.secret_photos_10.value : 0x649c6f,
Loc.secret_photos_11.value : 0x649c70,
Loc.secret_photos_12.value : 0x649c71,
Loc.secret_photos_13.value : 0x649c72,
Loc.secret_photos_14.value : 0x649c73,
Loc.secret_photos_15.value : 0x649c74,
Loc.secret_photos_16.value : 0x649c75,
Loc.secret_photos_17.value : 0x649c76,
Loc.secret_photos_18.value : 0x649c77,
Loc.secret_photos_19.value : 0x649c78,
Loc.secret_photos_20.value : 0x649c79,
Loc.secret_photos_21.value : 0x649c7a,
Loc.secret_photos_22.value : 0x649c7b,
Loc.secret_photos_23.value : 0x649c7c,
Loc.secret_photos_24.value : 0x649c7d,
Loc.secret_photos_25.value : 0x649c7e,
Loc.secret_photos_26.value : 0x649c7f,
Loc.secret_photos_27.value : 0x649c80,
Loc.secret_photos_28.value : 0x649c81,
Loc.secret_photos_29.value : 0x649c82,
Loc.secret_photos_30.value : 0x649c83,
Loc.concept_art_1.value : 0x649c34,
Loc.concept_art_2.value : 0x649c35,
Loc.concept_art_3.value : 0x649c36,
Loc.concept_art_4.value : 0x649c37,
Loc.concept_art_5.value : 0x649c38,
Loc.concept_art_6.value : 0x649c39,
Loc.concept_art_7.value : 0x649c3a,
Loc.concept_art_8.value : 0x649c3b,
Loc.concept_art_9.value : 0x649c3c,
Loc.concept_art_10.value : 0x649c3d,
Loc.concept_art_11.value : 0x649c3e,
Loc.concept_art_12.value : 0x649c3f,
Loc.concept_art_13.value : 0x649c40,
Loc.concept_art_14.value : 0x649c41,
Loc.concept_art_15.value : 0x649c42,
Loc.concept_art_16.value : 0x649c43,
Loc.concept_art_17.value : 0x649c44,
Loc.concept_art_18.value : 0x649c45,
Loc.concept_art_19.value : 0x649c46,
Loc.concept_art_20.value : 0x649c47,
Loc.concept_art_21.value : 0x649c48,
Loc.concept_art_22.value : 0x649c49,
Loc.concept_art_23.value : 0x649c4a,
Loc.concept_art_24.value : 0x649c4b,
Loc.concept_art_25.value : 0x649c4c,
Loc.concept_art_26.value : 0x649c4d,
Loc.concept_art_27.value : 0x649c4e,
Loc.concept_art_28.value : 0x649c4f,
Loc.concept_art_29.value : 0x649c50,
Loc.concept_art_30.value : 0x649c51,
Loc.teleborg_cards_1.value : 0x649c16,
Loc.teleborg_cards_2.value : 0x649c17,
Loc.teleborg_cards_3.value : 0x649c18,
Loc.teleborg_cards_4.value : 0x649c19,
Loc.teleborg_cards_5.value : 0x649c1a,
Loc.teleborg_cards_6.value : 0x649c1b,
Loc.teleborg_cards_7.value : 0x649c1c,
Loc.teleborg_cards_8.value : 0x649c1d,
Loc.teleborg_cards_9.value : 0x649c1e,
Loc.teleborg_cards_10.value : 0x649c1f,
Loc.teleborg_cards_11.value : 0x649c20,
Loc.teleborg_cards_12.value : 0x649c21,
Loc.teleborg_cards_13.value : 0x649c22,
Loc.teleborg_cards_14.value : 0x649c23,
Loc.teleborg_cards_15.value : 0x649c24,
Loc.teleborg_cards_16.value : 0x649c25,
Loc.teleborg_cards_17.value : 0x649c26,
Loc.teleborg_cards_18.value : 0x649c27,
Loc.teleborg_cards_19.value : 0x649c28,
Loc.teleborg_cards_20.value : 0x649c29,
Loc.teleborg_cards_21.value : 0x649c2a,
Loc.teleborg_cards_22.value : 0x649c2b,
Loc.teleborg_cards_23.value : 0x649c2c,
Loc.teleborg_cards_24.value : 0x649c2d,
Loc.teleborg_cards_25.value : 0x649c2e,
Loc.teleborg_cards_26.value : 0x649c2f,
Loc.teleborg_cards_27.value : 0x649c30,
Loc.teleborg_cards_28.value : 0x649c31,
Loc.teleborg_cards_29.value : 0x649c32,
Loc.teleborg_cards_30.value : 0x649c33,
## Music Shop
Loc.movie_tape.value : 0xAE,
Loc.music_disc.value : 0xCB,
Loc.genie_dance_music.value : 0xFD,
Loc.movie_tape_1.value : 0x649cfb,
Loc.movie_tape_2.value : 0x649cfc,
Loc.movie_tape_3.value : 0x649cfd,
Loc.movie_tape_4.value : 0x649cfe,
Loc.movie_tape_5.value : 0x649cff,
Loc.movie_tape_6.value : 0x649d00,
Loc.movie_tape_7.value : 0x649d01,
Loc.movie_tape_8.value : 0x649d02,
Loc.movie_tape_9.value : 0x649d03,
Loc.movie_tape_10.value : 0x649d04,
Loc.movie_tape_11.value : 0x649d05,
Loc.movie_tape_12.value : 0x649d06,
Loc.movie_tape_13.value : 0x649d07,
Loc.movie_tape_14.value : 0x649d08,
Loc.movie_tape_15.value : 0x649d09,
Loc.movie_tape_16.value : 0x649d0a,
Loc.movie_tape_17.value : 0x649d0b,
Loc.movie_tape_18.value : 0x649d0c,
Loc.movie_tape_19.value : 0x649d0d,
Loc.movie_tape_20.value : 0x649d0e,
Loc.movie_tape_21.value : 0x649d0f,
Loc.movie_tape_22.value : 0x649d10,
Loc.movie_tape_23.value : 0x649d11,
Loc.movie_tape_24.value : 0x649d12,
Loc.movie_tape_25.value : 0x649d13,
Loc.movie_tape_26.value : 0x649d14,
Loc.movie_tape_27.value : 0x649d15,
Loc.movie_tape_28.value : 0x649d16,
Loc.movie_tape_29.value : 0x649d17,
Loc.music_disc_1.value : 0x649cc6,
Loc.music_disc_2.value : 0x649cc7,
Loc.music_disc_3.value : 0x649cc8,
Loc.music_disc_4.value : 0x649cc9,
Loc.music_disc_5.value : 0x649cca,
Loc.music_disc_6.value : 0x649ccb,
Loc.music_disc_7.value : 0x649ccc,
Loc.music_disc_8.value : 0x649ccd,
Loc.music_disc_9.value : 0x649cce,
Loc.music_disc_10.value : 0x649ccf,
Loc.music_disc_11.value : 0x649cd0,
Loc.music_disc_12.value : 0x649cd1,
Loc.music_disc_13.value : 0x649cd2,
Loc.music_disc_14.value : 0x649cd3,
Loc.music_disc_15.value : 0x649cd4,
Loc.music_disc_16.value : 0x649cd5,
Loc.music_disc_17.value : 0x649cd6,
Loc.music_disc_18.value : 0x649cd7,
Loc.music_disc_19.value : 0x649cd8,
Loc.music_disc_20.value : 0x649cd9,
Loc.music_disc_21.value : 0x649cda,
Loc.music_disc_22.value : 0x649cdb,
Loc.music_disc_23.value : 0x649cdc,
Loc.music_disc_24.value : 0x649cdd,
Loc.music_disc_25.value : 0x649cde,
Loc.music_disc_26.value : 0x649cdf,
Loc.music_disc_27.value : 0x649ce0,
Loc.music_disc_28.value : 0x649ce1,
Loc.music_disc_29.value : 0x649ce2,
Loc.music_disc_30.value : 0x649ce3,
Loc.music_disc_31.value : 0x649ce4,
Loc.music_disc_32.value : 0x649ce5,
Loc.music_disc_33.value : 0x649ce6,
Loc.music_disc_34.value : 0x649ce7,
Loc.music_disc_35.value : 0x649ce8,
Loc.music_disc_36.value : 0x649ce9,
Loc.music_disc_37.value : 0x649cea,
Loc.music_disc_38.value : 0x649ceb,
Loc.music_disc_39.value : 0x649cec,
Loc.music_disc_40.value : 0x649ced,
Loc.music_disc_41.value : 0x649cee,
Loc.music_disc_42.value : 0x649cef,
Loc.music_disc_43.value : 0x649cf0,
Loc.music_disc_44.value : 0x649cf1,
Loc.music_disc_45.value : 0x649cf2,
Loc.music_disc_46.value : 0x649cf3,
Loc.music_disc_47.value : 0x649cf4,
Loc.music_disc_48.value : 0x649cf5,
Loc.music_disc_49.value : 0x649cf6,
Loc.music_disc_50.value : 0x649cf7,
Loc.genie_dance_music_blues.value : 0x649cf8,
Loc.genie_dance_music_slowdance.value : 0x649cf9,
Loc.genie_dance_music_waltz.value : 0x649cfa,
}
GameStates: Dict[str, int] = {
# Status
Game.state.value : 0x8519e4, # int32 (0x00 - 0x04)
Game.character.value : 0x649910, # int32 (0x00 - 0x01)
Game.progress.value : 0x73f810, # Pointer Lead - End Value is 64bit
Game.current_morph.value : 0x64991c,
Game.on_warp_gate.value : 0x698298, # boolean (0x00 - 0x01)
Game.channels_unlocked.value : 0x73ff2c, # int32 (0x00 - 0x1B)
Game.channel_selected.value : 0x73ff28, # int32 (0x00 - 0x1B)
Game.channel_confirmed.value : 0x73FF3c, # boolean (0x00 - 0x01)
Game.current_channel.value : 0x8519f0,
Game.current_stage.value : 0x649548, # String
Game.current_room.value : 0x6478f0,
Game.screen_fade.value : 0xce6024, # 0x01 when not fading
Game.screen_fade_count.value : 0x851a50, # 0x01 when not fading
# HUD
Game.gui_status.value : 0x73a054,
Game.hud_pointer.value : 0x691fe8,
# Controller
Game.pressed.value : 0x699D40,
# Stats
Game.morph_duration.value : 0x0152cf10,
Game.duration_knight_b.value : 0x0152cf10,
Game.duration_cowboy_b.value : 0x0152d030,
Game.duration_ninja_b.value : 0x0152d150,
Game.duration_genie_b.value : 0x0152d270,
Game.duration_kungfu_b.value : 0x0152d390,
Game.duration_hero_b.value : 0x0152d4b0,
Game.duration_ape_b.value : 0x0152D5D0,
Game.duration_knight_g.value : 0x0152cf70,
Game.duration_cowboy_g.value : 0x0152d090,
Game.duration_ninja_g.value : 0x0152d1b0,
Game.duration_genie_g.value : 0x0152d2d0,
Game.duration_kungfu_g.value : 0x0152d3f0,
Game.duration_hero_g.value : 0x0152d510,
Game.duration_ape_g.value : 0x0152D610,
# Resources
Game.nothing.value : 0x200000, # Arbitrary Number
Game.jackets.value : 0x649914,
Game.cookies.value : 0x649918,
Game.chips.value : 0x6499d4,
Game.morph_gauge_active.value : 0x742014, # Pointer Lead
Game.morph_gauge_recharge.value : 0x649924,
Game.morph_stocks.value : 0x649928, # float (0000C842 - 00808944)
Game.ammo_boom.value : 0x649998, # int32
Game.ammo_homing.value : 0x64999c, # int32
# Equipment
Game.equip_circle.value : 0x64997c,
Game.equip_cross.value : 0x649980,
Game.equip_square.value : 0x649984,
Game.equip_triangle.value : 0x649988,
Game.equip_active.value : 0x64998c,
Game.equip_current.value : 0x647bd0,
Game.equip_pellet_active.value : 0x649990,
Game.equip_chassis_active.value : 0x6499ac,
Game.equip_quick_morph.value : 0x7954b0,
Game.equip_morph_target.value : 0x692018,
# Special States
Game.in_pink_stage.value : 0x8519e0,
Game.interact_data.value : 0x7720d4,
Game.status_tracker.value : 0x73f820,
Game.data_desk.value : 0x77,
Game.shop.value : 0x55,
Game.pipo_camera.value : -0x80, # Offset from Interact Data Pointer
Game.cellphone.value : -0x355, # Offset from Interact Data Pointer
Game.cellphone2.value : 0x1CB, # Offset from Interact Data Pointer
Game.game_mode.value : 0x73FF38,
Game.net_status.value : 0x04,
Game.club_status.value : 0x08,
# Commands
Game.command.value : 0x772030,
Game.area_dest.value : 0x772050,
Game.spawn.value : 0x772070,
Game.enter_norma.value : 0x7720B0,
# Persistence
Game.pgc_cache.value : 0x649BAE,
Game.last_cookies.value : 0x649994,
Game.last_morph_energy.value : 0x649995,
Game.last_morph_stock.value : 0x649996,
Game.shop_morph_stock.value : 0x649997,
# Archipelago
Game.last_item_index.value : 0x6499C4
}
### [< --- POINTER CHAINS --- >]
Pointers: Dict[str, Sequence[int]] = {
Game.progress.value : [0x04, 0x1A0, 0x20, 0x0],
Game.channel_next_choice.value : [0x04, 0x1A0, 0xB0, 0x0],
Game.morph_gauge_active.value : [0x44, 0x24, 0x38, 0x18],
Game.equip_current.value : [0x58, 0x44, 0x24, 0x38, 0x10],
Game.hud_pointer.value : [0x0],
Loc.boss_tomoki.value : [0x2c, 0x1AC4],
Game.interact_data.value : [0x0],
Game.game_mode.value : [0x0, 0x78, 0x20, 0x0],
Game.save.value : [0x77],
}
def get_version_addresses(game_id : str) -> VersionAddresses | None:
if game_id not in Meta.supported_versions:
return None
id_index : int = Meta.supported_versions.index(game_id)
if id_index == 0:
return NTSCU()
return None