bills_pc.asm 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555
  1. DisplayPCMainMenu::
  2. xor a
  3. ld [H_AUTOBGTRANSFERENABLED], a
  4. call SaveScreenTilesToBuffer2
  5. ld a, [wNumHoFTeams]
  6. and a
  7. jr nz, .leaguePCAvailable
  8. CheckEvent EVENT_GOT_POKEDEX
  9. jr z, .noOaksPC
  10. ld a, [wNumHoFTeams]
  11. and a
  12. jr nz, .leaguePCAvailable
  13. coord hl, 0, 0
  14. ld b, 8
  15. ld c, 14
  16. jr .next
  17. .noOaksPC
  18. coord hl, 0, 0
  19. ld b, 6
  20. ld c, 14
  21. jr .next
  22. .leaguePCAvailable
  23. coord hl, 0, 0
  24. ld b, 10
  25. ld c, 14
  26. .next
  27. call TextBoxBorder
  28. call UpdateSprites
  29. ld a, 3
  30. ld [wMaxMenuItem], a
  31. CheckEvent EVENT_MET_BILL
  32. jr nz, .metBill
  33. coord hl, 2, 2
  34. ld de, SomeonesPCText
  35. jr .next2
  36. .metBill
  37. coord hl, 2, 2
  38. ld de, BillsPCText
  39. .next2
  40. call PlaceString
  41. coord hl, 2, 4
  42. ld de, wPlayerName
  43. call PlaceString
  44. ld l, c
  45. ld h, b
  46. ld de, PlayersPCText
  47. call PlaceString
  48. CheckEvent EVENT_GOT_POKEDEX
  49. jr z, .noOaksPC2
  50. coord hl, 2, 6
  51. ld de, OaksPCText
  52. call PlaceString
  53. ld a, [wNumHoFTeams]
  54. and a
  55. jr z, .noLeaguePC
  56. ld a, 4
  57. ld [wMaxMenuItem], a
  58. coord hl, 2, 8
  59. ld de, PKMNLeaguePCText
  60. call PlaceString
  61. coord hl, 2, 10
  62. ld de, LogOffPCText
  63. jr .next3
  64. .noLeaguePC
  65. coord hl, 2, 8
  66. ld de, LogOffPCText
  67. jr .next3
  68. .noOaksPC2
  69. ld a, $2
  70. ld [wMaxMenuItem], a
  71. coord hl, 2, 6
  72. ld de, LogOffPCText
  73. .next3
  74. call PlaceString
  75. ld a, A_BUTTON | B_BUTTON
  76. ld [wMenuWatchedKeys], a
  77. ld a, 2
  78. ld [wTopMenuItemY], a
  79. ld a, 1
  80. ld [wTopMenuItemX], a
  81. xor a
  82. ld [wCurrentMenuItem], a
  83. ld [wLastMenuItem], a
  84. ld a, 1
  85. ld [H_AUTOBGTRANSFERENABLED], a
  86. ret
  87. SomeonesPCText: db "SOMEONE's PC@"
  88. BillsPCText: db "BILL's PC@"
  89. PlayersPCText: db "'s PC@"
  90. OaksPCText: db "PROF.OAK's PC@"
  91. PKMNLeaguePCText: db $4a, "LEAGUE@"
  92. LogOffPCText: db "LOG OFF@"
  93. BillsPC_::
  94. ld hl, wd730
  95. set 6, [hl]
  96. xor a
  97. ld [wParentMenuItem], a
  98. inc a ; MONSTER_NAME
  99. ld [wNameListType], a
  100. call LoadHpBarAndStatusTilePatterns
  101. ld a, [wListScrollOffset]
  102. push af
  103. ld a, [wFlags_0xcd60]
  104. bit 3, a ; accessing Bill's PC through another PC?
  105. jr nz, BillsPCMenu
  106. ; accessing it directly
  107. ld a, $99
  108. call PlaySound
  109. ld hl, SwitchOnText
  110. call PrintText
  111. BillsPCMenu:
  112. ld a, [wParentMenuItem]
  113. ld [wCurrentMenuItem], a
  114. ld hl, vChars2 + $780
  115. ld de, PokeballTileGraphics
  116. lb bc, BANK(PokeballTileGraphics), $01
  117. call CopyVideoData
  118. call LoadScreenTilesFromBuffer2DisableBGTransfer
  119. coord hl, 0, 0
  120. ld b, 10
  121. ld c, 12
  122. call TextBoxBorder
  123. coord hl, 2, 2
  124. ld de, BillsPCMenuText
  125. call PlaceString
  126. ld hl, wTopMenuItemY
  127. ld a, 2
  128. ld [hli], a ; wTopMenuItemY
  129. dec a
  130. ld [hli], a ; wTopMenuItemX
  131. inc hl
  132. inc hl
  133. ld a, 4
  134. ld [hli], a ; wMaxMenuItem
  135. ld a, A_BUTTON | B_BUTTON
  136. ld [hli], a ; wMenuWatchedKeys
  137. xor a
  138. ld [hli], a ; wLastMenuItem
  139. ld [hli], a ; wPartyAndBillsPCSavedMenuItem
  140. ld hl, wListScrollOffset
  141. ld [hli], a ; wListScrollOffset
  142. ld [hl], a ; wMenuWatchMovingOutOfBounds
  143. ld [wPlayerMonNumber], a
  144. ld hl, WhatText
  145. call PrintText
  146. coord hl, 9, 14
  147. ld b, 2
  148. ld c, 9
  149. call TextBoxBorder
  150. ld a, [wCurrentBoxNum]
  151. and $7f
  152. cp 9
  153. jr c, .singleDigitBoxNum
  154. ; two digit box num
  155. sub 9
  156. coord hl, 17, 16
  157. ld [hl], "1"
  158. add "0"
  159. jr .next
  160. .singleDigitBoxNum
  161. add "1"
  162. .next
  163. Coorda 18, 16
  164. coord hl, 10, 16
  165. ld de, BoxNoPCText
  166. call PlaceString
  167. ld a, 1
  168. ld [H_AUTOBGTRANSFERENABLED], a
  169. call Delay3
  170. call HandleMenuInput
  171. bit 1, a
  172. jp nz, ExitBillsPC ; b button
  173. call PlaceUnfilledArrowMenuCursor
  174. ld a, [wCurrentMenuItem]
  175. ld [wParentMenuItem], a
  176. and a
  177. jp z, BillsPCWithdraw ; withdraw
  178. cp $1
  179. jp z, BillsPCDeposit ; deposit
  180. cp $2
  181. jp z, BillsPCRelease ; release
  182. cp $3
  183. jp z, BillsPCChangeBox ; change box
  184. ExitBillsPC:
  185. ld a, [wFlags_0xcd60]
  186. bit 3, a ; accessing Bill's PC through another PC?
  187. jr nz, .next
  188. ; accessing it directly
  189. call LoadTextBoxTilePatterns
  190. ld a, $9a
  191. call PlaySound
  192. call WaitForSoundToFinish
  193. .next
  194. ld hl, wFlags_0xcd60
  195. res 5, [hl]
  196. call LoadScreenTilesFromBuffer2
  197. pop af
  198. ld [wListScrollOffset], a
  199. ld hl, wd730
  200. res 6, [hl]
  201. ret
  202. BillsPCDeposit:
  203. ld a, [wPartyCount]
  204. dec a
  205. jr nz, .partyLargeEnough
  206. ld hl, CantDepositLastMonText
  207. call PrintText
  208. jp BillsPCMenu
  209. .partyLargeEnough
  210. ld a, [wNumInBox]
  211. cp MONS_PER_BOX
  212. jr nz, .boxNotFull
  213. ld hl, BoxFullText
  214. call PrintText
  215. jp BillsPCMenu
  216. .boxNotFull
  217. ld hl, wPartyCount
  218. call DisplayMonListMenu
  219. jp c, BillsPCMenu
  220. call DisplayDepositWithdrawMenu
  221. jp nc, BillsPCMenu
  222. ld a, [wcf91]
  223. call GetCryData
  224. call PlaySoundWaitForCurrent
  225. ld a, PARTY_TO_BOX
  226. ld [wMoveMonType], a
  227. call MoveMon
  228. xor a
  229. ld [wRemoveMonFromBox], a
  230. call RemovePokemon
  231. call WaitForSoundToFinish
  232. ld hl, wBoxNumString
  233. ld a, [wCurrentBoxNum]
  234. and $7f
  235. cp 9
  236. jr c, .singleDigitBoxNum
  237. sub 9
  238. ld [hl], "1"
  239. inc hl
  240. add "0"
  241. jr .next
  242. .singleDigitBoxNum
  243. add "1"
  244. .next
  245. ld [hli], a
  246. ld [hl], "@"
  247. ld hl, MonWasStoredText
  248. call PrintText
  249. jp BillsPCMenu
  250. BillsPCWithdraw:
  251. ld a, [wNumInBox]
  252. and a
  253. jr nz, .boxNotEmpty
  254. ld hl, NoMonText
  255. call PrintText
  256. jp BillsPCMenu
  257. .boxNotEmpty
  258. ld a, [wPartyCount]
  259. cp PARTY_LENGTH
  260. jr nz, .partyNotFull
  261. ld hl, CantTakeMonText
  262. call PrintText
  263. jp BillsPCMenu
  264. .partyNotFull
  265. ld hl, wNumInBox
  266. call DisplayMonListMenu
  267. jp c, BillsPCMenu
  268. call DisplayDepositWithdrawMenu
  269. jp nc, BillsPCMenu
  270. ld a, [wWhichPokemon]
  271. ld hl, wBoxMonNicks
  272. call GetPartyMonName
  273. ld a, [wcf91]
  274. call GetCryData
  275. call PlaySoundWaitForCurrent
  276. xor a ; BOX_TO_PARTY
  277. ld [wMoveMonType], a
  278. call MoveMon
  279. ld a, 1
  280. ld [wRemoveMonFromBox], a
  281. call RemovePokemon
  282. call WaitForSoundToFinish
  283. ld hl, MonIsTakenOutText
  284. call PrintText
  285. jp BillsPCMenu
  286. BillsPCRelease:
  287. ld a, [wNumInBox]
  288. and a
  289. jr nz, .loop
  290. ld hl, NoMonText
  291. call PrintText
  292. jp BillsPCMenu
  293. .loop
  294. ld hl, wNumInBox
  295. call DisplayMonListMenu
  296. jp c, BillsPCMenu
  297. ld hl, OnceReleasedText
  298. call PrintText
  299. call YesNoChoice
  300. ld a, [wCurrentMenuItem]
  301. and a
  302. jr nz, .loop
  303. inc a
  304. ld [wRemoveMonFromBox], a
  305. call RemovePokemon
  306. call WaitForSoundToFinish
  307. ld a, [wcf91]
  308. call PlayCry
  309. ld hl, MonWasReleasedText
  310. call PrintText
  311. jp BillsPCMenu
  312. BillsPCChangeBox:
  313. callba ChangeBox
  314. jp BillsPCMenu
  315. DisplayMonListMenu:
  316. ld a, l
  317. ld [wListPointer], a
  318. ld a, h
  319. ld [wListPointer + 1], a
  320. xor a
  321. ld [wPrintItemPrices], a
  322. ld [wListMenuID], a
  323. inc a ; MONSTER_NAME
  324. ld [wNameListType], a
  325. ld a, [wPartyAndBillsPCSavedMenuItem]
  326. ld [wCurrentMenuItem], a
  327. call DisplayListMenuID
  328. ld a, [wCurrentMenuItem]
  329. ld [wPartyAndBillsPCSavedMenuItem], a
  330. ret
  331. BillsPCMenuText:
  332. db "WITHDRAW ", $4a
  333. next "DEPOSIT ", $4a
  334. next "RELEASE ", $4a
  335. next "CHANGE BOX"
  336. next "SEE YA!"
  337. db "@"
  338. BoxNoPCText:
  339. db "BOX No.@"
  340. KnowsHMMove::
  341. ; returns whether mon with party index [wWhichPokemon] knows an HM move
  342. ld hl, wPartyMon1Moves
  343. ld bc, wPartyMon2 - wPartyMon1
  344. jr .next
  345. ; unreachable
  346. ld hl, wBoxMon1Moves
  347. ld bc, wBoxMon2 - wBoxMon1
  348. .next
  349. ld a, [wWhichPokemon]
  350. call AddNTimes
  351. ld b, NUM_MOVES
  352. .loop
  353. ld a, [hli]
  354. push hl
  355. push bc
  356. ld hl, HMMoveArray
  357. ld de, 1
  358. call IsInArray
  359. pop bc
  360. pop hl
  361. ret c
  362. dec b
  363. jr nz, .loop
  364. and a
  365. ret
  366. HMMoveArray:
  367. db CUT
  368. db FLY
  369. db SURF
  370. db STRENGTH
  371. db FLASH
  372. db -1
  373. DisplayDepositWithdrawMenu:
  374. coord hl, 9, 10
  375. ld b, 6
  376. ld c, 9
  377. call TextBoxBorder
  378. ld a, [wParentMenuItem]
  379. and a ; was the Deposit or Withdraw item selected in the parent menu?
  380. ld de, DepositPCText
  381. jr nz, .next
  382. ld de, WithdrawPCText
  383. .next
  384. coord hl, 11, 12
  385. call PlaceString
  386. coord hl, 11, 14
  387. ld de, StatsCancelPCText
  388. call PlaceString
  389. ld hl, wTopMenuItemY
  390. ld a, 12
  391. ld [hli], a ; wTopMenuItemY
  392. ld a, 10
  393. ld [hli], a ; wTopMenuItemX
  394. xor a
  395. ld [hli], a ; wCurrentMenuItem
  396. inc hl
  397. ld a, 2
  398. ld [hli], a ; wMaxMenuItem
  399. ld a, A_BUTTON | B_BUTTON
  400. ld [hli], a ; wMenuWatchedKeys
  401. xor a
  402. ld [hl], a ; wLastMenuItem
  403. ld hl, wListScrollOffset
  404. ld [hli], a ; wListScrollOffset
  405. ld [hl], a ; wMenuWatchMovingOutOfBounds
  406. ld [wPlayerMonNumber], a
  407. ld [wPartyAndBillsPCSavedMenuItem], a
  408. .loop
  409. call HandleMenuInput
  410. bit 1, a ; pressed B?
  411. jr nz, .exit
  412. ld a, [wCurrentMenuItem]
  413. and a
  414. jr z, .choseDepositWithdraw
  415. dec a
  416. jr z, .viewStats
  417. .exit
  418. and a
  419. ret
  420. .choseDepositWithdraw
  421. scf
  422. ret
  423. .viewStats
  424. call SaveScreenTilesToBuffer1
  425. ld a, [wParentMenuItem]
  426. and a
  427. ld a, PLAYER_PARTY_DATA
  428. jr nz, .next2
  429. ld a, BOX_DATA
  430. .next2
  431. ld [wMonDataLocation], a
  432. predef StatusScreen
  433. predef StatusScreen2
  434. call LoadScreenTilesFromBuffer1
  435. call ReloadTilesetTilePatterns
  436. call RunDefaultPaletteCommand
  437. call LoadGBPal
  438. jr .loop
  439. DepositPCText: db "DEPOSIT@"
  440. WithdrawPCText: db "WITHDRAW@"
  441. StatsCancelPCText:
  442. db "STATS"
  443. next "CANCEL@"
  444. SwitchOnText:
  445. TX_FAR _SwitchOnText
  446. db "@"
  447. WhatText:
  448. TX_FAR _WhatText
  449. db "@"
  450. DepositWhichMonText:
  451. TX_FAR _DepositWhichMonText
  452. db "@"
  453. MonWasStoredText:
  454. TX_FAR _MonWasStoredText
  455. db "@"
  456. CantDepositLastMonText:
  457. TX_FAR _CantDepositLastMonText
  458. db "@"
  459. BoxFullText:
  460. TX_FAR _BoxFullText
  461. db "@"
  462. MonIsTakenOutText:
  463. TX_FAR _MonIsTakenOutText
  464. db "@"
  465. NoMonText:
  466. TX_FAR _NoMonText
  467. db "@"
  468. CantTakeMonText:
  469. TX_FAR _CantTakeMonText
  470. db "@"
  471. ReleaseWhichMonText:
  472. TX_FAR _ReleaseWhichMonText
  473. db "@"
  474. OnceReleasedText:
  475. TX_FAR _OnceReleasedText
  476. db "@"
  477. MonWasReleasedText:
  478. TX_FAR _MonWasReleasedText
  479. db "@"
  480. CableClubLeftGameboy::
  481. ld a, [hSerialConnectionStatus]
  482. cp USING_EXTERNAL_CLOCK
  483. ret z
  484. ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction
  485. cp SPRITE_FACING_RIGHT
  486. ret nz
  487. ld a, [wCurMap]
  488. cp TRADE_CENTER
  489. ld a, LINK_STATE_START_TRADE
  490. jr z, .next
  491. inc a ; LINK_STATE_START_BATTLE
  492. .next
  493. ld [wLinkState], a
  494. call EnableAutoTextBoxDrawing
  495. tx_pre_jump JustAMomentText
  496. CableClubRightGameboy::
  497. ld a, [hSerialConnectionStatus]
  498. cp USING_INTERNAL_CLOCK
  499. ret z
  500. ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction
  501. cp SPRITE_FACING_LEFT
  502. ret nz
  503. ld a, [wCurMap]
  504. cp TRADE_CENTER
  505. ld a, LINK_STATE_START_TRADE
  506. jr z, .next
  507. inc a ; LINK_STATE_START_BATTLE
  508. .next
  509. ld [wLinkState], a
  510. call EnableAutoTextBoxDrawing
  511. tx_pre_jump JustAMomentText
  512. JustAMomentText::
  513. TX_FAR _JustAMomentText
  514. db "@"
  515. ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction
  516. cp SPRITE_FACING_UP
  517. ret nz
  518. call EnableAutoTextBoxDrawing
  519. tx_pre_jump OpenBillsPCText
  520. OpenBillsPCText::
  521. db $FD ; FuncTX_BillsPC