summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/learn.asm220
-rwxr-xr-xengine/map_objects.asm2
-rw-r--r--home.asm1
-rw-r--r--home/map.asm2
-rw-r--r--main.asm127
5 files changed, 338 insertions, 14 deletions
diff --git a/engine/learn.asm b/engine/learn.asm
new file mode 100644
index 00000000..8f58178b
--- /dev/null
+++ b/engine/learn.asm
@@ -0,0 +1,220 @@
+LearnMove:
+ call BackUpTilesToBuffer
+ ld a, [wd005]
+ ld hl, wPartyMon1Nickname
+ call GetNick
+ ld hl, wStringBuffer1
+ ld de, wcf48
+ ld bc, $b
+ call CopyBytes
+.loop
+ ld hl, wPartyMon1Moves
+ ld bc, $30
+ ld a, [wd005]
+ call AddNTimes
+ ld d, h
+ ld e, l
+ ld b, $4
+.asm_660f
+ ld a, [hl]
+ and a
+ jr z, .asm_6643
+ inc hl
+ dec b
+ jr nz, .asm_660f
+ push de
+ call .AlreadyHaveFourMoves
+ pop de
+ jp c, .ConfirmStopLearning
+ push hl
+ push de
+ ld [wd151], a
+ ld b, a
+ ld a, [wBattleMode]
+ and a
+ jr z, .asm_6638
+ ld a, [wcbd3]
+ cp b
+ jr nz, .asm_6638
+ xor a
+ ld [wcbd3], a
+ ld [wcb53], a
+.asm_6638
+ call GetMoveName
+ ld hl, Text_1_2_and_Poof
+ call PrintText
+ pop de
+ pop hl
+.asm_6643
+ ld a, [wd14d]
+ ld [hl], a
+ ld bc, $15
+ add hl, bc
+ push hl
+ push de
+ dec a
+ ld hl, Moves + MOVE_PP ; $5b03
+ ld bc, $7
+ call AddNTimes
+ ld a, BANK(Moves)
+ call GetFarByte
+ pop de
+ pop hl
+ ld [hl], a
+ ld a, [wBattleMode]
+ and a
+ jp z, .LearnedMove
+ ld a, [wd005]
+ ld b, a
+ ld a, [wCurBattleMon]
+ cp b
+ jp nz, .LearnedMove
+ ld a, [wPlayerSubStatus5]
+ bit 3, a
+ jp nz, .LearnedMove
+ ld h, d
+ ld l, e
+ ld de, wBattleMonMoves
+ ld bc, $4
+ call CopyBytes
+ ld bc, $11
+ add hl, bc
+ ld de, wBattleMonPP
+ ld bc, $4
+ call CopyBytes
+ jp .LearnedMove
+
+.ConfirmStopLearning: ; 6694 (1:6694)
+ ld hl, Text_StopLearning
+ call PrintText
+ call YesNoBox
+ jp c, .loop
+ ld hl, Text_DidNotLearn
+ call PrintText
+ ld b, $0
+ ret
+
+.LearnedMove: ; 66a9 (1:66a9)
+ ld hl, Text_LearnedMove
+ call PrintText
+ ld b, $1
+ ret
+
+.AlreadyHaveFourMoves: ; 66b2 (1:66b2)
+ push hl
+ ld hl, Text_TryingToLearn
+ call PrintText
+ call YesNoBox
+ pop hl
+ ret c
+ ld bc, -4
+ add hl, bc
+ push hl
+ ld de, wd149
+ ld bc, $4
+ call CopyBytes
+ pop hl
+.asm_66cd
+ push hl
+ ld hl, Text_ForgetWhich
+ call PrintText
+ hlcoord 5, 2
+ ld b, $8
+ ld c, $d
+ call TextBox
+ hlcoord 7, 4
+ ld a, $28
+ ld [wd0d3], a
+ predef ListMoves
+ ld a, $4
+ ld [wMenuData2End], a
+ ld a, $6
+ ld [wced9], a
+ ld a, [wcfe3]
+ inc a
+ ld [wceda], a
+ ld a, $1
+ ld [wcedb], a
+ ld [wMenuCursorY], a
+ ld [wcee1], a
+ ld a, $3
+ ld [wMenuJoypadFilter], a
+ ld a, $20
+ ld [wcedc], a
+ xor a
+ ld [wcedd], a
+ ld a, $20
+ ld [wcede], a
+ call StaticMenuJoypad
+ push af
+ call ReloadTilesFromBuffer
+ pop af
+ pop hl
+ bit 1, a
+ jr nz, .asm_6748
+ push hl
+ ld a, [wMenuCursorY]
+ 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, .asm_673f
+ pop hl
+ add hl, bc
+ and a
+ ret
+
+.asm_673f
+ ld hl, Text_CantForgetHM
+ call PrintText
+ pop hl
+ jr .asm_66cd
+
+.asm_6748
+ scf
+ ret
+
+Text_LearnedMove:
+ text_jump Text_LearnedMove_
+ db "@"
+
+Text_ForgetWhich:
+ text_jump Text_ForgetWhich_
+ db "@"
+
+Text_StopLearning:
+ text_jump Text_StopLearning_
+ db "@"
+
+Text_DidNotLearn:
+ text_jump Text_DidNotLearn_
+ db "@"
+
+Text_TryingToLearn:
+ text_jump Text_TryingToLearn_
+ db "@"
+
+Text_1_2_and_Poof:
+ text_jump Text_1_2_and_Poof_
+ start_asm
+ push de
+ ld de, SFX_SWITCH_POKEMON
+ call PlaySFX
+ pop de
+ ld hl, .PoofForgot
+ ret
+
+.PoofForgot:
+ text_jump Text_PoofForgot_
+ db "@"
+
+Text_CantForgetHM:
+ text_jump Text_CantForgetHM_
+ db "@"
diff --git a/engine/map_objects.asm b/engine/map_objects.asm
index 12527597..983b3daf 100755
--- a/engine/map_objects.asm
+++ b/engine/map_objects.asm
@@ -1187,7 +1187,7 @@ Function58b0: ; 58b0 (1:58b0)
jr nz, .asm_58bf
ret
-Function58c5:: ; 58c5 (1:58c5)
+ApplyBGMapAnchorToObjects:: ; 58c5 (1:58c5)
push hl
push de
push bc
diff --git a/home.asm b/home.asm
index fcac495f..7f3decea 100644
--- a/home.asm
+++ b/home.asm
@@ -1705,6 +1705,7 @@ GetBaseData::
GetCurNick::
ld a, [wd005]
ld hl, wPartyMon1Nickname
+GetNick::
push hl
push bc
call SkipNames
diff --git a/home/map.asm b/home/map.asm
index b6a89742..4b7fc2cd 100644
--- a/home/map.asm
+++ b/home/map.asm
@@ -224,7 +224,7 @@ Function20c7:: ; 20c7 (0:20c7)
ld [wd05b], a
ld [hSCY], a
ld [hSCX], a
- callba Function58c5
+ callba ApplyBGMapAnchorToObjects
ld a, $60
ld bc, $400
ld hl, $9800
diff --git a/main.asm b/main.asm
index dcfb8e47..fa73e475 100644
--- a/main.asm
+++ b/main.asm
@@ -51,12 +51,102 @@ INCLUDE "engine/map_objects.asm"
INCLUDE "engine/main_menu.asm"
INCLUDE "engine/title.asm"
-IF DEF(GOLD)
-ReanchorBGMap_NoOAMUpdate:: ; 6551
- dr $6551, $65cb
-LoadFonts_NoOAMUpdate:: ; 65cb
- dr $65cb, $677e
+ReanchorBGMap_NoOAMUpdate:: ; 6551 (1:6551)
+ call DelayFrame
+ ld a, [hOAMUpdate]
+ push af
+ ld a, $1
+ ld [hOAMUpdate], a
+ ld a, [hBGMapMode]
+ push af
+ xor a
+ ld [hBGMapMode], a
+ call Function656b
+ pop af
+ ld [hBGMapMode], a
+ pop af
+ ld [hOAMUpdate], a
+ ret
+
+Function656b: ; 656b (1:656b)
+ xor a
+ ld [hLCDCPointer], a
+ ld [hBGMapMode], a
+ ld hl, wd565
+ set 7, [hl]
+ res 2, [hl]
+ ld a, $90
+ ld [hWY], a
+ call OverworldTextModeSwitch
+ ld a, $9c
+ call .LoadBGMapAddrIntoHRAM
+ call _OpenAndCloseMenu_HDMATransferTileMapAndAttrMap
+ xor a
+ ld [hBGMapMode], a
+ ld [hWY], a
+ ld a, $98
+ call .LoadBGMapAddrIntoHRAM
+ call .WaitTransfer
+ xor a
+ ld [wd05b], a
+ ld a, $98
+ ld [wd05c], a
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ call ApplyBGMapAnchorToObjects
+ ret
+
+.LoadBGMapAddrIntoHRAM: ; 65a5 (1:65a5)
+ ld [hBGMapAddress + 1], a
+ xor a
+ ld [hBGMapAddress], a
+ ret
+
+.WaitTransfer: ; 65ab (1:65ab)
+ ld a, [hBGMapMode]
+ push af
+ xor a
+ ld [hBGMapMode], a
+ ld a, [hOAMUpdate]
+ push af
+ ld a, $1
+ ld [hOAMUpdate], a
+ ld a, $3
+ ld [hFF9E], a
+.asm_65bc
+ call DelayFrame
+ ld a, [hFF9E]
+ and a
+ jr nz, .asm_65bc
+ pop af
+ ld [hOAMUpdate], a
+ pop af
+ ld [hBGMapMode], a
+ ret
+
+LoadFonts_NoOAMUpdate:: ; 65cb (1:65cb)
+ ld a, [hOAMUpdate]
+ push af
+ ld a, $1
+ ld [hOAMUpdate], a
+ call .LoadGFX
+ pop af
+ ld [hOAMUpdate], a
+ ret
+
+.LoadGFX: ; 65d9 (1:65d9)
+ call LoadFontsExtra
+ ld a, $90
+ ld [hWY], a
+ call SafeUpdateSprites
+ call Functiond9e
+ ret
+
+INCLUDE "engine/learn.asm"
+
CheckNickErrors:: ; 677e
+IF DEF(GOLD)
dr $677e, $67bd
Multiply_:: ; 67bd
dr $67bd, $681d
@@ -67,11 +157,6 @@ CheckNPCMovementPermissions: ; 6fa0
ENDC
IF DEF(SILVER)
-ReanchorBGMap_NoOAMUpdate:: ; 6517
- dr $6517, $6591
-LoadFonts_NoOAMUpdate:: ; 6591
- dr $6591, $6744
-CheckNickErrors:: ; 6744
dr $6744, $6783
Multiply_:: ; 6783
dr $6783, $67e3
@@ -256,7 +341,9 @@ BattleRandom_:: ; 3ec11
dr $3ec11, $40000
SECTION "bank10", ROMX, BANK[$10]
- dr $40000, $44000
+ dr $40000, $41afe
+Moves::
+ dr $41afe, $44000
SECTION "bank11", ROMX, BANK[$11]
dr $44000, $44870
@@ -687,7 +774,23 @@ CoordinatesEventText_:: ; 195b9d
dr $195b9d, $198000
SECTION "bank66", ROMX, BANK[$66]
- dr $198000, $19c000
+ dr $198000, $1981e1
+Text_LearnedMove_::
+ dr $1981e1, $1981f8
+Text_ForgetWhich_::
+ dr $1981f8, $198219
+Text_StopLearning_::
+ dr $198219, $19822f
+Text_DidNotLearn_::
+ dr $19822f, $198249
+Text_TryingToLearn_::
+ dr $198249, $1982c0
+Text_1_2_and_Poof_::
+ dr $1982c0, $1982ce
+Text_PoofForgot_::
+ dr $1982ce, $1982f2
+Text_CantForgetHM_::
+ dr $1982f2, $19c000
SECTION "bank67", ROMX, BANK[$67]
dr $19c000, $1a0000