ref: 14160a180f8a898d2c282155e32a3c907083cba0
parent: 94e9a3f7649b95eff276d8a42b820b74bad5c199
author: yenatch <[email protected]>
date: Fri Aug 9 13:42:04 EDT 2013
hidden power type/power calculation
--- a/battle/effect_commands.asm
+++ b/battle/effect_commands.asm
@@ -10623,11 +10623,7 @@
ld a, [AttackMissed]
and a
ret nz
-
- ld a, $3e
- ld hl, $7ced
- rst FarCall
-
+ callba GetHiddenPower
ret
; 37bf4
--- /dev/null
+++ b/battle/hidden_power.asm
@@ -1,0 +1,108 @@
+GetHiddenPower: ; fbced
+; Override Hidden Power's type and power based on the actor's DVs.
+
+ ld hl, BattleMonDVs
+ ld a, [hBattleTurn]
+ and a
+ jr z, .GotDVs
+ ld hl, EnemyMonDVs
+.GotDVs
+
+
+; Power:
+
+; Take the top bit from...
+
+; Atk
+ ld a, [hl]
+ swap a
+ and 8
+ ld b, a
+; Def
+ ld a, [hli]
+ and 8
+ srl a
+ or b
+ ld b, a
+; Spd
+ ld a, [hl]
+ swap a
+ and 8
+ srl a
+ srl a
+ or b
+ ld b, a
+; Spc
+ ld a, [hl]
+ and 8
+ srl a
+ srl a
+ srl a
+ or b
+ ld b, a
+
+; * 5
+ add a
+ add a
+ add b
+ ld b, a
+
+; + (Spc & 3)
+ ld a, [hld]
+ and 3
+ add b
+
+; / 2
+ srl a
+
+; + 30
+ add 30
+; + 1
+ inc a
+ ld d, a
+
+
+; Type:
+
+; Def & 3
+ ld a, [hl]
+ and 3
+ ld b, a
+
+; + (Atk & 3) << 2
+ ld a, [hl]
+ and 3 << 4
+ swap a
+ add a
+ add a
+ or b
+
+; Skip Normal
+ inc a
+
+; Skip type 6 (unused)
+ cp 6
+ jr c, .GotType
+ inc a
+
+; Skip unused types between Steel and Fire
+ cp STEEL + 1
+ jr c, .GotType
+ add FIRE - (STEEL + 1)
+
+
+.GotType
+ push af
+ ld a, BATTLE_VARS_MOVE_TYPE
+ call GetBattleVarPair
+ pop af
+ ld [hl], a
+
+ ld a, d
+ push af
+ callba BattleCommand06
+ pop af
+ ld d, a
+ ret
+; fbd54
+
--- a/main.asm
+++ b/main.asm
@@ -66168,7 +66168,11 @@
INCLUDE "battle/magikarp_length.asm"
-INCBIN "baserom.gbc", $fbccf, $fbda4 - $fbccf
+INCBIN "baserom.gbc", $fbccf, $fbced - $fbccf
+
+INCLUDE "battle/hidden_power.asm"
+
+INCBIN "baserom.gbc", $fbd54, $fbda4 - $fbd54
DoWeatherModifiers: ; fbda4