shithub: pokecrystal

ref: 8af06f3cc2961f085cb8d0328f6d7c2093323132
dir: /battle/hidden_power.asm/

View raw version
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