// 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();
}
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;
}