123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- #include "pokedex_common.h"
- #include <constants/pkmns.h>
- #include <pokeagb/pokeagb.h>
-
- const u16 pdex_text_pal[] = {rgb5(255, 0, 255), rgb5(255, 255, 255), rgb5(0, 0, 0), rgb5(255, 0, 255),
- rgb5(255, 0, 255), rgb5(255, 0, 255), rgb5(255, 0, 255), rgb5(255, 0, 255),
- rgb5(255, 0, 255), rgb5(255, 0, 255), rgb5(255, 0, 255), rgb5(255, 0, 255),
- rgb5(255, 0, 255), rgb5(255, 0, 255), rgb5(255, 0, 255), rgb5(255, 0, 255)};
-
- const struct BgConfig pdex_bg_config[4] = {
- {
- .padding = 0,
- .b_padding = 0,
- .priority = 0,
- .palette = 0,
- .size = 0,
- .map_base = 29,
- .character_base = 0,
- .bgid = 0,
- },
- {
- .padding = 0,
- .b_padding = 0,
- .priority = 1,
- .palette = 0,
- .size = 0,
- .map_base = 28,
- .character_base = 0,
- .bgid = 1,
- },
- {
- .padding = 0,
- .b_padding = 0,
- .priority = 2,
- .palette = 0,
- .size = 0,
- .map_base = 30,
- .character_base = 3,
- .bgid = 2,
- },
- {
- .padding = 0,
- .b_padding = 0,
- .priority = 3,
- .palette = 0,
- .size = 1,
- .map_base = 31,
- .character_base = 3,
- .bgid = 3,
- },
- };
-
- struct DexForm pdex_forms[FORM_COUNT] =
- {
- {.index = 19, .forms = {{814, PKMN_ALOLA_RATTFRATZ, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
- {.index = 20, .forms = {{815, PKMN_ALOLA_RATIKARL, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
- {.index = 26, .forms = {{816, PKMN_ALOLA_RAICHU, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
- {.index = 27, .forms = {{817, PKMN_ALOLA_SANDAN, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
- {.index = 28, .forms = {{818, PKMN_ALOLA_SANDAMER, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
- {.index = 37, .forms = {{819, PKMN_ALOLA_VULPIX, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
- {.index = 38, .forms = {{820, PKMN_ALOLA_VULNONA, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
- {.index = 50, .forms = {{821, PKMN_ALOLA_DIGDA, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
- {.index = 51, .forms = {{822, PKMN_ALOLA_DIGDRI, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
- {.index = 52, .forms = {{823, PKMN_ALOLA_MAUZI, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
- {.index = 53, .forms = {{824, PKMN_ALOLA_SNOBILIKAT, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
- {.index = 74, .forms = {{825, PKMN_ALOLA_KLEINSTEIN, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
- {.index = 75, .forms = {{826, PKMN_ALOLA_GEOROK, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
- {.index = 76, .forms = {{827, PKMN_ALOLA_GEOWAZ, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
- {.index = 88, .forms = {{828, PKMN_ALOLA_SLEIMA, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
- {.index = 89, .forms = {{829, PKMN_ALOLA_SLEIMOK, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
- {.index = 103, .forms = {{830, PKMN_ALOLA_KOKOWEI, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
- {.index = 105, .forms = {{831, PKMN_ALOLA_KNOGGA, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
- {.index = 0xFFFF, .forms = {{0xFFFF, 0xFFFF, FORM_END}}},
- };
-
- const struct OamData pdex_oam_pkmn = {
- .affine_mode = 0,
- .obj_mode = 0,
- .mosaic = false,
- .shape = 0,
- .size = 3,
- };
-
- struct TextColor pdex_text_color = {0, 1, 2};
-
- void pdex_vblank_handler(void) {
- gpu_sprites_upload();
- copy_queue_process();
- gpu_pal_upload();
- }
-
- u8 pstr_lines(pchar *str) {
- u8 lines = 1;
- while (*str != 0xFF) {
- if (*str == 0xFE)
- lines++;
- str++;
- }
- return lines;
- }
-
- void pdex_cb_handler(void) {
- if (pal_fade_control.active)
- process_palfade();
- else {
- task_exec();
- objc_exec();
- obj_sync_superstate();
- tilemaps_sync();
- remoboxes_upload_tilesets();
- }
- }
-
- void pdex_vram_free_bgmaps(void) {
- for (u8 i = 0; i < 3; ++i) {
- void *tmap = bgid_get_tilemap(i);
- if (tmap != NULL) {
- free(tmap);
- bgid_nullify_tilemap(i);
- }
- }
- }
-
- struct PdexLookup *pdex_fill_lookup(u16 dexIndex) {
- u16 species = pokedex_index_to_species(dexIndex);
- pokedex_context->lookup[dexIndex].species = species;
- pokedex_context->lookup[dexIndex].seen = dex_flag_pokedex_index(dexIndex, DEX_FLAG_CHECK_SEEN);
- pokedex_context->lookup[dexIndex].caught = dex_flag_pokedex_index(dexIndex, DEX_FLAG_CHECK_CAUGHT);
- return &pokedex_context->lookup[dexIndex];
- }
-
- struct PdexLookup *pdex_lazy_lookup_entry(u16 dexIndex) {
- if (pokedex_context->lookup[dexIndex].species != -1) {
- return &pokedex_context->lookup[dexIndex];
- } else {
- return pdex_fill_lookup(dexIndex);
- }
- }
-
- void pdex_free_memory(void) {
- if (pokedex_context->lookup != NULL)
- free(pokedex_context->lookup);
- free(pokedex_context);
- }
-
- void pdex_alloc_memory(void) {
- pokedex_context = malloc_and_clear(sizeof(struct PdexCtx));
- pokedex_context->lookup = malloc_and_clear((PDEX_LAST_ENTRY + 1) * sizeof(struct PdexLookup));
- memset(pokedex_context->lookup, 0xFF, (PDEX_LAST_ENTRY + 1) * sizeof(struct PdexLookup));
- }
-
- void pdex_vram_allocate_bgmaps(void) {
- bgid_set_tilemap(0, malloc(0x800));
- bgid_set_tilemap(1, malloc(0x800));
- bgid_set_tilemap(2, malloc(0x800));
- }
-
- void pdex_vram_setup(void) {
- vblank_handler_set(NULL);
- pal_fade_control_and_dead_struct_reset();
- gpu_tile_bg_drop_all_sets(true);
- obj_and_aux_reset_all();
- gpu_tile_obj_tags_reset();
- gpu_pal_allocator_reset();
- rboxes_free();
- tasks_init();
- bg_vram_setup(0, &pdex_bg_config[0], 4);
- u32 set = 0;
- CpuFastSet((void *)&set, (void *)0x06000000, CPUModeFS(0x10000, CPUFSSET));
-
- 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);
-
- vblank_handler_set(pdex_vblank_handler);
- interrupts_enable(INTERRUPT_VBLANK);
- pdex_vram_allocate_bgmaps();
- }
|