shithub: pokered

Download patch

ref: f855b8e335c8bc954151c8c021c93429face0706
parent: e51029c125fa45c8f605c6307f4980fe28dd36b3
author: Bryan Bishop <kanzure@gmail.com>
date: Sat Jan 21 18:42:58 EST 2012

dump in comments for CriticalHitProbability

hg-commit-id: fc95e9d2f2d7


--- a/common.asm
+++ b/common.asm
@@ -22049,7 +22049,65 @@
 	db $50
 ; 0x3ddca + 5 bytes
 
-INCBIN "baserom.gbc",$3ddcf,$3e2ac - $3ddcf
+INCBIN "baserom.gbc",$3ddcf,$3e04f - $3ddcf
+
+; azure heights claims "the fastest pokémon (who are,not coincidentally,
+; among the most popular) tend to CH about 20 to 25% of the time."
+CriticalHitProbability: ; 0x3e04f
+	ld a, [hld]                  ; read base power from RAM
+	and a
+	ret z                        ; do nothing if zero
+	dec hl
+	ld c, [hl]                   ; read move id
+	ld a, [de]
+	bit 2, a
+	jr nz, .asm_3e061
+	sla b
+	jr nc, .asm_3e063
+	ld b, $ff
+	jr .asm_3e063
+.asm_3e061
+	srl b
+.asm_3e063
+	ld hl, HighCriticalMoves      ; table of high critical hit moves
+.Loop
+	ld a, [hli]                  ; read move from move table
+	cp c                         ; does it match the move about to be used?
+	jr z, .HighCritical          ; if so, the move about to be used is a high critical hit ratio move 
+	inc a                        ; move on to the next move, FF terminates loop
+	jr nz, .Loop                 ; check the next move in HighCriticalMoves
+	srl b                        ; /2 for regular move (effective 1/512?)
+	jr .SkipHighCritical         ; continue as a normal move
+.HighCritical
+	sla b                        ; *2 for high critical hit moves
+	jr nc, .asm_3e077
+	ld b, $ff                    ; set to FF (max) on overflow
+.asm_3e077
+	sla b                        ; *4 for high critical move (effective 1/64?)
+	jr nc, .SkipHighCritical
+	ld b, $ff
+.SkipHighCritical
+	call $6e9b                   ; probably generates a random value, in "a"
+	rlc a
+	rlc a
+	rlc a
+	cp b                         ; check a against $ff
+	ret nc                       ; no critical hit if no borrow
+	ld a, $1
+	ld [$d05e], a                ; set critical hit flag
+	ret
+; 0x3e08e
+
+; high critical hit moves
+HighCriticalMoves: ; 0x3e08e
+	db KARATE_CHOP
+	db RAZOR_LEAF
+	db CRABHAMMER
+	db SLASH
+	db $FF
+; 0x3e093
+
+INCBIN "baserom.gbc",$3e093,$3e2ac - $3e093
 
 UnnamedText_3e2ac: ; 0x3e2ac
 	TX_FAR _UnnamedText_3e2ac