summaryrefslogtreecommitdiff
path: root/battle
diff options
context:
space:
mode:
Diffstat (limited to 'battle')
-rw-r--r--battle/ai/items.asm161
-rw-r--r--battle/anim_commands.asm4
-rw-r--r--battle/anim_objects.asm14
-rw-r--r--battle/bg_effects.asm146
-rw-r--r--battle/core.asm73
-rw-r--r--battle/effect_commands.asm94
-rw-r--r--battle/magikarp_length.asm215
-rw-r--r--battle/misc.asm259
8 files changed, 507 insertions, 459 deletions
diff --git a/battle/ai/items.asm b/battle/ai/items.asm
index 46f04bf65..7d847b9da 100644
--- a/battle/ai/items.asm
+++ b/battle/ai/items.asm
@@ -297,7 +297,7 @@ AI_Items: ; 39196
.FullHeal: ; 381be
call .Status
jp c, .DontUse
- call Function383a3
+ call EnemyUsedFullHeal
jp .Use
; 381ca
@@ -308,7 +308,7 @@ AI_Items: ; 39196
ld a, [bc]
bit CONTEXT_USE_F, a
- jr nz, .asm_381e7
+ jr nz, .StatusCheckContext
ld a, [bc]
bit ALWAYS_USE_F, a
jp nz, .Use
@@ -317,17 +317,17 @@ AI_Items: ; 39196
jp c, .Use
jp .DontUse
-.asm_381e7
+.StatusCheckContext
ld a, [EnemySubStatus5]
bit SUBSTATUS_TOXIC, a
- jr z, .asm_381fd
+ jr z, .FailToxicCheck
ld a, [EnemyToxicCount]
cp 4
- jr c, .asm_381fd
+ jr c, .FailToxicCheck
call Random
cp $80
jp c, .Use
-.asm_381fd
+.FailToxicCheck
ld a, [EnemyMonStatus]
and 1 << FRZ | SLP
jp z, .DontUse
@@ -336,58 +336,58 @@ AI_Items: ; 39196
.FullRestore: ; 38208
call .HealItem
- jp nc, .asm_3821a
+ jp nc, .UseFullRestore
ld a, [bc]
bit CONTEXT_USE_F, a
jp z, .DontUse
call .Status
jp c, .DontUse
-.asm_3821a
- call Function383b5
+.UseFullRestore
+ call EnemyUsedFullRestore
jp .Use
; 38220
.MaxPotion: ; 38220
call .HealItem
jp c, .DontUse
- call Function383ae
+ call EnemyUsedMaxPotion
jp .Use
.HealItem: ; 3822c (e:422c)
ld a, [bc]
bit CONTEXT_USE_F, a
- jr nz, .asm_38267
+ jr nz, .CheckHalfOrQuarterHP
callab AICheckEnemyHalfHP
jp c, .DontUse
ld a, [bc]
bit UNKNOWN_USE_F, a
- jp nz, .asm_38254
+ jp nz, .CheckQuarterHP
callab AICheckEnemyQuarterHP
- jp nc, .asm_38281
+ jp nc, .UseHealItem
call Random
cp $80
- jp c, .asm_38281
+ jp c, .UseHealItem
jp .DontUse
-.asm_38254: ; 38254 (e:4254)
+.CheckQuarterHP: ; 38254 (e:4254)
callab AICheckEnemyQuarterHP
jp c, .DontUse
call Random
- cp 50
+ cp $32
jp c, .DontUse
- jr .asm_38281
+ jr .UseHealItem
-.asm_38267: ; 38267 (e:4267)
+.CheckHalfOrQuarterHP: ; 38267 (e:4267)
callab AICheckEnemyHalfHP
jp c, .DontUse
callab AICheckEnemyQuarterHP
- jp nc, .asm_38281
+ jp nc, .UseHealItem
call Random
- cp 50
+ cp $32
jp nc, .DontUse
-.asm_38281: ; 38281 (e:4281)
+.UseHealItem: ; 38281 (e:4281)
jp .Use
; 38284
@@ -395,7 +395,7 @@ AI_Items: ; 39196
call .HealItem
jp c, .DontUse
ld b, 200
- call Function383f4
+ call EnemyUsedHyperPotion
jp .Use
; 38292 (e:4292)
@@ -403,7 +403,7 @@ AI_Items: ; 39196
call .HealItem
jp c, .DontUse
ld b, 50
- call Function383ee
+ call EnemyUsedSuperPotion
jp .Use
; 382a0
@@ -411,11 +411,11 @@ AI_Items: ; 39196
call .HealItem
jp c, .DontUse
ld b, 20
- call Function383e8
+ call EnemyUsedPotion
jp .Use
; 382ae
-.asm_382ae: ; 382ae
+.asm_382ae: ; This appears to be unused
callab AICheckEnemyMaxHP
jr c, .asm_382e4
push bc
@@ -454,7 +454,7 @@ AI_Items: ; 39196
bit UNKNOWN_USE_F, a
jp z, .DontUse
call Random
- cp 100
+ cp $64
jp c, .Use
jp .DontUse
; 382f9
@@ -462,56 +462,56 @@ AI_Items: ; 39196
.XAccuracy: ; 382f9
call .XItem
jp c, .DontUse
- call Function384f7
+ call EnemyUsedXAccuracy
jp .Use
; 38305
.GuardSpec: ; 38305
call .XItem
jp c, .DontUse
- call Function38504
+ call EnemyUsedGuardSpec
jp .Use
; 38311
.DireHit: ; 38311
call .XItem
jp c, .DontUse
- call Function38511
+ call EnemyUsedDireHit
jp .Use
; 3831d (e:431d)
.XAttack: ; 3831d
call .XItem
jp c, .DontUse
- call Function38541
+ call EnemyUsedXAttack
jp .Use
; 38329
.XDefend: ; 38329
call .XItem
jp c, .DontUse
- call Function38547
+ call EnemyUsedXDefend
jp .Use
; 38335
.XSpeed: ; 38335
call .XItem
jp c, .DontUse
- call Function3854d
+ call EnemyUsedXSpeed
jp .Use
; 38341
.XSpecial: ; 38341
call .XItem
jp c, .DontUse
- call Function38553
+ call EnemyUsedXSpecial
jp .Use
; 3834d
.XItem: ; 3834d (e:434d)
ld a, [EnemyTurnsTaken]
and a
- jr nz, .asm_38372
+ jr nz, .notfirstturnout
ld a, [bc]
bit ALWAYS_USE_F, a
jp nz, .Use
@@ -525,12 +525,12 @@ AI_Items: ; 39196
cp $80
jp c, .DontUse
jp .Use
-.asm_38372
+.notfirstturnout
ld a, [bc]
bit ALWAYS_USE_F, a
jp z, .DontUse
call Random
- cp 50
+ cp $32
jp nc, .DontUse
jp .Use
@@ -563,18 +563,18 @@ AIUsedItemSound: ; 3839a
; 383a3
-Function383a3: ; 383a3 (e:43a3)
+EnemyUsedFullHeal: ; 383a3 (e:43a3)
call AIUsedItemSound
call AI_HealStatus
ld a, FULL_HEAL
jp PrintText_UsedItemOn_AND_AIUpdateHUD
-Function383ae: ; 383ae (e:43ae)
+EnemyUsedMaxPotion: ; 383ae (e:43ae)
ld a, MAX_POTION
ld [wd1f1], a
- jr asm_383c6
+ jr FullRestoreContinue
-Function383b5: ; 383b5 (e:43b5)
+EnemyUsedFullRestore: ; 383b5 (e:43b5)
call AI_HealStatus
ld a, FULL_RESTORE
ld [wd1f1], a
@@ -583,7 +583,7 @@ Function383b5: ; 383b5 (e:43b5)
xor a
ld [EnemyConfuseCount], a
-asm_383c6: ; 383c6
+FullRestoreContinue: ; 383c6
ld de, wd1ec
ld hl, EnemyMonHP + 1
ld a, [hld]
@@ -602,24 +602,24 @@ asm_383c6: ; 383c6
ld [de], a
ld [Buffer2], a
ld [EnemyMonHP], a
- jr Function38436
+ jr EnemyPotionFinish
; 383e8 (e:43e8)
-Function383e8: ; 383e8
+EnemyUsedPotion: ; 383e8
ld a, POTION
ld b, 20
- jr Function383f8
+ jr EnemyPotionContinue
-Function383ee: ; 383ee
+EnemyUsedSuperPotion: ; 383ee
ld a, SUPER_POTION
ld b, 50
- jr Function383f8
+ jr EnemyPotionContinue
-Function383f4: ; 383f4 (e:43f4)
+EnemyUsedHyperPotion: ; 383f4 (e:43f4)
ld a, HYPER_POTION
ld b, 200
-Function383f8: ; 383f8
+EnemyPotionContinue: ; 383f8
ld [wd1f1], a
ld hl, EnemyMonHP + 1
ld a, [hl]
@@ -630,11 +630,11 @@ Function383f8: ; 383f8
ld a, [hl]
ld [wd1ec + 1], a
ld [wd1ee + 1], a
- jr nc, .asm_38415
+ jr nc, .ok
inc a
ld [hl], a
ld [wd1ee + 1], a
-.asm_38415
+.ok
inc hl
ld a, [hld]
ld b, a
@@ -648,7 +648,7 @@ Function383f8: ; 383f8
ld a, [de]
ld [Buffer2], a
sbc b
- jr nc, .asm_38436
+ jr nc, EnemyPotionFinish
inc de
ld a, [de]
dec de
@@ -657,9 +657,8 @@ Function383f8: ; 383f8
ld a, [de]
ld [hl], a
ld [wd1ef], a
-.asm_38436
-Function38436: ; 38436
+EnemyPotionFinish: ; 38436
call PrintText_UsedItemOn
hlcoord 2, 2
xor a
@@ -670,24 +669,26 @@ Function38436: ; 38436
AI_TrySwitch: ; 3844b
+; Determine whether the AI can switch based on how many Pokemon are still alive.
+; If it can switch, it will.
ld a, [OTPartyCount]
ld c, a
ld hl, OTPartyMon1HP
ld d, 0
-.asm_38454
+.SwitchLoop
ld a, [hli]
ld b, a
ld a, [hld]
or b
- jr z, .asm_3845b
+ jr z, .fainted
inc d
-.asm_3845b
+.fainted
push bc
ld bc, PartyMon2 - PartyMon1
add hl, bc
pop bc
dec c
- jr nz, .asm_38454
+ jr nz, .SwitchLoop
ld a, d
cp 2
@@ -716,10 +717,10 @@ AI_Switch: ; 3846c
ld bc, $0004
call CopyBytes
pop af
- jr c, .asm_384a3
+ jr c, .skiptext
ld hl, TextJump_EnemyWithdrew
call PrintText
-.asm_384a3
+.skiptext
ld a, $1
ld [wd264], a
callab NewEnemyMonStatus
@@ -742,10 +743,10 @@ TextJump_EnemyWithdrew: ; 384d0
db "@"
; 384d5
-Function384d5: ; 384d5
+Function384d5: ; This appears to be unused
call AIUsedItemSound
call AI_HealStatus
- ld a, FULL_HEAL_RED
+ ld a, X_SPEED
jp PrintText_UsedItemOn_AND_AIUpdateHUD
; 384e0
@@ -762,7 +763,7 @@ AI_HealStatus: ; 384e0
ret
; 384f7
-Function384f7: ; 384f7
+EnemyUsedXAccuracy: ; 384f7
call AIUsedItemSound
ld hl, EnemySubStatus4
set SUBSTATUS_X_ACCURACY, [hl]
@@ -770,7 +771,7 @@ Function384f7: ; 384f7
jp PrintText_UsedItemOn_AND_AIUpdateHUD
; 38504
-Function38504: ; 38504
+EnemyUsedGuardSpec: ; 38504
call AIUsedItemSound
ld hl, EnemySubStatus4
set SUBSTATUS_MIST, [hl]
@@ -778,7 +779,7 @@ Function38504: ; 38504
jp PrintText_UsedItemOn_AND_AIUpdateHUD
; 38511
-Function38511: ; 38511
+EnemyUsedDireHit: ; 38511
call AIUsedItemSound
ld hl, EnemySubStatus4
set SUBSTATUS_FOCUS_ENERGY, [hl]
@@ -786,18 +787,18 @@ Function38511: ; 38511
jp PrintText_UsedItemOn_AND_AIUpdateHUD
; 3851e
-Function3851e: ; 3851e
- ld [hMultiplier], a
+Function3851e: ; This appears to be unused
+ ld [hDivisor], a
ld hl, EnemyMonMaxHP
ld a, [hli]
- ld [hProduct], a
+ ld [hDividend], a
ld a, [hl]
- ld [hMultiplicand], a
- ld b, $2
+ ld [hDividend + 1], a
+ ld b, 2
call Divide
- ld a, [$ffb6]
+ ld a, [hQuotient + 2]
ld c, a
- ld a, [$ffb5]
+ ld a, [hQuotient + 1]
ld b, a
ld hl, EnemyMonHP + 1
ld a, [hld]
@@ -812,25 +813,25 @@ Function3851e: ; 3851e
ret
; 38541
-Function38541: ; 38541
+EnemyUsedXAttack: ; 38541
ld b, ATTACK
ld a, X_ATTACK
- jr Function38557
+ jr EnemyUsedXItem
; 38547
-Function38547: ; 38547
+EnemyUsedXDefend: ; 38547
ld b, DEFENSE
ld a, X_DEFEND
- jr Function38557
+ jr EnemyUsedXItem
; 3854d
-Function3854d: ; 3854d
+EnemyUsedXSpeed: ; 3854d
ld b, SPEED
ld a, X_SPEED
- jr Function38557
+ jr EnemyUsedXItem
; 38553
-Function38553: ; 38553
+EnemyUsedXSpecial: ; 38553
ld b, SP_ATTACK
ld a, X_SPECIAL
@@ -838,12 +839,12 @@ Function38553: ; 38553
; Parameter
; a = ITEM_CONSTANT
; b = BATTLE_CONSTANT (ATTACK, DEFENSE, SPEED, SP_ATTACK, SP_DEFENSE, ACCURACY, EVASION)
-Function38557:
+EnemyUsedXItem:
ld [wd1f1], a
push bc
call PrintText_UsedItemOn
pop bc
- callba Function361ef
+ callba CheckIfStatCanBeRaised
jp AIUpdateHUD
; 38568
diff --git a/battle/anim_commands.asm b/battle/anim_commands.asm
index a7cbd8236..80b9bf41d 100644
--- a/battle/anim_commands.asm
+++ b/battle/anim_commands.asm
@@ -240,14 +240,14 @@ Functioncc220: ; cc220
ld a, $80
ld [hBGMapAddress], a
ld a, $9a
- ld [$ffd7], a
+ ld [hBGMapAddress + 1], a
call Function3200
ld a, $60
ld [hWY], a
xor a
ld [hBGMapAddress], a
ld a, $98
- ld [$ffd7], a
+ ld [hBGMapAddress + 1], a
call BattleAnimDelayFrame
ret
; cc23d
diff --git a/battle/anim_objects.asm b/battle/anim_objects.asm
index 5bf3e7c01..5c4c43525 100644
--- a/battle/anim_objects.asm
+++ b/battle/anim_objects.asm
@@ -1696,9 +1696,9 @@ Functioncd677: ; cd677 (33:5677)
ld a, $42
ld [hLCDStatCustom], a ; $ff00+$c6
ld a, $58
- ld [$ffc7], a
+ ld [hLCDStatCustom + 1], a
ld a, $5e
- ld [$ffc8], a
+ ld [hLCDStatCustom + 2], a
ret
Functioncd687: ; cd687 (33:5687)
@@ -1712,7 +1712,7 @@ Functioncd687: ; cd687 (33:5687)
jr nc, .asm_cd69b
call Functionce72c
xor a
- ld [$ffc7], a
+ ld [hLCDStatCustom + 1], a
ret
.asm_cd69b
dec a
@@ -1730,7 +1730,7 @@ Functioncd687: ; cd687 (33:5687)
add [hl]
sub $10
ret c
- ld [$ffc7], a
+ ld [hLCDStatCustom + 1], a
ld hl, $9
add hl, bc
ld a, [hl]
@@ -1754,8 +1754,8 @@ Functioncd6c6: ; cd6c6 (33:56c6)
jr c, asm_cd6da
xor a
ld [hLCDStatCustom], a ; $ff00+$c6
- ld [$ffc7], a
- ld [$ffc8], a
+ ld [hLCDStatCustom + 1], a
+ ld [hLCDStatCustom + 2], a
Functioncd6d6: ; cd6d6 (33:56d6)
call Functioncc9bd
@@ -1767,7 +1767,7 @@ endr
ld [hl], a
sub $10
ret c
- ld [$ffc7], a
+ ld [hLCDStatCustom + 1], a
ret
Functioncd6e3: ; cd6e3 (33:56e3)
diff --git a/battle/bg_effects.asm b/battle/bg_effects.asm
index a2fd9f731..5b22308f2 100644
--- a/battle/bg_effects.asm
+++ b/battle/bg_effects.asm
@@ -932,7 +932,7 @@ Functionc8565: ; c8565 (32:4565)
ld hl, w5_d422
ld bc, $0
.asm_c8580
- ld a, [$ffc7]
+ ld a, [hLCDStatCustom + 1]
cp e
jr nc, .asm_c858b
push hl
@@ -969,9 +969,9 @@ Functionc85a2: ; c85a2 (32:45a2)
ld a, $42
ld [hLCDStatCustom], a ; $ff00+$c6
xor a
- ld [$ffc7], a
+ ld [hLCDStatCustom + 1], a
ld a, $5e
- ld [$ffc8], a
+ ld [hLCDStatCustom + 2], a
ld de, $202
call Functionc8f2e
ret
@@ -1044,9 +1044,9 @@ Functionc8610: ; c8610 (32:4610)
ld a, $43
ld [hLCDStatCustom], a ; $ff00+$c6
xor a
- ld [$ffc7], a
+ ld [hLCDStatCustom + 1], a
ld a, $5f
- ld [$ffc8], a
+ ld [hLCDStatCustom + 2], a
ld de, $605
call Functionc8f2e
ld hl, $3
@@ -1140,9 +1140,9 @@ Functionc8698: ; c8698 (32:4698)
call Functionc8eca
ld a, $43
call Functionc8ede
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
inc a
- ld [$ffc8], a
+ ld [hLCDStatCustom + 2], a
ld hl, $2
add hl, bc
ld [hl], $0
@@ -1196,9 +1196,9 @@ Functionc86ea: ; c86ea (32:46ea)
inc a
ld d, a
ld h, $d2
- ld a, [$ffc7]
+ ld a, [hLCDStatCustom + 1]
ld l, a
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
sub l
srl a
push af
@@ -1238,7 +1238,7 @@ Functionc8712: ; c8712 (32:4712)
ld d, $2
call Functionc8f2e
ld h, $d2
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
ld l, a
ld [hl], $0
dec l
@@ -1246,7 +1246,7 @@ Functionc8712: ; c8712 (32:4712)
ret
Functionc8732: ; c8732 (32:4732)
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
ld l, a
ld h, $d2
ld e, l
@@ -1256,11 +1256,11 @@ Functionc8732: ; c8732 (32:4732)
ld a, [de]
dec de
ld [hld], a
- ld a, [$ffc7]
+ ld a, [hLCDStatCustom + 1]
cp l
jr nz, .asm_c873a
ld [hl], $90
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
ld l, a
ld a, [hl]
cp $1
@@ -1296,9 +1296,9 @@ Functionc876a: ; c876a (32:476a)
call Functionc8eca
ld a, $42
call Functionc8ede
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
inc a
- ld [$ffc8], a
+ ld [hLCDStatCustom + 2], a
ld hl, $2
add hl, bc
ld [hl], $1
@@ -1347,9 +1347,9 @@ Functionc87b2: ; c87b2 (32:47b2)
call Functionc8eca
ld a, $42
call Functionc8ede
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
inc a
- ld [$ffc8], a
+ ld [hLCDStatCustom + 2], a
ld hl, $2
add hl, bc
ld [hl], $2
@@ -1371,9 +1371,9 @@ Functionc87cf: ; c87cf (32:47cf)
call Functionc80e5
Functionc87de: ; c87de (32:47de)
- ld a, [$ffc7]
+ ld a, [hLCDStatCustom + 1]
ld l, a
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
sub l
dec a
ld hl, $2
@@ -1416,9 +1416,9 @@ Functionc8810: ; c8810 (32:4810)
call Functionc8eca
ld a, $43
call Functionc8ede
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
inc a
- ld [$ffc8], a
+ ld [hLCDStatCustom + 2], a
ld hl, $3
add hl, bc
ld [hl], $0
@@ -1451,9 +1451,9 @@ Functionc8842: ; c8842 (32:4842)
call Functionc8eca
ld a, $43
call Functionc8ef4
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
inc a
- ld [$ffc8], a
+ ld [hLCDStatCustom + 2], a
ld hl, $3
add hl, bc
ld [hl], $0
@@ -1524,16 +1524,16 @@ Functionc88a5: ; c88a5 (32:48a5)
pop af
jp Functionc900b
.asm_c88b7
- ld a, [$ffc7]
+ ld a, [hLCDStatCustom + 1]
ld d, a
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
sub d
ld d, a
ld h, LYOverridesBackup / $100
ld a, [hSCY] ; $ff00+$d0
or a
jr nz, .asm_c88d0
- ld a, [$ffc7]
+ ld a, [hLCDStatCustom + 1]
or a
jr z, .asm_c88d6
dec a
@@ -1541,14 +1541,14 @@ Functionc88a5: ; c88a5 (32:48a5)
ld [hl], $0
jr .asm_c88d6
.asm_c88d0
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
dec a
ld l, a
ld [hl], $0
.asm_c88d6
ld a, [hSCY] ; $ff00+$d0
ld l, a
- ld a, [$ffc7]
+ ld a, [hLCDStatCustom + 1]
sub l
jr nc, .asm_c88e0
xor a
@@ -1581,9 +1581,9 @@ Functionc88f6: ; c88f6 (32:48f6)
call Functionc8eca
ld a, $43
call Functionc8ede
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
inc a
- ld [$ffc8], a
+ ld [hLCDStatCustom + 2], a
ld hl, $3
add hl, bc
ld [hl], $0
@@ -1628,9 +1628,9 @@ Functionc8933: ; c8933 (32:4933)
call Functionc8eca
ld a, $43
call Functionc8ede
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
inc a
- ld [$ffc8], a
+ ld [hLCDStatCustom + 2], a
ld hl, $3
add hl, bc
ld [hl], $0
@@ -1668,9 +1668,9 @@ Functionc896d: ; c896d (32:496d)
call Functionc8eca
ld a, $43
call Functionc8ede
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
inc a
- ld [$ffc8], a
+ ld [hLCDStatCustom + 2], a
xor a
ld hl, $2
add hl, bc
@@ -1767,9 +1767,9 @@ Functionc89f7: ; c89f7 (32:49f7)
call Functionc8eca
ld a, $42
call Functionc8ef4
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
inc a
- ld [$ffc8], a
+ ld [hLCDStatCustom + 2], a
ld hl, $2
add hl, bc
ld [hl], $1
@@ -1824,14 +1824,14 @@ Functionc8a49: ; c8a49 (32:4a49)
call Functionc8ecb
ld a, $47
call Functionc8ede
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
inc a
- ld [$ffc8], a
- ld a, [$ffc7]
+ ld [hLCDStatCustom + 2], a
+ ld a, [hLCDStatCustom + 1]
ld l, a
ld h, $d2
.asm_c8a60
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
cp l
jr z, .asm_c8a69
xor a
@@ -1854,9 +1854,9 @@ Functionc8a70: ; c8a70 (32:4a70)
ld hl, $3
add hl, bc
ld [hl], $0
- ld a, [$ffc7]
+ ld a, [hLCDStatCustom + 1]
inc a
- ld [$ffc7], a
+ ld [hLCDStatCustom + 1], a
call Functionc80e5
ret
@@ -1864,7 +1864,7 @@ Functionc8a88: ; c8a88 (32:4a88)
call Functionc8ab0
jr nc, .asm_c8a96
call Functionc8a9a
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
dec a
ld l, a
ld [hl], e
@@ -1875,9 +1875,9 @@ Functionc8a88: ; c8a88 (32:4a88)
Functionc8a9a: ; c8a9a (32:4a9a)
ld e, a
- ld a, [$ffc7]
+ ld a, [hLCDStatCustom + 1]
ld l, a
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
sub l
srl a
ld h, $d2
@@ -1971,9 +1971,9 @@ Functionc8b0e: ; c8b0e (32:4b0e)
ld a, $47
ld [hLCDStatCustom], a ; $ff00+$c6
xor a
- ld [$ffc7], a
+ ld [hLCDStatCustom + 1], a
ld a, $60
- ld [$ffc8], a
+ ld [hLCDStatCustom + 2], a
ret
Functionc8b22: ; c8b22 (32:4b22)
@@ -2221,9 +2221,9 @@ Functionc8c68: ; c8c68 (32:4c68)
call Functionc8eca
ld a, $43
call Functionc8ede
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
inc a
- ld [$ffc8], a
+ ld [hLCDStatCustom + 2], a
ld hl, $2
add hl, bc
ld [hl], $1
@@ -2268,9 +2268,9 @@ Functionc8cab: ; c8cab (32:4cab)
ld a, $43
ld [hLCDStatCustom], a ; $ff00+$c6
xor a
- ld [$ffc7], a
+ ld [hLCDStatCustom + 1], a
ld a, $37
- ld [$ffc8], a
+ ld [hLCDStatCustom + 2], a
ld hl, $3
add hl, bc
ld [hl], $0
@@ -2431,9 +2431,9 @@ Functionc8d8b: ; c8d8b (32:4d8b)
call Functionc8ecb
ld a, $47
call Functionc8ede
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
inc a
- ld [$ffc8], a
+ ld [hLCDStatCustom + 2], a
ld hl, $3
add hl, bc
ld a, [hl]
@@ -2669,9 +2669,9 @@ Functionc8ede: ; c8ede (32:4ede)
ld de, $2f5e
.asm_c8eed
ld a, d
- ld [$ffc7], a
+ ld [hLCDStatCustom + 1], a
ld a, e
- ld [$ffc8], a
+ ld [hLCDStatCustom + 2], a
ret
Functionc8ef4: ; c8ef4 (32:4ef4)
@@ -2684,15 +2684,15 @@ Functionc8ef4: ; c8ef4 (32:4ef4)
ld de, $2d5e
.asm_c8f03
ld a, d
- ld [$ffc7], a
+ ld [hLCDStatCustom + 1], a
ld a, e
- ld [$ffc8], a
+ ld [hLCDStatCustom + 2], a
ret
Functionc8f0a: ; c8f0a (32:4f0a)
xor a
- ld [$ffc7], a
- ld [$ffc8], a
+ ld [hLCDStatCustom + 1], a
+ ld [hLCDStatCustom + 2], a
call Functionc8eca
xor a
ld [hLCDStatCustom], a ; $ff00+$c6
@@ -2706,8 +2706,8 @@ Functionc8f19: ; c8f19 (32:4f19)
ld [rBGP], a ; $ff00+$47
ld [wcfc7], a
ld [wcfc9], a
- ld [$ffc7], a
- ld [$ffc8], a
+ ld [hLCDStatCustom + 1], a
+ ld [hLCDStatCustom + 2], a
call Functionc8eca
ret
@@ -2723,10 +2723,10 @@ Functionc8f2e: ; c8f2e (32:4f2e)
ld [BattleAnimTemps + 3], a
ld bc, LYOverridesBackup
.asm_c8f43
- ld a, [$ffc7]
+ ld a, [hLCDStatCustom + 1]
cp c
jr nc, .asm_c8f58
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
cp c
jr c, .asm_c8f58
ld a, [BattleAnimTemps + 2]
@@ -2800,14 +2800,14 @@ Functionc8f9a: ; c8f9a (32:4f9a)
call Functionc905d
ld e, a
pop hl
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
cp c
jr c, .asm_c8fcf
ld a, e
ld [bc], a
inc bc
.asm_c8fcf
- ld a, [$ffc7]
+ ld a, [hLCDStatCustom + 1]
cp l
jr nc, .asm_c8fd6
ld [hl], e
@@ -2824,7 +2824,7 @@ Functionc8f9a: ; c8f9a (32:4f9a)
ret
Functionc8fe4: ; c8fe4 (32:4fe4)
- ld a, [$ffc7]
+ ld a, [hLCDStatCustom + 1]
ld e, a
ld a, [BattleAnimTemps]
add e
@@ -2834,13 +2834,13 @@ Functionc8fe4: ; c8fe4 (32:4fe4)
Functionc8fef: ; c8fef (32:4fef)
push bc
- ld a, [$ffc7]
+ ld a, [hLCDStatCustom + 1]
ld l, a
inc a
ld e, a
ld h, $d2
ld d, h
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
sub l
and a
jr z, .asm_c9009
@@ -2862,9 +2862,9 @@ Functionc8fef: ; c8fef (32:4fef)
Functionc900b: ; c900b (32:500b)
push af
ld h, $d2
- ld a, [$ffc7]
+ ld a, [hLCDStatCustom + 1]
ld l, a
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
sub l
ld d, a
pop af
@@ -2877,14 +2877,14 @@ Functionc900b: ; c900b (32:500b)
Functionc901b: ; c901b (32:501b)
push af
ld e, a
- ld a, [$ffc7]
+ ld a, [hLCDStatCustom + 1]
ld l, a
- ld a, [$ffc8]
+ ld a, [hLCDStatCustom + 2]
sub l
sub e
ld d, a
ld h, $d2
- ld a, [$ffc7]
+ ld a, [hLCDStatCustom + 1]
ld l, a
ld a, $90
.asm_c902c
diff --git a/battle/core.asm b/battle/core.asm
index c7f0e7bb5..5f355fc27 100644
--- a/battle/core.asm
+++ b/battle/core.asm
@@ -2815,21 +2815,22 @@ Function3d1aa: ; 3d1aa
ld [hl], a
ld [BattleMonStatus], a
call UpdateBattleMonInParty
- ld c, $6
+ ld c, HAPPINESS_FAINTED
+ ; If TheirLevel > (YourLevel + 30), use a different parameter
ld a, [BattleMonLevel]
- add $1e
+ add 30
ld b, a
ld a, [EnemyMonLevel]
cp b
jr c, .asm_3d1dc
- ld c, $8
+ ld c, HAPPINESS_BEATENBYSTRONGFOE
.asm_3d1dc
ld a, [CurBattleMon]
ld [CurPartyMon], a
callab ChangeHappiness
ld a, [wd0ee]
- and $c0
+ and %11000000
add $1
ld [wd0ee], a
ld a, [wc6f7]
@@ -3233,7 +3234,7 @@ Function3d444: ; 3d444
Function3d490: ; 3d490
- ld [$ffaf], a
+ ld [hConnectionStripLength], a
ld c, a
.asm_3d493
push bc
@@ -3257,7 +3258,7 @@ Function3d490: ; 3d490
; 3d4ae
Function3d4ae: ; 3d4ae
- ld a, [$ffaf]
+ ld a, [hConnectionStripLength]
ld c, a
cp $8
jr nz, .back
@@ -4821,7 +4822,7 @@ DrawPlayerHUD: ; 3df58
; HP bar
hlcoord 10, 9
ld b, 1
- xor a
+ xor a ; PARTYMON
ld [MonType], a
predef DrawPlayerHP
@@ -4903,7 +4904,7 @@ PrintPlayerHUD: ; 3dfbf
pop hl
dec hl
- ld a, $3
+ ld a, BREEDMON
ld [MonType], a
callab GetGender
ld a, " "
@@ -4981,7 +4982,7 @@ DrawEnemyHUD: ; 3e043
ld a, [hl]
ld [de], a
- ld a, $3
+ ld a, BREEDMON
ld [MonType], a
callab GetGender
ld a, " "
@@ -5358,7 +5359,7 @@ Function3e308: ; 3e308
call EnableLCD
call ClearSprites
call LowVolume
- xor a
+ xor a ; PARTYMON
ld [MonType], a
callba Function4dc7b
call MaxVolume
@@ -5966,7 +5967,7 @@ Function3e75f: ; 3e75f
.ok
push hl
ld de, StringBuffer1
- ld bc, $0102
+ lb bc, 1, 2
call PrintNum
pop hl
rept 2
@@ -5974,8 +5975,8 @@ rept 2
endr
ld [hl], "/"
inc hl
- ld de, wd265
- ld bc, $0102
+ ld de, wNamedObjectIndexBuffer
+ lb bc, 1, 2
call PrintNum
ret
; 3e786
@@ -7535,7 +7536,7 @@ endr
ld [hld], a
.asm_3ef74
- xor a
+ xor a ; PARTYMON
ld [MonType], a
predef Function5084a
callab Function50e1b
@@ -7647,7 +7648,7 @@ endr
call Function309d
.asm_3f057
- xor a
+ xor a ; PARTYMON
ld [MonType], a
predef Function5084a
hlcoord 9, 0
@@ -7661,7 +7662,7 @@ endr
call DelayFrames
call Functiona80
call Function30b4
- xor a
+ xor a ; PARTYMON
ld [MonType], a
ld a, [CurSpecies]
ld [wd265], a
@@ -7802,7 +7803,7 @@ Function3f136: ; 3f136
push af
xor a
ld [DefaultFlypoint], a
- xor a
+ xor a ; PARTYMON
ld [MonType], a
predef Function5084a
ld a, [TempMonLevel]
@@ -8526,28 +8527,28 @@ Function3f594: ; 3f594
ld [IsInBattle], a
call IsJohtoGymLeader
- jr nc, .asm_3f606
+ jr nc, .done
xor a
ld [CurPartyMon], a
ld a, [PartyCount]
ld b, a
-.asm_3f5ea
+.partyloop
push bc
ld a, PartyMon1HP - PartyMon1
call GetPartyParamLocation
ld a, [hli]
or [hl]
- jr z, .asm_3f5fc
- ld c, $4
+ jr z, .skipfaintedmon
+ ld c, HAPPINESS_GYMBATTLE
callab ChangeHappiness
-.asm_3f5fc
+.skipfaintedmon
pop bc
dec b
- jr z, .asm_3f606
+ jr z, .done
ld hl, CurPartyMon
inc [hl]
- jr .asm_3f5ea
-.asm_3f606
+ jr .partyloop
+.done
ret
; 3f607
@@ -8892,20 +8893,20 @@ Function3f85f: ; 3f85f
add hl, de
push hl
ld de, wd00d
- ld bc, $0204
+ lb bc, 2, 4
call PrintNum
pop hl
ld de, $0005
add hl, de
push hl
ld de, wd00f
- ld bc, $0204
+ lb bc, 2, 4
call PrintNum
pop hl
ld de, $0005
add hl, de
ld de, wd011
- ld bc, $0204
+ lb bc, 2, 4
call PrintNum
jr .asm_3f8cf
@@ -8945,21 +8946,21 @@ Function3f85f: ; 3f85f
call .asm_3f92b
jr c, .asm_3f92a
- ld bc, $0204
+ lb bc, 2, 4
call PrintNum
hlcoord 11, 4
ld de, sLinkBattleLosses
call .asm_3f92b
- ld bc, $0204
+ lb bc, 2, 4
call PrintNum
hlcoord 16, 4
ld de, sLinkBattleDraws
call .asm_3f92b
- ld bc, $0204
+ lb bc, 2, 4
call PrintNum
.asm_3f92a
@@ -9442,7 +9443,7 @@ Function3fc30: ; 3fc30
Function3fc5b: ; 3fc5b
ld hl, Sprites
xor a
- ld [$ffaf], a
+ ld [hConnectionStripLength], a
ld b, $6
ld e, $a8
.asm_3fc65
@@ -9453,10 +9454,10 @@ Function3fc5b: ; 3fc5b
inc hl
ld [hl], e
inc hl
- ld a, [$ffaf]
+ ld a, [hConnectionStripLength]
ld [hli], a
inc a
- ld [$ffaf], a
+ ld [hConnectionStripLength], a
ld a, $1
ld [hli], a
ld a, d
@@ -9464,9 +9465,9 @@ Function3fc5b: ; 3fc5b
ld d, a
dec c
jr nz, .asm_3fc69
- ld a, [$ffaf]
+ ld a, [hConnectionStripLength]
add $3
- ld [$ffaf], a
+ ld [hConnectionStripLength], a
ld a, e
add $8
ld e, a
diff --git a/battle/effect_commands.asm b/battle/effect_commands.asm
index e0bd41859..63e27359d 100644
--- a/battle/effect_commands.asm
+++ b/battle/effect_commands.asm
@@ -1036,13 +1036,13 @@ BattleCommand04: ; 34555
ld a, [hBattleTurn]
and a
- jr z, .asm_34570
+ jr z, .proceed
ld hl, EnemyMonPP
ld de, EnemySubStatus3
ld bc, EnemyTurnsTaken
-.asm_34570
+.proceed
; If we've gotten this far, this counts as a turn.
ld a, [bc]
@@ -1390,7 +1390,7 @@ BattleCommand07: ; 346d2
cp c
jr z, .stab
- jr .asm_3473a
+ jr .SkipStab
.stab
ld hl, CurDamage + 1
@@ -1412,13 +1412,13 @@ BattleCommand07: ; 346d2
ld hl, TypeModifier
set 7, [hl]
-.asm_3473a
+.SkipStab
ld a, BATTLE_VARS_MOVE_TYPE
call GetBattleVar
ld b, a
ld hl, TypeMatchup
-.asm_34743
+.TypesLoop
ld a, [hli]
cp $ff
@@ -1426,38 +1426,39 @@ BattleCommand07: ; 346d2
; foresight
cp $fe
- jr nz, .asm_34757
+ jr nz, .SkipForesightCheck
ld a, BATTLE_VARS_SUBSTATUS1_OPP
call GetBattleVar
bit SUBSTATUS_IDENTIFIED, a
jr nz, .end
- jr .asm_34743
+ jr .TypesLoop
-.asm_34757
+.SkipForesightCheck
cp b
- jr nz, .asm_347b3
+ jr nz, .SkipType
ld a, [hl]
cp d
- jr z, .asm_34763
+ jr z, .GotMatchup
cp e
- jr z, .asm_34763
- jr .asm_347b3
+ jr z, .GotMatchup
+ jr .SkipType
-.asm_34763
+.GotMatchup
push hl
push bc
inc hl
ld a, [TypeModifier]
and %10000000
ld b, a
+; If the target is immune to the move, treat it as a miss and calculate the damage as 0
ld a, [hl]
and a
- jr nz, .asm_34775
+ jr nz, .NotImmune
inc a
ld [AttackMissed], a
xor a
-.asm_34775
+.NotImmune
ld [hMultiplier], a
add b
ld [TypeModifier], a
@@ -1480,34 +1481,35 @@ BattleCommand07: ; 346d2
ld b, a
ld a, [hProduct + 3]
or b
- jr z, .asm_347ab
+ jr z, .ok ; This is a very convoluted way to get back that we've essentially dealt no damage.
- ld a, $a
+; Take the product and divide it by 10.
+ ld a, 10
ld [hDivisor], a
- ld b, $4
+ ld b, 4
call Divide
ld a, [hQuotient + 1]
ld b, a
ld a, [hQuotient + 2]
or b
- jr nz, .asm_347ab
+ jr nz, .ok
- ld a, $1
- ld [$ffb6], a
+ ld a, 1
+ ld [hMultiplicand + 2], a
-.asm_347ab
- ld a, [$ffb5]
+.ok
+ ld a, [hMultiplicand + 1]
ld [hli], a
- ld a, [$ffb6]
+ ld a, [hMultiplicand + 2]
ld [hl], a
pop bc
pop hl
-.asm_347b3
+.SkipType
rept 2
inc hl
endr
- jr .asm_34743
+ jr .TypesLoop
.end
call Function347c8
@@ -1545,32 +1547,32 @@ Function347d3: ; 347d3
ld a, 10 ; 1.0
ld [wd265], a
ld hl, TypeMatchup
-.asm_347e7
+.TypesLoop
ld a, [hli]
cp $ff
- jr z, .asm_3482f
+ jr z, .End
cp $fe
- jr nz, .asm_347fb
+ jr nz, .Next
ld a, BATTLE_VARS_SUBSTATUS1_OPP
call GetBattleVar
bit SUBSTATUS_IDENTIFIED, a
- jr nz, .asm_3482f
- jr .asm_347e7
-.asm_347fb
+ jr nz, .End
+ jr .TypesLoop
+.Next
cp d
- jr nz, .asm_34807
+ jr nz, .Nope
ld a, [hli]
cp b
- jr z, .asm_3480b
+ jr z, .Yup
cp c
- jr z, .asm_3480b
- jr .asm_34808
-.asm_34807
+ jr z, .Yup
+ jr .Nope2
+.Nope
inc hl
-.asm_34808
+.Nope2
inc hl
- jr .asm_347e7
-.asm_3480b
+ jr .TypesLoop
+.Yup
xor a
ld [hDividend + 0], a
ld [hMultiplicand + 0], a
@@ -1588,9 +1590,9 @@ Function347d3: ; 347d3
pop bc
ld a, [hQuotient + 2]
ld [wd265], a
- jr .asm_347e7
+ jr .TypesLoop
-.asm_3482f
+.End
pop bc
pop de
pop hl
@@ -1603,14 +1605,14 @@ BattleCommanda3: ; 34833
ld a, [wd265]
and a
ld a, 10 ; 1.0
- jr nz, .asm_3484a
+ jr nz, .skip
call ResetDamage
xor a
ld [TypeModifier], a
inc a
ld [AttackMissed], a
ret
-.asm_3484a
+.skip
ld [wd265], a
ret
; 3484e
@@ -6098,7 +6100,7 @@ BattleCommand7d: ; 361e0
jr BattleCommand1c
BattleCommand1c: ; 361e4
; statup
- call Function361ef
+ call CheckIfStatCanBeRaised
ld a, [FailedMessage]
and a
ret nz
@@ -6106,7 +6108,7 @@ BattleCommand1c: ; 361e4
; 361ef
-Function361ef: ; 361ef
+CheckIfStatCanBeRaised: ; 361ef
ld a, b
ld [LoweredStat], a
ld hl, PlayerStatLevels
diff --git a/battle/magikarp_length.asm b/battle/magikarp_length.asm
deleted file mode 100644
index 237450928..000000000
--- a/battle/magikarp_length.asm
+++ /dev/null
@@ -1,215 +0,0 @@
-CalcMagikarpLength: ; fbbfc
-; Return Magikarp's length (in mm) at MagikarpLength (big endian).
-;
-; input:
-; de: EnemyMonDVs
-; bc: PlayerID
-
-; This function is poorly commented.
-
-; In short, it generates a value between 190 and 1786 using
-; a Magikarp's DVs and its trainer ID. This value is further
-; filtered in LoadEnemyMon to make longer Magikarp even rarer.
-
-; The value is generated from a lookup table.
-; The index is determined by the dv xored with the player's trainer id.
-
-; bc = rrc(dv[0]) ++ rrc(dv[1]) ^ rrc(id)
-
-; if bc < 10: [MagikarpLength] = c + 190
-; if bc >= $ff00: [MagikarpLength] = c + 1370
-; else: [MagikarpLength] = z * 100 + (bc - x) / y
-
-; X, Y, and Z depend on the value of b as follows:
-
-; if b = 0: x = 310, y = 2, z = 3
-; if b = 1: x = 710, y = 4, z = 4
-; if b = 2-9: x = 2710, y = 20, z = 5
-; if b = 10-29: x = 7710, y = 50, z = 6
-; if b = 30-68: x = 17710, y = 100, z = 7
-; if b = 69-126: x = 32710, y = 150, z = 8
-; if b = 127-185: x = 47710, y = 150, z = 9
-; if b = 186-224: x = 57710, y = 100, z = 10
-; if b = 225-243: x = 62710, y = 50, z = 11
-; if b = 244-251: x = 64710, y = 20, z = 12
-; if b = 252-253: x = 65210, y = 5, z = 13
-; if b = 254: x = 65410, y = 2, z = 14
-
-
- ; bc = rrc(dv[0]) ++ rrc(dv[1]) ^ rrc(id)
-
- ; id
- ld h, b
- ld l, c
- ld a, [hli]
- ld b, a
- ld c, [hl]
- rrc b
- rrc c
-
- ; dv
- ld a, [de]
- inc de
- rrca
- rrca
- xor b
- ld b, a
-
- ld a, [de]
- rrca
- rrca
- xor c
- ld c, a
-
- ; if bc < 10:
- ; de = bc + 190
- ; break
-
- ld a, b
- and a
- jr nz, .no
- ld a, c
- cp 10
- jr nc, .no
-
- ld hl, 190
- add hl, bc
- ld d, h
- ld e, l
- jr .done
-
-.no
-
- ld hl, .Lengths
- ld a, 2
- ld [wd265], a
-
-.read
- ld a, [hli]
- ld e, a
- ld a, [hli]
- ld d, a
- call .BCLessThanDE
- jr nc, .next
-
- ; c = (bc - de) / [hl]
- call .BCMinusDE
- ld a, b
- ld [hDividend + 0], a
- ld a, c
- ld [hDividend + 1], a
- ld a, [hl]
- ld [hDivisor], a
- ld b, 2
- call Divide
- ld a, [hQuotient + 2]
- ld c, a
-
- ; de = c + 100 * (2 + i)
- xor a
- ld [hMultiplicand + 0], a
- ld [hMultiplicand + 1], a
- ld a, 100
- ld [hMultiplicand + 2], a
- ld a, [wd265]
- ld [hMultiplier], a
- call Multiply
- ld b, 0
- ld a, [hProduct + 3]
- add c
- ld e, a
- ld a, [hProduct + 2]
- adc b
- ld d, a
- jr .done
-
-.next
- inc hl ; align to next triplet
- ld a, [wd265]
- inc a
- ld [wd265], a
- cp 16
- jr c, .read
-
- call .BCMinusDE
- ld hl, 1600
- add hl, bc
- ld d, h
- ld e, l
-
-.done
- ; hl = de * 10
- ld h, d
- ld l, e
-rept 2
- add hl, hl
-endr
- add hl, de
- add hl, hl
-
- ; hl = hl / 254
- ld de, -254
- ld a, -1
-.div_254
- inc a
- add hl, de
- jr c, .div_254
-
- ; d, e = hl / 12, hl % 12
- ld d, 0
-.mod_12
- cp 12
- jr c, .ok
- sub 12
- inc d
- jr .mod_12
-.ok
- ld e, a
-
- ld hl, MagikarpLength
- ld [hl], d
- inc hl
- ld [hl], e
- ret
-; fbc9a
-
-.BCLessThanDE: ; fbc9a
-; Intention: Return bc < de.
-; Reality: Return b < d.
- ld a, b
- cp d
- ret c
- ret nc ; whoops
- ld a, c
- cp e
- ret
-; fbca1
-
-.BCMinusDE: ; fbca1
-; bc -= de
- ld a, c
- sub e
- ld c, a
- ld a, b
- sbc d
- ld b, a
- ret
-; fbca8
-
-.Lengths: ; fbca8
-; ????, divisor
- dwb 110, 1
- dwb 310, 2
- dwb 710, 4
- dwb 2710, 20
- dwb 7710, 50
- dwb 17710, 100
- dwb 32710, 150
- dwb 47710, 150
- dwb 57710, 100
- dwb 62710, 50
- dwb 64710, 20
- dwb 65210, 5
- dwb 65410, 2
- dwb 65510, 1 ; not used
-; fbcd2
diff --git a/battle/misc.asm b/battle/misc.asm
new file mode 100644
index 000000000..a8dccca84
--- /dev/null
+++ b/battle/misc.asm
@@ -0,0 +1,259 @@
+Functionfbd54: ; fbd54
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ ld a, [hBattleTurn] ; $ff00+$e4
+ and a
+ jr z, .asm_fbd61
+ call Functionfbd96
+ jr .asm_fbd64
+.asm_fbd61
+ call Functionfbd9d
+.asm_fbd64
+ call ClearBox
+ jr Functionfbd91
+
+Functionfbd69: ; fbd69 (3e:7d69)
+ callba BattleCommanda6
+ jr Functionfbd77
+
+Functionfbd71: ; fbd71 (3e:7d71)
+ callba BattleCommanda7
+
+Functionfbd77: ; fbd77 (3e:7d77)
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ ld a, [hBattleTurn] ; $ff00+$e4
+ and a
+ jr z, .asm_fbd85
+ call Functionfbd96
+ xor a
+ jr .asm_fbd8a
+.asm_fbd85
+ call Functionfbd9d
+ ld a, $31
+.asm_fbd8a
+ ld [$ffad], a
+ predef FillBox
+Functionfbd91: ; fbd91 (3e:7d91)
+ ld a, $1
+ ld [hBGMapMode], a ; $ff00+$d4
+ ret
+
+Functionfbd96: ; fbd96 (3e:7d96)
+ hlcoord 12, 0
+ lb bc, 7, 7
+ ret
+
+Functionfbd9d: ; fbd9d (3e:7d9d)
+ hlcoord 2, 6
+ lb bc, 6, 6
+ ret
+
+
+DoWeatherModifiers: ; fbda4
+
+ ld de, .WeatherTypeModifiers
+ ld a, [Weather]
+ ld b, a
+ ld a, [wd265] ; move type
+ ld c, a
+
+.CheckWeatherType
+ ld a, [de]
+ inc de
+ cp $ff
+ jr z, .asm_fbdc0
+
+ cp b
+ jr nz, .NextWeatherType
+
+ ld a, [de]
+ cp c
+ jr z, .ApplyModifier
+
+.NextWeatherType
+rept 2
+ inc de
+endr
+ jr .CheckWeatherType
+
+
+.asm_fbdc0
+ ld de, .WeatherMoveModifiers
+
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call GetBattleVar
+ ld c, a
+
+.CheckWeatherMove
+ ld a, [de]
+ inc de
+ cp $ff
+ jr z, .done
+
+ cp b
+ jr nz, .NextWeatherMove
+
+ ld a, [de]
+ cp c
+ jr z, .ApplyModifier
+
+.NextWeatherMove
+rept 2
+ inc de
+endr
+ jr .CheckWeatherMove
+
+.ApplyModifier
+ xor a
+ ld [hMultiplicand + 0], a
+ ld hl, CurDamage
+ ld a, [hli]
+ ld [hMultiplicand + 1], a
+ ld a, [hl]
+ ld [hMultiplicand + 2], a
+
+ inc de
+ ld a, [de]
+ ld [hMultiplier], a
+
+ call Multiply
+
+ ld a, 10
+ ld [hDivisor], a
+ ld b, $4
+ call Divide
+
+ ld a, [hQuotient + 0]
+ and a
+ ld bc, -1
+ jr nz, .Update
+
+ ld a, [hQuotient + 1]
+ ld b, a
+ ld a, [hQuotient + 2]
+ ld c, a
+ or b
+ jr nz, .Update
+
+ ld bc, 1
+
+.Update
+ ld a, b
+ ld [CurDamage], a
+ ld a, c
+ ld [CurDamage + 1], a
+
+.done
+ ret
+
+.WeatherTypeModifiers
+ db WEATHER_RAIN, WATER, 15
+ db WEATHER_RAIN, FIRE, 05
+ db WEATHER_SUN, FIRE, 15
+ db WEATHER_SUN, WATER, 05
+ db $ff
+
+.WeatherMoveModifiers
+ db WEATHER_RAIN, EFFECT_SOLARBEAM, 05
+ db $ff
+; fbe24
+
+
+DoBadgeTypeBoosts: ; fbe24
+ ld a, [InLinkBattle]
+ and a
+ ret nz
+
+ ld a, [InBattleTowerBattle]
+ and a
+ ret nz
+
+ ld a, [hBattleTurn]
+ and a
+ ret nz
+
+ push de
+ push bc
+
+ ld hl, .BadgeTypes
+
+ ld a, [KantoBadges]
+ ld b, a
+ ld a, [JohtoBadges]
+ ld c, a
+
+.CheckBadge
+ ld a, [hl]
+ cp $ff
+ jr z, .done
+
+ srl b
+ rr c
+ jr nc, .NextBadge
+
+ ld a, [wd265] ; move type
+ cp [hl]
+ jr z, .ApplyBoost
+
+.NextBadge
+ inc hl
+ jr .CheckBadge
+
+.ApplyBoost
+ ld a, [CurDamage]
+ ld h, a
+ ld d, a
+ ld a, [CurDamage + 1]
+ ld l, a
+ ld e, a
+
+ srl d
+ rr e
+ srl d
+ rr e
+ srl d
+ rr e
+
+ ld a, e
+ or d
+ jr nz, .asm_fbe6f
+ ld e, 1
+
+.asm_fbe6f
+ add hl, de
+ jr nc, .Update
+
+ ld hl, $ffff
+
+.Update
+ ld a, h
+ ld [CurDamage], a
+ ld a, l
+ ld [CurDamage + 1], a
+
+.done
+ pop bc
+ pop de
+ ret
+
+.BadgeTypes
+ db FLYING ; zephyrbadge
+ db BUG ; hivebadge
+ db NORMAL ; plainbadge
+ db GHOST ; fogbadge
+ db STEEL ; mineralbadge
+ db FIGHTING ; stormbadge
+ db ICE ; glacierbadge
+ db DRAGON ; risingbadge
+
+ db ROCK ; boulderbadge
+ db WATER ; cascadebadge
+ db ELECTRIC ; thunderbadge
+ db GRASS ; rainbowbadge
+ db POISON ; soulbadge
+ db PSYCHIC ; marshbadge
+ db FIRE ; volcanobadge
+ db GROUND ; earthbadge
+ db $ff
+; fbe91