summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
authorPikalaxALT <PikalaxALT@gmail.com>2015-11-18 18:35:44 -0500
committerPikalaxALT <PikalaxALT@gmail.com>2015-11-18 18:35:44 -0500
commit91f749101724a17398363745d8ac95cd4feeb1c1 (patch)
treea1e244eb086ed30d5f477fa80c9d078f20b5180c /engine
parent1ff37608b6b71f831608c1319d71eec3ac0583a9 (diff)
items/item_effects.asm; engine/evolution.asm
Diffstat (limited to 'engine')
-rwxr-xr-xengine/breeding/egg.asm2
-rwxr-xr-xengine/evolve.asm682
-rwxr-xr-xengine/link.asm2
-rw-r--r--engine/party_menu.asm52
-rwxr-xr-xengine/pokegear.asm5
-rw-r--r--engine/predef.asm4
-rw-r--r--engine/specials.asm2
-rwxr-xr-xengine/startmenu.asm97
-rwxr-xr-xengine/town_map.asm2
9 files changed, 766 insertions, 82 deletions
diff --git a/engine/breeding/egg.asm b/engine/breeding/egg.asm
index f007fde6a..ea365d8b5 100755
--- a/engine/breeding/egg.asm
+++ b/engine/breeding/egg.asm
@@ -219,7 +219,7 @@ Function16f7a: ; 16f7a (5:6f7a)
push de
- callba Function4dbb8
+ callba SetEggMonCaughtData
callba MobileFn_10608d
ld a, [CurPartyMon]
ld hl, PartyMons ; wdcdf (aliases: PartyMon1, PartyMon1Species)
diff --git a/engine/evolve.asm b/engine/evolve.asm
new file mode 100755
index 000000000..940b033b1
--- /dev/null
+++ b/engine/evolve.asm
@@ -0,0 +1,682 @@
+EvolvePokemon: ; 421d8
+ ld hl, EvolvableFlags
+ xor a
+ ld [hl], a
+ ld a, [CurPartyMon]
+ ld c, a
+ ld b, SET_FLAG
+ call EvoFlagAction
+
+EvolveAfterBattle: ; 421e6
+ xor a
+ ld [wd268], a
+ dec a
+ ld [CurPartyMon], a
+ push hl
+ push bc
+ push de
+ ld hl, PartyCount
+
+ push hl
+
+CheckForEvolvablePokemon: ; 421f5
+ ld hl, CurPartyMon
+ inc [hl]
+
+ pop hl
+
+ inc hl
+ ld a, [hl]
+ cp $ff
+ jp z, Evolution_ReturnToMap
+
+ ld [Buffer1], a
+
+ push hl
+ ld a, [CurPartyMon]
+ ld c, a
+ ld hl, EvolvableFlags
+ ld b, CHECK_FLAG
+ call EvoFlagAction
+ ld a, c
+ and a
+ jp z, CheckForEvolvablePokemon
+
+ ld a, [Buffer1]
+ dec a
+ ld b, 0
+ ld c, a
+ ld hl, EvosAttacksPointers
+rept 2
+ add hl, bc
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+ push hl
+ xor a
+ ld [MonType], a
+ predef CopyPkmnToTempMon
+ pop hl
+
+.loop
+ ld a, [hli]
+ and a
+ jr z, CheckForEvolvablePokemon
+
+ ld b, a
+
+ cp EVOLVE_TRADE
+ jr z, .trade
+
+ ld a, [wLinkMode]
+ and a
+ jp nz, .dont_evolve_2
+
+ ld a, b
+ cp EVOLVE_ITEM
+ jp z, .item
+
+ ld a, [wd1e9]
+ and a
+ jp nz, .dont_evolve_2
+
+ ld a, b
+ cp EVOLVE_LEVEL
+ jp z, .level
+
+ cp EVOLVE_HAPPINESS
+ jr z, .happiness
+
+
+; EVOLVE_STAT
+ ld a, [TempMonLevel]
+ cp [hl]
+ jp c, .dont_evolve_1
+
+ call IsMonHoldingEverstone
+ jp z, .dont_evolve_1
+
+ push hl
+ ld de, TempMonAttack
+ ld hl, TempMonDefense
+ ld c, 2
+ call StringCmp
+ ld a, ATK_EQ_DEF
+ jr z, .got_tyrogue_evo
+ ld a, ATK_LT_DEF
+ jr c, .got_tyrogue_evo
+ ld a, ATK_GT_DEF
+.got_tyrogue_evo
+ pop hl
+
+ inc hl
+ cp [hl]
+ jp nz, .dont_evolve_2
+
+ inc hl
+ jr .proceed
+
+
+.happiness
+ ld a, [TempMonHappiness]
+ cp 220
+ jp c, .dont_evolve_2
+
+ call IsMonHoldingEverstone
+ jp z, .dont_evolve_2
+
+ ld a, [hli]
+ cp TR_ANYTIME
+ jr z, .proceed
+ cp TR_MORNDAY
+ jr z, .happiness_daylight
+
+; TR_NITE
+ ld a, [TimeOfDay]
+ cp NITE
+ jp nz, .dont_evolve_3
+ jr .proceed
+
+.happiness_daylight
+ ld a, [TimeOfDay]
+ cp NITE
+ jp z, .dont_evolve_3
+ jr .proceed
+
+
+.trade
+ ld a, [wLinkMode]
+ and a
+ jp z, .dont_evolve_2
+
+ call IsMonHoldingEverstone
+ jp z, .dont_evolve_2
+
+ ld a, [hli]
+ ld b, a
+ inc a
+ jr z, .proceed
+
+ ld a, [wLinkMode]
+ cp LINK_TIMECAPSULE
+ jp z, .dont_evolve_3
+
+ ld a, [TempMonItem]
+ cp b
+ jp nz, .dont_evolve_3
+
+ xor a
+ ld [TempMonItem], a
+ jr .proceed
+
+
+.item
+ ld a, [hli]
+ ld b, a
+ ld a, [CurItem]
+ cp b
+ jp nz, .dont_evolve_3
+
+ ld a, [wd1e9]
+ and a
+ jp z, .dont_evolve_3
+ ld a, [wLinkMode]
+ and a
+ jp nz, .dont_evolve_3
+ jr .proceed
+
+
+.level
+ ld a, [hli]
+ ld b, a
+ ld a, [TempMonLevel]
+ cp b
+ jp c, .dont_evolve_3
+ call IsMonHoldingEverstone
+ jp z, .dont_evolve_3
+
+.proceed
+ ld a, [TempMonLevel]
+ ld [CurPartyLevel], a
+ ld a, $1
+ ld [wd268], a
+
+ push hl
+
+ ld a, [hl]
+ ld [Buffer2], a
+ ld a, [CurPartyMon]
+ ld hl, PartyMonNicknames
+ call GetNick
+ call CopyName1
+ ld hl, Text_WhatEvolving
+ call PrintText
+
+ ld c, 50
+ call DelayFrames
+
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 0, 0
+ lb bc, 12, 20
+ call ClearBox
+
+ ld a, $1
+ ld [hBGMapMode], a
+ call ClearSprites
+
+ callba EvolutionAnimation
+
+ push af
+ call ClearSprites
+ pop af
+ jp c, CancelEvolution
+
+ ld hl, Text_CongratulationsYourPokemon
+ call PrintText
+
+ pop hl
+
+ ld a, [hl]
+ ld [CurSpecies], a
+ ld [TempMonSpecies], a
+ ld [Buffer2], a
+ ld [wd265], a
+ call GetPokemonName
+
+ push hl
+ ld hl, Text_EvolvedIntoPKMN
+ call PrintTextBoxText
+ callba MobileFn_106094
+
+ ld de, MUSIC_NONE
+ call PlayMusic
+ ld de, SFX_CAUGHT_MON
+ call PlaySFX
+ call WaitSFX
+
+ ld c, 40
+ call DelayFrames
+
+ call ClearTileMap
+ call UpdateSpeciesNameIfNotNicknamed
+ call GetBaseData
+
+ ld hl, TempMonExp + 2
+ ld de, TempMonMaxHP
+ ld b, $1
+ predef CalcPkmnStats
+
+ ld a, [CurPartyMon]
+ ld hl, PartyMons
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ ld e, l
+ ld d, h
+ ld bc, MON_MAXHP
+ add hl, bc
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ld hl, TempMonMaxHP + 1
+ ld a, [hld]
+ sub c
+ ld c, a
+ ld a, [hl]
+ sbc b
+ ld b, a
+ ld hl, TempMonHP + 1
+ ld a, [hl]
+ add c
+ ld [hld], a
+ ld a, [hl]
+ adc b
+ ld [hl], a
+
+ ld hl, TempMonSpecies
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call CopyBytes
+
+ ld a, [CurSpecies]
+ ld [wd265], a
+ xor a
+ ld [MonType], a
+ call LearnLevelMoves
+ ld a, [wd265]
+ dec a
+ call SetSeenAndCaughtMon
+
+ ld a, [wd265]
+ cp UNOWN
+ jr nz, .skip_unown
+
+ ld hl, TempMonDVs
+ predef GetUnownLetter
+ callab UpdateUnownDex
+
+.skip_unown
+ pop de
+ pop hl
+ ld a, [TempMonSpecies]
+ ld [hl], a
+ push hl
+ ld l, e
+ ld h, d
+ jp CheckForEvolvablePokemon
+; 423f8
+
+.dont_evolve_1
+ inc hl
+.dont_evolve_2
+ inc hl
+.dont_evolve_3
+ inc hl
+ jp .loop
+; 423fe
+
+; dummy pop
+ pop hl
+
+Evolution_ReturnToMap: ; 423ff
+ pop de
+ pop bc
+ pop hl
+ ld a, [wLinkMode]
+ and a
+ ret nz
+ ld a, [wBattleMode]
+ and a
+ ret nz
+ ld a, [wd268]
+ and a
+ call nz, RestartMapMusic
+ ret
+; 42414
+
+UpdateSpeciesNameIfNotNicknamed: ; 42414
+ ld a, [CurSpecies]
+ push af
+ ld a, [BaseDexNo]
+ ld [wd265], a
+ call GetPokemonName
+ pop af
+ ld [CurSpecies], a
+ ld hl, StringBuffer1
+ ld de, StringBuffer2
+.loop
+ ld a, [de]
+ inc de
+ cp [hl]
+ inc hl
+ ret nz
+ cp "@"
+ jr nz, .loop
+
+ ld a, [CurPartyMon]
+ ld bc, PKMN_NAME_LENGTH
+ ld hl, PartyMonNicknames
+ call AddNTimes
+ push hl
+ ld a, [CurSpecies]
+ ld [wd265], a
+ call GetPokemonName
+ ld hl, StringBuffer1
+ pop de
+ ld bc, PKMN_NAME_LENGTH
+ jp CopyBytes
+; 42454
+
+CancelEvolution: ; 42454
+ ld hl, Text_StoppedEvolving
+ call PrintText
+ call ClearTileMap
+ pop hl
+ jp CheckForEvolvablePokemon
+; 42461
+
+IsMonHoldingEverstone: ; 42461
+ push hl
+ ld a, [CurPartyMon]
+ ld hl, PartyMon1Item
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ ld a, [hl]
+ cp EVERSTONE
+ pop hl
+ ret
+; 42473
+
+Text_CongratulationsYourPokemon: ; 0x42473
+ ; Congratulations! Your @ @
+ text_jump UnknownText_0x1c4b92
+ db "@"
+; 0x42478
+
+Text_EvolvedIntoPKMN: ; 0x42478
+ ; evolved into @ !
+ text_jump UnknownText_0x1c4baf
+ db "@"
+; 0x4247d
+
+Text_StoppedEvolving: ; 0x4247d
+ ; Huh? @ stopped evolving!
+ text_jump UnknownText_0x1c4bc5
+ db "@"
+; 0x42482
+
+Text_WhatEvolving: ; 0x42482
+ ; What? @ is evolving!
+ text_jump UnknownText_0x1c4be3
+ db "@"
+; 0x42487
+
+
+LearnLevelMoves: ; 42487
+ ld a, [wd265]
+ ld [CurPartySpecies], a
+ dec a
+ ld b, 0
+ ld c, a
+ ld hl, EvosAttacksPointers
+rept 2
+ add hl, bc
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+.skip_evos
+ ld a, [hli]
+ and a
+ jr nz, .skip_evos
+
+.find_move
+ ld a, [hli]
+ and a
+ jr z, .done
+
+ ld b, a
+ ld a, [CurPartyLevel]
+ cp b
+ ld a, [hli]
+ jr nz, .find_move
+
+ push hl
+ ld d, a
+ ld hl, PartyMon1Moves
+ ld a, [CurPartyMon]
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+
+ ld b, NUM_MOVES
+.check_move
+ ld a, [hli]
+ cp d
+ jr z, .has_move
+ dec b
+ jr nz, .check_move
+ jr .learn
+.has_move
+
+ pop hl
+ jr .find_move
+
+.learn
+ ld a, d
+ ld [wd262], a
+ ld [wd265], a
+ call GetMoveName
+ call CopyName1
+ predef LearnMove
+ pop hl
+ jr .find_move
+
+.done
+ ld a, [CurPartySpecies]
+ ld [wd265], a
+ ret
+; 424e1
+
+
+FillMoves: ; 424e1
+; Fill in moves at de for CurPartySpecies at CurPartyLevel
+
+ push hl
+ push de
+ push bc
+ ld hl, EvosAttacksPointers
+ ld b, 0
+ ld a, [CurPartySpecies]
+ dec a
+ add a
+ rl b
+ ld c, a
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+.GoToAttacks
+ ld a, [hli]
+ and a
+ jr nz, .GoToAttacks
+ jr .GetLevel
+
+.NextMove
+ pop de
+.GetMove
+ inc hl
+.GetLevel
+ ld a, [hli]
+ and a
+ jp z, .done
+ ld b, a
+ ld a, [CurPartyLevel]
+ cp b
+ jp c, .done
+ ld a, [Buffer1]
+ and a
+ jr z, .CheckMove
+ ld a, [wd002]
+ cp b
+ jr nc, .GetMove
+
+.CheckMove
+ push de
+ ld c, NUM_MOVES
+.CheckRepeat
+ ld a, [de]
+ inc de
+ cp [hl]
+ jr z, .NextMove
+ dec c
+ jr nz, .CheckRepeat
+ pop de
+ push de
+ ld c, NUM_MOVES
+.CheckSlot
+ ld a, [de]
+ and a
+ jr z, .LearnMove
+ inc de
+ dec c
+ jr nz, .CheckSlot
+ pop de
+ push de
+ push hl
+ ld h, d
+ ld l, e
+ call ShiftMoves
+ ld a, [Buffer1]
+ and a
+ jr z, .ShiftedMove
+ push de
+ ld bc, PartyMon1PP - (PartyMon1Moves + NUM_MOVES - 1)
+ add hl, bc
+ ld d, h
+ ld e, l
+ call ShiftMoves
+ pop de
+
+.ShiftedMove
+ pop hl
+
+.LearnMove
+ ld a, [hl]
+ ld [de], a
+ ld a, [Buffer1]
+ and a
+ jr z, .NextMove
+ push hl
+ ld a, [hl]
+ ld hl, MON_PP - MON_MOVES
+ add hl, de
+ push hl
+ dec a
+ ld hl, Moves + MOVE_PP
+ ld bc, MOVE_LENGTH
+ call AddNTimes
+ ld a, BANK(Moves)
+ call GetFarByte
+ pop hl
+ ld [hl], a
+ pop hl
+ jr .NextMove
+
+.done
+ pop bc
+ pop de
+ pop hl
+ ret
+; 4256e
+
+ShiftMoves: ; 4256e
+ ld c, NUM_MOVES - 1
+.loop
+ inc de
+ ld a, [de]
+ ld [hli], a
+ dec c
+ jr nz, .loop
+ ret
+; 42577
+
+
+EvoFlagAction: ; 42577
+ push de
+ ld d, $0
+ predef FlagPredef
+ pop de
+ ret
+; 42581
+
+GetPreEvolution: ; 42581
+; Find the first mon to evolve into CurPartySpecies.
+
+; Return carry and the new species in CurPartySpecies
+; if a pre-evolution is found.
+
+ ld c, 0
+.loop ; For each Pokemon...
+ ld hl, EvosAttacksPointers
+ ld b, 0
+rept 2
+ add hl, bc
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+.loop2 ; For each evolution...
+ ld a, [hli]
+ and a
+ jr z, .no_evolve ; If we jump, this Pokemon does not evolve into CurPartySpecies.
+ cp EVOLVE_STAT ; This evolution type has the extra parameter of stat comparison.
+ jr nz, .not_tyrogue
+ inc hl
+
+.not_tyrogue
+ inc hl
+ ld a, [CurPartySpecies]
+ cp [hl]
+ jr z, .found_preevo
+ inc hl
+ ld a, [hl]
+ and a
+ jr nz, .loop2
+
+.no_evolve
+ inc c
+ ld a, c
+ cp NUM_POKEMON
+ jr c, .loop
+ and a
+ ret
+
+.found_preevo
+ inc c
+ ld a, c
+ ld [CurPartySpecies], a
+ scf
+ ret
+; 425b1
diff --git a/engine/link.asm b/engine/link.asm
index afc4f2d2e..afdbd218a 100755
--- a/engine/link.asm
+++ b/engine/link.asm
@@ -1920,7 +1920,7 @@ Function28b87: ; 28b87
ld a, [PartyCount]
dec a
ld [CurPartyMon], a
- callab Function421d8
+ callab EvolvePokemon
call ClearScreen
call Function28ef8
call Function28eff
diff --git a/engine/party_menu.asm b/engine/party_menu.asm
index 4d50ee8e4..6b50ca620 100644
--- a/engine/party_menu.asm
+++ b/engine/party_menu.asm
@@ -839,92 +839,92 @@ YouHaveNoPKMNString: ; 0x50556
db "You have no <PK><MN>!@"
-Function50566: ; 50566
+PrintPartyMenuActionText: ; 50566
ld a, [CurPartyMon]
ld hl, PartyMonNicknames
call GetNick
ld a, [PartyMenuActionText]
and $f
- ld hl, Unknown_5057b
- call Function505c1
+ ld hl, .MenuActionTexts
+ call .PrintText
ret
; 5057b
-Unknown_5057b: ; 5057b
- dw UnknownText_0x50594
- dw UnknownText_0x5059e
- dw UnknownText_0x505a3
- dw UnknownText_0x505a8
- dw UnknownText_0x50599
- dw UnknownText_0x5058f
- dw UnknownText_0x505ad
- dw UnknownText_0x505b2
- dw UnknownText_0x505b7
- dw UnknownText_0x505bc
+.MenuActionTexts: ; 5057b
+ dw .Text_CuredOfPoison
+ dw .Text_BurnWasHealed
+ dw .Text_Defrosted
+ dw .Text_WokeUp
+ dw .Text_RidOfParalysis
+ dw .Text_RecoveredSomeHP
+ dw .Text_HealthReturned
+ dw .Text_Revitalized
+ dw .Text_GrewToLevel
+ dw .Text_CameToItsSenses
; 5058f
-UnknownText_0x5058f: ; 0x5058f
+.Text_RecoveredSomeHP: ; 0x5058f
; recovered @ HP!
text_jump UnknownText_0x1bc0a2
db "@"
; 0x50594
-UnknownText_0x50594: ; 0x50594
+.Text_CuredOfPoison: ; 0x50594
; 's cured of poison.
text_jump UnknownText_0x1bc0bb
db "@"
; 0x50599
-UnknownText_0x50599: ; 0x50599
+.Text_RidOfParalysis: ; 0x50599
; 's rid of paralysis.
text_jump UnknownText_0x1bc0d2
db "@"
; 0x5059e
-UnknownText_0x5059e: ; 0x5059e
+.Text_BurnWasHealed: ; 0x5059e
; 's burn was healed.
text_jump UnknownText_0x1bc0ea
db "@"
; 0x505a3
-UnknownText_0x505a3: ; 0x505a3
+.Text_Defrosted: ; 0x505a3
; was defrosted.
text_jump UnknownText_0x1bc101
db "@"
; 0x505a8
-UnknownText_0x505a8: ; 0x505a8
+.Text_WokeUp: ; 0x505a8
; woke up.
text_jump UnknownText_0x1bc115
db "@"
; 0x505ad
-UnknownText_0x505ad: ; 0x505ad
+.Text_HealthReturned: ; 0x505ad
; 's health returned.
text_jump UnknownText_0x1bc123
db "@"
; 0x505b2
-UnknownText_0x505b2: ; 0x505b2
+.Text_Revitalized: ; 0x505b2
; is revitalized.
text_jump UnknownText_0x1bc13a
db "@"
; 0x505b7
-UnknownText_0x505b7: ; 0x505b7
+.Text_GrewToLevel: ; 0x505b7
; grew to level @ !@ @
text_jump UnknownText_0x1bc14f
db "@"
; 0x505bc
-UnknownText_0x505bc: ; 0x505bc
+.Text_CameToItsSenses: ; 0x505bc
; came to its senses.
text_jump UnknownText_0x1bc16e
db "@"
; 0x505c1
-Function505c1: ; 505c1
+.PrintText: ; 505c1
ld e, a
ld d, 0
rept 2
@@ -935,7 +935,7 @@ endr
ld l, a
ld a, [Options]
push af
- set 4, a
+ set NO_TEXT_SCROLL, a
ld [Options], a
call PrintText
pop af
diff --git a/engine/pokegear.asm b/engine/pokegear.asm
index 424669b20..3954f5384 100755
--- a/engine/pokegear.asm
+++ b/engine/pokegear.asm
@@ -330,7 +330,7 @@ Function90e3f: ; 90e3f
.kanto
ld e, 1
.ok
- callba Function91ae1
+ callba PokegearMap
ld a, $7
ld bc, $12
hlcoord 1, 2
@@ -1919,7 +1919,8 @@ endr
.kanto
jp LoadStation_PlacesAndPeople
; 91ae1
-Function91ae1: ; 91ae1
+
+PokegearMap: ; 91ae1
ld a, e
and a
jr nz, .kanto
diff --git a/engine/predef.asm b/engine/predef.asm
index cb72f9202..213cfc352 100644
--- a/engine/predef.asm
+++ b/engine/predef.asm
@@ -58,7 +58,7 @@ PredefPointers:: ; 856b
add_predef GetMonFrontpic
add_predef LearnLevelMoves
add_predef FillMoves
- add_predef Function421e6
+ add_predef EvolveAfterBattle
add_predef Function28f63
add_predef Function28f24
add_predef CopyPkmnToTempMon
@@ -97,7 +97,7 @@ PredefPointers:: ; 856b
add_predef DecompressPredef ; $40
add_predef CheckTypeMatchup
add_predef ConvertMon_1to2
- add_predef Functionfb877
+ add_predef NewPokedexEntry
add_predef AnimateMon_Slow_Normal
add_predef PlaceStatusString
add_predef LoadMonAnimation
diff --git a/engine/specials.asm b/engine/specials.asm
index 68ad47aa4..29c4da492 100644
--- a/engine/specials.asm
+++ b/engine/specials.asm
@@ -215,7 +215,7 @@ Special_GameCornerPrizeMonCheckDex: ; c230
call FadeToMenu
ld a, [ScriptVar]
ld [wd265], a
- callba Functionfb877
+ callba NewPokedexEntry
call ExitAllMenus
ret
; c252
diff --git a/engine/startmenu.asm b/engine/startmenu.asm
index 41c79478f..290e6d6ea 100755
--- a/engine/startmenu.asm
+++ b/engine/startmenu.asm
@@ -664,7 +664,7 @@ UnknownText_0x12a5b: ; 0x12a5b
CantUseItem: ; 12a60
ld hl, CantUseItemText
- call Function2012
+ call MenuTextBoxWaitButton
ret
; 12a67
@@ -1241,14 +1241,14 @@ OpenPartyStats: ; 12e00
MonMenu_Cut: ; 12e1b
callba CutFunction
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
cp $1
- jr nz, .asm_12e2d
+ jr nz, .Fail
ld b, $4
ld a, $2
ret
-.asm_12e2d
+.Fail
ld a, $3
ret
; 12e30
@@ -1256,160 +1256,161 @@ MonMenu_Cut: ; 12e1b
MonMenu_Fly: ; 12e30
callba FlyFunction
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
cp $2
- jr z, .asm_12e4c
+ jr z, .Fail
cp $0
- jr z, .asm_12e4f
+ jr z, .Error
callba MobileFn_1060b5
ld b, $4
ld a, $2
ret
-.asm_12e4c
+.Fail
ld a, $3
ret
-.asm_12e4f
+.Error
ld a, $0
ret
-.asm_12e52
+.Unused
ld a, $1
ret
; 12e55
MonMenu_Flash: ; 12e55
callba Functionc8ac
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
cp $1
- jr nz, .asm_12e67
+ jr nz, .Fail
ld b, $4
ld a, $2
ret
-.asm_12e67
+.Fail
ld a, $3
ret
; 12e6a
MonMenu_Strength: ; 12e6a
callba StrengthFunction
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
cp $1
- jr nz, .asm_12e7c
+ jr nz, .Fail
ld b, $4
ld a, $2
ret
-.asm_12e7c
+.Fail
ld a, $3
ret
; 12e7f
MonMenu_Whirlpool: ; 12e7f
callba WhirlpoolFunction
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
cp $1
- jr nz, .asm_12e91
+ jr nz, .Fail
ld b, $4
ld a, $2
ret
-.asm_12e91
+.Fail
ld a, $3
ret
; 12e94
MonMenu_Waterfall: ; 12e94
callba Functioncade
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
cp $1
- jr nz, .asm_12ea6
+ jr nz, .Fail
ld b, $4
ld a, $2
ret
-.asm_12ea6
+.Fail
ld a, $3
ret
; 12ea9
MonMenu_Teleport: ; 12ea9
callba TeleportFunction
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
and a
- jr z, .asm_12eba
+ jr z, .Fail
ld b, $4
ld a, $2
ret
-.asm_12eba
+.Fail
ld a, $3
ret
; 12ebd
MonMenu_Surf: ; 12ebd
callba SurfFunction
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
and a
- jr z, .asm_12ece
+ jr z, .Fail
ld b, $4
ld a, $2
ret
-.asm_12ece
+.Fail
ld a, $3
ret
; 12ed1
MonMenu_Dig: ; 12ed1
callba DigFunction
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
cp $1
- jr nz, .asm_12ee3
+ jr nz, .Fail
ld b, $4
ld a, $2
ret
-.asm_12ee3
+.Fail
ld a, $3
ret
; 12ee6
MonMenu_Softboiled_MilkDrink: ; 12ee6
- call Function12f05
- jr nc, .asm_12ef3
- callba Functionf3df
- jr .asm_12ef9
+ call .CheckMonHasEnoughHP
+ jr nc, .NotEnoughHP
+ callba Softboiled_MilkDrinkFunction
+ jr .finish
-.asm_12ef3
- ld hl, UnknownText_0x12f00
+.NotEnoughHP
+ ld hl, .Text_NotEnoughHP
call PrintText
-.asm_12ef9
+.finish
xor a
ld [PartyMenuActionText], a
ld a, $3
ret
; 12f00
-UnknownText_0x12f00: ; 0x12f00
+.Text_NotEnoughHP: ; 0x12f00
; Not enough HP!
text_jump UnknownText_0x1c1ce3
db "@"
; 0x12f05
-Function12f05: ; 12f05
+.CheckMonHasEnoughHP: ; 12f05
+; Need to have at least (MaxHP / 5) HP left.
ld a, MON_MAXHP
call GetPartyParamLocation
ld a, [hli]
ld [hDividend + 0], a
ld a, [hl]
ld [hDividend + 1], a
- ld a, $5
+ ld a, 5
ld [hDivisor], a
- ld b, $2
+ ld b, 2
call Divide
ld a, MON_HP + 1
call GetPartyParamLocation
@@ -1423,28 +1424,28 @@ Function12f05: ; 12f05
MonMenu_Headbutt: ; 12f26
callba HeadbuttFunction
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
cp $1
- jr nz, .asm_12f38
+ jr nz, .Fail
ld b, $4
ld a, $2
ret
-.asm_12f38
+.Fail
ld a, $3
ret
; 12f3b
MonMenu_RockSmash: ; 12f3b
callba RockSmashFunction
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
cp $1
- jr nz, .asm_12f4d
+ jr nz, .Fail
ld b, $4
ld a, $2
ret
-.asm_12f4d
+.Fail
ld a, $3
ret
; 12f50
diff --git a/engine/town_map.asm b/engine/town_map.asm
index a2f93119a..c821e793a 100755
--- a/engine/town_map.asm
+++ b/engine/town_map.asm
@@ -147,7 +147,7 @@ Function91a04: ; 91a04
ld e, $1
.okay
- callba Function91ae1
+ callba PokegearMap
ld a, $7
ld bc, 6
hlcoord 1, 0