diff --git a/__init__.py b/__init__.py index acb41addf..3f589802b 100644 --- a/__init__.py +++ b/__init__.py @@ -1461,6 +1461,7 @@ def fill_slot_data(self) -> dict: "ring_link": self.options.ring_link.value, "tag_link": self.options.tag_link.value, "trap_link": self.options.trap_link.value, + "damage_link": self.options.damage_link.value, "receive_notifications": self.options.receive_notifications.value, "LevelOrder": ", ".join([level.name for order, level in self.spoiler.settings.level_order.items()]), "StartingKongs": ", ".join([kong.name for kong in self.spoiler.settings.starting_kong_list]), diff --git a/archipelago/DK64Client.py b/archipelago/DK64Client.py index 3ddae0cba..83b409935 100644 --- a/archipelago/DK64Client.py +++ b/archipelago/DK64Client.py @@ -31,6 +31,8 @@ MAX_DELIVER_COUNT = 10000 MAX_STRING_LENGTH = 0x20 FAST_TEXT_SPEED = 50 +DAMAGE_POINTS_PER_UNIT = 20 # DamageLink: 80 points = 1 full melon (20 per quarter-melon) +INCOMING_PACKET_CAP = 160 # DamageLink: cap a single inbound bounce at 2 melon NORMAL_TEXT_SPEED = 130 MIN_ITEMS_FOR_SPEED_SCALING = 5 KONG_COUNT = 5 @@ -166,6 +168,7 @@ class DK64Client: ENABLE_RINGLINK = False ENABLE_TAGLINK = False ENABLE_TRAPLINK = False + ENABLE_DAMAGELINK = False deathlink_debounce = True pending_deathlink = False @@ -933,7 +936,7 @@ def get_current_deliver_count(self): return data - async def main_tick(self, item_get_cb, deathlink_cb, map_change_cb, ring_link, tag_link, trap_link, hint_cb=None): + async def main_tick(self, item_get_cb, deathlink_cb, map_change_cb, ring_link, tag_link, trap_link, damage_link, hint_cb=None): """Game loop tick.""" await self.readChecks(item_get_cb) # await self.item_tracker.readItems() @@ -970,6 +973,8 @@ def check_safe_death(): await tag_link() if self.ENABLE_TRAPLINK: await trap_link() + if self.ENABLE_DAMAGELINK: + await damage_link() # Check for hint access if hint_cb: @@ -1127,6 +1132,21 @@ def _cmd_traplink(self): self.ctx.tags.add("TrapLink") create_task_log_exception(self.ctx.send_msgs([{"cmd": "ConnectUpdate", "tags": self.ctx.tags}])) + def _cmd_damagelink(self): + """Toggle damagelink from client. Overrides default setting.""" + if isinstance(self.ctx, DK64Context): + if self.ctx.ENABLE_DAMAGELINK: + self.ctx.ENABLE_DAMAGELINK = False + self.ctx.client.ENABLE_DAMAGELINK = False + self.ctx.tags.discard("SharedDamage") + logger.info("Damagelink disabled") + else: + self.ctx.ENABLE_DAMAGELINK = True + self.ctx.client.ENABLE_DAMAGELINK = True + logger.info("Damagelink enabled") + self.ctx.tags.add("SharedDamage") + create_task_log_exception(self.ctx.send_msgs([{"cmd": "ConnectUpdate", "tags": self.ctx.tags}])) + class DK64Context(CommonContext): """Context for Donkey Kong 64.""" @@ -1140,6 +1160,11 @@ class DK64Context(CommonContext): ENABLE_RINGLINK = False ENABLE_TAGLINK = False ENABLE_TRAPLINK = False + ENABLE_DAMAGELINK = False + pending_damage = 0 + self_inflicted = 0 + prev_health = None + damage_label = None command_processor = DK64CommandProcessor won = False hint_locations = {} @@ -1269,6 +1294,8 @@ def on_package(self, cmd: str, args: dict): if cmd == "Connected": self.game = self.slot_info[self.slot].game self.slot_data = args.get("slot_data", {}) + if not hasattr(self, "instance_id"): + self.instance_id = time.time() self.setup_hint_locations() if self.slot_data.get("Version"): ap_version = get_ap_version() @@ -1320,6 +1347,12 @@ def on_package(self, cmd: str, args: dict): self.ENABLE_TRAPLINK = True self.client.ENABLE_TRAPLINK = True asyncio.create_task(self.send_msgs([{"cmd": "ConnectUpdate", "tags": self.tags}])) + if self.slot_data.get("damage_link"): + if "SharedDamage" not in self.tags: + self.tags.add("SharedDamage") + self.ENABLE_DAMAGELINK = True + self.client.ENABLE_DAMAGELINK = True + asyncio.create_task(self.send_msgs([{"cmd": "ConnectUpdate", "tags": self.tags}])) if self.slot_data.get("receive_notifications"): self.client.send_mode = self.slot_data.get("receive_notifications") # Set Helm Hurry flag in client @@ -1370,6 +1403,11 @@ def on_package(self, cmd: str, args: dict): if self.pending_trap_link != 0: self.pending_trap_original = args["data"]["trap_name"] self.pending_trap_source = source_name + if "SharedDamage" in self.tags and "SharedDamage" in args.get("tags", []): + if args["data"].get("uuid") != self.instance_id: # ignore our own echo + points = int(args["data"].get("damage_points", 0)) + if points > 0: + self.pending_damage += min(points, INCOMING_PACKET_CAP) async def send_ring_link(self, amount: int): """Send a ring link message.""" @@ -1530,6 +1568,66 @@ async def handle_ring_link(self): self.pending_ring_link = 0 + async def send_damage_link(self, points: int): + """Send a SharedDamage (DamageLink) bounce.""" + if "SharedDamage" not in self.tags or self.slot is None: + return + if not hasattr(self, "instance_id"): + self.instance_id = time.time() + await self.send_msgs([{"cmd": "Bounce", "tags": ["SharedDamage"], "data": { + "time": time.time(), + "uuid": self.instance_id, + "source": self.player_names.get(self.slot), + "damage_points": int(points), + }}]) + + async def handle_damage_link(self): + """Apply received DamageLink damage.""" + if not self.client.ENABLE_DAMAGELINK: + return + n64 = self.client.n64_client + base = self.client.memory_pointer + + # Show total amount of damagelink points in client (taken from mycena waffle's client). + try: + if self.damage_label is None and getattr(self, "ui", None) is not None: + try: + from kvui import MDLabel as Label + except ImportError: + from kvui import Label + self.damage_label = Label(text="", size_hint_x=None, width=120, halign="center") + self.ui.connect_layout.add_widget(self.damage_label) + if self.damage_label is not None: + self.damage_label.text = f"DMG: {self.pending_damage}" + except Exception: + pass + + health = n64.read_u8(DK64MemoryMap.health) + if health > 127: + health -= 256 + if self.prev_health is None: + self.prev_health = health + + # Hand any received damage to the game, remembering the health it will cost us. + units = self.pending_damage // DAMAGE_POINTS_PER_UNIT + if units > 0: + self.pending_damage -= units * DAMAGE_POINTS_PER_UNIT + queued = n64.read_u8(base + DK64MemoryMap.receive_damage) + n64.write_u8(base + DK64MemoryMap.receive_damage, min(queued + units, 255)) + self.self_inflicted += units + + # Broadcast damag + lost = self.prev_health - health + if lost > 0: + mine = min(lost, self.self_inflicted) + self.self_inflicted -= mine + genuine = lost - mine + if genuine > 0: + await self.send_damage_link(genuine * DAMAGE_POINTS_PER_UNIT) + elif health <= 0: + self.self_inflicted = 0 # once you die, reset points + self.prev_health = health + async def send_tag_link(self, kong: int): """Send a tag link message.""" if "TagLink" not in self.tags or self.slot is None: @@ -1742,6 +1840,10 @@ async def trap_link(): """Handle a trap link.""" await self.handle_trap_link() + async def damage_link(): + """Handle a damage link.""" + await self.handle_damage_link() + async def deathlink(): """Handle a deathlink.""" await self.send_deathlink() @@ -1814,7 +1916,7 @@ async def disconnect_check(): if status is False: await asyncio.sleep(0.033) continue - await self.client.main_tick(on_item_get, deathlink, map_change, ring_link, tag_link, trap_link, hint_accessed) + await self.client.main_tick(on_item_get, deathlink, map_change, ring_link, tag_link, trap_link, damage_link, hint_accessed) await asyncio.sleep(0.033) now = time.time() if self.last_resend + 0.5 < now: diff --git a/archipelago/FillSettings.py b/archipelago/FillSettings.py index e084b68ed..ec58508c9 100644 --- a/archipelago/FillSettings.py +++ b/archipelago/FillSettings.py @@ -485,25 +485,17 @@ def fillsettings(options: DK64Options, multiworld: MultiWorld, random_obj: Rando slam_name = options.alter_switch_allocation.value[level_key] settings_dict[f"prog_slam_level_{i + 1}"] = slam_map.get(slam_name, SlamRequirement.green) - -def generate_blocker(option_value: str, blocker_max: int, random: Random): - """Randomize a B. Locker value, either within a range or up to the maximum.""" - upper_bound = blocker_max if option_value == "random" else int(option_value.split("-")[1]) + 1 - lower_bound = 0 if option_value == "random" else int(option_value.split("-")[0]) - return random.randrange(lower_bound, upper_bound) - - -def apply_blocker_settings(settings_dict: dict, options, random_obj) -> None: - """Apply level blocker settings.""" - blocker_options = [0, 0, 0, 0, 0, 0, 0, 0] - for blocker, amount in options.level_blockers.value.items(): - blocker_number = int(blocker.removeprefix("level_")) - 1 - try: - blocker_options[blocker_number] = int(amount) - except (TypeError, ValueError): - blocker_options[blocker_number] = generate_blocker(amount, options.blocker_max.value, random_obj) - - # Blocker settings - prioritize chaos blockers, then randomization setting + # Apply blocker settings + blocker_options: list[int] = [ + options.level_blockers.value.get("level_1", 0), + options.level_blockers.value.get("level_2", 0), + options.level_blockers.value.get("level_3", 0), + options.level_blockers.value.get("level_4", 0), + options.level_blockers.value.get("level_5", 0), + options.level_blockers.value.get("level_6", 0), + options.level_blockers.value.get("level_7", 0), + options.level_blockers.value.get("level_8", 64), + ] settings_dict["maximize_helm_blocker"] = options.maximize_level8_blocker.value if options.enable_chaos_blockers.value: settings_dict["blocker_text"] = options.chaos_ratio.value @@ -965,95 +957,10 @@ def apply_blocker_settings(settings_dict: dict, options, random_obj) -> None: settings_dict["coin_door_item"] = HelmDoorItem(options.coin_door_item.value) coin_item_key = door_item_to_key.get(settings_dict["coin_door_item"]) settings_dict["coin_door_item_count"] = options.helm_door_item_count.value.get(coin_item_key, 1) if coin_item_key else 1 - - if hasattr(multiworld, "generation_is_fake"): - if hasattr(multiworld, "re_gen_passthrough"): - if "Donkey Kong 64" in multiworld.re_gen_passthrough: - passthrough = multiworld.re_gen_passthrough["Donkey Kong 64"] - settings_dict["bonus_barrel_auto_complete"] = passthrough["Autocomplete"] - settings_dict["helm_room_bonus_count"] = HelmBonuses(passthrough["HelmBarrelCount"]) - - -def handle_fake_generation_settings(settings: Settings, multiworld) -> None: - """Handle settings for fake generation (UT mode).""" - if hasattr(multiworld, "generation_is_fake"): - settings.is_ut_generation = True - if hasattr(multiworld, "re_gen_passthrough"): - if "Donkey Kong 64" in multiworld.re_gen_passthrough: - passthrough = multiworld.re_gen_passthrough["Donkey Kong 64"] - settings.level_order = passthrough["LevelOrder"] - - # Switch logic lifted out of level shuffle due to static levels for UT - if settings.alter_switch_allocation: - for x in range(8): - settings.switch_allocation[x] = passthrough["SlamLevels"][x] - - settings.starting_kong_list = passthrough["StartingKongs"] - settings.starting_kong = settings.starting_kong_list[0] # fake a starting kong so that we don't force a different kong - settings.medal_requirement = passthrough["JetpacReq"] - settings.rareware_gb_fairies = passthrough["FairyRequirement"] - settings.BLockerEntryItems = passthrough["BLockerEntryItems"] - settings.BLockerEntryCount = passthrough["BLockerEntryCount"] - settings.medal_cb_req = passthrough["MedalCBRequirement"] - settings.medal_cb_req_level = [settings.medal_cb_req] * 8 - - for level, value in enumerate(passthrough["MedalCBRequirementLevel"]): - settings.medal_cb_req_level[Levels(level)] = int(value) - - settings.mermaid_gb_pearls = passthrough["MermaidPearls"] - settings.BossBananas = passthrough["BossBananas"] - settings.boss_maps = passthrough["BossMaps"] - settings.boss_kongs = passthrough["BossKongs"] - settings.lanky_freeing_kong = passthrough["LankyFreeingKong"] - settings.helm_order = passthrough["HelmOrder"] - settings.logic_type = LogicType[passthrough["LogicType"]] - settings.tricks_selected = passthrough["TricksSelected"] - settings.glitches_selected = passthrough["GlitchesSelected"] - settings.open_lobbies = passthrough["OpenLobbies"] - settings.starting_key_list = passthrough["StartingKeyList"] - settings.galleon_water = GalleonWaterSetting[passthrough["GalleonWater"]] - settings.galleon_water_internal = GalleonWaterSetting[passthrough["GalleonWater"]] - - # There's multiple sources of truth for helm order. - settings.helm_donkey = 0 in settings.helm_order - settings.helm_diddy = 4 in settings.helm_order - settings.helm_lanky = 3 in settings.helm_order - settings.helm_tiny = 2 in settings.helm_order - settings.helm_chunky = 1 in settings.helm_order - - # Switchsanity - for switch, data in passthrough["SwitchSanity"].items(): - needed_kong = Kongs[data["kong"]] - switch_type = SwitchType[data["type"]] - settings.switchsanity_data[Switches[switch]] = SwitchInfo(switch, needed_kong, switch_type, 0, 0, []) - - if passthrough["Shopkeepers"]: - settings.shuffled_location_types.append(Types.Cranky) - settings.shuffled_location_types.append(Types.Funky) - settings.shuffled_location_types.append(Types.Candy) - settings.shuffled_location_types.append(Types.Snide) - - -def fillsettings(options, multiworld, random_obj): - """Fill and configure all DK64 settings.""" - # Start with default settings - settings_dict = get_default_settings() - - # Apply all setting categories - apply_archipelago_settings(settings_dict, options, multiworld) - apply_blocker_settings(settings_dict, options, random_obj) - apply_item_randomization_settings(settings_dict, options) - apply_hard_mode_settings(settings_dict, options) - apply_kong_settings(settings_dict, options) - apply_switchsanity_settings(settings_dict, options) - apply_logic_and_barriers_settings(settings_dict, options) - apply_glitches_and_tricks_settings(settings_dict, options) - apply_boss_and_key_settings(settings_dict, options) - apply_goal_settings(settings_dict, options, random_obj) - apply_starting_moves_settings(settings_dict, options) - apply_hint_settings(settings_dict, options) - apply_minigame_settings(settings_dict, options, multiworld) - apply_enemies(settings_dict, options) + if hasattr(multiworld, "generation_is_fake") and hasattr(multiworld, "re_gen_passthrough") and "Donkey Kong 64" in multiworld.re_gen_passthrough: + passthrough = multiworld.re_gen_passthrough["Donkey Kong 64"] + settings_dict["bonus_barrel_auto_complete"] = passthrough["Autocomplete"] + settings_dict["helm_room_bonus_count"] = HelmBonuses(passthrough["HelmBarrelCount"]) # Handle fake generation keys if needed if hasattr(multiworld, "generation_is_fake"): diff --git a/archipelago/Options.py b/archipelago/Options.py index fed3846af..b74239248 100644 --- a/archipelago/Options.py +++ b/archipelago/Options.py @@ -812,6 +812,16 @@ class TrapLink(Toggle): display_name = "Trap Link" +class DamageLink(Toggle): + """Determines if Damage Link is enabled. + + If enabled, when you take damage it is shared with other players who have Damage Link enabled, and their damage is shared with you. + Accumulated shared damage hurts your kong, but will never kill you on its own (it always leaves you with at least a sliver of health). + """ + + display_name = "Damage Link" + + class MirrorMode(Toggle): """Determines whether the game will be horizontally Mirrored.""" @@ -1957,6 +1967,7 @@ class DK64Options(PerGameCommonOptions): ring_link: RingLink tag_link: TagLink trap_link: TrapLink + damage_link: DamageLink goal: Goal pregiven_keys: NumberOfStartingKeys require_beating_krool: RequireBeatingKrool @@ -2222,6 +2233,7 @@ class DK64Options(PerGameCommonOptions): TagLink, RingLink, TrapLink, + DamageLink, DeathLink, ], ), diff --git a/archipelago/client/common.py b/archipelago/client/common.py index 751bf8e50..c08eb7ea7 100644 --- a/archipelago/client/common.py +++ b/archipelago/client/common.py @@ -92,6 +92,8 @@ class DK64MemoryMap: sent_trap = 0x063 helm_hurry_item = 0x064 can_receive_shopkeeper = 0x065 + receive_damage = 0x066 + health = 0x807FCC4B # CollectableBase.Health current_kong = 0x8074E77C count_struct_pointer = 0x807FFFB8 # Pointer to CountStruct containing item counts diff --git a/base-hack/asm/objects.asm b/base-hack/asm/objects.asm index c1a704ed4..d21914125 100644 --- a/base-hack/asm/objects.asm +++ b/base-hack/asm/objects.asm @@ -1,82 +1,82 @@ -.importobj "obj/src_a.o" .importobj "obj/src_f3dex2.o" -.importobj "obj/src_lib.o" -.importobj "obj/src_lib_dropsanity.o" .importobj "obj/src_lib_items.o" +.importobj "obj/src_lib.o" .importobj "obj/src_main.o" +.importobj "obj/src_lib_dropsanity.o" +.importobj "obj/src_a.o" +.importobj "obj/src_instances_instance_lib.o" +.importobj "obj/src_instances_misc_pads.o" +.importobj "obj/src_instances_boss_portal.o" +.importobj "obj/src_instances_bananaport.o" +.importobj "obj/src_instances_instances.o" +.importobj "obj/src_overlays_race.o" +.importobj "obj/src_overlays_jetpac.o" +.importobj "obj/src_overlays_bonus.o" +.importobj "obj/src_overlays_changes.o" +.importobj "obj/src_overlays_arcade.o" +.importobj "obj/src_overlays_boss.o" +.importobj "obj/src_overlays_menu.o" +.importobj "obj/src_fixes_helm.o" .importobj "obj/src_fixes_cannon_game.o" +.importobj "obj/src_fixes_spiders.o" +.importobj "obj/src_fixes_tag_anywhere.o" +.importobj "obj/src_fixes_quality_fixes.o" +.importobj "obj/src_fixes_parent.o" .importobj "obj/src_fixes_dk_free_softlock.o" .importobj "obj/src_fixes_guardCatch.o" -.importobj "obj/src_fixes_helm.o" .importobj "obj/src_fixes_level_modifiers.o" -.importobj "obj/src_fixes_parent.o" -.importobj "obj/src_fixes_quality_fixes.o" -.importobj "obj/src_fixes_spiders.o" -.importobj "obj/src_fixes_tag_anywhere.o" -.importobj "obj/src_initialization_cosmetic.o" .importobj "obj/src_initialization_init.o" -.importobj "obj/src_initialization_item_rando.o" .importobj "obj/src_initialization_qol.o" .importobj "obj/src_initialization_stack_trace.o" +.importobj "obj/src_initialization_item_rando.o" +.importobj "obj/src_initialization_cosmetic.o" .importobj "obj/src_initialization_text.o" -.importobj "obj/src_instances_bananaport.o" -.importobj "obj/src_instances_boss_portal.o" -.importobj "obj/src_instances_instances.o" -.importobj "obj/src_instances_instance_lib.o" -.importobj "obj/src_instances_misc_pads.o" -.importobj "obj/src_item rando_actors.o" -.importobj "obj/src_item rando_archipelago.o" -.importobj "obj/src_item rando_collision.o" -.importobj "obj/src_item rando_defs.o" .importobj "obj/src_item rando_enemy_items.o" +.importobj "obj/src_item rando_spawning.o" +.importobj "obj/src_item rando_defs.o" .importobj "obj/src_item rando_ice_trap.o" -.importobj "obj/src_item rando_item_fixes.o" -.importobj "obj/src_item rando_item_grab.o" +.importobj "obj/src_item rando_actors.o" +.importobj "obj/src_item rando_archipelago.o" .importobj "obj/src_item rando_item_handler.o" -.importobj "obj/src_item rando_spawning.o" +.importobj "obj/src_item rando_item_fixes.o" .importobj "obj/src_item rando_text.o" -.importobj "obj/src_misc_bonus.o" -.importobj "obj/src_misc_cutscene_remove.o" -.importobj "obj/src_misc_enemies.o" -.importobj "obj/src_misc_enemy_drop_table.o" -.importobj "obj/src_misc_exit_parser.o" -.importobj "obj/src_misc_file_screen.o" -.importobj "obj/src_misc_hard_mode.o" -.importobj "obj/src_misc_helm_hurry.o" -.importobj "obj/src_misc_hud.o" -.importobj "obj/src_misc_item_db.o" -.importobj "obj/src_misc_krusha.o" -.importobj "obj/src_misc_move_hints.o" -.importobj "obj/src_misc_music_text.o" -.importobj "obj/src_misc_shop_indicator.o" -.importobj "obj/src_misc_short_tiny.o" -.importobj "obj/src_misc_stats.o" -.importobj "obj/src_misc_tns_number.o" -.importobj "obj/src_misc_turf.o" -.importobj "obj/src_misc_warp_to_isles.o" -.importobj "obj/src_misc_win_condition.o" -.importobj "obj/src_overlays_arcade.o" -.importobj "obj/src_overlays_bonus.o" -.importobj "obj/src_overlays_boss.o" -.importobj "obj/src_overlays_changes.o" -.importobj "obj/src_overlays_jetpac.o" -.importobj "obj/src_overlays_menu.o" -.importobj "obj/src_overlays_race.o" +.importobj "obj/src_item rando_collision.o" +.importobj "obj/src_item rando_item_grab.o" +.importobj "obj/src_shorteners_helm.o" +.importobj "obj/src_shorteners_quality_shorteners.o" +.importobj "obj/src_shorteners_moves.o" +.importobj "obj/src_shorteners_bonus.o" +.importobj "obj/src_shorteners_pre_turns.o" +.importobj "obj/src_shorteners_vulture.o" .importobj "obj/src_pause_carousel.o" .importobj "obj/src_pause_hints.o" .importobj "obj/src_pause_hint_region_list.o" -.importobj "obj/src_pause_lib.o" .importobj "obj/src_pause_regions.o" -.importobj "obj/src_randomizers_b_locker_requirement.o" -.importobj "obj/src_randomizers_crowd_control.o" +.importobj "obj/src_pause_lib.o" .importobj "obj/src_randomizers_every_lz_rando.o" .importobj "obj/src_randomizers_k_rool_order.o" +.importobj "obj/src_randomizers_b_locker_requirement.o" +.importobj "obj/src_randomizers_crowd_control.o" +.importobj "obj/src_randomizers_move_text.o" .importobj "obj/src_randomizers_misc_requirements.o" .importobj "obj/src_randomizers_move_rando.o" -.importobj "obj/src_randomizers_move_text.o" -.importobj "obj/src_shorteners_bonus.o" -.importobj "obj/src_shorteners_helm.o" -.importobj "obj/src_shorteners_moves.o" -.importobj "obj/src_shorteners_pre_turns.o" -.importobj "obj/src_shorteners_quality_shorteners.o" -.importobj "obj/src_shorteners_vulture.o" +.importobj "obj/src_misc_move_hints.o" +.importobj "obj/src_misc_short_tiny.o" +.importobj "obj/src_misc_stats.o" +.importobj "obj/src_misc_music_text.o" +.importobj "obj/src_misc_file_screen.o" +.importobj "obj/src_misc_krusha.o" +.importobj "obj/src_misc_turf.o" +.importobj "obj/src_misc_item_db.o" +.importobj "obj/src_misc_enemies.o" +.importobj "obj/src_misc_win_condition.o" +.importobj "obj/src_misc_bonus.o" +.importobj "obj/src_misc_helm_hurry.o" +.importobj "obj/src_misc_hard_mode.o" +.importobj "obj/src_misc_cutscene_remove.o" +.importobj "obj/src_misc_shop_indicator.o" +.importobj "obj/src_misc_tns_number.o" +.importobj "obj/src_misc_hud.o" +.importobj "obj/src_misc_enemy_drop_table.o" +.importobj "obj/src_misc_exit_parser.o" +.importobj "obj/src_misc_warp_to_isles.o" diff --git a/base-hack/include/archipelago.h b/base-hack/include/archipelago.h index 599988cd4..04f3d91b8 100644 --- a/base-hack/include/archipelago.h +++ b/base-hack/include/archipelago.h @@ -102,6 +102,7 @@ typedef struct archipelago_data { /* 0x063 */ unsigned char sent_trap; /* 0x064 */ unsigned char helm_hurry_item; /* 0x065 */ unsigned char can_receive_shopkeeper; + /* 0x066 */ unsigned char receive_damage; // DamageLink: client writes quarter-melon units of incoming damage. Game applies one per frame when safe, decrements. } archipelago_data; extern archipelago_data *APData; @@ -111,6 +112,7 @@ extern void initAPCounter(void); extern void saveAPCounter(void); extern int isAPEnabled(void); extern void sendDeath(void); +extern void handleDamageLink(void); extern void sendTrapLink(ICE_TRAP_TYPES trap_type); extern Gfx *displayAPConnection(Gfx *dl); extern int canReceiveShopkeeperItem(void); \ No newline at end of file diff --git a/base-hack/include/global.h b/base-hack/include/global.h index d5141b2a7..b36fd7235 100644 --- a/base-hack/include/global.h +++ b/base-hack/include/global.h @@ -293,6 +293,7 @@ extern Gfx* displayNoGeoChunk(Gfx* dl, int chunk_index, int shift); extern void initIceTrap(void); extern int isBannedTrapMap(maps map, ICE_TRAP_TYPES type); extern void queueIceTrap(ICE_TRAP_TYPES trap_type, int send_trap); +extern int canLoadIceTrap(ICE_TRAP_TYPES trap_type); extern void callIceTrap(void); extern int getPatchWorld(int index); extern int getCrateWorld(int index); diff --git a/base-hack/src/item rando/archipelago.c b/base-hack/src/item rando/archipelago.c index 9b346bb98..9f38e62c8 100644 --- a/base-hack/src/item rando/archipelago.c +++ b/base-hack/src/item rando/archipelago.c @@ -112,6 +112,25 @@ int canDie(void) { return 1; } +void handleDamageLink(void) { + if ((ap_info.receive_damage == 0) || !canLoadIceTrap(ICETRAP_BUBBLE)) { + return; + } + int damage = ap_info.receive_damage; // quarter-melons of damage to take + ap_info.receive_damage = 0; + if (CollectableBase.Health <= damage) { + // Reaching 0 melons doesn't kill on its own, so we spawn the kop and send a deathlink because funny + sendDeath(); + ap_info.receive_death = 1; + } else { + if (Player) { + // Zero i-frames so the hit isn't ignored + Player->invulnerability_timer = 0; + } + applyDamage(0, -damage); // take it all at once + } +} + void handleArchipelagoFeed(void) { if (ap_info.connection > 0) { ap_info.connection -= 1; @@ -182,6 +201,8 @@ void handleArchipelagoFeed(void) { queueIceTrap(ap_info.sent_trap, 0); ap_info.sent_trap = 0; } + // Damage link + handleDamageLink(); // Helm Hurry item handling if (ap_info.helm_hurry_item) { addHelmTime(ap_info.helm_hurry_item, 1); diff --git a/base-hack/src/lib_items.c b/base-hack/src/lib_items.c index 3498e13ad..da9a8b783 100644 --- a/base-hack/src/lib_items.c +++ b/base-hack/src/lib_items.c @@ -1238,7 +1238,7 @@ health_damage_struct actor_health_damage[] = { {.init_health = 0, .damage_applied = 0}, {.init_health = 0, .damage_applied = 0}, {.init_health = 0, .damage_applied = 0}, - {.init_health = 0, .damage_applied = 0}, + {.init_health = 0, .damage_applied = 1}, {.init_health = 0, .damage_applied = 0}, {.init_health = 0, .damage_applied = 0}, {.init_health = 0, .damage_applied = 0}, diff --git a/static/patches/shrink-dk64.bps b/static/patches/shrink-dk64.bps index 472add663..a97a23793 100644 Binary files a/static/patches/shrink-dk64.bps and b/static/patches/shrink-dk64.bps differ diff --git a/static/patches/symbols.json b/static/patches/symbols.json index 6bc3a1901..31b220c06 100644 --- a/static/patches/symbols.json +++ b/static/patches/symbols.json @@ -268,800 +268,801 @@ "crankycoconutdonation_funky": 2153523420, "handlesnideendreward": 2153523428, "handlesnideendreward_finish": 2153523488, + "drawimage": 2153523504, "end_hook": 2153523504, - "spoiler_items": 2153523504, - "display_billboard_fix": 2153523784, - "hints_initialized": 2153523785, - "gamestats": 2153523788, - "enable_skip_check": 2153523800, - "ice_trap_queued": 2153523804, - "enemy_rewards_spawned": 2153523808, - "bonus_shown": 2153523824, - "base_text_color": 2153523828, - "crate_flags": 2153523832, - "patch_flags": 2153523896, - "balloon_path_pointers": 2153523960, - "headsize": 2153524216, - "force_enable_diving_timer": 2153524456, - "guard_tag_timer": 2153524460, - "tag_locked": 2153524462, - "itemloc_pointers": 2153524464, - "hint_pointers": 2153524948, - "cs_skip_db": 2153525368, - "text_overlay_data": 2153525376, - "static_mtx": 2153525440, - "drawimage": 2153526848, - "drawpixeltext": 2153527068, - "drawpixeltextcontainer": 2153527268, - "displaycenteredtext": 2153527452, - "drawscreenrect": 2153527580, - "drawstring": 2153527816, - "drawtext": 2153527984, - "drawtextcontainer": 2153528356, - "setcharacterrecoloring": 2153528576, - "setcharactercolor": 2153528596, - "applyhintrecoloring": 2153528632, - "getoverlayfrommap": 2153528988, - "getbitarrayvalue": 2153529008, - "inminigame": 2153529040, - "playsfx": 2153529056, - "setpermflag": 2153529108, - "convertidtoindex": 2153529120, - "convertsubidtoindex": 2153529196, - "isflaginrange": 2153529272, - "findactorwithtype": 2153529304, - "createcollisionobjinstance": 2153529376, - "resetmapcontainer": 2153529468, - "getcenter": 2153529524, - "cancelcutscene": 2153529600, - "modifycutscenepoint": 2153529736, - "modifycutsceneitem": 2153529808, - "modifycutscenepanpoint": 2153529888, - "modifycutscenepointtime": 2153530028, - "getwrinklylevelindex": 2153530104, - "getmingb": 2153530120, - "givegb": 2153530212, - "gettotalcbcount": 2153530316, - "inshortlist": 2153530416, - "inu8list": 2153530468, - "inshop": 2153530524, - "correctdkportal": 2153530540, - "spawnitemoverlay": 2153530816, - "giveslamlevel": 2153531068, - "inbattlecrown": 2153531136, - "intraining": 2153531176, - "inbossmap": 2153531208, - "isgamemode": 2153531308, - "filtersong": 2153531368, - "death": 2153531600, - "readfilesimple": 2153531648, - "savefilesimple": 2153531668, - "applydamagemask": 2153531712, - "replacewatertexture": 2153532040, - "replacewatertexture_spooky": 2153532084, - "isbounceobject": 2153532128, - "getfile": 2153532144, - "getpercentageofitem": 2153532232, - "getgamepercentage": 2153532288, - "gettotalmovecount": 2153532420, - "getitemcountreq": 2153532772, - "isitemrequirementsatisfied": 2153533260, - "getshopdata": 2153533324, - "exitboss": 2153533488, - "iskrushaadjacentmodel": 2153533576, - "isglobalcutsceneplaying": 2153533608, - "determinelevel_newlevel": 2153533668, - "refillifrefillable": 2153533904, - "refillhealthoninit": 2153534032, - "refillplayerhealthkko": 2153534092, - "isdynflag": 2153534124, - "getprojectilecount_modified": 2153534240, - "applybuttonbansinternals": 2153534664, - "guard_enabled_buttons": 2153534844, - "trap_enabled_buttons": 2153534846, - "cc_enabled_buttons": 2153534848, - "enabled_buttons": 2153534850, - "button_swaps": 2153534852, - "big_head_actors": 2153534900, - "ap_overlay_sprite": 2153535340, - "night_overlay_sprite": 2153535364, - "day_overlay_sprite": 2153535388, - "halfmedal_sprite": 2153535412, - "boulder_sprite": 2153535448, - "potion_sprite": 2153535484, - "company_coin_sprite": 2153535524, - "fool_overlay_sprite": 2153535576, - "feather_gun_sprite": 2153535600, - "krool_sprite": 2153535636, - "pearl_sprite": 2153535660, - "bean_sprite": 2153535684, - "regular_boss_maps": 2153535988, - "crown_maps": 2153535996, - "colorblind_colors": 2153536008, - "kong_pellets": 2153536056, - "tnsportal_flags": 2153536064, - "bfi_move_flags": 2153536080, - "tbarrel_flags": 2153536084, - "normal_key_flags": 2153536092, - "kong_flags": 2153536108, - "levels": 2153536260, - "dropsanity_levels": 2153536316, - "new_flag_mapping": 2153536532, - "actor_extra_data_sizes": 2153537508, - "actor_functions": 2153540464, - "actor_collisions": 2153543420, - "actor_health_damage": 2153549332, - "actor_interactions": 2153552288, - "actor_master_types": 2153553768, - "actor_defs": 2153554508, - "drops": 2153562476, - "object_collisions": 2153562716, - "item_scales": 2153564588, - "actor_drops": 2153564988, - "bounce_objects": 2153565088, - "acceptable_items": 2153565168, - "resetpicturestatus": 2153565260, - "cfuncloop": 2153565328, - "earlyframe": 2153566908, - "insertrommessages": 2153568724, - "drawinfotext": 2153569004, - "displaymenuwarnings": 2153569168, - "displaylistmodifiers": 2153569392, - "togglestandardammo": 2153571056, - "grab_lock_timer": 2153571527, - "handlecannongamereticle": 2153571940, - "resetcannongamestate": 2153572096, - "freedk": 2153572144, - "cutscenedkcode": 2153572188, - "charspawneritemcode": 2153572732, - "isbadmovementstate": 2153573068, - "guardcatchinternal": 2153573108, - "guardcatch": 2153573544, - "warphandle": 2153573704, - "catchwarphandle": 2153573828, - "inrabbitrace": 2153574104, - "renderkoplighthandler": 2153574152, - "newguardcode": 2153574268, - "setkopidleguarantee": 2153575064, - "givekopidleguarantee": 2153575088, - "fixhelmtimercorrection": 2153575188, - "helmtime_restart": 2153575316, - "helmtime_exitbonus": 2153575352, - "helmtime_exitrace": 2153575424, - "helmtime_exitlevel": 2153575452, - "helmtime_exitboss": 2153575480, - "helmtime_exitkrool": 2153575512, - "inithelmsetup": 2153575544, - "gethelmexit": 2153575620, - "warptohelm": 2153575672, - "helm_entry_points": 2153575708, - "load_object_script": 2153575712, - "adjust_level_modifiers": 2153575872, - "handletimeofday": 2153576108, - "istimeofday": 2153576796, - "ispreventcutsceneplaying": 2153576952, - "callparentmapfilter": 2153577124, - "qualityoflife_fixes": 2153577420, - "dropwrapper": 2153577732, - "candive_withcheck": 2153577776, - "playtransformationsong": 2153577880, - "hasenoughcbs": 2153577952, - "shouldding": 2153578060, - "renderindicatorsprite": 2153578256, - "renderdingsprite": 2153578760, - "initdingsprite": 2153578860, - "gethomingcountwithabilitycheck": 2153578876, - "playcbding": 2153578912, - "cbding": 2153578940, - "fixrbslowturn": 2153579088, - "postkroolsavecheck": 2153579136, - "tagbarrelbackgroundkong": 2153579200, - "updatemultibunchcount": 2153579248, - "rabbitraceinfinitecode": 2153579300, - "fixdillotntpads": 2153579444, - "canplayjetpac": 2153579488, - "fixcrownentryskong": 2153579548, - "reducetrapbubblelife": 2153579568, - "exittrapbubblecontroller": 2153579608, - "fixchimpycambug": 2153579864, - "movepelletwrapper": 2153579988, - "fixhelmtimerdisable": 2153580340, - "handlespidersilkspawn": 2153580444, - "spiderbossextracode": 2153580512, - "intransform": 2153580708, - "cantaganywhere": 2153580796, - "gettastate": 2153581232, - "hasaccesstokong": 2153581244, - "gettaganywherekong": 2153581260, - "changekong": 2153581432, - "taganywhere": 2153582044, - "taganywhereinit": 2153582716, - "populatesfxcache": 2153582800, - "handlesfxcache": 2153583020, - "taganywhereammo": 2153583348, - "handlegrabbinglock": 2153583524, - "canplayerclimb": 2153583560, - "handleledgelock": 2153583676, - "handlepushlock": 2153583776, - "handleactionset": 2153583812, - "updatekongtb": 2153584168, - "updateactorhandstates": 2153584288, - "cleargunhandler": 2153584492, - "updateactorhandstates_gun": 2153584632, - "pulloutgunhandler": 2153584972, - "determineshockwavecolor": 2153585388, - "initcosmetic": 2153585584, - "setfog": 2153585756, - "getrainbowammocolor": 2153585884, - "updatespritecolor": 2153586088, - "colorrainbowammohud": 2153586140, - "colorrainbowammohud_0": 2153586204, - "colorrainbowammo": 2153586268, - "sethudupdatefunction": 2153586328, - "sethudupdatefunction_0": 2153586360, - "pickrandomfrompool": 2153586432, - "playbonussong": 2153586520, - "playbosssong": 2153586608, - "playsongwcheck": 2153586760, - "stopbosssong": 2153587116, - "resetbosssong": 2153587312, - "playnotbosssong": 2153587332, - "getoscillationdelta": 2153587584, - "fixmusicrando": 2153587624, - "writeendsequence": 2153587676, - "loadhooks": 2153587744, - "inithack": 2153587860, - "quickinit": 2153588592, - "music_types": 2153612680, - "getcrownindex": 2153612864, - "getkeyindex": 2153612904, - "getpatchflag": 2153612944, - "getpatchworld": 2153613020, - "getcrateflag": 2153613044, - "getcrateworld": 2153613120, - "getbonusflag": 2153613144, - "updateboulderid": 2153613180, - "getboulderindex": 2153613204, - "getbarrelskinindex": 2153613320, - "getshopskinindex": 2153613400, - "alterbonusvisuals": 2153613536, - "getdirtpatchskin": 2153613756, - "inititemrando": 2153614004, - "m2_cb_coin_counts": 2153614072, - "actor_cb_counts": 2153614088, - "snide_rewards": 2153614532, - "company_coin_table": 2153614852, - "kong_check_data": 2153614860, - "bonus_data": 2153614892, - "balloon_item_table": 2153615684, - "box_item_table": 2153616100, - "boulder_item_table": 2153616196, - "extra_actor_spawns": 2153616324, - "crate_item_table": 2153616332, - "rcoin_item_table": 2153616396, - "fairy_item_table": 2153616460, - "key_item_table": 2153616620, - "crown_item_table": 2153616684, - "wrinkly_item_table": 2153616724, - "medal_item_table": 2153616864, - "bp_item_table": 2153617204, - "disableantialiasing": 2153617636, - "initqol_cutscenes": 2153617816, - "fixracehoopcode": 2153617892, - "renderhoop": 2153617908, - "fixupdraftbug": 2153617972, - "quickwrinklytextboxes": 2153618044, - "bootspeedup": 2153618096, - "initqol_fastwarp": 2153618128, - "writespawn": 2153618204, - "initspawn": 2153618228, - "qol_displayinstrument": 2153618312, - "headphonescodecontainer": 2153618328, - "newinstrumentrefill": 2153618376, - "getinstrumentrefillcount": 2153618420, - "correctrefillcap": 2153618496, - "initqol": 2153618524, - "crashhandler": 2153618620, - "getfaultedthread": 2153619732, - "version_string": 2153619816, - "displaymodifiedtext": 2153621348, - "inittextchanges": 2153621456, - "dark_mode_colors": 2153621620, - "emph_text_colors": 2153621660, - "bananaportgenericcode": 2153621700, - "tnsindicatorgenericcode": 2153623692, - "spawnwrinklywrapper": 2153623988, - "loadwrinklytextwrapper": 2153624384, - "portalwarpfix": 2153624428, - "change_object_scripts": 2153624484, - "setobjectopacity": 2153629404, - "hideobject": 2153629428, - "standingonm2object": 2153629468, - "canopenspecificblocker": 2153629516, - "canopenxblockers": 2153629612, - "activategonepad": 2153629812, - "spritecode": 2153629872, - "nothingcode": 2153630068, - "kongdropcode": 2153630080, - "potioncode": 2153630208, - "fairyduplicatecode": 2153630272, - "shopowneritemcode": 2153630340, - "missingshopownercode": 2153630432, - "crankycodehandler": 2153630636, - "funkycodehandler": 2153630684, - "candycodehandler": 2153630732, - "snidecodehandler": 2153630780, - "fakekeycode": 2153630828, - "fakegbcode": 2153630876, - "fakefairycode": 2153630924, - "mermaidcheck": 2153630972, - "fairyqueencutsceneinit": 2153631080, - "fairyqueencutscenecheck": 2153631152, - "fairyqueencheckspeedup": 2153631376, - "cannoncodewrapper": 2153631416, - "setuphook": 2153631572, - "checkkasplatspawnbitfield": 2153632560, - "isflaggedwatermelon": 2153633020, - "canitempersist": 2153633116, - "isapenabled": 2153633624, - "initap": 2153633644, - "initapcounter": 2153633712, - "saveapcounter": 2153633772, - "handlesentitem": 2153633824, - "sendtraplink": 2153633948, - "canreceiveitem": 2153633992, - "canreceiveshopkeeperitem": 2153634108, - "candie": 2153634160, - "handlearchipelagofeed": 2153634304, - "senddeath": 2153634876, - "displayapconnection": 2153634944, - "getcollisionsquare_new": 2153635288, - "writeitemscale": 2153635408, - "writeitemactorscale": 2153635600, - "getitemrequiredkong": 2153635640, - "iscollidingwithsphere": 2153635680, - "iscollidingwithcylinder": 2153635836, - "isvalidkongcollision": 2153636320, - "checkmodeltwoitemcollision": 2153636388, - "checkforvalidcollision": 2153637012, - "initactordefs": 2153637612, - "setactordamage": 2153637660, - "swapkremlingmodel": 2153637684, - "getbpcountstats": 2153637792, - "getturnedcount": 2153637888, - "turnedallin": 2153637988, - "hasturnedinatleast": 2153638024, - "getfirstemptysnidereward": 2153638096, - "fixed_bug_collision": 2153638220, - "fixed_klap_collision": 2153638244, - "fixed_dice_collision": 2153638340, - "fixed_scarab_collision": 2153638484, - "fixed_shockwave_collision": 2153638532, - "setenemydbpopulation": 2153638568, - "populateenemymapdata": 2153638580, - "getenemyitem": 2153638780, - "getenemyflag": 2153638816, - "wipeenemyspawnbitfield": 2153638864, - "setspawnbitfield": 2153638900, - "setspawnbitfieldfromflag": 2153638976, - "canspawnenemyreward": 2153639048, - "getrngwithinrange": 2153639168, - "rendersparkles": 2153639252, - "indicatecollectionstatus": 2153639516, - "fireballenemydeath": 2153639712, - "rulerenemydeath": 2153639788, - "tomatodeath": 2153639872, - "resetscreenflip": 2153641012, - "resettaganywhere": 2153641032, - "customdamagecode": 2153641056, - "trapplayer_new": 2153641196, - "renderspritesonplayer": 2153641472, - "wipereplenishibles": 2153641700, - "swapbuttons": 2153641840, - "initicetrap": 2153642092, - "slippeelcode": 2153642872, - "reseticetrapbuttons": 2153643036, - "queueicetrap": 2153643100, - "isbannedtrapmap": 2153643128, - "canloadicetrap": 2153643200, - "handleicetrapbuttons": 2153643464, - "istrapmodel": 2153643864, - "cancelicetrapsong": 2153643892, - "playicetrapsong": 2153643940, - "callicetrap": 2153643996, - "refreshpads": 2153644600, - "ismodeltwotiedflag_new": 2153644924, - "displaymedaloverlay": 2153645552, - "banana_medal_check": 2153646140, - "banana_medal_acquisition": 2153646208, - "getflagindex_corrected": 2153646424, - "giveitemfromsend": 2153646480, - "giveitemfromkongdata": 2153646576, - "givefairyitem": 2153646624, - "iscavesbeetlereward": 2153646688, - "candanceskip": 2153646756, - "forcedance": 2153647048, - "getitem": 2153647144, - "getobjectcollectability": 2153648604, - "iscollectable": 2153649044, - "handlemodeltwoopacity": 2153649328, - "getflagmappingdata": 2153649412, - "givecb": 2153649508, - "updateitemtotalshandler": 2153649752, - "giveitem": 2153653704, - "giveitemfrompacket": 2153655692, - "getitemcount_new": 2153655728, - "getkongownershipfromflag": 2153656788, - "givekongfromflag": 2153656848, - "hasflagmove": 2153656968, - "setflagmove": 2153657060, - "getshopflag": 2153657160, - "grabfileparameters_fileinfo": 2153657304, - "inititemrandopointer": 2153657408, - "readitemsfromfile": 2153657428, - "saveitemstofile": 2153657748, - "file_info_expansion": 2153658064, - "spawnactorwithflaghandler": 2153658516, - "spawnweirdreward": 2153658664, - "spawnweirdreward0": 2153658768, - "spawnbonusreward": 2153658860, - "spawnrewardatactor": 2153659016, - "spawnminecartreward": 2153659248, - "spawncrownreward": 2153659404, - "spawnbossreward": 2153659572, - "spawndirtpatchreward": 2153659900, - "spawncharspawneractor": 2153660124, - "meloncrateitemhandler": 2153660368, - "updatekegids": 2153660868, - "isvalidboulderobject": 2153661084, - "isvalidbreakableobject": 2153661216, - "spawnboulderobject": 2153661352, - "spawnbreakableobject": 2153661540, - "renderbouldersparkles": 2153661732, - "shoulddeleteballoon": 2153661932, - "isvalidballoonobject": 2153662008, - "balloonvishandler": 2153662152, - "balloonvishandler2": 2153662296, - "balloonitemhandler": 2153662472, - "handledynamicitemtext": 2153662876, - "gettextdata": 2153662960, - "getcharwidthmask": 2153663036, - "caves_beetle": 2153663084, - "aztec_beetle": 2153663116, - "renderget": 2153663152, - "wonarena": 2153663416, - "resolvebonuscontainer": 2153663440, - "warpoutofarenas": 2153663508, - "failtraining": 2153663632, - "warpoutoftraining": 2153663732, - "arenatagkongcode": 2153663900, - "arenaearlycompletioncheck": 2153664200, - "getminecartmayhemcoinreq": 2153664344, - "rendergetwrapper": 2153664412, - "wonminecartmayhem": 2153664516, - "initmmayhem": 2153664564, - "mayhem_minecart_size": 2153664720, - "updateskipcheck": 2153664764, - "iscutsceneskipped": 2153664820, - "cancelcutsceneinternals": 2153664864, - "clearqueuedcutscenefunctions": 2153664944, - "presstoskip": 2153664996, - "clearskipcache": 2153665124, - "pressskiphandler": 2153665156, - "updateskippablecutscenes": 2153665200, - "renderscreentransitioncheck": 2153665304, - "beaverextrahithandle": 2153665444, - "handlecrowntimerinternal": 2153665532, - "handlecrowntimer": 2153665792, - "klumpcrownhandler": 2153665868, - "handlebugenemy": 2153665932, - "kioskbugend": 2153666296, - "stomphandler": 2153666420, - "kioskbugcode": 2153666544, - "spawnenemydrops": 2153667468, - "loadexits": 2153668464, - "wipetrackercache": 2153668608, - "getenabledstate": 2153668708, - "updateenabledstates": 2153669000, - "inittracker": 2153669352, - "resettracker": 2153669364, - "modifytrackerimage": 2153669376, - "display_file_images": 2153670160, - "display_text": 2153670436, - "displayhash": 2153670932, - "correctkongfaces": 2153671284, - "wipefilemod": 2153671464, - "enterfileprogress": 2153671520, - "givecollectables": 2153671564, - "setalldefaultflags": 2153671756, - "startfile": 2153671856, - "testpasswordsequence": 2153672408, - "wipepassword": 2153672464, - "handlepassword": 2153672508, - "password_screen_code": 2153672696, - "password_screen_init": 2153672940, - "password_screen_gfx": 2153673084, - "file_progress_screen_code": 2153673508, - "displayinverted": 2153673736, - "setprevsavemap": 2153673808, - "quitgame": 2153673828, - "updateleveligt": 2153673856, - "changefileselectaction": 2153674108, - "changefileselectaction_0": 2153674388, - "pregiven_status": 2153674580, - "k_rool_text": 2153675264, - "getmemorychallengetype": 2153675564, - "isdarkworld": 2153675648, - "alterchunklighting": 2153675804, - "alterchunkdata": 2153676084, - "shinelight": 2153676220, - "isskyworld": 2153676428, - "displaynogeochunk": 2153676508, - "setfalldamageimmunity": 2153676628, - "handlefalldamageimmunity": 2153676640, - "transformbarrelimmunity": 2153676708, - "factoryshedfallimmunity": 2153676736, - "falldamagewrapper": 2153676772, - "spawnstalactite": 2153676820, - "spawnkroollankyballoon": 2153677056, - "popexistingballoon": 2153677152, - "handlekrooldirecting": 2153677240, - "inchitcounter": 2153677528, - "parsecontrollerinput": 2153677584, - "hitlessdeath": 2153677720, - "hitlessdeathwrapper0": 2153677884, - "hitlessdeathwrapper1": 2153677940, - "livesdisplay": 2153678016, - "sethardpathspeed": 2153678296, - "blast_maps": 2153678340, - "cansavehelmhurry": 2153678440, - "addhelmtime": 2153678564, - "checktotalcache": 2153678644, - "finishhelmhurry": 2153678704, - "inithelmhurry": 2153678756, - "savehelmhurrytime": 2153678864, - "inithuddirection": 2153678988, - "allocatehud": 2153679120, - "sethudkong": 2153680104, - "setallhudkongs": 2153680136, - "gethudsprite_complex": 2153680188, - "updatebarriercounts": 2153680528, - "displaybarrierhud": 2153680676, - "canusedpad": 2153680736, - "drawdpad": 2153680988, - "handledpadfunctionality": 2153681940, - "item_db": 2153683384, - "adjustgunbone": 2153684572, - "getcutscenemodeltableindex": 2153684720, - "fixcutscenemodels": 2153684772, - "adjustanimationtables": 2153684996, - "krushaslide": 2153685628, - "adaptkrushazbanimation_punchostand": 2153685712, - "adaptkrushazbanimation_charge": 2153685992, - "diddyswimfix": 2153686220, - "minecartjumpfix": 2153686380, - "minecartjumpfix_0": 2153686400, - "setkrushaammocolor": 2153686472, - "orangeguncode": 2153686596, - "gethinttextindex": 2153687912, - "isgoodtextbox": 2153688132, - "getmovehint": 2153688244, - "purchase_hint_text_items": 2153688428, - "resetdisplayedmusic": 2153688668, - "speedupmusic": 2153688680, - "initsongdisplay": 2153689100, - "detectsongchange": 2153689420, - "displaysongnamehandler": 2153689760, - "playmusicdontstop": 2153690292, - "postsynupdate": 2153690364, - "fixbrokenvoices": 2153690504, - "issharedmove": 2153690844, - "getcounteritem": 2153691084, - "getmovecountinshop": 2153691132, - "wipecounterimagecache": 2153691388, - "loadinternaltexture": 2153691448, - "loadfonttexture_counter": 2153691612, - "updatecounterdisplay": 2153691776, - "getactormodeltwodist": 2153691932, - "getclosestshop": 2153692060, - "getshopscale": 2153692396, - "newcountercode": 2153692528, - "handlefootprogress": 2153694024, - "setkongigt": 2153694476, - "updatepercentagekongstat": 2153694528, - "updatetagstat": 2153694740, - "updatefairystat": 2153694840, - "updateenemykillstat": 2153694876, - "createendseqcreditsfile": 2153695080, - "displaynumberonobject": 2153695876, - "getholdableheightlocal": 2153696096, - "getholdableheight": 2153696180, - "enterts": 2153696220, - "boulderdestroy": 2153696424, - "bouldertscode": 2153696464, - "tshandler": 2153696840, - "tsjump": 2153697024, - "tsspeed": 2153697104, - "tsdrop": 2153697228, - "writewti": 2153697420, - "handle_wti": 2153697460, - "warptoisles": 2153697632, - "beatgame": 2153697736, - "finalizebeatgame": 2153697812, - "hasbeatendkrapwincon": 2153697912, - "canaccesswincondition": 2153698148, - "checkseedvictory": 2153698568, - "winrabbitseed": 2153698644, - "safeguardrabbitreward": 2153698676, - "checkvictory_flaghook": 2153698736, - "issnapenemyinrange": 2153698764, - "getpkmnsnapdata": 2153699248, - "pokemonsnapmode": 2153699368, - "arcadeexit": 2153699760, - "determinearcadelevel": 2153699972, - "handlearcadevictory": 2153700164, - "spawnoverlaytext": 2153700340, - "overlay_mod_bonus": 2153700700, - "haschunkyphaseslam": 2153700956, - "overlay_mod_boss": 2153700984, - "overlay_changes": 2153701456, - "parsecutscenedata": 2153701680, - "loadjetpacsprites_handler": 2153702124, - "exitjetpac": 2153702192, - "completejetpac": 2153702228, - "patchcrankycode": 2153702284, - "overlay_mod_menu": 2153702432, - "overlay_mod_race": 2153702676, - "updatepausescreenwheel": 2153702732, - "newpausespritecode": 2153702812, - "totalssprite": 2153703512, - "checkssprite": 2153703520, - "initcarousel_onpause": 2153703528, - "pause_items": 2153703748, - "initprogressivetimer": 2153703960, - "renderprogressivesprite": 2153703976, - "playprogressiveding": 2153704052, - "inithints": 2153704080, - "wipehintcache": 2153704420, - "drawhinttext": 2153704496, - "drawsplitstring": 2153705024, - "gethintrequirement": 2153705340, - "handleprogressiveindicator": 2153705380, - "resetprogressive": 2153705564, - "displaycbcount": 2153705584, - "gethintitemregion": 2153705780, - "showhint": 2153705804, - "displaybubble": 2153705924, - "inithintflags": 2153706084, - "initdimtimer": 2153706256, - "renderdimsprite": 2153706272, - "checkdimcache": 2153706348, - "getitemname": 2153706612, - "drawhintscreen": 2153706752, - "drawitemlocationscreen": 2153707572, - "initlockout": 2153708352, - "handlehintscreenlockout": 2153708508, - "item_name_plural": 2153708972, - "item_names": 2153708988, - "itemloc_flags": 2153709072, - "unknown_hints": 2153710156, - "hint_region_names": 2153710216, - "getlevelpoints": 2153711760, - "printleveligt": 2153711936, - "getlevelofdropsanity": 2153712436, - "inititemcheckdenominators": 2153712480, - "checkitemdb": 2153712828, - "handlecshifting": 2153713888, - "pausescreen3and4header": 2153713996, - "drawtextpointers": 2153714568, - "pausescreen3and4itemname": 2153714720, - "pausescreen3and4counter": 2153714868, - "changepausescreen": 2153715120, - "changeselectedlevel": 2153715264, - "updatefilevariables": 2153715348, - "handleoutofcounters": 2153715400, - "exitmap": 2153715580, - "sethintregion": 2153717008, - "storehintregion": 2153717884, - "gethintregiontext": 2153717992, - "displayhintregion": 2153718124, - "getworldoffset": 2153718864, - "setblockerhead": 2153718912, - "displayblockeritemonhud": 2153719036, - "getcountofblockerrequireditem": 2153719108, - "displaycountonblockerteeth": 2153719152, - "cc_enable_drunky": 2153719244, - "cc_disable_drunky": 2153719308, - "cc_allower_rockfall": 2153719352, - "cc_allower_balloon": 2153719368, - "cc_allower_backflip": 2153719420, - "cc_enabler_ice": 2153719468, - "cc_disabler_ice": 2153719492, - "cc_allower_mini": 2153719536, - "cc_allower_boulder": 2153719580, - "cc_allower_crate": 2153719632, - "cc_disabler_paper": 2153719680, - "cc_allower_time": 2153719772, - "cc_allower_helmtimer": 2153719820, - "cc_allower_water": 2153719836, - "cc_enabler_icetrap": 2153719892, - "cc_allower_icetrap": 2153719928, - "cc_enabler_warptorap": 2153719980, - "cc_disabler_warptorap": 2153720064, - "displaygetoutreticle": 2153720192, - "cc_enable_getout": 2153720516, - "cc_enabler_doabackflip": 2153720704, - "cc_enabler_rockfall": 2153720788, - "cc_enabler_boulder": 2153721044, - "cc_enabler_crate": 2153721120, - "cc_enabler_balloon": 2153721196, - "cc_allower_spawnkop": 2153721332, - "cc_enabler_spawnkop": 2153721420, - "cc_enabler_slip": 2153721588, - "cc_allower_animals": 2153721660, - "cc_allower_tag": 2153721720, - "cc_enabler_tag": 2153721828, - "cc_enabler_animals": 2153721972, - "cc_disabler_animals": 2153722220, - "cc_enabler_paper": 2153722292, - "cc_enabler_time": 2153722468, - "cc_enabler_helmtimer": 2153722704, - "cc_enabler_water": 2153722748, - "cc_allower_generic": 2153723008, - "handlegamemodewrapper": 2153723164, - "skipdktv": 2153723236, - "fakegetout": 2153723320, - "dummyguardcode": 2153723820, - "cc_setscale": 2153724064, - "cc_enabler_mini": 2153724112, - "cc_disabler_mini": 2153724184, - "cc_effect_handler": 2153724196, - "blastwarpgetter": 2153725328, - "blastwarphandler": 2153725416, - "blast_entrances": 2153725544, - "replacement_lobby_exits_array": 2153725560, - "replacement_lobbies_array": 2153725580, - "swap_ending_cutscene_model": 2153725600, - "completeboss": 2153725832, - "fixkroolkong": 2153726544, - "handlekroolsaveprogress": 2153726644, - "writehudamount": 2153727136, - "coinhudelements": 2153727304, - "displaymovetext": 2153727348, - "movetransplant": 2153727660, - "isshopempty": 2153727728, - "getinstrumentlevel": 2153727836, - "getprice": 2153727892, - "getnextmovepurchase": 2153728060, - "purchasemove": 2153728400, - "checkfirstmovepurchase": 2153729016, - "purchasefirstmovehandler": 2153729172, - "setlocation": 2153729240, - "setlocationstatus": 2153729268, - "getlocationstatus": 2153729504, - "getnextmovetext": 2153729532, - "displaybfimovetext": 2153731636, - "showpostmovetext": 2153731764, - "instrumentupgnames": 2153733056, - "instrumentnames": 2153733064, - "ammobeltnames": 2153733072, - "gunupgnames": 2153733076, - "gunnames": 2153733080, - "specialmovesnames": 2153733088, - "simianslamnames": 2153733128, - "destroybonus": 2153733136, - "completebonus": 2153733168, - "helminit": 2153733272, - "helmbarrelcode": 2153734084, - "crowndoorcheck": 2153734452, - "unlockmoves": 2153734568, - "starting_item_data": 2153735080, - "auto_turn_keys": 2153735148, - "qualityoflife_shorteners": 2153735280, - "fastwarp": 2153735372, - "fastwarp_playmusic": 2153735404, - "fastwarpshockwavefix": 2153735432, - "clearvulturecutscene": 2153735536, + "drawpixeltext": 2153523724, + "drawpixeltextcontainer": 2153523924, + "displaycenteredtext": 2153524108, + "drawscreenrect": 2153524236, + "drawstring": 2153524472, + "drawtext": 2153524640, + "drawtextcontainer": 2153525012, + "setcharacterrecoloring": 2153525232, + "setcharactercolor": 2153525252, + "applyhintrecoloring": 2153525288, + "new_flag_mapping": 2153525644, + "actor_extra_data_sizes": 2153526620, + "actor_functions": 2153529576, + "actor_collisions": 2153532532, + "actor_health_damage": 2153538444, + "actor_interactions": 2153541400, + "actor_master_types": 2153542880, + "actor_defs": 2153543620, + "drops": 2153551588, + "object_collisions": 2153551828, + "item_scales": 2153553700, + "actor_drops": 2153554100, + "bounce_objects": 2153554200, + "acceptable_items": 2153554280, + "getoverlayfrommap": 2153554372, + "getbitarrayvalue": 2153554392, + "inminigame": 2153554424, + "playsfx": 2153554440, + "setpermflag": 2153554492, + "convertidtoindex": 2153554504, + "convertsubidtoindex": 2153554580, + "isflaginrange": 2153554656, + "findactorwithtype": 2153554688, + "createcollisionobjinstance": 2153554760, + "resetmapcontainer": 2153554852, + "getcenter": 2153554908, + "cancelcutscene": 2153554984, + "modifycutscenepoint": 2153555120, + "modifycutsceneitem": 2153555192, + "modifycutscenepanpoint": 2153555272, + "modifycutscenepointtime": 2153555412, + "getwrinklylevelindex": 2153555488, + "getmingb": 2153555504, + "givegb": 2153555596, + "gettotalcbcount": 2153555700, + "inshortlist": 2153555800, + "inu8list": 2153555852, + "inshop": 2153555908, + "correctdkportal": 2153555924, + "spawnitemoverlay": 2153556200, + "giveslamlevel": 2153556452, + "inbattlecrown": 2153556520, + "intraining": 2153556560, + "inbossmap": 2153556592, + "isgamemode": 2153556692, + "filtersong": 2153556752, + "death": 2153556984, + "readfilesimple": 2153557032, + "savefilesimple": 2153557052, + "applydamagemask": 2153557096, + "replacewatertexture": 2153557424, + "replacewatertexture_spooky": 2153557468, + "isbounceobject": 2153557512, + "getfile": 2153557528, + "getpercentageofitem": 2153557616, + "getgamepercentage": 2153557672, + "gettotalmovecount": 2153557804, + "getitemcountreq": 2153558156, + "isitemrequirementsatisfied": 2153558644, + "getshopdata": 2153558708, + "exitboss": 2153558872, + "iskrushaadjacentmodel": 2153558960, + "isglobalcutsceneplaying": 2153558992, + "determinelevel_newlevel": 2153559052, + "refillifrefillable": 2153559288, + "refillhealthoninit": 2153559416, + "refillplayerhealthkko": 2153559476, + "isdynflag": 2153559508, + "getprojectilecount_modified": 2153559624, + "applybuttonbansinternals": 2153560048, + "guard_enabled_buttons": 2153560228, + "trap_enabled_buttons": 2153560230, + "cc_enabled_buttons": 2153560232, + "enabled_buttons": 2153560234, + "button_swaps": 2153560236, + "big_head_actors": 2153560284, + "ap_overlay_sprite": 2153560724, + "night_overlay_sprite": 2153560748, + "day_overlay_sprite": 2153560772, + "halfmedal_sprite": 2153560796, + "boulder_sprite": 2153560832, + "potion_sprite": 2153560868, + "company_coin_sprite": 2153560908, + "fool_overlay_sprite": 2153560960, + "feather_gun_sprite": 2153560984, + "krool_sprite": 2153561020, + "pearl_sprite": 2153561044, + "bean_sprite": 2153561068, + "regular_boss_maps": 2153561372, + "crown_maps": 2153561380, + "colorblind_colors": 2153561392, + "kong_pellets": 2153561440, + "tnsportal_flags": 2153561448, + "bfi_move_flags": 2153561464, + "tbarrel_flags": 2153561468, + "normal_key_flags": 2153561476, + "kong_flags": 2153561492, + "levels": 2153561644, + "resetpicturestatus": 2153561700, + "cfuncloop": 2153561768, + "earlyframe": 2153563348, + "insertrommessages": 2153565164, + "drawinfotext": 2153565444, + "displaymenuwarnings": 2153565608, + "displaylistmodifiers": 2153565832, + "togglestandardammo": 2153567496, + "grab_lock_timer": 2153567967, + "dropsanity_levels": 2153568380, + "spoiler_items": 2153568596, + "display_billboard_fix": 2153568876, + "hints_initialized": 2153568877, + "gamestats": 2153568880, + "enable_skip_check": 2153568892, + "ice_trap_queued": 2153568896, + "enemy_rewards_spawned": 2153568900, + "bonus_shown": 2153568916, + "base_text_color": 2153568920, + "crate_flags": 2153568924, + "patch_flags": 2153568988, + "balloon_path_pointers": 2153569052, + "headsize": 2153569308, + "force_enable_diving_timer": 2153569548, + "guard_tag_timer": 2153569552, + "tag_locked": 2153569554, + "itemloc_pointers": 2153569556, + "hint_pointers": 2153570040, + "cs_skip_db": 2153570460, + "text_overlay_data": 2153570468, + "static_mtx": 2153570532, + "setobjectopacity": 2153571940, + "hideobject": 2153571964, + "standingonm2object": 2153572004, + "canopenspecificblocker": 2153572052, + "canopenxblockers": 2153572148, + "activategonepad": 2153572348, + "tnsindicatorgenericcode": 2153572408, + "bananaportgenericcode": 2153572704, + "spawnwrinklywrapper": 2153574696, + "loadwrinklytextwrapper": 2153575092, + "portalwarpfix": 2153575136, + "change_object_scripts": 2153575192, + "overlay_mod_race": 2153580112, + "loadjetpacsprites_handler": 2153580168, + "exitjetpac": 2153580236, + "completejetpac": 2153580272, + "spawnoverlaytext": 2153580328, + "overlay_mod_bonus": 2153580688, + "overlay_changes": 2153580944, + "parsecutscenedata": 2153581168, + "arcadeexit": 2153581612, + "determinearcadelevel": 2153581824, + "handlearcadevictory": 2153582016, + "haschunkyphaseslam": 2153582192, + "overlay_mod_boss": 2153582220, + "patchcrankycode": 2153582692, + "overlay_mod_menu": 2153582840, + "fixhelmtimercorrection": 2153583084, + "helmtime_restart": 2153583212, + "helmtime_exitbonus": 2153583248, + "helmtime_exitrace": 2153583320, + "helmtime_exitlevel": 2153583348, + "helmtime_exitboss": 2153583376, + "helmtime_exitkrool": 2153583408, + "inithelmsetup": 2153583440, + "gethelmexit": 2153583516, + "warptohelm": 2153583568, + "helm_entry_points": 2153583604, + "handlecannongamereticle": 2153583608, + "resetcannongamestate": 2153583764, + "handlespidersilkspawn": 2153583812, + "spiderbossextracode": 2153583880, + "intransform": 2153584076, + "cantaganywhere": 2153584164, + "gettastate": 2153584600, + "hasaccesstokong": 2153584612, + "gettaganywherekong": 2153584628, + "changekong": 2153584800, + "taganywhere": 2153585412, + "taganywhereinit": 2153586084, + "populatesfxcache": 2153586168, + "handlesfxcache": 2153586388, + "taganywhereammo": 2153586716, + "handlegrabbinglock": 2153586892, + "canplayerclimb": 2153586928, + "handleledgelock": 2153587044, + "handlepushlock": 2153587144, + "handleactionset": 2153587180, + "qualityoflife_fixes": 2153587536, + "dropwrapper": 2153587848, + "candive_withcheck": 2153587892, + "playtransformationsong": 2153587996, + "hasenoughcbs": 2153588068, + "shouldding": 2153588176, + "renderindicatorsprite": 2153588372, + "renderdingsprite": 2153588876, + "initdingsprite": 2153588976, + "gethomingcountwithabilitycheck": 2153588992, + "playcbding": 2153589028, + "cbding": 2153589056, + "fixrbslowturn": 2153589204, + "postkroolsavecheck": 2153589252, + "tagbarrelbackgroundkong": 2153589316, + "updatemultibunchcount": 2153589364, + "rabbitraceinfinitecode": 2153589416, + "fixdillotntpads": 2153589560, + "canplayjetpac": 2153589604, + "fixcrownentryskong": 2153589664, + "reducetrapbubblelife": 2153589684, + "exittrapbubblecontroller": 2153589724, + "fixchimpycambug": 2153589980, + "movepelletwrapper": 2153590104, + "fixhelmtimerdisable": 2153590456, + "ispreventcutsceneplaying": 2153590560, + "callparentmapfilter": 2153590732, + "freedk": 2153591028, + "cutscenedkcode": 2153591072, + "charspawneritemcode": 2153591616, + "isbadmovementstate": 2153591952, + "guardcatchinternal": 2153591992, + "guardcatch": 2153592428, + "warphandle": 2153592588, + "catchwarphandle": 2153592712, + "inrabbitrace": 2153592988, + "renderkoplighthandler": 2153593036, + "newguardcode": 2153593152, + "setkopidleguarantee": 2153593948, + "givekopidleguarantee": 2153593972, + "load_object_script": 2153594072, + "adjust_level_modifiers": 2153594232, + "handletimeofday": 2153594468, + "istimeofday": 2153595156, + "getoscillationdelta": 2153595312, + "fixmusicrando": 2153595352, + "writeendsequence": 2153595404, + "loadhooks": 2153595472, + "inithack": 2153595588, + "quickinit": 2153596320, + "music_types": 2153620408, + "disableantialiasing": 2153620592, + "initqol_cutscenes": 2153620772, + "fixracehoopcode": 2153620848, + "renderhoop": 2153620864, + "fixupdraftbug": 2153620928, + "quickwrinklytextboxes": 2153621000, + "bootspeedup": 2153621052, + "initqol_fastwarp": 2153621084, + "writespawn": 2153621160, + "initspawn": 2153621184, + "qol_displayinstrument": 2153621268, + "headphonescodecontainer": 2153621284, + "newinstrumentrefill": 2153621332, + "getinstrumentrefillcount": 2153621376, + "correctrefillcap": 2153621452, + "initqol": 2153621480, + "crashhandler": 2153621576, + "getfaultedthread": 2153622688, + "version_string": 2153622772, + "getcrownindex": 2153624304, + "getkeyindex": 2153624344, + "getpatchflag": 2153624384, + "getpatchworld": 2153624460, + "getcrateflag": 2153624484, + "getcrateworld": 2153624560, + "getbonusflag": 2153624584, + "updateboulderid": 2153624620, + "getboulderindex": 2153624644, + "getbarrelskinindex": 2153624760, + "getshopskinindex": 2153624840, + "alterbonusvisuals": 2153624976, + "getdirtpatchskin": 2153625196, + "inititemrando": 2153625444, + "m2_cb_coin_counts": 2153625512, + "actor_cb_counts": 2153625528, + "snide_rewards": 2153625972, + "company_coin_table": 2153626292, + "kong_check_data": 2153626300, + "bonus_data": 2153626332, + "balloon_item_table": 2153627124, + "box_item_table": 2153627540, + "boulder_item_table": 2153627636, + "extra_actor_spawns": 2153627764, + "crate_item_table": 2153627772, + "rcoin_item_table": 2153627836, + "fairy_item_table": 2153627900, + "key_item_table": 2153628060, + "crown_item_table": 2153628124, + "wrinkly_item_table": 2153628164, + "medal_item_table": 2153628304, + "bp_item_table": 2153628644, + "updatekongtb": 2153629076, + "updateactorhandstates": 2153629196, + "cleargunhandler": 2153629400, + "updateactorhandstates_gun": 2153629540, + "pulloutgunhandler": 2153629880, + "determineshockwavecolor": 2153630296, + "initcosmetic": 2153630492, + "setfog": 2153630664, + "getrainbowammocolor": 2153630792, + "updatespritecolor": 2153630996, + "colorrainbowammohud": 2153631048, + "colorrainbowammohud_0": 2153631112, + "colorrainbowammo": 2153631176, + "sethudupdatefunction": 2153631236, + "sethudupdatefunction_0": 2153631268, + "pickrandomfrompool": 2153631340, + "playbonussong": 2153631428, + "playbosssong": 2153631516, + "playsongwcheck": 2153631668, + "stopbosssong": 2153632024, + "resetbosssong": 2153632220, + "playnotbosssong": 2153632240, + "displaymodifiedtext": 2153632492, + "inittextchanges": 2153632600, + "dark_mode_colors": 2153632764, + "emph_text_colors": 2153632804, + "setenemydbpopulation": 2153632844, + "populateenemymapdata": 2153632856, + "getenemyitem": 2153633056, + "getenemyflag": 2153633092, + "wipeenemyspawnbitfield": 2153633140, + "setspawnbitfield": 2153633176, + "setspawnbitfieldfromflag": 2153633252, + "canspawnenemyreward": 2153633324, + "getrngwithinrange": 2153633444, + "rendersparkles": 2153633528, + "indicatecollectionstatus": 2153633792, + "fireballenemydeath": 2153633988, + "rulerenemydeath": 2153634064, + "tomatodeath": 2153634148, + "spawnactorwithflaghandler": 2153635288, + "spawnweirdreward": 2153635436, + "spawnweirdreward0": 2153635540, + "spawnbonusreward": 2153635632, + "spawnrewardatactor": 2153635788, + "spawnminecartreward": 2153636020, + "spawncrownreward": 2153636176, + "spawnbossreward": 2153636344, + "spawndirtpatchreward": 2153636672, + "spawncharspawneractor": 2153636896, + "meloncrateitemhandler": 2153637140, + "updatekegids": 2153637640, + "isvalidboulderobject": 2153637856, + "isvalidbreakableobject": 2153637988, + "spawnboulderobject": 2153638124, + "spawnbreakableobject": 2153638312, + "renderbouldersparkles": 2153638504, + "shoulddeleteballoon": 2153638704, + "isvalidballoonobject": 2153638780, + "balloonvishandler": 2153638924, + "balloonvishandler2": 2153639068, + "balloonitemhandler": 2153639244, + "initactordefs": 2153639648, + "setactordamage": 2153639696, + "swapkremlingmodel": 2153639720, + "getbpcountstats": 2153639828, + "getturnedcount": 2153639924, + "turnedallin": 2153640024, + "hasturnedinatleast": 2153640060, + "getfirstemptysnidereward": 2153640132, + "fixed_bug_collision": 2153640256, + "fixed_klap_collision": 2153640280, + "fixed_dice_collision": 2153640376, + "fixed_scarab_collision": 2153640520, + "fixed_shockwave_collision": 2153640568, + "resetscreenflip": 2153640604, + "resettaganywhere": 2153640624, + "customdamagecode": 2153640648, + "trapplayer_new": 2153640788, + "renderspritesonplayer": 2153641064, + "wipereplenishibles": 2153641292, + "swapbuttons": 2153641432, + "initicetrap": 2153641684, + "slippeelcode": 2153642464, + "reseticetrapbuttons": 2153642628, + "queueicetrap": 2153642692, + "isbannedtrapmap": 2153642720, + "canloadicetrap": 2153642792, + "handleicetrapbuttons": 2153643056, + "istrapmodel": 2153643456, + "cancelicetrapsong": 2153643484, + "playicetrapsong": 2153643532, + "callicetrap": 2153643588, + "spritecode": 2153644192, + "nothingcode": 2153644388, + "kongdropcode": 2153644400, + "potioncode": 2153644528, + "fairyduplicatecode": 2153644592, + "shopowneritemcode": 2153644660, + "missingshopownercode": 2153644752, + "crankycodehandler": 2153644956, + "funkycodehandler": 2153645004, + "candycodehandler": 2153645052, + "snidecodehandler": 2153645100, + "fakekeycode": 2153645148, + "fakegbcode": 2153645196, + "fakefairycode": 2153645244, + "mermaidcheck": 2153645292, + "fairyqueencutsceneinit": 2153645400, + "fairyqueencutscenecheck": 2153645472, + "fairyqueencheckspeedup": 2153645696, + "cannoncodewrapper": 2153645736, + "setuphook": 2153645892, + "checkkasplatspawnbitfield": 2153646880, + "isflaggedwatermelon": 2153647340, + "canitempersist": 2153647436, + "isapenabled": 2153647944, + "initap": 2153647964, + "initapcounter": 2153648032, + "saveapcounter": 2153648092, + "handlesentitem": 2153648144, + "sendtraplink": 2153648268, + "canreceiveitem": 2153648312, + "canreceiveshopkeeperitem": 2153648428, + "candie": 2153648480, + "senddeath": 2153648624, + "handledamagelink": 2153648692, + "handlearchipelagofeed": 2153648848, + "displayapconnection": 2153649436, + "giveitem": 2153649780, + "giveitemfrompacket": 2153651768, + "getitemcount_new": 2153651804, + "getkongownershipfromflag": 2153652864, + "givekongfromflag": 2153652924, + "hasflagmove": 2153653044, + "setflagmove": 2153653136, + "getshopflag": 2153653236, + "grabfileparameters_fileinfo": 2153653380, + "inititemrandopointer": 2153653484, + "readitemsfromfile": 2153653504, + "saveitemstofile": 2153653824, + "file_info_expansion": 2153654140, + "refreshpads": 2153654592, + "ismodeltwotiedflag_new": 2153654916, + "handledynamicitemtext": 2153655544, + "gettextdata": 2153655628, + "getcharwidthmask": 2153655704, + "caves_beetle": 2153655752, + "aztec_beetle": 2153655784, + "getcollisionsquare_new": 2153655820, + "writeitemscale": 2153655940, + "writeitemactorscale": 2153656132, + "getitemrequiredkong": 2153656172, + "iscollidingwithsphere": 2153656212, + "iscollidingwithcylinder": 2153656368, + "isvalidkongcollision": 2153656852, + "checkmodeltwoitemcollision": 2153656920, + "checkforvalidcollision": 2153657544, + "displaymedaloverlay": 2153658144, + "banana_medal_check": 2153658732, + "banana_medal_acquisition": 2153658800, + "getflagindex_corrected": 2153659016, + "giveitemfromsend": 2153659072, + "giveitemfromkongdata": 2153659168, + "givefairyitem": 2153659216, + "iscavesbeetlereward": 2153659280, + "candanceskip": 2153659348, + "forcedance": 2153659640, + "getitem": 2153659736, + "getobjectcollectability": 2153661196, + "iscollectable": 2153661636, + "handlemodeltwoopacity": 2153661920, + "getflagmappingdata": 2153662004, + "givecb": 2153662100, + "updateitemtotalshandler": 2153662344, + "helminit": 2153666296, + "helmbarrelcode": 2153667108, + "crowndoorcheck": 2153667476, + "qualityoflife_shorteners": 2153667592, + "fastwarp": 2153667684, + "fastwarp_playmusic": 2153667716, + "fastwarpshockwavefix": 2153667744, + "unlockmoves": 2153667848, + "starting_item_data": 2153668360, + "destroybonus": 2153668428, + "completebonus": 2153668460, + "auto_turn_keys": 2153668564, + "clearvulturecutscene": 2153668696, + "updatepausescreenwheel": 2153668812, + "newpausespritecode": 2153668892, + "totalssprite": 2153669592, + "checkssprite": 2153669600, + "initcarousel_onpause": 2153669608, + "pause_items": 2153669828, + "initprogressivetimer": 2153670040, + "renderprogressivesprite": 2153670056, + "playprogressiveding": 2153670132, + "inithints": 2153670160, + "wipehintcache": 2153670500, + "drawhinttext": 2153670576, + "drawsplitstring": 2153671104, + "gethintrequirement": 2153671420, + "handleprogressiveindicator": 2153671460, + "resetprogressive": 2153671644, + "displaycbcount": 2153671664, + "gethintitemregion": 2153671860, + "showhint": 2153671884, + "displaybubble": 2153672004, + "inithintflags": 2153672164, + "initdimtimer": 2153672336, + "renderdimsprite": 2153672352, + "checkdimcache": 2153672428, + "getitemname": 2153672692, + "drawhintscreen": 2153672832, + "drawitemlocationscreen": 2153673652, + "initlockout": 2153674432, + "handlehintscreenlockout": 2153674588, + "item_name_plural": 2153675052, + "item_names": 2153675068, + "itemloc_flags": 2153675152, + "unknown_hints": 2153676236, + "hint_region_names": 2153676296, + "sethintregion": 2153677840, + "storehintregion": 2153678716, + "gethintregiontext": 2153678824, + "displayhintregion": 2153678956, + "getlevelpoints": 2153679696, + "printleveligt": 2153679872, + "getlevelofdropsanity": 2153680372, + "inititemcheckdenominators": 2153680416, + "checkitemdb": 2153680764, + "handlecshifting": 2153681824, + "pausescreen3and4header": 2153681932, + "drawtextpointers": 2153682504, + "pausescreen3and4itemname": 2153682656, + "pausescreen3and4counter": 2153682804, + "changepausescreen": 2153683056, + "changeselectedlevel": 2153683200, + "updatefilevariables": 2153683284, + "handleoutofcounters": 2153683336, + "exitmap": 2153683516, + "blastwarpgetter": 2153684944, + "blastwarphandler": 2153685032, + "blast_entrances": 2153685160, + "replacement_lobby_exits_array": 2153685176, + "replacement_lobbies_array": 2153685196, + "swap_ending_cutscene_model": 2153685216, + "completeboss": 2153685448, + "fixkroolkong": 2153686160, + "handlekroolsaveprogress": 2153686260, + "getworldoffset": 2153686752, + "setblockerhead": 2153686800, + "displayblockeritemonhud": 2153686924, + "getcountofblockerrequireditem": 2153686996, + "displaycountonblockerteeth": 2153687040, + "cc_enable_drunky": 2153687132, + "cc_disable_drunky": 2153687196, + "cc_allower_rockfall": 2153687240, + "cc_allower_balloon": 2153687256, + "cc_allower_backflip": 2153687308, + "cc_enabler_ice": 2153687356, + "cc_disabler_ice": 2153687380, + "cc_allower_mini": 2153687424, + "cc_allower_boulder": 2153687468, + "cc_allower_crate": 2153687520, + "cc_disabler_paper": 2153687568, + "cc_allower_time": 2153687660, + "cc_allower_helmtimer": 2153687708, + "cc_allower_water": 2153687724, + "cc_enabler_icetrap": 2153687780, + "cc_allower_icetrap": 2153687816, + "cc_enabler_warptorap": 2153687868, + "cc_disabler_warptorap": 2153687952, + "displaygetoutreticle": 2153688080, + "cc_enable_getout": 2153688404, + "cc_enabler_doabackflip": 2153688592, + "cc_enabler_rockfall": 2153688676, + "cc_enabler_boulder": 2153688932, + "cc_enabler_crate": 2153689008, + "cc_enabler_balloon": 2153689084, + "cc_allower_spawnkop": 2153689220, + "cc_enabler_spawnkop": 2153689308, + "cc_enabler_slip": 2153689476, + "cc_allower_animals": 2153689548, + "cc_allower_tag": 2153689608, + "cc_enabler_tag": 2153689716, + "cc_enabler_animals": 2153689860, + "cc_disabler_animals": 2153690108, + "cc_enabler_paper": 2153690180, + "cc_enabler_time": 2153690356, + "cc_enabler_helmtimer": 2153690592, + "cc_enabler_water": 2153690636, + "cc_allower_generic": 2153690896, + "handlegamemodewrapper": 2153691052, + "skipdktv": 2153691124, + "fakegetout": 2153691208, + "dummyguardcode": 2153691708, + "cc_setscale": 2153691952, + "cc_enabler_mini": 2153692000, + "cc_disabler_mini": 2153692072, + "cc_effect_handler": 2153692084, + "instrumentupgnames": 2153693216, + "instrumentnames": 2153693224, + "ammobeltnames": 2153693232, + "gunupgnames": 2153693236, + "gunnames": 2153693240, + "specialmovesnames": 2153693248, + "simianslamnames": 2153693288, + "writehudamount": 2153693296, + "coinhudelements": 2153693464, + "displaymovetext": 2153693508, + "movetransplant": 2153693820, + "isshopempty": 2153693888, + "getinstrumentlevel": 2153693996, + "getprice": 2153694052, + "getnextmovepurchase": 2153694220, + "purchasemove": 2153694560, + "checkfirstmovepurchase": 2153695176, + "purchasefirstmovehandler": 2153695332, + "setlocation": 2153695400, + "setlocationstatus": 2153695428, + "getlocationstatus": 2153695664, + "getnextmovetext": 2153695692, + "displaybfimovetext": 2153697796, + "showpostmovetext": 2153697924, + "gethinttextindex": 2153699216, + "isgoodtextbox": 2153699436, + "getmovehint": 2153699548, + "purchase_hint_text_items": 2153699732, + "handlefootprogress": 2153699972, + "setkongigt": 2153700424, + "updatepercentagekongstat": 2153700476, + "updatetagstat": 2153700688, + "updatefairystat": 2153700788, + "updateenemykillstat": 2153700824, + "createendseqcreditsfile": 2153701028, + "resetdisplayedmusic": 2153701824, + "speedupmusic": 2153701836, + "initsongdisplay": 2153702256, + "detectsongchange": 2153702576, + "displaysongnamehandler": 2153702916, + "playmusicdontstop": 2153703448, + "postsynupdate": 2153703520, + "fixbrokenvoices": 2153703660, + "wipetrackercache": 2153703996, + "getenabledstate": 2153704096, + "updateenabledstates": 2153704388, + "inittracker": 2153704740, + "resettracker": 2153704752, + "modifytrackerimage": 2153704764, + "display_file_images": 2153705548, + "display_text": 2153705824, + "displayhash": 2153706320, + "correctkongfaces": 2153706672, + "wipefilemod": 2153706852, + "enterfileprogress": 2153706908, + "givecollectables": 2153706952, + "setalldefaultflags": 2153707144, + "startfile": 2153707244, + "testpasswordsequence": 2153707796, + "wipepassword": 2153707852, + "handlepassword": 2153707896, + "password_screen_code": 2153708084, + "password_screen_init": 2153708328, + "password_screen_gfx": 2153708472, + "file_progress_screen_code": 2153708896, + "displayinverted": 2153709124, + "setprevsavemap": 2153709196, + "quitgame": 2153709216, + "updateleveligt": 2153709244, + "changefileselectaction": 2153709496, + "changefileselectaction_0": 2153709776, + "pregiven_status": 2153709968, + "k_rool_text": 2153710652, + "adjustgunbone": 2153710952, + "getcutscenemodeltableindex": 2153711100, + "fixcutscenemodels": 2153711152, + "adjustanimationtables": 2153711376, + "krushaslide": 2153712008, + "adaptkrushazbanimation_punchostand": 2153712092, + "adaptkrushazbanimation_charge": 2153712372, + "diddyswimfix": 2153712600, + "minecartjumpfix": 2153712760, + "minecartjumpfix_0": 2153712780, + "setkrushaammocolor": 2153712852, + "orangeguncode": 2153712976, + "getholdableheightlocal": 2153714292, + "getholdableheight": 2153714376, + "enterts": 2153714416, + "boulderdestroy": 2153714620, + "bouldertscode": 2153714660, + "tshandler": 2153715036, + "tsjump": 2153715220, + "tsspeed": 2153715300, + "tsdrop": 2153715424, + "item_db": 2153715616, + "beaverextrahithandle": 2153716804, + "handlecrowntimerinternal": 2153716892, + "handlecrowntimer": 2153717152, + "klumpcrownhandler": 2153717228, + "handlebugenemy": 2153717292, + "kioskbugend": 2153717656, + "stomphandler": 2153717780, + "kioskbugcode": 2153717904, + "beatgame": 2153718828, + "finalizebeatgame": 2153718904, + "hasbeatendkrapwincon": 2153719004, + "canaccesswincondition": 2153719240, + "checkseedvictory": 2153719660, + "winrabbitseed": 2153719736, + "safeguardrabbitreward": 2153719768, + "checkvictory_flaghook": 2153719828, + "issnapenemyinrange": 2153719856, + "getpkmnsnapdata": 2153720340, + "pokemonsnapmode": 2153720460, + "renderget": 2153720852, + "wonarena": 2153721116, + "resolvebonuscontainer": 2153721140, + "warpoutofarenas": 2153721208, + "failtraining": 2153721332, + "warpoutoftraining": 2153721432, + "arenatagkongcode": 2153721600, + "arenaearlycompletioncheck": 2153721900, + "getminecartmayhemcoinreq": 2153722044, + "rendergetwrapper": 2153722112, + "wonminecartmayhem": 2153722216, + "initmmayhem": 2153722264, + "mayhem_minecart_size": 2153722420, + "cansavehelmhurry": 2153722464, + "addhelmtime": 2153722588, + "checktotalcache": 2153722668, + "finishhelmhurry": 2153722728, + "inithelmhurry": 2153722780, + "savehelmhurrytime": 2153722888, + "getmemorychallengetype": 2153723012, + "isdarkworld": 2153723096, + "alterchunklighting": 2153723252, + "alterchunkdata": 2153723532, + "shinelight": 2153723668, + "isskyworld": 2153723876, + "displaynogeochunk": 2153723956, + "setfalldamageimmunity": 2153724076, + "handlefalldamageimmunity": 2153724088, + "transformbarrelimmunity": 2153724156, + "factoryshedfallimmunity": 2153724184, + "falldamagewrapper": 2153724220, + "spawnstalactite": 2153724268, + "spawnkroollankyballoon": 2153724504, + "popexistingballoon": 2153724600, + "handlekrooldirecting": 2153724688, + "inchitcounter": 2153724976, + "parsecontrollerinput": 2153725032, + "hitlessdeath": 2153725168, + "hitlessdeathwrapper0": 2153725332, + "hitlessdeathwrapper1": 2153725388, + "livesdisplay": 2153725464, + "sethardpathspeed": 2153725744, + "blast_maps": 2153725788, + "updateskipcheck": 2153725888, + "iscutsceneskipped": 2153725944, + "cancelcutsceneinternals": 2153725988, + "clearqueuedcutscenefunctions": 2153726068, + "presstoskip": 2153726120, + "clearskipcache": 2153726248, + "pressskiphandler": 2153726280, + "updateskippablecutscenes": 2153726324, + "renderscreentransitioncheck": 2153726428, + "issharedmove": 2153726568, + "getcounteritem": 2153726808, + "getmovecountinshop": 2153726856, + "wipecounterimagecache": 2153727112, + "loadinternaltexture": 2153727172, + "loadfonttexture_counter": 2153727336, + "updatecounterdisplay": 2153727500, + "getactormodeltwodist": 2153727656, + "getclosestshop": 2153727784, + "getshopscale": 2153728120, + "newcountercode": 2153728252, + "displaynumberonobject": 2153729748, + "inithuddirection": 2153729968, + "allocatehud": 2153730100, + "sethudkong": 2153731084, + "setallhudkongs": 2153731116, + "gethudsprite_complex": 2153731168, + "updatebarriercounts": 2153731508, + "displaybarrierhud": 2153731656, + "canusedpad": 2153731716, + "drawdpad": 2153731968, + "handledpadfunctionality": 2153732920, + "spawnenemydrops": 2153734364, + "loadexits": 2153735360, + "writewti": 2153735504, + "handle_wti": 2153735544, + "warptoisles": 2153735716, "codeend": 2153754112, "copyfunc": 2153756496, "regularframeloop": 2153759408, @@ -3062,15 +3063,15 @@ "check_terminator": 19 }, "minigames": { - "2048.loop": 2147637796, - "arkanoid.loop": 2147637476, - "connect4.loop": 2147636128, "flappy_bird.loop": 2147634264, - "hexagon.loop": 2147639072, - "minesweeper.loop": 2147637148, "picross.loop": 2147636404, "snake.loop": 2147633800, + "arkanoid.loop": 2147637476, "wordle.loop": 2147635320, - "wordle.word_to_guess": 2147635640 + "wordle.word_to_guess": 2147635640, + "hexagon.loop": 2147639072, + "minesweeper.loop": 2147637148, + "2048.loop": 2147637796, + "connect4.loop": 2147636128 } } \ No newline at end of file