Nessuna descrizione

battle_music_lookup.c 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. #include <songlist.h>
  2. #include <game_engine.h>
  3. #include <bpre.h>
  4. #include <battle_structs.h>
  5. #include <battle_common.h>
  6. #include <pokemon.h>
  7. #include <agb_debug.h>
  8. #include <sound.h>
  9. #include <config.h>
  10. #define SONG_ID_SKIP_PLAY 0xFFFF
  11. #define skip_song flag_check(FLAG_SKIP_BATTLE_MUSIC)
  12. u16 mhk_intro_music_id_to_song(u8 introid) {
  13. u16 res = 0;
  14. switch (introid) {
  15. case 0:
  16. case 4:
  17. case 5:
  18. case 8:
  19. case 10:
  20. case 11:
  21. case 12:
  22. case 13:
  23. res = SEQ_FRLG_E_3;
  24. break;
  25. case 1:
  26. case 2:
  27. case 9:
  28. res = SEQ_FRLG_E_2;
  29. break;
  30. default:
  31. res = SEQ_FRLG_E_3;
  32. break;
  33. }
  34. return res;
  35. }
  36. u16 mhk_song_id_for_battle(void) {
  37. u16 res = 0;
  38. if (battle_type_flags._battle_unk_3) {
  39. res = SEQ_BGM_VS_POKE;
  40. } else if (battle_type_flags._battle_unk_5 || battle_type_flags.battle_link) {
  41. res = SEQ_BGM_VS_RSE;
  42. } else if (battle_type_flags.battle_trainer) {
  43. switch (trainer_data[trainerbattle_flag_id].trainer_class) {
  44. case 90:
  45. res = SEQ_BGM_VS_CHAMP;
  46. break;
  47. case 84:
  48. case 87:
  49. res = SEQ_BGM_VS_LEADER;
  50. break;
  51. default:
  52. res = SEQ_BGM_VS_TRAINER;
  53. break;
  54. }
  55. } else {
  56. res = SEQ_BGM_VS_POKE;
  57. }
  58. return res;
  59. }
  60. // replaces 0x08044090
  61. void mhk_current_map_music_set_default_for_battle(u16 songid) {
  62. if (skip_song)
  63. return;
  64. if (songid == 0) {
  65. songid = mhk_song_id_for_battle();
  66. if (songid != SONG_ID_SKIP_PLAY) {
  67. current_map_music_set_to_zero();
  68. MPlayAllStop();
  69. current_map_music_set(songid);
  70. }
  71. } else {
  72. current_map_music_set_to_zero();
  73. MPlayAllStop();
  74. current_map_music_set(songid);
  75. }
  76. }
  77. void mhk_trainer_battle_play_defeat(void) {
  78. if (skip_song)
  79. return;
  80. u16 song = 0;
  81. switch (trainer_data[trainerbattle_flag_id].trainer_class) {
  82. case 84:
  83. case 90:
  84. song = SEQ_BGM_VIC_LEADER;
  85. break;
  86. default:
  87. song = SEQ_BGM_VIC_TRAINER;
  88. break;
  89. }
  90. song_play_for_text(song);
  91. }
  92. void mhk_wild_poke_def_music(void) {
  93. if (!skip_song) {
  94. song_play_for_text(SEQ_BGM_VIC_POKE);
  95. }
  96. }
  97. // this seems to work by special 0x138 only
  98. u16 mhk_species_to_song(u16 species) {
  99. u16 res = 0;
  100. switch (species) {
  101. case POKE_MEWTWO:
  102. res = SEQ_BGM_VS_MEWTWO;
  103. break;
  104. case POKE_ARTICUNO:
  105. case POKE_ZAPDOS:
  106. case POKE_MOLTRES:
  107. case POKE_LUGIA:
  108. case POKE_HOOH:
  109. res = SEQ_BGM_VS_LEG1;
  110. break;
  111. case POKE_DEOXYS:
  112. res = SEQ_BGM_VS_DEOXYS;
  113. break;
  114. default:
  115. res = SEQ_BGM_VS_RSE;
  116. break;
  117. }
  118. return res;
  119. }
  120. // hook from loc_80159D0
  121. void mhk_fadeout(void) {
  122. void (*sub_8070E44)(u8) = (void (*)(u8))(0x08070E44|1);
  123. sub_8070E44(3); // no idea what these values do
  124. if (!skip_song) {
  125. current_map_music_fadeout(5); // same here
  126. }
  127. }