// reset screen attributes void setup() { // callbacks vblank_handler_set(0); hblank_handler_set(0); set_callback2((super_callback)0x812EB11); // BGs overworld_free_bgmaps(); gpu_tile_bg_drop_all_sets(0); int src_zero = 0; CpuSet(&src_zero, (void *)0x6000000, (uint)0x5006000); // pals pal_fade_control_and_dead_struct_reset(); palette_bg_faded_fill_black(); pal_fade_control_and_dead_struct_reset(); gpu_pal_allocator_reset(); *gpu_pal_tag_search_lower_boundary = 0; // objs obj_and_aux_reset_all(); // tasks tasks_init(); // more BG setup superstate.callback_vblank = vblank_cb; setup_ioregs_bg(); bgid_mod_x_offset(0, 0, 0); bgid_mod_y_offset(0, 0, 0); bgid_mod_x_offset(1, 0, 0); bgid_mod_y_offset(1, 0, 0); bgid_mod_x_offset(2, 0, 0); bgid_mod_y_offset(2, 0, 0); bgid_mod_x_offset(3, 0, 0); bgid_mod_y_offset(3, 0, 0); remoboxes_acknowledge(); rboxes_free(); }
// 08111368 void flashback_2() { prev_quest_mode = 1; init_vars(); bag_809A2DC(); sub_809A2A4(); if (questlog_active_at_cursor()) { sub_8111274(flashback_cursor, 0); hm_phase_1 = &hmp1_8111038; set_callback2(&c2_080572A8); } else { sub_8111274(flashback_cursor, 1); warp_in_metadata(); hm_phase_1 = &hmp1_8111000; set_callback2(&c2_0805726C); } }
void region_select_load(void) { pdex_vram_setup(); pdex_alloc_memory(); region_select_load_gfx(); task_add(region_loop, 0); set_callback2(pdex_cb_handler); }
// 080804AC void c2_exit_battle_switch() { if (trainerbattle_battle_type == 9) { if ((var_800D = battle_exit_is_player_defeat(bc_bs_followup_bc_func_index))) { if (battle_unknown & 1 == 0) { // this is not a mock battle sp000_heal_pokemon(); } else { set_callback2(&c2_whiteout); return; } } } else if (trainerbattle_flag_id == 0x400) { set_callback2(&c2_exit_to_overworld_1_continue_scripts_restart_music); return; } set_callback2(&c2_exit_to_overworld_1_continue_scripts_restart_music); sp18F_trainerflag_opponent_set(); prev_quest_transcriber(); }
bool sm_pdex_init(void) { if (pal_fade_control.active) return false; audioDampenMaybe(); sav1_secure_increment(0x29); // this is something the original dex routine does, probably for statistics /* maybe clean up safari stuff here if necessary */ overworld_free_bgmaps(); malloc_init((void *)0x2000000, 0x1C000); set_callback2(region_select_load); return true; }
// 080EDBE8 void intro_end(struct intro *in) { if (in->field4 == 0) { sub_08070424(0, 0, 0x400); in->field4 = 1; } else if (in->field4 == 1) { if (sub_080F682C() == 0) { task_del(in->tid); free(in); sub_08000B94(2); hblank_handler_set(0); set_callback2(&c2_intro_2); } } }
// 08110F14 void game_continue(task_id c) { quest_logger_filter_disable(); prev_quest_display_number = 0; for (uint i=0; i<4; i++) if (sav1i->questlog[i].active) prev_quest_display_number++; if (prev_quest_display_number > 0) { help_system_enabled = 0; flashback(); } else set_callback2(&c2_8056938); task_del(c); }
u8 read_recorded_battle_byte(u8 bank) { u16* curr_byte = &no_of_recorded_bytes[bank]; u8 read_byte = battle_record[bank].action[*curr_byte]; if (*curr_byte > 663 || read_byte == 0xFF) { battle_outcome = var_800D_lastresult = 5; pal_fade_control_reset_maybe(); fadescreen_related(-1, 0, 0, 0x10, 0); set_callback2(&quit_recorded_battle); } else { *curr_byte += 1; if (read_byte > 4) { struct recording_evo mega_evo; *(u8*) (&mega_evo) = read_byte; new_battlestruct->mega_related.user_trigger = mega_evo.evo_trigger; read_byte = mega_evo.action; } } return read_byte; }
void region_loop(u8 tid) { (void)tid; switch (pokedex_context->state) { case 0: bgid_send_tilemap(2); for (u8 i = 0; i < 7; ++i) { rboxid_clear_pixels(i, 0); rboxid_print(i, FONT_DEX_STD, region_text_x_offset[i], region_text_y_offset[i], &pdex_text_color, 0, pdex_str_regions[i + 1]); rboxid_update_tilemap_and_tileset(i); } region_load_border(); region_load_icon_palettes(); for (u8 i = 0; i < 21; ++i) region_load_icon(i); palette_bg_faded_fill_black(); pokedex_context->state++; break; case 1: gpu_sync_bg_show(0); gpu_sync_bg_hide(1); gpu_sync_bg_hide(3); gpu_sync_bg_show(2); fade_screen(0xFFFFFFFF, PDEX_FADEIN_SPD, 16, 0, 0x0000); pokedex_context->state++; break; case 2: if (!pal_fade_control.active) pokedex_context->state++; break; case 3: switch (super.buttons_new) { case KEY_RIGHT: if (pokedex_context->region_selected < 6) { pokedex_context->region_selected++; m4aSongNumStart(101); } break; case KEY_DOWN: if (pokedex_context->region_selected < 3) { pokedex_context->region_selected += 3; m4aSongNumStart(101); } break; case KEY_LEFT: if (pokedex_context->region_selected > 0) { pokedex_context->region_selected--; m4aSongNumStart(101); } break; case KEY_UP: if ((pokedex_context->region_selected > 2) && (pokedex_context->region_selected < 6)) { pokedex_context->region_selected -= 3; m4aSongNumStart(101); } break; case KEY_A: fade_screen(0xFFFFFFFF, PDEX_FADEIN_SPD, 0, 16, 0x0000); pokedex_context->state = 10; m4aSongNumStart(5); break; case KEY_B: fade_screen(0xFFFFFFFF, PDEX_FADEIN_SPD, 0, 16, 0x0000); pokedex_context->state = 11; m4aSongNumStart(601); default: break; } break; case 10: if (!pal_fade_control.active) { task_del(tid); pdex_vram_free_bgmaps(); pokedex_context->cursor_position_top = region_to_dex[pokedex_context->region_selected]; set_callback2(pdex_load); } break; case 11: if (!pal_fade_control.active) { task_del(tid); pdex_free_memory(); set_callback2(c2_overworld_switch_start_menu); set_callback1(c1_overworld); } break; default: break; } }