cinnabargym.asm 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473
  1. CinnabarGymScript:
  2. call CinnabarGymScript_75759
  3. call EnableAutoTextBoxDrawing
  4. ld hl, CinnabarGymScriptPointers
  5. ld a, [wCinnabarGymCurScript]
  6. jp CallFunctionInTable
  7. CinnabarGymScript_75759:
  8. ld hl, wCurrentMapScriptFlags
  9. bit 6, [hl]
  10. res 6, [hl]
  11. push hl
  12. call nz, CinnabarGymScript_75772
  13. pop hl
  14. bit 5, [hl]
  15. res 5, [hl]
  16. call nz, UpdateCinnabarGymGateTileBlocks
  17. ResetEvent EVENT_2A7
  18. ret
  19. CinnabarGymScript_75772:
  20. ld hl, Gym7CityName
  21. ld de, Gym7LeaderName
  22. jp LoadGymLeaderAndCityName
  23. Gym7CityName:
  24. db "CINNABAR ISLAND@"
  25. Gym7LeaderName:
  26. db "BLAINE@"
  27. CinnabarGymScript_75792:
  28. xor a
  29. ld [wJoyIgnore], a
  30. ld [wCinnabarGymCurScript], a
  31. ld [wCurMapScript], a
  32. ld [wOpponentAfterWrongAnswer], a
  33. ret
  34. CinnabarGymScript_757a0:
  35. ld a, [hSpriteIndexOrTextID]
  36. ld [wTrainerHeaderFlagBit], a
  37. ret
  38. CinnabarGymScriptPointers:
  39. dw CinnabarGymScript0
  40. dw CinnabarGymScript1
  41. dw CinnabarGymScript2
  42. dw CinnabarGymScript3
  43. CinnabarGymScript0:
  44. ld a, [wOpponentAfterWrongAnswer]
  45. and a
  46. ret z
  47. ld [H_SPRITEINDEX], a
  48. cp $4
  49. jr nz, .asm_757c3
  50. ld a, PLAYER_DIR_DOWN
  51. ld [wPlayerMovingDirection], a
  52. ld de, MovementData_757d7
  53. jr .asm_757cb
  54. .asm_757c3
  55. ld de, MovementData_757da
  56. ld a, PLAYER_DIR_RIGHT
  57. ld [wPlayerMovingDirection], a
  58. .asm_757cb
  59. call MoveSprite
  60. ld a, $1
  61. ld [wCinnabarGymCurScript], a
  62. ld [wCurMapScript], a
  63. ret
  64. MovementData_757d7:
  65. db NPC_MOVEMENT_LEFT
  66. db NPC_MOVEMENT_UP
  67. db $FF
  68. MovementData_757da:
  69. db NPC_MOVEMENT_LEFT
  70. db $FF
  71. CinnabarGymScript1:
  72. ld a, [wd730]
  73. bit 0, a
  74. ret nz
  75. xor a
  76. ld [wJoyIgnore], a
  77. ld a, [wOpponentAfterWrongAnswer]
  78. ld [wTrainerHeaderFlagBit], a
  79. ld [hSpriteIndexOrTextID], a
  80. jp DisplayTextID
  81. CinnabarGymFlagAction:
  82. predef_jump FlagActionPredef
  83. CinnabarGymScript2:
  84. ld a, [wIsInBattle]
  85. cp $ff
  86. jp z, CinnabarGymScript_75792
  87. ld a, [wTrainerHeaderFlagBit]
  88. ld [$ffdb], a
  89. AdjustEventBit EVENT_BEAT_CINNABAR_GYM_TRAINER_0, 2
  90. ld c, a
  91. ld b, FLAG_TEST
  92. EventFlagAddress hl, EVENT_BEAT_CINNABAR_GYM_TRAINER_0
  93. call CinnabarGymFlagAction
  94. ld a, c
  95. and a
  96. jr nz, .asm_7581b
  97. call WaitForSoundToFinish
  98. ld a, SFX_GO_INSIDE
  99. call PlaySound
  100. call WaitForSoundToFinish
  101. .asm_7581b
  102. ld a, [wTrainerHeaderFlagBit]
  103. ld [$ffdb], a
  104. AdjustEventBit EVENT_BEAT_CINNABAR_GYM_TRAINER_0, 2
  105. ld c, a
  106. ld b, FLAG_SET
  107. EventFlagAddress hl, EVENT_BEAT_CINNABAR_GYM_TRAINER_0
  108. call CinnabarGymFlagAction
  109. ld a, [wTrainerHeaderFlagBit]
  110. sub $2
  111. AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0
  112. ld c, a
  113. ld b, FLAG_SET
  114. EventFlagAddress hl, EVENT_CINNABAR_GYM_GATE0_UNLOCKED
  115. call CinnabarGymFlagAction
  116. call UpdateCinnabarGymGateTileBlocks
  117. xor a
  118. ld [wJoyIgnore], a
  119. ld [wOpponentAfterWrongAnswer], a
  120. ld a, $0
  121. ld [wCinnabarGymCurScript], a
  122. ld [wCurMapScript], a
  123. ret
  124. CinnabarGymScript3:
  125. ld a, [wIsInBattle]
  126. cp $ff
  127. jp z, CinnabarGymScript_75792
  128. ld a, $f0
  129. ld [wJoyIgnore], a
  130. CinnabarGymScript3_75857:
  131. ld a, $a
  132. ld [hSpriteIndexOrTextID], a
  133. call DisplayTextID
  134. SetEvent EVENT_BEAT_BLAINE
  135. lb bc, TM_38, 1
  136. call GiveItem
  137. jr nc, .BagFull
  138. ld a, $b
  139. ld [hSpriteIndexOrTextID], a
  140. call DisplayTextID
  141. SetEvent EVENT_GOT_TM38
  142. jr .asm_75880
  143. .BagFull
  144. ld a, $c
  145. ld [hSpriteIndexOrTextID], a
  146. call DisplayTextID
  147. .asm_75880
  148. ld hl, wObtainedBadges
  149. set 6, [hl]
  150. ld hl, wBeatGymFlags
  151. set 6, [hl]
  152. ; deactivate gym trainers
  153. SetEventRange EVENT_BEAT_CINNABAR_GYM_TRAINER_0, EVENT_BEAT_CINNABAR_GYM_TRAINER_6
  154. ld hl, wCurrentMapScriptFlags
  155. set 5, [hl]
  156. jp CinnabarGymScript_75792
  157. CinnabarGymTextPointers:
  158. dw CinnabarGymText1
  159. dw CinnabarGymText2
  160. dw CinnabarGymText3
  161. dw CinnabarGymText4
  162. dw CinnabarGymText5
  163. dw CinnabarGymText6
  164. dw CinnabarGymText7
  165. dw CinnabarGymText8
  166. dw CinnabarGymText9
  167. dw BlaineBadgeText
  168. dw ReceivedTM38Text
  169. dw TM38NoRoomText
  170. CinnabarGymScript_758b7:
  171. ld a, [hSpriteIndexOrTextID]
  172. ld [wSpriteIndex], a
  173. call EngageMapTrainer
  174. call InitBattleEnemyParameters
  175. ld hl, wd72d
  176. set 6, [hl]
  177. set 7, [hl]
  178. ld a, [wSpriteIndex]
  179. cp $1
  180. jr z, .asm_758d4
  181. ld a, $2
  182. jr .asm_758d6
  183. .asm_758d4
  184. ld a, $3
  185. .asm_758d6
  186. ld [wCinnabarGymCurScript], a
  187. ld [wCurMapScript], a
  188. jp TextScriptEnd
  189. CinnabarGymText1:
  190. TX_ASM
  191. CheckEvent EVENT_BEAT_BLAINE
  192. jr z, .asm_d9332
  193. CheckEventReuseA EVENT_GOT_TM38
  194. jr nz, .asm_3012f
  195. call z, CinnabarGymScript3_75857
  196. call DisableWaitingAfterTextDisplay
  197. jp TextScriptEnd
  198. .asm_3012f
  199. ld hl, BlaineFireBlastText
  200. call PrintText
  201. jp TextScriptEnd
  202. .asm_d9332
  203. ld hl, BlaineBattleText
  204. call PrintText
  205. ld hl, BlaineEndBattleText
  206. ld de, BlaineEndBattleText
  207. call SaveEndBattleTextPointers
  208. ld a, $7
  209. ld [wGymLeaderNo], a
  210. jp CinnabarGymScript_758b7
  211. BlaineBattleText:
  212. TX_FAR _BlaineBattleText
  213. db "@"
  214. BlaineEndBattleText:
  215. TX_FAR _BlaineEndBattleText
  216. TX_SFX_KEY_ITEM ; actually plays the second channel of SFX_BALL_POOF due to the wrong music bank being loaded
  217. TX_WAIT
  218. db "@"
  219. BlaineFireBlastText:
  220. TX_FAR _BlaineFireBlastText
  221. db "@"
  222. BlaineBadgeText:
  223. TX_FAR _BlaineBadgeText
  224. db "@"
  225. ReceivedTM38Text:
  226. TX_FAR _ReceivedTM38Text
  227. TX_SFX_ITEM_1
  228. TX_FAR _TM38ExplanationText
  229. db "@"
  230. TM38NoRoomText:
  231. TX_FAR _TM38NoRoomText
  232. db "@"
  233. CinnabarGymText2:
  234. TX_ASM
  235. call CinnabarGymScript_757a0
  236. CheckEvent EVENT_BEAT_CINNABAR_GYM_TRAINER_0
  237. jr nz, .asm_46bb4
  238. ld hl, CinnabarGymText_7595f
  239. call PrintText
  240. ld hl, CinnabarGymText_75964
  241. ld de, CinnabarGymText_75964
  242. call SaveEndBattleTextPointers
  243. jp CinnabarGymScript_758b7
  244. .asm_46bb4
  245. ld hl, CinnabarGymText_75969
  246. call PrintText
  247. jp TextScriptEnd
  248. CinnabarGymText_7595f:
  249. TX_FAR _CinnabarGymText_7595f
  250. db "@"
  251. CinnabarGymText_75964:
  252. TX_FAR _CinnabarGymText_75964
  253. db "@"
  254. CinnabarGymText_75969:
  255. TX_FAR _CinnabarGymText_75969
  256. db "@"
  257. CinnabarGymText3:
  258. TX_ASM
  259. call CinnabarGymScript_757a0
  260. CheckEvent EVENT_BEAT_CINNABAR_GYM_TRAINER_1
  261. jr nz, .asm_4b406
  262. ld hl, CinnabarGymText_75994
  263. call PrintText
  264. ld hl, CinnabarGymText_75999
  265. ld de, CinnabarGymText_75999
  266. call SaveEndBattleTextPointers
  267. jp CinnabarGymScript_758b7
  268. .asm_4b406
  269. ld hl, CinnabarGymText_7599e
  270. call PrintText
  271. jp TextScriptEnd
  272. CinnabarGymText_75994:
  273. TX_FAR _CinnabarGymText_75994
  274. db "@"
  275. CinnabarGymText_75999:
  276. TX_FAR _CinnabarGymText_75999
  277. db "@"
  278. CinnabarGymText_7599e:
  279. TX_FAR _CinnabarGymText_7599e
  280. db "@"
  281. CinnabarGymText4:
  282. TX_ASM
  283. call CinnabarGymScript_757a0
  284. CheckEvent EVENT_BEAT_CINNABAR_GYM_TRAINER_2
  285. jr nz, .asm_c0673
  286. ld hl, CinnabarGymText_759c9
  287. call PrintText
  288. ld hl, CinnabarGymText_759ce
  289. ld de, CinnabarGymText_759ce
  290. call SaveEndBattleTextPointers
  291. jp CinnabarGymScript_758b7
  292. .asm_c0673
  293. ld hl, CinnabarGymText_759d3
  294. call PrintText
  295. jp TextScriptEnd
  296. CinnabarGymText_759c9:
  297. TX_FAR _CinnabarGymText_759c9
  298. db "@"
  299. CinnabarGymText_759ce:
  300. TX_FAR _CinnabarGymText_759ce
  301. db "@"
  302. CinnabarGymText_759d3:
  303. TX_FAR _CinnabarGymText_759d3
  304. db "@"
  305. CinnabarGymText5:
  306. TX_ASM
  307. call CinnabarGymScript_757a0
  308. CheckEvent EVENT_BEAT_CINNABAR_GYM_TRAINER_3
  309. jr nz, .asm_5cfd7
  310. ld hl, CinnabarGymText_759fe
  311. call PrintText
  312. ld hl, CinnabarGymText_75a03
  313. ld de, CinnabarGymText_75a03
  314. call SaveEndBattleTextPointers
  315. jp CinnabarGymScript_758b7
  316. .asm_5cfd7
  317. ld hl, CinnabarGymText_75a08
  318. call PrintText
  319. jp TextScriptEnd
  320. CinnabarGymText_759fe:
  321. TX_FAR _CinnabarGymText_759fe
  322. db "@"
  323. CinnabarGymText_75a03:
  324. TX_FAR _CinnabarGymText_75a03
  325. db "@"
  326. CinnabarGymText_75a08:
  327. TX_FAR _CinnabarGymText_75a08
  328. db "@"
  329. CinnabarGymText6:
  330. TX_ASM
  331. call CinnabarGymScript_757a0
  332. CheckEvent EVENT_BEAT_CINNABAR_GYM_TRAINER_4
  333. jr nz, .asm_776b4
  334. ld hl, CinnabarGymText_75a33
  335. call PrintText
  336. ld hl, CinnabarGymText_75a38
  337. ld de, CinnabarGymText_75a38
  338. call SaveEndBattleTextPointers
  339. jp CinnabarGymScript_758b7
  340. .asm_776b4
  341. ld hl, CinnabarGymText_75a3d
  342. call PrintText
  343. jp TextScriptEnd
  344. CinnabarGymText_75a33:
  345. TX_FAR _CinnabarGymText_75a33
  346. db "@"
  347. CinnabarGymText_75a38:
  348. TX_FAR _CinnabarGymText_75a38
  349. db "@"
  350. CinnabarGymText_75a3d:
  351. TX_FAR _CinnabarGymText_75a3d
  352. db "@"
  353. CinnabarGymText7:
  354. TX_ASM
  355. call CinnabarGymScript_757a0
  356. CheckEvent EVENT_BEAT_CINNABAR_GYM_TRAINER_5
  357. jr nz, .asm_2f755
  358. ld hl, CinnabarGymText_75a68
  359. call PrintText
  360. ld hl, CinnabarGymText_75a6d
  361. ld de, CinnabarGymText_75a6d
  362. call SaveEndBattleTextPointers
  363. jp CinnabarGymScript_758b7
  364. .asm_2f755
  365. ld hl, CinnabarGymText_75a72
  366. call PrintText
  367. jp TextScriptEnd
  368. CinnabarGymText_75a68:
  369. TX_FAR _CinnabarGymText_75a68
  370. db "@"
  371. CinnabarGymText_75a6d:
  372. TX_FAR _CinnabarGymText_75a6d
  373. db "@"
  374. CinnabarGymText_75a72:
  375. TX_FAR _CinnabarGymText_75a72
  376. db "@"
  377. CinnabarGymText8:
  378. TX_ASM
  379. call CinnabarGymScript_757a0
  380. CheckEvent EVENT_BEAT_CINNABAR_GYM_TRAINER_6
  381. jr nz, .asm_d87be
  382. ld hl, CinnabarGymText_75a9d
  383. call PrintText
  384. ld hl, CinnabarGymText_75aa2
  385. ld de, CinnabarGymText_75aa2
  386. call SaveEndBattleTextPointers
  387. jp CinnabarGymScript_758b7
  388. .asm_d87be
  389. ld hl, CinnabarGymText_75aa7
  390. call PrintText
  391. jp TextScriptEnd
  392. CinnabarGymText_75a9d:
  393. TX_FAR _CinnabarGymText_75a9d
  394. db "@"
  395. CinnabarGymText_75aa2:
  396. TX_FAR _CinnabarGymText_75aa2
  397. db "@"
  398. CinnabarGymText_75aa7:
  399. TX_FAR _CinnabarGymText_75aa7
  400. db "@"
  401. CinnabarGymText9:
  402. TX_ASM
  403. CheckEvent EVENT_BEAT_BLAINE
  404. jr nz, .asm_627d9
  405. ld hl, CinnabarGymText_75ac2
  406. jr .asm_0b11d
  407. .asm_627d9
  408. ld hl, CinnabarGymText_75ac7
  409. .asm_0b11d
  410. call PrintText
  411. jp TextScriptEnd
  412. CinnabarGymText_75ac2:
  413. TX_FAR _CinnabarGymText_75ac2
  414. db "@"
  415. CinnabarGymText_75ac7:
  416. TX_FAR _CinnabarGymText_75ac7
  417. db "@"