diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2015-11-28 15:13:40 -0500 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2015-11-28 15:13:40 -0500 |
commit | 8612a4a531b755b1d323e834980dab5ae896499c (patch) | |
tree | 10e38f0fb2bd99a4f7077c1d3c82662ae43b63a4 /engine/learn.asm | |
parent | 43903f543bb04344710d57862a2c5534fd3e5b4c (diff) |
Renaming sections, further dissolving main.asm
Diffstat (limited to 'engine/learn.asm')
-rwxr-xr-x | engine/learn.asm | 257 |
1 files changed, 257 insertions, 0 deletions
diff --git a/engine/learn.asm b/engine/learn.asm new file mode 100755 index 000000000..cafbe6f43 --- /dev/null +++ b/engine/learn.asm @@ -0,0 +1,257 @@ +LearnMove: ; 6508 + call LoadTileMapToTempTileMap + ld a, [CurPartyMon] + ld hl, PartyMonNicknames + call GetNick + ld hl, StringBuffer1 + ld de, wd050_MonNick + ld bc, PKMN_NAME_LENGTH + call CopyBytes + +.loop + ld hl, PartyMon1Moves + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [CurPartyMon] + call AddNTimes + ld d, h + ld e, l + ld b, NUM_MOVES +; Get the first empty move slot. This routine also serves to +; determine whether the Pokemon learning the moves already has +; all four slots occupied, in which case one would need to be +; deleted. +.next + ld a, [hl] + and a + jr z, .learn + inc hl + dec b + jr nz, .next +; If we're here, we enter the routine for forgetting a move +; to make room for the new move we're trying to learn. + push de + call ForgetMove + pop de + jp c, .cancel + + push hl + push de + ld [wd265], a + + ld b, a + ld a, [wBattleMode] + and a + jr z, .not_disabled + ld a, [DisabledMove] + cp b + jr nz, .not_disabled + xor a + ld [DisabledMove], a + ld [PlayerDisableCount], a +.not_disabled + + call GetMoveName + ld hl, UnknownText_0x6684 ; 1, 2 and… + call PrintText + pop de + pop hl + +.learn + ld a, [wd262] + ld [hl], a + ld bc, MON_PP - MON_MOVES + add hl, bc + + push hl + push de + dec a + ld hl, Moves + MOVE_PP + ld bc, MOVE_LENGTH + call AddNTimes + ld a, BANK(Moves) + call GetFarByte + pop de + pop hl + + ld [hl], a + + ld a, [wBattleMode] + and a + jp z, .learned + + ld a, [CurPartyMon] + ld b, a + ld a, [CurBattleMon] + cp b + jp nz, .learned + + ld a, [PlayerSubStatus5] + bit SUBSTATUS_TRANSFORMED, a + jp nz, .learned + + ld h, d + ld l, e + ld de, BattleMonMoves + ld bc, NUM_MOVES + call CopyBytes + ld bc, PartyMon1PP - (PartyMon1Moves + NUM_MOVES) + add hl, bc + ld de, BattleMonPP + ld bc, NUM_MOVES + call CopyBytes + jp .learned + +.cancel + ld hl, UnknownText_0x6675 ; Stop learning <MOVE>? + call PrintText + call YesNoBox + jp c, .loop + + ld hl, UnknownText_0x667a ; <MON> did not learn <MOVE>. + call PrintText + ld b, 0 + ret + +.learned + ld hl, UnknownText_0x666b ; <MON> learned <MOVE>! + call PrintText + ld b, 1 + ret +; 65d3 + +ForgetMove: ; 65d3 + push hl + ld hl, UnknownText_0x667f + call PrintText + call YesNoBox + pop hl + ret c + ld bc, -NUM_MOVES + add hl, bc + push hl + ld de, wListMoves_MoveIndicesBuffer + ld bc, NUM_MOVES + call CopyBytes + pop hl +.loop + push hl + ld hl, UnknownText_0x6670 + call PrintText + hlcoord 5, 2 + ld b, NUM_MOVES * 2 + ld c, MOVE_NAME_LENGTH + call TextBox + hlcoord 5 + 2, 2 + 2 + ld a, SCREEN_WIDTH * 2 + ld [Buffer1], a + predef ListMoves + ; wMenuData3 + ld a, $4 + ld [wcfa1], a + ld a, $6 + ld [wcfa2], a + ld a, [wd0eb] + inc a + ld [wcfa3], a + ld a, $1 + ld [wcfa4], a + ld [MenuSelection2], a + ld [wcfaa], a + ld a, $3 + ld [wcfa8], a + ld a, $20 + ld [wcfa5], a + xor a + ld [wcfa6], a + ld a, $20 + ld [wcfa7], a + call Function1bc9 + push af + call Call_LoadTempTileMapToTileMap + pop af + pop hl + bit 1, a + jr nz, .cancel + push hl + ld a, [MenuSelection2] + dec a + ld c, a + ld b, 0 + add hl, bc + ld a, [hl] + push af + push bc + call IsHMMove + pop bc + pop de + ld a, d + jr c, .hmmove + pop hl + add hl, bc + and a + ret + +.hmmove + ld hl, UnknownText_0x669a + call PrintText + pop hl + jr .loop + +.cancel + scf + ret +; 666b + +UnknownText_0x666b: ; 666b +; <MON> learned <MOVE>! + text_jump UnknownText_0x1c5660 + db "@" +; 6670 + +UnknownText_0x6670: ; 6670 +; Which move should be forgotten? + text_jump UnknownText_0x1c5678 + db "@" +; 6675 + +UnknownText_0x6675: ; 6675 +; Stop learning <MOVE>? + text_jump UnknownText_0x1c5699 + db "@" +; 667a + +UnknownText_0x667a: ; 667a +; <MON> did not learn <MOVE>. + text_jump UnknownText_0x1c56af + db "@" +; 667f + +UnknownText_0x667f: ; 667f +; <MON> is trying to learn <MOVE>. But <MON> can't learn more than +; four moves. Delete an older move to make room for <MOVE>? + text_jump UnknownText_0x1c56c9 + db "@" +; 6684 + +UnknownText_0x6684: ; 6684 + text_jump UnknownText_0x1c5740 ; 1, 2 and… + start_asm + push de + ld de, SFX_SWITCH_POKEMON + call PlaySFX + pop de + ld hl, UnknownText_0x6695 + ret +; 6695 + +UnknownText_0x6695: ; 6695 +; Poof! <MON> forgot <MOVE>. And… + text_jump UnknownText_0x1c574e + db "@" +; 669a + +UnknownText_0x669a: ; 669a +; HM moves can't be forgotten now. + text_jump UnknownText_0x1c5772 + db "@" +; 669f |