heal_party.asm 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. HealParty:
  2. ; Restore HP and PP.
  3. ld hl, wPartySpecies
  4. ld de, wPartyMon1HP
  5. .healmon
  6. ld a, [hli]
  7. cp $ff
  8. jr z, .done
  9. push hl
  10. push de
  11. ld hl, wPartyMon1Status - wPartyMon1HP
  12. add hl, de
  13. xor a
  14. ld [hl], a
  15. push de
  16. ld b, NUM_MOVES ; A Pokémon has 4 moves
  17. .pp
  18. ld hl, wPartyMon1Moves - wPartyMon1HP
  19. add hl, de
  20. ld a, [hl]
  21. and a
  22. jr z, .nextmove
  23. dec a
  24. ld hl, wPartyMon1PP - wPartyMon1HP
  25. add hl, de
  26. push hl
  27. push de
  28. push bc
  29. ld hl, Moves
  30. ld bc, MoveEnd - Moves
  31. call AddNTimes
  32. ld de, wcd6d
  33. ld a, BANK(Moves)
  34. call FarCopyData
  35. ld a, [wcd6d + 5] ; PP is byte 5 of move data
  36. pop bc
  37. pop de
  38. pop hl
  39. inc de
  40. push bc
  41. ld b, a
  42. ld a, [hl]
  43. and $c0
  44. add b
  45. ld [hl], a
  46. pop bc
  47. .nextmove
  48. dec b
  49. jr nz, .pp
  50. pop de
  51. ld hl, wPartyMon1MaxHP - wPartyMon1HP
  52. add hl, de
  53. ld a, [hli]
  54. ld [de], a
  55. inc de
  56. ld a, [hl]
  57. ld [de], a
  58. pop de
  59. pop hl
  60. push hl
  61. ld bc, wPartyMon2 - wPartyMon1
  62. ld h, d
  63. ld l, e
  64. add hl, bc
  65. ld d, h
  66. ld e, l
  67. pop hl
  68. jr .healmon
  69. .done
  70. xor a
  71. ld [wWhichPokemon], a
  72. ld [wd11e], a
  73. ld a, [wPartyCount]
  74. ld b, a
  75. .ppup
  76. push bc
  77. call RestoreBonusPP
  78. pop bc
  79. ld hl, wWhichPokemon
  80. inc [hl]
  81. dec b
  82. jr nz, .ppup
  83. ret