No Description

pokedex_common.c 6.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. #include "pokedex_common.h"
  2. #include <constants/pkmns.h>
  3. #include <pokeagb/pokeagb.h>
  4. const u16 pdex_text_pal[] = {rgb5(255, 0, 255), rgb5(255, 255, 255), rgb5(0, 0, 0), rgb5(255, 0, 255),
  5. rgb5(255, 0, 255), rgb5(255, 0, 255), rgb5(255, 0, 255), rgb5(255, 0, 255),
  6. rgb5(255, 0, 255), rgb5(255, 0, 255), rgb5(255, 0, 255), rgb5(255, 0, 255),
  7. rgb5(255, 0, 255), rgb5(255, 0, 255), rgb5(255, 0, 255), rgb5(255, 0, 255)};
  8. const struct BgConfig pdex_bg_config[4] = {
  9. {
  10. .padding = 0,
  11. .b_padding = 0,
  12. .priority = 0,
  13. .palette = 0,
  14. .size = 0,
  15. .map_base = 29,
  16. .character_base = 0,
  17. .bgid = 0,
  18. },
  19. {
  20. .padding = 0,
  21. .b_padding = 0,
  22. .priority = 1,
  23. .palette = 0,
  24. .size = 0,
  25. .map_base = 28,
  26. .character_base = 0,
  27. .bgid = 1,
  28. },
  29. {
  30. .padding = 0,
  31. .b_padding = 0,
  32. .priority = 2,
  33. .palette = 0,
  34. .size = 0,
  35. .map_base = 30,
  36. .character_base = 3,
  37. .bgid = 2,
  38. },
  39. {
  40. .padding = 0,
  41. .b_padding = 0,
  42. .priority = 3,
  43. .palette = 0,
  44. .size = 1,
  45. .map_base = 31,
  46. .character_base = 3,
  47. .bgid = 3,
  48. },
  49. };
  50. struct DexForm pdex_forms[FORM_COUNT] =
  51. {
  52. {.index = 19, .forms = {{814, PKMN_ALOLA_RATTFRATZ, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
  53. {.index = 20, .forms = {{815, PKMN_ALOLA_RATIKARL, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
  54. {.index = 26, .forms = {{816, PKMN_ALOLA_RAICHU, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
  55. {.index = 27, .forms = {{817, PKMN_ALOLA_SANDAN, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
  56. {.index = 28, .forms = {{818, PKMN_ALOLA_SANDAMER, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
  57. {.index = 37, .forms = {{819, PKMN_ALOLA_VULPIX, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
  58. {.index = 38, .forms = {{820, PKMN_ALOLA_VULNONA, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
  59. {.index = 50, .forms = {{821, PKMN_ALOLA_DIGDA, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
  60. {.index = 51, .forms = {{822, PKMN_ALOLA_DIGDRI, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
  61. {.index = 52, .forms = {{823, PKMN_ALOLA_MAUZI, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
  62. {.index = 53, .forms = {{824, PKMN_ALOLA_SNOBILIKAT, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
  63. {.index = 74, .forms = {{825, PKMN_ALOLA_KLEINSTEIN, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
  64. {.index = 75, .forms = {{826, PKMN_ALOLA_GEOROK, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
  65. {.index = 76, .forms = {{827, PKMN_ALOLA_GEOWAZ, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
  66. {.index = 88, .forms = {{828, PKMN_ALOLA_SLEIMA, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
  67. {.index = 89, .forms = {{829, PKMN_ALOLA_SLEIMOK, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
  68. {.index = 103, .forms = {{830, PKMN_ALOLA_KOKOWEI, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
  69. {.index = 105, .forms = {{831, PKMN_ALOLA_KNOGGA, ALOLA}, {0xFFFF, 0xFFFF, FORM_END}}},
  70. {.index = 0xFFFF, .forms = {{0xFFFF, 0xFFFF, FORM_END}}},
  71. };
  72. const struct OamData pdex_oam_pkmn = {
  73. .affine_mode = 0,
  74. .obj_mode = 0,
  75. .mosaic = false,
  76. .shape = 0,
  77. .size = 3,
  78. };
  79. struct TextColor pdex_text_color = {0, 1, 2};
  80. void pdex_vblank_handler(void) {
  81. gpu_sprites_upload();
  82. copy_queue_process();
  83. gpu_pal_upload();
  84. }
  85. u8 pstr_lines(pchar *str) {
  86. u8 lines = 1;
  87. while (*str != 0xFF) {
  88. if (*str == 0xFE)
  89. lines++;
  90. str++;
  91. }
  92. return lines;
  93. }
  94. void pdex_cb_handler(void) {
  95. if (pal_fade_control.active)
  96. process_palfade();
  97. else {
  98. task_exec();
  99. objc_exec();
  100. obj_sync_superstate();
  101. tilemaps_sync();
  102. remoboxes_upload_tilesets();
  103. }
  104. }
  105. void pdex_vram_free_bgmaps(void) {
  106. for (u8 i = 0; i < 3; ++i) {
  107. void *tmap = bgid_get_tilemap(i);
  108. if (tmap != NULL) {
  109. free(tmap);
  110. bgid_nullify_tilemap(i);
  111. }
  112. }
  113. }
  114. struct PdexLookup *pdex_fill_lookup(u16 dexIndex) {
  115. u16 species = pokedex_index_to_species(dexIndex);
  116. pokedex_context->lookup[dexIndex].species = species;
  117. pokedex_context->lookup[dexIndex].seen = dex_flag_pokedex_index(dexIndex, DEX_FLAG_CHECK_SEEN);
  118. pokedex_context->lookup[dexIndex].caught = dex_flag_pokedex_index(dexIndex, DEX_FLAG_CHECK_CAUGHT);
  119. return &pokedex_context->lookup[dexIndex];
  120. }
  121. struct PdexLookup *pdex_lazy_lookup_entry(u16 dexIndex) {
  122. if (pokedex_context->lookup[dexIndex].species != -1) {
  123. return &pokedex_context->lookup[dexIndex];
  124. } else {
  125. return pdex_fill_lookup(dexIndex);
  126. }
  127. }
  128. void pdex_free_memory(void) {
  129. if (pokedex_context->lookup != NULL)
  130. free(pokedex_context->lookup);
  131. free(pokedex_context);
  132. }
  133. void pdex_alloc_memory(void) {
  134. pokedex_context = malloc_and_clear(sizeof(struct PdexCtx));
  135. pokedex_context->lookup = malloc_and_clear((PDEX_LAST_ENTRY + 1) * sizeof(struct PdexLookup));
  136. memset(pokedex_context->lookup, 0xFF, (PDEX_LAST_ENTRY + 1) * sizeof(struct PdexLookup));
  137. }
  138. void pdex_vram_allocate_bgmaps(void) {
  139. bgid_set_tilemap(0, malloc(0x800));
  140. bgid_set_tilemap(1, malloc(0x800));
  141. bgid_set_tilemap(2, malloc(0x800));
  142. }
  143. void pdex_vram_setup(void) {
  144. vblank_handler_set(NULL);
  145. pal_fade_control_and_dead_struct_reset();
  146. gpu_tile_bg_drop_all_sets(true);
  147. obj_and_aux_reset_all();
  148. gpu_tile_obj_tags_reset();
  149. gpu_pal_allocator_reset();
  150. rboxes_free();
  151. tasks_init();
  152. bg_vram_setup(0, &pdex_bg_config[0], 4);
  153. u32 set = 0;
  154. CpuFastSet((void *)&set, (void *)0x06000000, CPUModeFS(0x10000, CPUFSSET));
  155. bgid_mod_x_offset(0, 0, 0);
  156. bgid_mod_y_offset(0, 0, 0);
  157. bgid_mod_x_offset(1, 0, 0);
  158. bgid_mod_y_offset(1, 0, 0);
  159. bgid_mod_x_offset(2, 0, 0);
  160. bgid_mod_y_offset(2, 0, 0);
  161. bgid_mod_x_offset(3, 0, 0);
  162. bgid_mod_y_offset(3, 0, 0);
  163. vblank_handler_set(pdex_vblank_handler);
  164. interrupts_enable(INTERRUPT_VBLANK);
  165. pdex_vram_allocate_bgmaps();
  166. }