shithub: pokecrystal

Download patch

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