diff options
Diffstat (limited to 'engine/events/move_deleter.asm')
-rw-r--r-- | engine/events/move_deleter.asm | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/engine/events/move_deleter.asm b/engine/events/move_deleter.asm new file mode 100644 index 00000000..f9f83fab --- /dev/null +++ b/engine/events/move_deleter.asm @@ -0,0 +1,150 @@ +MoveDeletion: + ld hl, .DeleterIntroText + call PrintText + call YesNoBox + jr c, .declined + ld hl, .DeleterAskWhichMonText + call PrintText + farcall SelectMonFromParty + jr c, .declined + ld a, [wCurPartySpecies] + cp EGG + jr z, .egg + ld a, [wCurPartyMon] + ld hl, wPartyMon1Moves + 1 + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + ld a, [hl] + and a + jr z, .onlyonemove + ld hl, .DeleterAskWhichMoveText + call PrintText + call LoadStandardMenuHeader + farcall ChooseMoveToDelete + push af + call ReturnToMapWithSpeechTextbox + pop af + jr c, .declined + ld a, [wMenuCursorY] + push af + ld a, [wCurSpecies] + ld [wNamedObjectIndexBuffer], a + call GetMoveName + ld hl, .AskDeleteMoveText + call PrintText + call YesNoBox + pop bc + jr c, .declined + call .DeleteMove + call WaitSFX + ld de, SFX_MOVE_DELETED + call PlaySFX + call WaitSFX + ld hl, .DeleterForgotMoveText + call PrintText + ret + +.egg + ld hl, .MailEggText + call PrintText + ret + +.declined + ld hl, .DeleterNoComeAgainText + call PrintText + ret + +.onlyonemove + ld hl, .MoveKnowsOneText + call PrintText + ret + +.MoveKnowsOneText: + text_far _MoveKnowsOneText + text_end + +.AskDeleteMoveText: + text_far _AskDeleteMoveText + text_end + +.DeleterForgotMoveText: + text_far _DeleterForgotMoveText + text_end + +.MailEggText: + text_far _DeleterEggText + text_end + +.DeleterNoComeAgainText: + text_far _DeleterNoComeAgainText + text_end + +.DeleterAskWhichMoveText: + text_far _DeleterAskWhichMoveText + text_end + +.DeleterIntroText: + text_far _DeleterIntroText + text_end + +.DeleterAskWhichMonText: + text_far _DeleterAskWhichMonText + text_end + +.DeleteMove: + ld a, b + push bc + dec a + ld c, a + ld b, 0 + ld hl, wPartyMon1Moves + add hl, bc + ld a, [wCurPartyMon] + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + pop bc + push bc + inc b +.loop + ld a, b + cp NUM_MOVES + 1 + jr z, .okay + inc hl + ld a, [hld] + ld [hl], a + inc hl + inc b + jr .loop + +.okay + xor a + ld [hl], a + pop bc + + ld a, b + push bc + dec a + ld c, a + ld b, 0 + ld hl, wPartyMon1PP + add hl, bc + ld a, [wCurPartyMon] + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + pop bc + inc b +.loop2 + ld a, b + cp NUM_MOVES + 1 + jr z, .done + inc hl + ld a, [hld] + ld [hl], a + inc hl + inc b + jr .loop2 + +.done + xor a + ld [hl], a + ret |