ref: 7503f9074c9bac623ac436798c4acdae1a0e48b8
parent: f125f14e98d1d3c6e0abbc2f4bf966d8ce563298
author: yenatch <[email protected]>
date: Thu Apr 18 23:50:45 EDT 2013
effect command cleanup -weather and badge type boosts
--- a/battle/effect_commands.asm
+++ b/battle/effect_commands.asm
@@ -376,7 +376,7 @@
and $ec
ld [hl], a
- call Function0x377be
+ call ResetFuryCutterCount
ld a, BATTLE_VARS_MOVE_ANIM
call CleanGetBattleVarPair
@@ -1394,9 +1394,10 @@
ld a, [hli]
ld d, a
ld e, [hl]
+
ld a, [hBattleTurn]
and a
- jr z, .asm_346f7
+ jr z, .go
ld hl, EnemyMonType1
ld a, [hli]
@@ -1407,7 +1408,7 @@
ld d, a
ld e, [hl]
-.asm_346f7
+.go
ld a, BATTLE_VARS_MOVE_TYPE
call GetBattleVarPair
ld [$d265], a
@@ -1415,9 +1416,7 @@
push hl
push de
push bc
- ld a, $3e
- ld hl, $7da4
- rst FarCall
+ callba DoWeatherModifiers
pop bc
pop de
pop hl
@@ -1424,60 +1423,70 @@
push de
push bc
- ld a, $3e
- ld hl, $7e24
- rst FarCall
+ callba DoBadgeTypeBoosts
pop bc
pop de
ld a, [$d265]
cp b
- jr z, .asm_34720
+ jr z, .stab
cp c
- jr z, .asm_34720
+ jr z, .stab
+
jr .asm_3473a
-.asm_34720
+.stab
ld hl, CurDamage + 1
ld a, [hld]
ld h, [hl]
ld l, a
+
ld b, h
ld c, l
srl b
rr c
add hl, bc
+
ld a, h
ld [CurDamage], a
ld a, l
ld [CurDamage + 1], a
+
ld hl, TypeModifier
set 7, [hl]
+
.asm_3473a
ld a, BATTLE_VARS_MOVE_TYPE
call CleanGetBattleVarPair
ld b, a
ld hl, TypeMatchup
+
.asm_34743
ld a, [hli]
+
cp $ff
- jr z, .asm_347b7 ; 34746 $6f
+ jr z, .end
+
+; foresight
cp $fe
- jr nz, .asm_34757 ; 3474a $b
+ jr nz, .asm_34757
ld a, BATTLE_VARS_SUBSTATUS1_OPP
call CleanGetBattleVarPair
bit 3, a
- jr nz, .asm_347b7 ; 34753 $62
- jr .asm_34743 ; 34755 $ec
+ jr nz, .end
+
+ jr .asm_34743
+
.asm_34757
cp b
- jr nz, .asm_347b3 ; 34758 $59
+ jr nz, .asm_347b3
ld a, [hl]
cp d
- jr z, .asm_34763 ; 3475c $5
+ jr z, .asm_34763
cp e
- jr z, .asm_34763 ; 3475f $2
- jr .asm_347b3 ; 34761 $50
+ jr z, .asm_34763
+ jr .asm_347b3
+
.asm_34763
push hl
push bc
@@ -1487,7 +1496,7 @@
ld b, a
ld a, [hl]
and a
- jr nz, .asm_34775 ; 3476e $5
+ jr nz, .asm_34775
inc a
ld [AttackMissed], a
xor a
@@ -1495,14 +1504,18 @@
ld [$ffb7], a
add b
ld [TypeModifier], a
+
xor a
ld [$ffb4], a
+
ld hl, CurDamage
ld a, [hli]
ld [$ffb5], a
ld a, [hld]
ld [$ffb6], a
+
call $3119
+
ld a, [$ffb4]
ld b, a
ld a, [$ffb5]
@@ -1510,7 +1523,8 @@
ld b, a
ld a, [$ffb6]
or b
- jr z, .asm_347ab ; 34794 $15
+ jr z, .asm_347ab
+
ld a, $a
ld [$ffb7], a
ld b, $4
@@ -1519,9 +1533,11 @@
ld b, a
ld a, [$ffb6]
or b
- jr nz, .asm_347ab ; 347a5 $4
+ jr nz, .asm_347ab
+
ld a, $1
ld [$ffb6], a
+
.asm_347ab
ld a, [$ffb5]
ld [hli], a
@@ -1529,11 +1545,13 @@
ld [hl], a
pop bc
pop hl
+
.asm_347b3
inc hl
inc hl
- jr .asm_34743 ; 347b5 $8c
-.asm_347b7
+ jr .asm_34743
+
+.end
call Function0x347c8
ld a, [$d265]
ld b, a
@@ -2780,10 +2798,10 @@
ld a, [hBattleTurn]
and a
- ld de, $c672
+ ld de, PlayerRolloutCount
ld a, 1
jr z, .asm_34f76
- ld de, $c67a
+ ld de, EnemyRolloutCount
ld a, 4
.asm_34f76
@@ -3156,11 +3174,11 @@
BattleCommandae: ; 35197
; startloop
- ld hl, $c672
+ ld hl, PlayerRolloutCount
ld a, [hBattleTurn]
and a
jr z, .asm_351a2
- ld hl, $c67a
+ ld hl, EnemyRolloutCount
.asm_351a2
xor a
@@ -3473,7 +3491,7 @@
; 3534d
-Function0x3534d: ; 3534d=
+Function0x3534d: ; 3534d
ld a, h
or b
jr z, .asm_3536b ; 0x3534f $1a
@@ -3726,12 +3744,12 @@
ld c, $14
call DelayFrames
xor a
- ld [$c672], a
+ ld [PlayerRolloutCount], a
ld [DefaultFlypoint], a
ld [$c72d], a
jr .asm_3548d ; 35480 $b
.asm_35482
- ld a, [$c672]
+ ld a, [PlayerRolloutCount]
ld b, a
ld a, [PartyCount]
sub b
@@ -3791,13 +3809,13 @@
jr nz, .asm_35502
xor a
- ld [$c67a], a
+ ld [EnemyRolloutCount], a
ld [DefaultFlypoint], a
ld [$c72d], a
jr .asm_3550d
.asm_35502
- ld a, [$c67a]
+ ld a, [EnemyRolloutCount]
ld b, a
ld a, [OTPartyCount]
sub b
@@ -6803,11 +6821,11 @@
call CleanGetBattleVarPair
bit 0, a
ret z
- ld hl, $c672
+ ld hl, PlayerRolloutCount
ld a, [hBattleTurn]
and a
jr z, .asm_36684 ; 3667f $3
- ld hl, $c67a
+ ld hl, EnemyRolloutCount
.asm_36684
dec [hl]
jr nz, .asm_366dc ; 36685 $55
@@ -6870,12 +6888,12 @@
; unleashenergy
ld de, $c682
- ld bc, $c672
+ ld bc, PlayerRolloutCount
ld a, [hBattleTurn]
and a
jr z, .asm_366f6 ; 366ee $6
ld de, $c684
- ld bc, $c67a
+ ld bc, EnemyRolloutCount
.asm_366f6
ld a, BATTLE_VARS_SUBSTATUS3
call GetBattleVarPair
@@ -6901,11 +6919,11 @@
BattleCommand3e: ; 3671a
; checkrampage
- ld de, $c672
+ ld de, PlayerRolloutCount
ld a, [hBattleTurn]
and a
jr z, .asm_36725 ; 36720 $3
- ld de, $c67a
+ ld de, EnemyRolloutCount
.asm_36725
ld a, BATTLE_VARS_SUBSTATUS3
call GetBattleVarPair
@@ -6944,11 +6962,11 @@
and 7
ret nz
- ld de, $c672
+ ld de, PlayerRolloutCount
ld a, [hBattleTurn]
and a
jr z, .asm_36764 ; 3675f $3
- ld de, $c67a
+ ld de, EnemyRolloutCount
.asm_36764
ld a, BATTLE_VARS_SUBSTATUS3
call GetBattleVarPair
@@ -6957,7 +6975,7 @@
and $1
inc a
ld [de], a
- ld a, $1
+ ld a, 1
ld [$c73e], a
ret
; 36778
@@ -7310,12 +7328,12 @@
; Loop back to the command before 'critical'.
- ld de, $c672
+ ld de, PlayerRolloutCount
ld bc, $c682
ld a, [hBattleTurn]
and a
jr z, .asm_369c7
- ld de, $c67a
+ ld de, EnemyRolloutCount
ld bc, $c684
.asm_369c7
@@ -9562,11 +9580,11 @@
BattleCommand5b: ; 37718
; checkcurl
- ld de, $c672
+ ld de, PlayerRolloutCount
ld a, [hBattleTurn]
and a
jr z, .asm_37723 ; 3771e $3
- ld de, $c67a
+ ld de, EnemyRolloutCount
.asm_37723
ld a, BATTLE_VARS_SUBSTATUS1
call CleanGetBattleVarPair
@@ -9588,28 +9606,33 @@
ld a, BATTLE_VARS_STATUS
call CleanGetBattleVarPair
- and $7
+ and 7
ret nz
- ld hl, $c672
+
+ ld hl, PlayerRolloutCount
ld a, [hBattleTurn]
and a
- jr z, .asm_37747 ; 37742 $3
- ld hl, $c67a
+ jr z, .asm_37747
+ ld hl, EnemyRolloutCount
+
.asm_37747
ld a, [hl]
and a
- jr nz, .asm_37750 ; 37749 $5
- ld a, $1
+ jr nz, .asm_37750
+ ld a, 1
ld [$c73e], a
+
.asm_37750
ld a, [AttackMissed]
and a
- jr z, .asm_3775e ; 37754 $8
+ jr z, .hit
+
ld a, BATTLE_VARS_SUBSTATUS1
call GetBattleVarPair
res 6, [hl]
ret
-.asm_3775e
+
+.hit
inc [hl]
ld a, [hl]
ld b, a
@@ -9619,10 +9642,12 @@
call GetBattleVarPair
res 6, [hl]
jr .asm_37775 ; 3776c $7
+
.asm_3776e
ld a, BATTLE_VARS_SUBSTATUS1
call GetBattleVarPair
set 6, [hl]
+
.asm_37775
ld a, BATTLE_VARS_SUBSTATUS2
call CleanGetBattleVarPair
@@ -9654,29 +9679,38 @@
BattleCommand5e: ; 37792
; furycutter
- ld hl, $c678
+ ld hl, PlayerFuryCutterCount
ld a, [hBattleTurn]
and a
- jr z, .asm_3779d ; 37798 $3
- ld hl, $c680
-.asm_3779d
+ jr z, .go
+ ld hl, EnemyFuryCutterCount
+
+.go
ld a, [AttackMissed]
and a
- jp nz, Function0x377be
+ jp nz, ResetFuryCutterCount
+
inc [hl]
+
+; Damage capped at 5 turns' worth (16x).
ld a, [hl]
ld b, a
- cp $6
- jr c, .asm_377ad ; 377a9 $2
- ld b, $5
-.asm_377ad
+ cp 6
+ jr c, .checkdouble
+ ld b, 5
+
+.checkdouble
dec b
ret z
+
+; Double the damage
ld hl, CurDamage + 1
sla [hl]
dec hl
rl [hl]
- jr nc, .asm_377ad ; 377b7 $f4
+ jr nc, .checkdouble
+
+; No overflow
ld a, $ff
ld [hli], a
ld [hl], a
@@ -9684,16 +9718,17 @@
; 377be
-Function0x377be: ; 377be
+ResetFuryCutterCount: ; 377be
+
push hl
- ld hl, $c678
+ ld hl, PlayerFuryCutterCount
ld a, [hBattleTurn]
and a
- jr z, .asm_377ca
- ld hl, $c680
+ jr z, .reset
+ ld hl, EnemyFuryCutterCount
-.asm_377ca
+.reset
xor a
ld [hl], a
--- a/main.asm
+++ b/main.asm
@@ -14457,7 +14457,214 @@
INCLUDE "battle/magikarp_length.asm"
-INCBIN "baserom.gbc", $fbccf, $fbe91 - $fbccf
+INCBIN "baserom.gbc", $fbccf, $fbda4 - $fbccf
+
+
+DoWeatherModifiers: ; fbda4
+
+ ld de, .WeatherTypeModifiers
+ ld a, [Weather]
+ ld b, a
+ ld a, [$d265] ; 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
+ inc de
+ inc de
+ jr .CheckWeatherType
+
+
+.asm_fbdc0
+ ld de, .WeatherMoveModifiers
+
+ ld a, BATTLE_VARS_MOVE_EFFECT
+ call CleanGetBattleVarPair
+ 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
+ inc de
+ inc de
+ jr .CheckWeatherMove
+
+.ApplyModifier
+ xor a
+ ld [$ffb4], a
+ ld hl, CurDamage
+ ld a, [hli]
+ ld [$ffb5], a
+ ld a, [hl]
+ ld [$ffb6], a
+
+ inc de
+ ld a, [de]
+ ld [$ffb7], a
+
+ call Multiply
+
+ ld a, 10
+ ld [$ffb7], a
+ ld b, $4
+ call Divide
+
+ ld a, [$ffb4]
+ and a
+ ld bc, $ffff
+ jr nz, .Update
+
+ ld a, [$ffb5]
+ ld b, a
+ ld a, [$ffb6]
+ 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, $97, 05 ; Solarbeam
+ db $ff
+; fbe24
+
+
+DoBadgeTypeBoosts: ; fbe24
+ ld a, [InLinkBattle]
+ and a
+ ret nz
+
+ ld a, [$cfc0]
+ 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, [$d265] ; 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 [$d257], 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
SECTION "bank3F",DATA,BANK[$3F]