Ingen beskrivning

pokedex_common.c 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. #include "pokedex_common.h"
  2. #include <pokeagb/pokeagb.h>
  3. const u16 pdex_text_pal[] = {rgb5(255, 0, 255), rgb5(255, 255, 255), rgb5(0, 0, 0), rgb5(255, 0, 255),
  4. rgb5(255, 0, 255), rgb5(255, 0, 255), rgb5(255, 0, 255), 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. const struct BgConfig pdex_bg_config[4] = {
  8. {
  9. .padding = 0,
  10. .b_padding = 0,
  11. .priority = 0,
  12. .palette = 0,
  13. .size = 0,
  14. .map_base = 29,
  15. .character_base = 0,
  16. .bgid = 0,
  17. },
  18. {
  19. .padding = 0,
  20. .b_padding = 0,
  21. .priority = 1,
  22. .palette = 0,
  23. .size = 0,
  24. .map_base = 28,
  25. .character_base = 0,
  26. .bgid = 1,
  27. },
  28. {
  29. .padding = 0,
  30. .b_padding = 0,
  31. .priority = 2,
  32. .palette = 0,
  33. .size = 0,
  34. .map_base = 30,
  35. .character_base = 3,
  36. .bgid = 2,
  37. },
  38. {
  39. .padding = 0,
  40. .b_padding = 0,
  41. .priority = 3,
  42. .palette = 0,
  43. .size = 1,
  44. .map_base = 31,
  45. .character_base = 3,
  46. .bgid = 3,
  47. },
  48. };
  49. const struct OamData pdex_oam_pkmn = {
  50. .affine_mode = 0,
  51. .obj_mode = 0,
  52. .mosaic = false,
  53. .shape = 0,
  54. .size = 3,
  55. };
  56. struct TextColor pdex_text_color = {0, 1, 2};
  57. void pdex_vblank_handler(void) {
  58. gpu_sprites_upload();
  59. copy_queue_process();
  60. gpu_pal_upload();
  61. }
  62. u8 pstr_lines(pchar *str) {
  63. u8 lines = 1;
  64. while (*str != 0xFF) {
  65. if (*str == 0xFE)
  66. lines++;
  67. str++;
  68. }
  69. return lines;
  70. }
  71. void pdex_cb_handler(void) {
  72. if (pal_fade_control.active)
  73. process_palfade();
  74. else {
  75. task_exec();
  76. objc_exec();
  77. obj_sync_superstate();
  78. tilemaps_sync();
  79. remoboxes_upload_tilesets();
  80. }
  81. }
  82. void pdex_vram_free_bgmaps(void) {
  83. for (u8 i = 0; i < 3; ++i) {
  84. void *tmap = bgid_get_tilemap(i);
  85. if (tmap != NULL) {
  86. free(tmap);
  87. bgid_nullify_tilemap(i);
  88. }
  89. }
  90. }
  91. void pdex_vram_allocate_bgmaps(void) {
  92. bgid_set_tilemap(0, malloc(0x800));
  93. bgid_set_tilemap(1, malloc(0x800));
  94. bgid_set_tilemap(2, malloc(0x800));
  95. }
  96. void pdex_vram_setup(void) {
  97. vblank_handler_set(NULL);
  98. pal_fade_control_and_dead_struct_reset();
  99. gpu_tile_bg_drop_all_sets(true);
  100. obj_and_aux_reset_all();
  101. gpu_tile_obj_tags_reset();
  102. gpu_pal_allocator_reset();
  103. rboxes_free();
  104. tasks_init();
  105. bg_vram_setup(0, &pdex_bg_config[0], 4);
  106. u32 set = 0;
  107. CpuFastSet((void *)&set, (void *)0x06000000, CPUModeFS(0x10000, CPUFSSET));
  108. bgid_mod_x_offset(0, 0, 0);
  109. bgid_mod_y_offset(0, 0, 0);
  110. bgid_mod_x_offset(1, 0, 0);
  111. bgid_mod_y_offset(1, 0, 0);
  112. bgid_mod_x_offset(2, 0, 0);
  113. bgid_mod_y_offset(2, 0, 0);
  114. bgid_mod_x_offset(3, 0, 0);
  115. bgid_mod_y_offset(3, 0, 0);
  116. vblank_handler_set(pdex_vblank_handler);
  117. interrupts_enable(INTERRUPT_VBLANK);
  118. pdex_vram_allocate_bgmaps();
  119. }