oakslab.asm 21 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234
  1. OaksLabScript:
  2. CheckEvent EVENT_PALLET_AFTER_GETTING_POKEBALLS_2
  3. call nz, OaksLabScript_1d076
  4. ld a, $1
  5. ld [wAutoTextBoxDrawingControl], a
  6. xor a
  7. ld [wDoNotWaitForButtonPressAfterDisplayingText], a
  8. ld hl, OaksLabScriptPointers
  9. ld a, [wOaksLabCurScript]
  10. jp CallFunctionInTable
  11. OaksLabScriptPointers:
  12. dw OaksLabScript0
  13. dw OaksLabScript1
  14. dw OaksLabScript2
  15. dw OaksLabScript3
  16. dw OaksLabScript4
  17. dw OaksLabScript5
  18. dw OaksLabScript6
  19. dw OaksLabScript7
  20. dw OaksLabScript8
  21. dw OaksLabScript9
  22. dw OaksLabScript10
  23. dw OaksLabScript11
  24. dw OaksLabScript12
  25. dw OaksLabScript13
  26. dw OaksLabScript14
  27. dw OaksLabScript15
  28. dw OaksLabScript16
  29. dw OaksLabScript17
  30. dw OaksLabScript18
  31. OaksLabScript0:
  32. CheckEvent EVENT_OAK_APPEARED_IN_PALLET
  33. ret z
  34. ld a, [wNPCMovementScriptFunctionNum]
  35. and a
  36. ret nz
  37. ld a, HS_OAKS_LAB_OAK_2
  38. ld [wMissableObjectIndex], a
  39. predef ShowObject
  40. ld hl, wd72e
  41. res 4, [hl]
  42. ld a, $1
  43. ld [wOaksLabCurScript], a
  44. ret
  45. OaksLabScript1:
  46. ld a, $8
  47. ld [H_SPRITEINDEX], a
  48. ld de, OakEntryMovement
  49. call MoveSprite
  50. ld a, $2
  51. ld [wOaksLabCurScript], a
  52. ret
  53. OakEntryMovement:
  54. db NPC_MOVEMENT_UP
  55. db NPC_MOVEMENT_UP
  56. db NPC_MOVEMENT_UP
  57. db $FF
  58. OaksLabScript2:
  59. ld a, [wd730]
  60. bit 0, a
  61. ret nz
  62. ld a, HS_OAKS_LAB_OAK_2
  63. ld [wMissableObjectIndex], a
  64. predef HideObject
  65. ld a, HS_OAKS_LAB_OAK_1
  66. ld [wMissableObjectIndex], a
  67. predef ShowObject
  68. ld a, $3
  69. ld [wOaksLabCurScript], a
  70. ret
  71. OaksLabScript3:
  72. call Delay3
  73. ld hl, wSimulatedJoypadStatesEnd
  74. ld de, PlayerEntryMovementRLE
  75. call DecodeRLEList
  76. dec a
  77. ld [wSimulatedJoypadStatesIndex], a
  78. call StartSimulatingJoypadStates
  79. ld a, $1
  80. ld [H_SPRITEINDEX], a
  81. xor a
  82. ld [hSpriteFacingDirection], a
  83. call SetSpriteFacingDirectionAndDelay
  84. ld a, $5
  85. ld [H_SPRITEINDEX], a
  86. xor a
  87. ld [hSpriteFacingDirection], a
  88. call SetSpriteFacingDirectionAndDelay
  89. ld a, $4
  90. ld [wOaksLabCurScript], a
  91. ret
  92. PlayerEntryMovementRLE:
  93. db D_UP,$8
  94. db $ff
  95. OaksLabScript4:
  96. ld a, [wSimulatedJoypadStatesIndex]
  97. and a
  98. ret nz
  99. SetEvent EVENT_FOLLOWED_OAK_INTO_LAB
  100. SetEvent EVENT_FOLLOWED_OAK_INTO_LAB_2
  101. ld a, $1
  102. ld [H_SPRITEINDEX], a
  103. ld a, SPRITE_FACING_UP
  104. ld [hSpriteFacingDirection], a
  105. call SetSpriteFacingDirectionAndDelay
  106. call UpdateSprites
  107. ld hl, wFlags_D733
  108. res 1, [hl]
  109. call PlayDefaultMusic
  110. ld a, $5
  111. ld [wOaksLabCurScript], a
  112. ret
  113. OaksLabScript5:
  114. ld a, $fc
  115. ld [wJoyIgnore], a
  116. ld a, $11
  117. ld [hSpriteIndexOrTextID], a
  118. call DisplayTextID
  119. call Delay3
  120. ld a, $12
  121. ld [hSpriteIndexOrTextID], a
  122. call DisplayTextID
  123. call Delay3
  124. ld a, $13
  125. ld [hSpriteIndexOrTextID], a
  126. call DisplayTextID
  127. call Delay3
  128. ld a, $14
  129. ld [hSpriteIndexOrTextID], a
  130. call DisplayTextID
  131. SetEvent EVENT_OAK_ASKED_TO_CHOOSE_MON
  132. xor a
  133. ld [wJoyIgnore], a
  134. ld a, $6
  135. ld [wOaksLabCurScript], a
  136. ret
  137. OaksLabScript6:
  138. ld a, [wYCoord]
  139. cp $6
  140. ret nz
  141. ld a, $5
  142. ld [H_SPRITEINDEX], a
  143. xor a ; SPRITE_FACING_DOWN
  144. ld [hSpriteFacingDirection], a
  145. call SetSpriteFacingDirectionAndDelay
  146. ld a, $1
  147. ld [H_SPRITEINDEX], a
  148. xor a
  149. ld [hSpriteFacingDirection], a
  150. call SetSpriteFacingDirectionAndDelay
  151. call UpdateSprites
  152. ld a, $c
  153. ld [hSpriteIndexOrTextID], a
  154. call DisplayTextID
  155. ld a, $1
  156. ld [wSimulatedJoypadStatesIndex], a
  157. ld a, D_UP
  158. ld [wSimulatedJoypadStatesEnd], a
  159. call StartSimulatingJoypadStates
  160. ld a, PLAYER_DIR_UP
  161. ld [wPlayerMovingDirection], a
  162. ld a, $7
  163. ld [wOaksLabCurScript], a
  164. ret
  165. OaksLabScript7:
  166. ld a, [wSimulatedJoypadStatesIndex]
  167. and a
  168. ret nz
  169. call Delay3
  170. ld a, $6
  171. ld [wOaksLabCurScript], a
  172. ret
  173. OaksLabScript8:
  174. ld a, [wPlayerStarter]
  175. cp STARTER1
  176. jr z, .Charmander
  177. cp STARTER2
  178. jr z, .Squirtle
  179. jr .Bulbasaur
  180. .Charmander
  181. ld de, .MiddleBallMovement1
  182. ld a, [wYCoord]
  183. cp $4 ; is the player standing below the table?
  184. jr z, .asm_1ccf3
  185. ld de, .MiddleBallMovement2
  186. jr .asm_1ccf3
  187. .MiddleBallMovement1
  188. db NPC_MOVEMENT_DOWN
  189. db NPC_MOVEMENT_DOWN
  190. db NPC_MOVEMENT_RIGHT
  191. db NPC_MOVEMENT_RIGHT
  192. db NPC_MOVEMENT_RIGHT
  193. db NPC_MOVEMENT_UP
  194. db $FF
  195. .MiddleBallMovement2
  196. db NPC_MOVEMENT_DOWN
  197. db NPC_MOVEMENT_RIGHT
  198. db NPC_MOVEMENT_RIGHT
  199. db NPC_MOVEMENT_RIGHT
  200. db $FF
  201. .Squirtle
  202. ld de, .RightBallMovement1
  203. ld a, [wYCoord]
  204. cp $4 ; is the player standing below the table?
  205. jr z, .asm_1ccf3
  206. ld de, .RightBallMovement2
  207. jr .asm_1ccf3
  208. .RightBallMovement1
  209. db NPC_MOVEMENT_DOWN
  210. db NPC_MOVEMENT_DOWN
  211. db NPC_MOVEMENT_RIGHT
  212. db NPC_MOVEMENT_RIGHT
  213. db NPC_MOVEMENT_RIGHT
  214. db NPC_MOVEMENT_RIGHT
  215. db NPC_MOVEMENT_UP
  216. db $FF
  217. .RightBallMovement2
  218. db NPC_MOVEMENT_DOWN
  219. db NPC_MOVEMENT_RIGHT
  220. db NPC_MOVEMENT_RIGHT
  221. db NPC_MOVEMENT_RIGHT
  222. db NPC_MOVEMENT_RIGHT
  223. db $FF
  224. .Bulbasaur
  225. ld de, .LeftBallMovement1
  226. ld a, [wXCoord]
  227. cp $9 ; is the player standing to the right of the table?
  228. jr nz, .asm_1ccf3
  229. push hl
  230. ld a, $1
  231. ld [H_SPRITEINDEX], a
  232. ld a, $4
  233. ld [H_SPRITEDATAOFFSET], a
  234. call GetPointerWithinSpriteStateData1
  235. push hl
  236. ld [hl], $4c
  237. inc hl
  238. inc hl
  239. ld [hl], $0
  240. pop hl
  241. inc h
  242. ld [hl], $8
  243. inc hl
  244. ld [hl], $9
  245. ld de, .LeftBallMovement2 ; the rival is not currently onscreen, so account for that
  246. pop hl
  247. jr .asm_1ccf3
  248. .LeftBallMovement1
  249. db NPC_MOVEMENT_DOWN
  250. db NPC_MOVEMENT_RIGHT ; not yet terminated!
  251. .LeftBallMovement2
  252. db NPC_MOVEMENT_RIGHT
  253. db $FF
  254. .asm_1ccf3
  255. ld a, $1
  256. ld [H_SPRITEINDEX], a
  257. call MoveSprite
  258. ld a, $9
  259. ld [wOaksLabCurScript], a
  260. ret
  261. OaksLabScript9:
  262. ld a, [wd730]
  263. bit 0, a
  264. ret nz
  265. ld a, $fc
  266. ld [wJoyIgnore], a
  267. ld a, $1
  268. ld [H_SPRITEINDEX], a
  269. ld a, SPRITE_FACING_UP
  270. ld [hSpriteFacingDirection], a
  271. call SetSpriteFacingDirectionAndDelay
  272. ld a, $d
  273. ld [hSpriteIndexOrTextID], a
  274. call DisplayTextID
  275. ld a, [wRivalStarterBallSpriteIndex]
  276. cp $2
  277. jr nz, .asm_1cd28
  278. ld a, HS_STARTER_BALL_1
  279. jr .asm_1cd32
  280. .asm_1cd28
  281. cp $3
  282. jr nz, .asm_1cd30
  283. ld a, HS_STARTER_BALL_2
  284. jr .asm_1cd32
  285. .asm_1cd30
  286. ld a, HS_STARTER_BALL_3
  287. .asm_1cd32
  288. ld [wMissableObjectIndex], a
  289. predef HideObject
  290. call Delay3
  291. ld a, [wRivalStarterTemp]
  292. ld [wRivalStarter], a
  293. ld [wcf91], a
  294. ld [wd11e], a
  295. call GetMonName
  296. ld a, $1
  297. ld [H_SPRITEINDEX], a
  298. ld a, SPRITE_FACING_UP
  299. ld [hSpriteFacingDirection], a
  300. call SetSpriteFacingDirectionAndDelay
  301. ld a, $e
  302. ld [hSpriteIndexOrTextID], a
  303. call DisplayTextID
  304. SetEvent EVENT_GOT_STARTER
  305. xor a
  306. ld [wJoyIgnore], a
  307. ld a, $a
  308. ld [wOaksLabCurScript], a
  309. ret
  310. OaksLabScript10:
  311. ld a, [wYCoord]
  312. cp $6
  313. ret nz
  314. ld a, $1
  315. ld [H_SPRITEINDEX], a
  316. xor a ; SPRITE_FACING_DOWN
  317. ld [hSpriteFacingDirection], a
  318. call SetSpriteFacingDirectionAndDelay
  319. ld a, PLAYER_DIR_UP
  320. ld [wPlayerMovingDirection], a
  321. ld c, BANK(Music_MeetRival)
  322. ld a, MUSIC_MEET_RIVAL
  323. call PlayMusic
  324. ld a, $f
  325. ld [hSpriteIndexOrTextID], a
  326. call DisplayTextID
  327. ld a, $1
  328. ld [hNPCPlayerRelativePosPerspective], a
  329. ld a, $1
  330. swap a
  331. ld [hNPCSpriteOffset], a
  332. predef CalcPositionOfPlayerRelativeToNPC
  333. ld a, [hNPCPlayerYDistance]
  334. dec a
  335. ld [hNPCPlayerYDistance], a
  336. predef FindPathToPlayer
  337. ld de, wNPCMovementDirections2
  338. ld a, $1
  339. ld [H_SPRITEINDEX], a
  340. call MoveSprite
  341. ld a, $b
  342. ld [wOaksLabCurScript], a
  343. ret
  344. OaksLabScript11:
  345. ld a, [wd730]
  346. bit 0, a
  347. ret nz
  348. ; define which team rival uses, and fight it
  349. ld a, OPP_SONY1
  350. ld [wCurOpponent], a
  351. ld a, [wRivalStarter]
  352. cp STARTER2
  353. jr nz, .NotSquirtle
  354. ld a, $1
  355. jr .done
  356. .NotSquirtle
  357. cp STARTER3
  358. jr nz, .Charmander
  359. ld a, $2
  360. jr .done
  361. .Charmander
  362. ld a, $3
  363. .done
  364. ld [wTrainerNo], a
  365. ld a, $1
  366. ld [wSpriteIndex], a
  367. call GetSpritePosition1
  368. ld hl, OaksLabText_1d3be
  369. ld de, OaksLabText_1d3c3
  370. call SaveEndBattleTextPointers
  371. ld hl, wd72d
  372. set 6, [hl]
  373. set 7, [hl]
  374. xor a
  375. ld [wJoyIgnore], a
  376. ld a, PLAYER_DIR_UP
  377. ld [wPlayerMovingDirection], a
  378. ld a, $c
  379. ld [wOaksLabCurScript], a
  380. ret
  381. OaksLabScript12:
  382. ld a, $f0
  383. ld [wJoyIgnore], a
  384. ld a, PLAYER_DIR_UP
  385. ld [wPlayerMovingDirection], a
  386. call UpdateSprites
  387. ld a, $1
  388. ld [wSpriteIndex], a
  389. call SetSpritePosition1
  390. ld a, $1
  391. ld [H_SPRITEINDEX], a
  392. xor a ; SPRITE_FACING_DOWN
  393. ld [hSpriteFacingDirection], a
  394. call SetSpriteFacingDirectionAndDelay
  395. predef HealParty
  396. SetEvent EVENT_BATTLED_RIVAL_IN_OAKS_LAB
  397. ld a, $d
  398. ld [wOaksLabCurScript], a
  399. ret
  400. OaksLabScript13:
  401. ld c, 20
  402. call DelayFrames
  403. ld a, $10
  404. ld [hSpriteIndexOrTextID], a
  405. call DisplayTextID
  406. callba Music_RivalAlternateStart
  407. ld a, $1
  408. ld [H_SPRITEINDEX], a
  409. ld de, .RivalExitMovement
  410. call MoveSprite
  411. ld a, [wXCoord]
  412. cp $4
  413. ; move left or right depending on where the player is standing
  414. jr nz, .moveLeft
  415. ld a, NPC_MOVEMENT_RIGHT
  416. jr .next
  417. .moveLeft
  418. ld a, NPC_MOVEMENT_LEFT
  419. .next
  420. ld [wNPCMovementDirections], a
  421. ld a, $e
  422. ld [wOaksLabCurScript], a
  423. ret
  424. .RivalExitMovement
  425. db $E0 ; change sprite facing direction
  426. db NPC_MOVEMENT_DOWN
  427. db NPC_MOVEMENT_DOWN
  428. db NPC_MOVEMENT_DOWN
  429. db NPC_MOVEMENT_DOWN
  430. db NPC_MOVEMENT_DOWN
  431. db $FF
  432. OaksLabScript14:
  433. ld a, [wd730]
  434. bit 0, a
  435. jr nz, .asm_1ce8c
  436. ld a, HS_OAKS_LAB_RIVAL
  437. ld [wMissableObjectIndex], a
  438. predef HideObject
  439. xor a
  440. ld [wJoyIgnore], a
  441. call PlayDefaultMusic ; reset to map music
  442. ld a, $12
  443. ld [wOaksLabCurScript], a
  444. jr .done
  445. ; make the player keep facing the rival as he walks away
  446. .asm_1ce8c
  447. ld a, [wNPCNumScriptedSteps]
  448. cp $5
  449. jr nz, .asm_1cea8
  450. ld a, [wXCoord]
  451. cp $4
  452. jr nz, .asm_1cea1
  453. ld a, SPRITE_FACING_RIGHT
  454. ld [wSpriteStateData1 + 9], a
  455. jr .done
  456. .asm_1cea1
  457. ld a, SPRITE_FACING_LEFT
  458. ld [wSpriteStateData1 + 9], a
  459. jr .done
  460. .asm_1cea8
  461. cp $4
  462. ret nz
  463. xor a ; ld a, SPRITE_FACING_DOWN
  464. ld [wSpriteStateData1 + 9], a
  465. .done
  466. ret
  467. OaksLabScript15:
  468. xor a
  469. ld [hJoyHeld], a
  470. call EnableAutoTextBoxDrawing
  471. ld a, $ff
  472. ld [wNewSoundID], a
  473. call PlaySound
  474. callba Music_RivalAlternateStart
  475. ld a, $15
  476. ld [hSpriteIndexOrTextID], a
  477. call DisplayTextID
  478. call OaksLabScript_1d02b
  479. ld a, HS_OAKS_LAB_RIVAL
  480. ld [wMissableObjectIndex], a
  481. predef ShowObject
  482. ld a, [wNPCMovementDirections2Index]
  483. ld [wSavedNPCMovementDirections2Index], a
  484. ld b, 0
  485. ld c, a
  486. ld hl, wNPCMovementDirections2
  487. ld a, NPC_MOVEMENT_UP
  488. call FillMemory
  489. ld [hl], $ff
  490. ld a, $1
  491. ld [H_SPRITEINDEX], a
  492. ld de, wNPCMovementDirections2
  493. call MoveSprite
  494. ld a, $10
  495. ld [wOaksLabCurScript], a
  496. ret
  497. OaksLabScript_1cefd:
  498. ld a, $1
  499. ld [H_SPRITEINDEX], a
  500. ld a, SPRITE_FACING_UP
  501. ld [hSpriteFacingDirection], a
  502. call SetSpriteFacingDirectionAndDelay
  503. ld a, $8
  504. ld [H_SPRITEINDEX], a
  505. xor a ; SPRITE_FACING_DOWN
  506. ld [hSpriteFacingDirection], a
  507. jp SetSpriteFacingDirectionAndDelay
  508. OaksLabScript16:
  509. ld a, [wd730]
  510. bit 0, a
  511. ret nz
  512. call EnableAutoTextBoxDrawing
  513. call PlayDefaultMusic
  514. ld a, $fc
  515. ld [wJoyIgnore], a
  516. call OaksLabScript_1cefd
  517. ld a, $16
  518. ld [hSpriteIndexOrTextID], a
  519. call DisplayTextID
  520. call DelayFrame
  521. call OaksLabScript_1cefd
  522. ld a, $17
  523. ld [hSpriteIndexOrTextID], a
  524. call DisplayTextID
  525. call DelayFrame
  526. call OaksLabScript_1cefd
  527. ld a, $18
  528. ld [hSpriteIndexOrTextID], a
  529. call DisplayTextID
  530. call DelayFrame
  531. ld a, $19
  532. ld [hSpriteIndexOrTextID], a
  533. call DisplayTextID
  534. call Delay3
  535. ld a, HS_POKEDEX_1
  536. ld [wMissableObjectIndex], a
  537. predef HideObject
  538. ld a, HS_POKEDEX_2
  539. ld [wMissableObjectIndex], a
  540. predef HideObject
  541. call OaksLabScript_1cefd
  542. ld a, $1a
  543. ld [hSpriteIndexOrTextID], a
  544. call DisplayTextID
  545. ld a, $1
  546. ld [H_SPRITEINDEX], a
  547. ld a, SPRITE_FACING_RIGHT
  548. ld [hSpriteFacingDirection], a
  549. call SetSpriteFacingDirectionAndDelay
  550. call Delay3
  551. ld a, $1b
  552. ld [hSpriteIndexOrTextID], a
  553. call DisplayTextID
  554. SetEvent EVENT_GOT_POKEDEX
  555. SetEvent EVENT_OAK_GOT_PARCEL
  556. ld a, HS_LYING_OLD_MAN
  557. ld [wMissableObjectIndex], a
  558. predef HideObject
  559. ld a, HS_OLD_MAN
  560. ld [wMissableObjectIndex], a
  561. predef ShowObject
  562. ld a, [wSavedNPCMovementDirections2Index]
  563. ld b, 0
  564. ld c, a
  565. ld hl, wNPCMovementDirections2
  566. xor a ; NPC_MOVEMENT_DOWN
  567. call FillMemory
  568. ld [hl], $ff
  569. ld a, $ff
  570. ld [wNewSoundID], a
  571. call PlaySound
  572. callba Music_RivalAlternateStart
  573. ld a, $1
  574. ld [H_SPRITEINDEX], a
  575. ld de, wNPCMovementDirections2
  576. call MoveSprite
  577. ld a, $11
  578. ld [wOaksLabCurScript], a
  579. ret
  580. OaksLabScript17:
  581. ld a, [wd730]
  582. bit 0, a
  583. ret nz
  584. call PlayDefaultMusic
  585. ld a, HS_OAKS_LAB_RIVAL
  586. ld [wMissableObjectIndex], a
  587. predef HideObject
  588. SetEvent EVENT_1ST_ROUTE22_RIVAL_BATTLE
  589. ResetEventReuseHL EVENT_2ND_ROUTE22_RIVAL_BATTLE
  590. SetEventReuseHL EVENT_ROUTE22_RIVAL_WANTS_BATTLE
  591. ld a, HS_ROUTE_22_RIVAL_1
  592. ld [wMissableObjectIndex], a
  593. predef ShowObject
  594. ld a, $5
  595. ld [wPalletTownCurScript], a
  596. xor a
  597. ld [wJoyIgnore], a
  598. ld a, $12
  599. ld [wOaksLabCurScript], a
  600. ret
  601. OaksLabScript18:
  602. ret
  603. OaksLabScript_RemoveParcel:
  604. ld hl, wBagItems
  605. ld bc, $0000
  606. .loop
  607. ld a, [hli]
  608. cp $ff
  609. ret z
  610. cp OAKS_PARCEL
  611. jr z, .foundParcel
  612. inc hl
  613. inc c
  614. jr .loop
  615. .foundParcel
  616. ld hl, wNumBagItems
  617. ld a, c
  618. ld [wWhichPokemon], a
  619. ld a, $1
  620. ld [wItemQuantity], a
  621. jp RemoveItemFromInventory
  622. OaksLabScript_1d02b:
  623. ld a, $7c
  624. ld [$ffeb], a
  625. ld a, $8
  626. ld [$ffee], a
  627. ld a, [wYCoord]
  628. cp $3
  629. jr nz, .asm_1d045
  630. ld a, $4
  631. ld [wNPCMovementDirections2Index], a
  632. ld a, $30
  633. ld b, $b
  634. jr .asm_1d068
  635. .asm_1d045
  636. cp $1
  637. jr nz, .asm_1d054
  638. ld a, $2
  639. ld [wNPCMovementDirections2Index], a
  640. ld a, $30
  641. ld b, $9
  642. jr .asm_1d068
  643. .asm_1d054
  644. ld a, $3
  645. ld [wNPCMovementDirections2Index], a
  646. ld b, $a
  647. ld a, [wXCoord]
  648. cp $4
  649. jr nz, .asm_1d066
  650. ld a, $40
  651. jr .asm_1d068
  652. .asm_1d066
  653. ld a, $20
  654. .asm_1d068
  655. ld [$ffec], a
  656. ld a, b
  657. ld [$ffed], a
  658. ld a, $1
  659. ld [wSpriteIndex], a
  660. call SetSpritePosition1
  661. ret
  662. OaksLabScript_1d076:
  663. ld hl, OaksLabTextPointers2
  664. ld a, l
  665. ld [wMapTextPtr], a
  666. ld a, h
  667. ld [wMapTextPtr+1], a
  668. ret
  669. OaksLabTextPointers:
  670. dw OaksLabText1
  671. dw OaksLabText2
  672. dw OaksLabText3
  673. dw OaksLabText4
  674. dw OaksLabText5
  675. dw OaksLabText6
  676. dw OaksLabText7
  677. dw OaksLabText8
  678. dw OaksLabText9
  679. dw OaksLabText10
  680. dw OaksLabText11
  681. dw OaksLabText12
  682. dw OaksLabText13
  683. dw OaksLabText14
  684. dw OaksLabText15
  685. dw OaksLabText16
  686. dw OaksLabText17
  687. dw OaksLabText18
  688. dw OaksLabText19
  689. dw OaksLabText20
  690. dw OaksLabText21
  691. dw OaksLabText22
  692. dw OaksLabText23
  693. dw OaksLabText24
  694. dw OaksLabText25
  695. dw OaksLabText26
  696. dw OaksLabText27
  697. OaksLabTextPointers2:
  698. dw OaksLabText1
  699. dw OaksLabText2
  700. dw OaksLabText3
  701. dw OaksLabText4
  702. dw OaksLabText5
  703. dw OaksLabText6
  704. dw OaksLabText7
  705. dw OaksLabText8
  706. dw OaksLabText9
  707. dw OaksLabText10
  708. dw OaksLabText11
  709. OaksLabText1:
  710. TX_ASM
  711. CheckEvent EVENT_FOLLOWED_OAK_INTO_LAB_2
  712. jr nz, .asm_1d0de
  713. ld hl, OaksLabGaryText1
  714. call PrintText
  715. jr .asm_1d0f0
  716. .asm_1d0de
  717. bit 2, a
  718. jr nz, .asm_1d0ea
  719. ld hl, OaksLabText40
  720. call PrintText
  721. jr .asm_1d0f0
  722. .asm_1d0ea
  723. ld hl, OaksLabText41
  724. call PrintText
  725. .asm_1d0f0
  726. jp TextScriptEnd
  727. OaksLabGaryText1:
  728. TX_FAR _OaksLabGaryText1
  729. db "@"
  730. OaksLabText40:
  731. TX_FAR _OaksLabText40
  732. db "@"
  733. OaksLabText41:
  734. TX_FAR _OaksLabText41
  735. db "@"
  736. OaksLabText2:
  737. TX_ASM
  738. ld a, STARTER2
  739. ld [wRivalStarterTemp], a
  740. ld a, $3
  741. ld [wRivalStarterBallSpriteIndex], a
  742. ld a, STARTER1
  743. ld b, $2
  744. jr OaksLabScript_1d133
  745. OaksLabText3:
  746. TX_ASM
  747. ld a, STARTER3
  748. ld [wRivalStarterTemp], a
  749. ld a, $4
  750. ld [wRivalStarterBallSpriteIndex], a
  751. ld a, STARTER2
  752. ld b, $3
  753. jr OaksLabScript_1d133
  754. OaksLabText4:
  755. TX_ASM
  756. ld a, STARTER1
  757. ld [wRivalStarterTemp], a
  758. ld a, $2
  759. ld [wRivalStarterBallSpriteIndex], a
  760. ld a, STARTER3
  761. ld b, $4
  762. OaksLabScript_1d133:
  763. ld [wcf91], a
  764. ld [wd11e], a
  765. ld a, b
  766. ld [wSpriteIndex], a
  767. CheckEvent EVENT_GOT_STARTER
  768. jp nz, OaksLabScript_1d22d
  769. CheckEventReuseA EVENT_OAK_ASKED_TO_CHOOSE_MON
  770. jr nz, OaksLabScript_1d157
  771. ld hl, OaksLabText39
  772. call PrintText
  773. jp TextScriptEnd
  774. OaksLabText39:
  775. TX_FAR _OaksLabText39
  776. db "@"
  777. OaksLabScript_1d157:
  778. ld a, $5
  779. ld [H_SPRITEINDEX], a
  780. ld a, $9
  781. ld [H_SPRITEDATAOFFSET], a
  782. call GetPointerWithinSpriteStateData1
  783. ld [hl], SPRITE_FACING_DOWN
  784. ld a, $1
  785. ld [H_SPRITEINDEX], a
  786. ld a, $9
  787. ld [H_SPRITEDATAOFFSET], a
  788. call GetPointerWithinSpriteStateData1
  789. ld [hl], SPRITE_FACING_RIGHT
  790. ld hl, wd730
  791. set 6, [hl]
  792. predef StarterDex
  793. ld hl, wd730
  794. res 6, [hl]
  795. call ReloadMapData
  796. ld c, 10
  797. call DelayFrames
  798. ld a, [wSpriteIndex]
  799. cp $2
  800. jr z, OaksLabLookAtCharmander
  801. cp $3
  802. jr z, OaksLabLookAtSquirtle
  803. jr OaksLabLookAtBulbasaur
  804. OaksLabLookAtCharmander:
  805. ld hl, OaksLabCharmanderText
  806. jr OaksLabMonChoiceMenu
  807. OaksLabCharmanderText:
  808. TX_FAR _OaksLabCharmanderText
  809. db "@"
  810. OaksLabLookAtSquirtle:
  811. ld hl, OaksLabSquirtleText
  812. jr OaksLabMonChoiceMenu
  813. OaksLabSquirtleText:
  814. TX_FAR _OaksLabSquirtleText
  815. db "@"
  816. OaksLabLookAtBulbasaur:
  817. ld hl, OaksLabBulbasaurText
  818. jr OaksLabMonChoiceMenu
  819. OaksLabBulbasaurText:
  820. TX_FAR _OaksLabBulbasaurText
  821. db "@"
  822. OaksLabMonChoiceMenu:
  823. call PrintText
  824. ld a, $1
  825. ld [wDoNotWaitForButtonPressAfterDisplayingText], a
  826. call YesNoChoice ; yes/no menu
  827. ld a, [wCurrentMenuItem]
  828. and a
  829. jr nz, OaksLabMonChoiceEnd
  830. ld a, [wcf91]
  831. ld [wPlayerStarter], a
  832. ld [wd11e], a
  833. call GetMonName
  834. ld a, [wSpriteIndex]
  835. cp $2
  836. jr nz, .asm_1d1db
  837. ld a, HS_STARTER_BALL_1
  838. jr .asm_1d1e5
  839. .asm_1d1db
  840. cp $3
  841. jr nz, .asm_1d1e3
  842. ld a, HS_STARTER_BALL_2
  843. jr .asm_1d1e5
  844. .asm_1d1e3
  845. ld a, HS_STARTER_BALL_3
  846. .asm_1d1e5
  847. ld [wMissableObjectIndex], a
  848. predef HideObject
  849. ld a, $1
  850. ld [wDoNotWaitForButtonPressAfterDisplayingText], a
  851. ld hl, OaksLabMonEnergeticText
  852. call PrintText
  853. ld hl, OaksLabReceivedMonText
  854. call PrintText
  855. xor a ; PLAYER_PARTY_DATA
  856. ld [wMonDataLocation], a
  857. ld a, 5
  858. ld [wCurEnemyLVL], a
  859. ld a, [wcf91]
  860. ld [wd11e], a
  861. call AddPartyMon
  862. ld hl, wd72e
  863. set 3, [hl]
  864. ld a, $fc
  865. ld [wJoyIgnore], a
  866. ld a, $8
  867. ld [wOaksLabCurScript], a
  868. OaksLabMonChoiceEnd:
  869. jp TextScriptEnd
  870. OaksLabMonEnergeticText:
  871. TX_FAR _OaksLabMonEnergeticText
  872. db "@"
  873. OaksLabReceivedMonText:
  874. TX_FAR _OaksLabReceivedMonText
  875. TX_SFX_KEY_ITEM
  876. db "@"
  877. OaksLabScript_1d22d:
  878. ld a, $5
  879. ld [H_SPRITEINDEX], a
  880. ld a, $9
  881. ld [H_SPRITEDATAOFFSET], a
  882. call GetPointerWithinSpriteStateData1
  883. ld [hl], $0
  884. ld hl, OaksLabLastMonText
  885. call PrintText
  886. jp TextScriptEnd
  887. OaksLabLastMonText:
  888. TX_FAR _OaksLabLastMonText
  889. db "@"
  890. OaksLabText32:
  891. OaksLabText5:
  892. TX_ASM
  893. CheckEvent EVENT_PALLET_AFTER_GETTING_POKEBALLS
  894. jr nz, .asm_1d266
  895. ld hl, wPokedexOwned
  896. ld b, wPokedexOwnedEnd - wPokedexOwned
  897. call CountSetBits
  898. ld a, [wNumSetBits]
  899. cp 2
  900. jr c, .asm_1d279
  901. CheckEvent EVENT_GOT_POKEDEX
  902. jr z, .asm_1d279
  903. .asm_1d266
  904. ld hl, OaksLabText_1d31d
  905. call PrintText
  906. ld a, $1
  907. ld [wDoNotWaitForButtonPressAfterDisplayingText], a
  908. predef DisplayDexRating
  909. jp .asm_1d2ed
  910. .asm_1d279
  911. ld b, POKE_BALL
  912. call IsItemInBag
  913. jr nz, .asm_1d2e7
  914. CheckEvent EVENT_BEAT_ROUTE22_RIVAL_1ST_BATTLE
  915. jr nz, .asm_1d2d0
  916. CheckEvent EVENT_GOT_POKEDEX
  917. jr nz, .asm_1d2c8
  918. CheckEventReuseA EVENT_BATTLED_RIVAL_IN_OAKS_LAB
  919. jr nz, .asm_1d2a9
  920. ld a, [wd72e]
  921. bit 3, a
  922. jr nz, .asm_1d2a1
  923. ld hl, OaksLabText_1d2f0
  924. call PrintText
  925. jr .asm_1d2ed
  926. .asm_1d2a1
  927. ld hl, OaksLabText_1d2f5
  928. call PrintText
  929. jr .asm_1d2ed
  930. .asm_1d2a9
  931. ld b, OAKS_PARCEL
  932. call IsItemInBag
  933. jr nz, .asm_1d2b8
  934. ld hl, OaksLabText_1d2fa
  935. call PrintText
  936. jr .asm_1d2ed
  937. .asm_1d2b8
  938. ld hl, OaksLabDeliverParcelText
  939. call PrintText
  940. call OaksLabScript_RemoveParcel
  941. ld a, $f
  942. ld [wOaksLabCurScript], a
  943. jr .asm_1d2ed
  944. .asm_1d2c8
  945. ld hl, OaksLabAroundWorldText
  946. call PrintText
  947. jr .asm_1d2ed
  948. .asm_1d2d0
  949. CheckAndSetEvent EVENT_GOT_POKEBALLS_FROM_OAK
  950. jr nz, .asm_1d2e7
  951. lb bc, POKE_BALL, 5
  952. call GiveItem
  953. ld hl, OaksLabGivePokeballsText
  954. call PrintText
  955. jr .asm_1d2ed
  956. .asm_1d2e7
  957. ld hl, OaksLabPleaseVisitText
  958. call PrintText
  959. .asm_1d2ed
  960. jp TextScriptEnd
  961. OaksLabText_1d2f0:
  962. TX_FAR _OaksLabText_1d2f0
  963. db "@"
  964. OaksLabText_1d2f5:
  965. TX_FAR _OaksLabText_1d2f5
  966. db "@"
  967. OaksLabText_1d2fa:
  968. TX_FAR _OaksLabText_1d2fa
  969. db "@"
  970. OaksLabDeliverParcelText:
  971. TX_FAR _OaksLabDeliverParcelText1
  972. TX_SFX_KEY_ITEM
  973. TX_FAR _OaksLabDeliverParcelText2
  974. db "@"
  975. OaksLabAroundWorldText:
  976. TX_FAR _OaksLabAroundWorldText
  977. db "@"
  978. OaksLabGivePokeballsText:
  979. TX_FAR _OaksLabGivePokeballsText1
  980. TX_SFX_KEY_ITEM
  981. TX_FAR _OaksLabGivePokeballsText2
  982. db "@"
  983. OaksLabPleaseVisitText:
  984. TX_FAR _OaksLabPleaseVisitText
  985. db "@"
  986. OaksLabText_1d31d:
  987. TX_FAR _OaksLabText_1d31d
  988. db "@"
  989. OaksLabText7:
  990. OaksLabText6:
  991. TX_ASM
  992. ld hl, OaksLabText_1d32c
  993. call PrintText
  994. jp TextScriptEnd
  995. OaksLabText_1d32c:
  996. TX_FAR _OaksLabText_1d32c
  997. db "@"
  998. OaksLabText8:
  999. TX_FAR _OaksLabText8
  1000. db "@"
  1001. OaksLabText9:
  1002. TX_ASM
  1003. ld hl, OaksLabText_1d340
  1004. call PrintText
  1005. jp TextScriptEnd
  1006. OaksLabText_1d340:
  1007. TX_FAR _OaksLabText_1d340
  1008. db "@"
  1009. OaksLabText17:
  1010. TX_ASM
  1011. ld hl, OaksLabRivalWaitingText
  1012. call PrintText
  1013. jp TextScriptEnd
  1014. OaksLabRivalWaitingText:
  1015. TX_FAR _OaksLabRivalWaitingText
  1016. db "@"
  1017. OaksLabText18:
  1018. TX_ASM
  1019. ld hl, OaksLabChooseMonText
  1020. call PrintText
  1021. jp TextScriptEnd
  1022. OaksLabChooseMonText:
  1023. TX_FAR _OaksLabChooseMonText
  1024. db "@"
  1025. OaksLabText19:
  1026. TX_ASM
  1027. ld hl, OaksLabRivalInterjectionText
  1028. call PrintText
  1029. jp TextScriptEnd
  1030. OaksLabRivalInterjectionText:
  1031. TX_FAR _OaksLabRivalInterjectionText
  1032. db "@"
  1033. OaksLabText20:
  1034. TX_ASM
  1035. ld hl, OaksLabBePatientText
  1036. call PrintText
  1037. jp TextScriptEnd
  1038. OaksLabBePatientText:
  1039. TX_FAR _OaksLabBePatientText
  1040. db "@"
  1041. OaksLabText12:
  1042. TX_ASM
  1043. ld hl, OaksLabLeavingText
  1044. call PrintText
  1045. jp TextScriptEnd
  1046. OaksLabLeavingText:
  1047. TX_FAR _OaksLabLeavingText
  1048. db "@"
  1049. OaksLabText13:
  1050. TX_ASM
  1051. ld hl, OaksLabRivalPickingMonText
  1052. call PrintText
  1053. jp TextScriptEnd
  1054. OaksLabRivalPickingMonText:
  1055. TX_FAR _OaksLabRivalPickingMonText
  1056. db "@"
  1057. OaksLabText14:
  1058. TX_ASM
  1059. ld hl, OaksLabRivalReceivedMonText
  1060. call PrintText
  1061. jp TextScriptEnd
  1062. OaksLabRivalReceivedMonText:
  1063. TX_FAR _OaksLabRivalReceivedMonText
  1064. TX_SFX_KEY_ITEM
  1065. db "@"
  1066. OaksLabText15:
  1067. TX_ASM
  1068. ld hl, OaksLabRivalChallengeText
  1069. call PrintText
  1070. jp TextScriptEnd
  1071. OaksLabRivalChallengeText:
  1072. TX_FAR _OaksLabRivalChallengeText
  1073. db "@"
  1074. OaksLabText_1d3be:
  1075. TX_FAR _OaksLabText_1d3be
  1076. db "@"
  1077. OaksLabText_1d3c3:
  1078. TX_FAR _OaksLabText_1d3c3
  1079. db "@"
  1080. OaksLabText16:
  1081. TX_ASM
  1082. ld hl, OaksLabRivalToughenUpText
  1083. call PrintText
  1084. jp TextScriptEnd
  1085. OaksLabRivalToughenUpText:
  1086. TX_FAR _OaksLabRivalToughenUpText
  1087. db "@"
  1088. OaksLabText21:
  1089. TX_FAR _OaksLabText21
  1090. db "@"
  1091. OaksLabText22:
  1092. TX_FAR _OaksLabText22
  1093. db "@"
  1094. OaksLabText23:
  1095. TX_FAR _OaksLabText23
  1096. db "@"
  1097. OaksLabText24:
  1098. TX_FAR _OaksLabText24
  1099. db "@"
  1100. OaksLabText25:
  1101. TX_FAR _OaksLabText25
  1102. TX_SFX_KEY_ITEM
  1103. db "@"
  1104. OaksLabText26:
  1105. TX_FAR _OaksLabText26
  1106. db "@"
  1107. OaksLabText27:
  1108. TX_FAR _OaksLabText27
  1109. db "@"
  1110. OaksLabText11:
  1111. OaksLabText10:
  1112. TX_ASM
  1113. ld hl, OaksLabText_1d405
  1114. call PrintText
  1115. jp TextScriptEnd
  1116. OaksLabText_1d405:
  1117. TX_FAR _OaksLabText_1d405
  1118. db "@"