暫無描述

scene_common.c 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #include <pokeagb/pokeagb.h>
  2. #define CPUFSCPY 0
  3. #define CPUFSSET 1
  4. #define CPUModeFS(size, mode) ((size >> 2) | (mode << 24))
  5. const struct BgConfig scene_default_config[4] = {
  6. {
  7. .padding = 0,
  8. .b_padding = 0,
  9. .priority = 0,
  10. .palette = 0,
  11. .size = 0,
  12. .map_base = 29,
  13. .character_base = 0,
  14. .bgid = 0,
  15. },
  16. {
  17. .padding = 0,
  18. .b_padding = 0,
  19. .priority = 1,
  20. .palette = 0,
  21. .size = 0,
  22. .map_base = 28,
  23. .character_base = 0,
  24. .bgid = 1,
  25. },
  26. {
  27. .padding = 0,
  28. .b_padding = 0,
  29. .priority = 2,
  30. .palette = 0,
  31. .size = 0,
  32. .map_base = 30,
  33. .character_base = 3,
  34. .bgid = 2,
  35. },
  36. {
  37. .padding = 0,
  38. .b_padding = 0,
  39. .priority = 3,
  40. .palette = 0,
  41. .size = 1,
  42. .map_base = 31,
  43. .character_base = 3,
  44. .bgid = 3,
  45. },
  46. };
  47. const struct TextColor scene_default_text_color = {0, 1, 2};
  48. void scene_default_cb_handler(void) {
  49. if (pal_fade_control.active)
  50. process_palfade();
  51. else {
  52. task_exec();
  53. objc_exec();
  54. obj_sync_superstate();
  55. tilemaps_sync();
  56. remoboxes_upload_tilesets();
  57. rboxid_update_tilemap_and_tileset(0);
  58. }
  59. }
  60. void scene_free_bg_maps(void) {
  61. for (u8 i = 0; i < 3; ++i) {
  62. void *tmap = bgid_get_tilemap(i);
  63. if (tmap != NULL) {
  64. free(tmap);
  65. bgid_nullify_tilemap(i);
  66. }
  67. }
  68. }
  69. void scene_vram_init(SuperCallback vblank_handler, const struct BgConfig* config) {
  70. vblank_handler_set(NULL);
  71. pal_fade_control_and_dead_struct_reset();
  72. gpu_tile_bg_drop_all_sets(true);
  73. obj_and_aux_reset_all();
  74. gpu_tile_obj_tags_reset();
  75. gpu_pal_allocator_reset();
  76. rboxes_free();
  77. tasks_init();
  78. bg_vram_setup(0, config, 4);
  79. u32 set = 0;
  80. CpuFastSet((void *)&set, (void *)0x06000000, CPUModeFS(0x10000, CPUFSSET));
  81. bgid_mod_x_offset(0, 0, 0);
  82. bgid_mod_y_offset(0, 0, 0);
  83. bgid_mod_x_offset(1, 0, 0);
  84. bgid_mod_y_offset(1, 0, 0);
  85. bgid_mod_x_offset(2, 0, 0);
  86. bgid_mod_y_offset(2, 0, 0);
  87. bgid_mod_x_offset(3, 0, 0);
  88. bgid_mod_y_offset(3, 0, 0);
  89. vblank_handler_set(vblank_handler);
  90. interrupts_enable(INTERRUPT_VBLANK);
  91. }