diff --git a/data/th16.v1.00a/funcs.json b/data/th16.v1.00a/funcs.json index 808f168..80b3a8d 100644 --- a/data/th16.v1.00a/funcs.json +++ b/data/th16.v1.00a/funcs.json @@ -649,37 +649,51 @@ , {"addr": "0x44a440", "name": "PopupManager::on_tick__stub", "comment": null} , {"addr": "0x44a450", "name": "PopupManager::on_draw_stub", "comment": null} , {"addr": "0x44a460", "name": "PopupManager::generate_small_score_popup", "comment": null} +, {"addr": "0x44a560", "name": "MainMenu::change_menu", "comment": "sets current/previous_menu, resets status + menu timer"} , {"addr": "0x44a9f0", "name": "MainMenu::constructor", "comment": null} , {"addr": "0x44abc0", "name": "MainMenu::thread_start", "comment": null} , {"addr": "0x44ac70", "name": "MainMenu::initialize", "comment": null} +, {"addr": "0x44ad20", "name": "MainMenu::destructor", "comment": "RTTI class TitleInf (.?AVTitleInf@@); unregisters update funcs, frees anm/ecl + 100 replay slots, joins thread"} , {"addr": "0x44aee0", "name": "MainMenu::operator new", "comment": null} +, {"addr": "0x44af50", "name": "MainMenu::delete_singleton", "comment": "if global instance != null: destruct + free"} , {"addr": "0x44af80", "name": "MainMenu::on_tick", "comment": null} , {"addr": "0x44b530", "name": "MainMenu::on_draw", "comment": null} , {"addr": "0x44b5d0", "name": "MainMenu::on_tick__stub", "comment": null} , {"addr": "0x44b5e0", "name": "MainMenu::on_draw__stub", "comment": null} , {"addr": "0x44b5f0", "name": "MainMenu::do_title_screen", "comment": null} , {"addr": "0x44c570", "name": "MainMenu::do_options", "comment": null} +, {"addr": "0x44c8c0", "name": "MainMenu::do_options__update_sprites", "comment": "options screen: set option-row child anm scripts 0x1e/0x1f by selection (draw helper, not a state)"} +, {"addr": "0x44dc70", "name": "MainMenu::draw_option_volume_digits", "comment": "options: render BGM/SE volume as digit sprites; SoundManager modify_bgm SetVol"} , {"addr": "0x44e930", "name": "MainMenu::do_key_config", "comment": null} +, {"addr": "0x44ec60", "name": "MainMenu::draw_key_config_digits", "comment": "key config: render 5 keycodes (this+0x5b34) as 2-digit sprites"} +, {"addr": "0x44f710", "name": "MainMenu::key_config_swap_key", "comment": "key config: assign keycode to slot (this+0x5b34[]), swap on conflict, sfx 7"} +, {"addr": "0x44f810", "name": "MainMenu::refresh_key_config_row_anm", "comment": "key config: send anm interrupt 0x1e/0x1f to rows by cursor (this+0x24)"} , {"addr": "0x44fe20", "name": "MainMenu::do_difficulty_select", "comment": null} , {"addr": "0x4502c0", "name": "MainMenu::do_character_select", "comment": null} , {"addr": "0x450af0", "name": "MainMenu::do_subseason_select", "comment": null} , {"addr": "0x450ef0", "name": "MainMenu::do_practice_stage_select", "comment": null} , {"addr": "0x4513c0", "name": "MainMenu::on_draw__practice_stage_select", "comment": null} -, {"addr": "0x451560", "name": "sub_451560_start_of_a_thread__rpy_related", "comment": null} +, {"addr": "0x451560", "name": "MainMenu::load_replay_files_thread", "comment": "thread body: load th16_NN.rpy (1..25) + th16_ud*.rpy into this+0x5b50; sets done flag this+0x5ce8"} , {"addr": "0x451740", "name": "sub_451740__stub", "comment": null} , {"addr": "0x451750", "name": "MainMenu::do_replay_menu", "comment": null} , {"addr": "0x451d50", "name": "MainMenu::on_draw__replay", "comment": null} , {"addr": "0x452330", "name": "MainMenu::sub_452330_replay_related", "comment": null} +, {"addr": "0x452c30", "name": "MainMenu::draw_spellcard_score_rows", "comment": "spellcard list: render scorefile per-spell rows filtered by difficulty (DAT_00491700), capture/attempt counts"} , {"addr": "0x453030", "name": "MainMenu::on_draw__player_data", "comment": null} , {"addr": "0x4532f0", "name": "MainMenu::do_menu_sub_4532f0", "comment": null} , {"addr": "0x4538b0", "name": "MainMenu::on_draw__4538b0", "comment": null} , {"addr": "0x453c10", "name": "MainMenu::sub_453c10_replay_replated", "comment": null} , {"addr": "0x4541b0", "name": "MainMenu::on_draw__4541b0", "comment": null} , {"addr": "0x4546f0", "name": "MainMenu::do_music_room", "comment": null} +, {"addr": "0x455330", "name": "text_skip_line", "comment": "skip to next line in text buffer (consumes line endings)"} +, {"addr": "0x455370", "name": "text_read_line_into_buf", "comment": "copy one line into dest buffer, null-terminate, advance cursor"} , {"addr": "0x4553d0", "name": "MainMenu::do_spell_practice_stage_select", "comment": null} , {"addr": "0x455790", "name": "MainMenu::do_spell_practice__character", "comment": null} , {"addr": "0x455900", "name": "MainMenu::do_spell_practice__spellcard", "comment": null} , {"addr": "0x455d50", "name": "MainMenu::do_spell_practice__subseason", "comment": null} +, {"addr": "0x456060", "name": "MainMenu::spell_practice_is_accessible", "comment": "returns 1 if any spell in the group has nonzero attempt count (scorefile +0x155c0)"} +, {"addr": "0x4560b0", "name": "MainMenu::spell_practice_update_spellcard_list", "comment": "spell practice: build selection-id array (this+0x5dd0) + render up to 5 spellcard labels"} +, {"addr": "0x4569a0", "name": "MainMenu::spell_practice_update_selection_anm", "comment": "spell practice: anm interrupt 2/3 (selected/unselected) over 5 slots (this+0x740)"} , {"addr": "0x456a20", "name": "MainMenu::do_spell_practice__difficulty", "comment": null} , {"addr": "0x456d50", "name": "MainMenu::on_draw__spell_practice_histories", "comment": null} , {"addr": "0x456fb0", "name": "Arcfile::constructor", "comment": null}