shithub: pokecrystal

Download patch

ref: 2f509ab37966097219301e1ea1d8c3d1d24d91a4
parent: 97e3d9ac1020c10f7313eb887dcf60e749e8046c
author: yenatch <yenatch@gmail.com>
date: Wed Dec 3 15:06:40 EST 2014

Fix some incbins near Magikarp length code.

Also clean up the comments a little.

--- a/battle/magikarp_length.asm
+++ b/battle/magikarp_length.asm
@@ -1,28 +1,25 @@
 CalcMagikarpLength: ; fbbfc
-; Return Magikarp's length (in mm) in MagikarpLength (big endian)
+; Return Magikarp's length (in mm) at MagikarpLength (big endian).
 ;
 ; input:
 ;   de: EnemyMonDVs
 ;   bc: PlayerID
 
-; This function is needlessly convoluted, and poorly commented.
-; Reading is discouraged.
+; This function is poorly commented.
 
 ; In short, it generates a value between 190 and 1786 using
 ; a Magikarp's DVs and its trainer ID. This value is further
-; scrutinized in GetEnemyMon to make longer Magikarp even rarer.
+; filtered in LoadEnemyMon to make longer Magikarp even rarer.
 
-; This is done by calculating the value using operands from
-; a conversion lookup table.
+; The value is generated from a lookup table.
+; The index is determined by the dv xored with the player's trainer id.
 
-; Our index is calculated by xoring DVs with the trainer ID:
+; bc = rrc(dv[0]) ++ rrc(dv[1]) ^ rrc(id)
 
-; bc = rrc(rrc(dvs)) xor rrc(id)
+; if bc < 10:     [MagikarpLength] = c + 190
+; if bc >= $ff00: [MagikarpLength] = c + 1370
+; else:           [MagikarpLength] = z * 100 + (bc - x) / y
 
-; if bc < $a:     MagikarpLength = c + 190
-; if bc >= $ff00: MagikarpLength = c + 1370
-; else:           MagikarpLength = z*100 + (bc-x)/y
-
 ; X, Y, and Z depend on the value of b as follows:
 
 ; if b = 0:        x =   310,  y =   2,  z =  3
@@ -38,12 +35,10 @@
 ; if b = 252-253:  x = 65210,  y =   5,  z = 13
 ; if b = 254:      x = 65410,  y =   2,  z = 14
 
-; These values represent arbitrary conversion points.
 
+	; bc = rrc(dv[0]) ++ rrc(dv[1]) ^ rrc(id)
 
-; b = rrcrrc(atkdefdv) xor rrc(id[0])
-	
-; id
+	; id
 	ld h, b
 	ld l, c
 	ld a, [hli]
@@ -51,8 +46,8 @@
 	ld c, [hl]
 	rrc b
 	rrc c
-	
-; dvs
+
+	; dv
 	ld a, [de]
 	inc de
 	rrca
@@ -59,115 +54,117 @@
 	rrca
 	xor b
 	ld b, a
-	
-; c = rrcrrc(spdspcdv) xor rrc(id[1])
-	
+
 	ld a, [de]
 	rrca
 	rrca
 	xor c
 	ld c, a
-	
-; if bc < $000a:
+
+	; if bc < 10:
+	;     de = bc + 190
+	;     break
+
 	ld a, b
 	and a
-	jr nz, .loadtable
+	jr nz, .no
 	ld a, c
-	cp a, $a
-	jr nc, .loadtable
-	
-; de = hl = bc + $be
-	ld hl, $be
+	cp 10
+	jr nc, .no
+
+	ld hl, 190
 	add hl, bc
 	ld d, h
 	ld e, l
-	jr .endtable
-	
-.loadtable
-	ld hl, .MagikarpLengthTable
-	ld a, $02
+	jr .done
+
+.no
+
+	ld hl, .Lengths
+	ld a, 2
 	ld [$d265], a
-	
-.readtable
+
+.read
 	ld a, [hli]
 	ld e, a
 	ld a, [hli]
 	ld d, a
-	call .BLessThanD
-	jr nc, .advancetable
-	
-; c = bc / [hl]
+	call .BCLessThanDE
+	jr nc, .next
+
+	; c = (bc - de) / [hl]
 	call .BCMinusDE
 	ld a, b
-	ld [$ffb3], a
+	ld [hDividend + 0], a
 	ld a, c
-	ld [$ffb4], a
+	ld [hDividend + 1], a
 	ld a, [hl]
-	ld [$ffb7], a
-	ld b, $02
+	ld [hDivisor], a
+	ld b, 2
 	call Divide
-	ld a, [$ffb6]
+	ld a, [hQuotient + 2]
 	ld c, a
-	
-; de = c + 100 * (2 + number of rows down the table)
+
+	; de = c + 100 * (2 + i)
 	xor a
-	ld [$ffb4], a
-	ld [$ffb5], a
-	ld a, $64
-	ld [$ffb6], a
+	ld [hMultiplicand + 0], a
+	ld [hMultiplicand + 1], a
+	ld a, 100
+	ld [hMultiplicand + 2], a
 	ld a, [$d265]
-	ld [$ffb7], a
+	ld [hMultiplier], a
 	call Multiply
-	ld b, $00
-	ld a, [$ffb6]
+	ld b, 0
+	ld a, [hProduct + 3]
 	add c
 	ld e, a
-	ld a, [$ffb5]
+	ld a, [hProduct + 2]
 	adc b
 	ld d, a
-	jr .endtable
-	
-.advancetable
+	jr .done
+
+.next
 	inc hl ; align to next triplet
 	ld a, [$d265]
 	inc a
 	ld [$d265], a
-	cp a, $10
-	jr c, .readtable
-	
+	cp 16
+	jr c, .read
+
 	call .BCMinusDE
-	ld hl, $0640
+	ld hl, 1600
 	add hl, bc
 	ld d, h
 	ld e, l
-	
-.endtable
+
+.done
+	; hl = de * 10
 	ld h, d
 	ld l, e
 	add hl, hl
 	add hl, hl
 	add hl, de
-	add hl, hl ; hl = de * 10
-	
-	ld de, $ff02
-	ld a, $ff
-.loop
+	add hl, hl
+
+	; hl = hl / 254
+	ld de, -254
+	ld a, -1
+.div_254
 	inc a
-	add hl, de ; - 254
-	jr c, .loop
-	
-	ld d, $00
-	
-; mod $0c
-.modloop
-	cp a, $0c
-	jr c, .done
-	sub a, $0c
+	add hl, de
+	jr c, .div_254
+
+	; d, e = hl / 12, hl % 12
+	ld d, 0
+.mod_12
+	cp 12
+	jr c, .ok
+	sub 12
 	inc d
-	jr .modloop
-	
-.done
+	jr .mod_12
+.ok
 	ld e, a
+
 	ld hl, MagikarpLength
 	ld [hl], d
 	inc hl
@@ -175,22 +172,19 @@
 	ret
 ; fbc9a
 
-.BLessThanD ; fbc9a
-; return carry if b < d
+.BCLessThanDE: ; fbc9a
+; Intention: Return bc < de.
+; Reality: Return b < d.
 	ld a, b
 	cp d
 	ret c
-	ret nc
-; fbc9e
-
-.CLessThanE ; fbc9e
-; unused
+	ret nc ; whoops
 	ld a, c
 	cp e
 	ret
 ; fbca1
 
-.BCMinusDE ; fbca1
+.BCMinusDE: ; fbca1
 ; bc -= de
 	ld a, c
 	sub e
@@ -201,20 +195,21 @@
 	ret
 ; fbca8
 
-.MagikarpLengthTable ; fbca8
+.Lengths: ; fbca8
 ;	     ????, divisor
-	dwb $006e, $01
-	dwb $0136, $02
-	dwb $02c6, $04
-	dwb $0a96, $14
-	dwb $1e1e, $32
-	dwb $452e, $64
-	dwb $7fc6, $96
-	dwb $ba5e, $96
-	dwb $e16e, $64
-	dwb $f4f6, $32
-	dwb $fcc6, $14
-	dwb $feba, $05
-	dwb $ff82, $02
-; fbccf
+	dwb   110, 1
+	dwb   310, 2
+	dwb   710, 4
+	dwb  2710, 20
+	dwb  7710, 50
+	dwb 17710, 100
+	dwb 32710, 150
+	dwb 47710, 150
+	dwb 57710, 100
+	dwb 62710, 50
+	dwb 64710, 20
+	dwb 65210, 5
+	dwb 65410, 2
+	dwb 65510, 1 ; not used
+; fbcd2
 
--- a/main.asm
+++ b/main.asm
@@ -97840,7 +97840,11 @@
 ; e5496 (39:5496)
 
 Unknown_e5496: ; e5496
-INCBIN "baserom.gbc",$e5496,$e549e - $e5496
+	dw Unknown_e799d
+	dw Unknown_e79dd
+	dw Unknown_e7a1d
+	dw Unknown_e79dd
+; e549e
 
 Functione549e: ; e549e (39:549e)
 	ld a, $1
@@ -98072,7 +98076,12 @@
 INCBIN "gfx/intro/unown_back.2bpp.lz"
 ; e799d
 
-INCBIN "baserom.gbc", $e799d, $e7a5d - $e799d
+Unknown_e799d: ; e799d
+INCBIN "baserom.gbc", $e799d, $e79dd - $e799d
+Unknown_e79dd: ; e79dd
+INCBIN "baserom.gbc", $e79dd, $e7a1d - $e79dd
+Unknown_e7a1d: ; e7a1d
+INCBIN "baserom.gbc", $e7a1d, $e7a5d - $e7a1d
 
 GFX_e7a5d: ; e7a5d
 INCBIN "baserom.gbc", $e7a5d, $e7a6d - $e7a5d
@@ -98168,25 +98177,26 @@
 Functionfb449:: ; fb449
 	ld de, Font
 	ld hl, VTiles1
-	ld bc, Function3e80
+	lb bc, BANK(Font), $400 / 8
 	ld a, [rLCDC]
 	bit 7, a
 	jp z, Copy1bpp
+
 	ld de, Font
 	ld hl, VTiles1
-	ld bc, $3e20
+	lb bc, BANK(Font), $100 / 8
 	call Functionddc
-	ld de, $4300
-	ld hl, $8a00
-	ld bc, $3e20
+	ld de, Font + $100
+	ld hl, VTiles1 + $200
+	lb bc, BANK(Font), $100 / 8
 	call Functionddc
-	ld de, $4400
-	ld hl, $8c00
-	ld bc, $3e20
+	ld de, Font + $200
+	ld hl, VTiles1 + $400
+	lb bc, BANK(Font), $100 / 8
 	call Functionddc
-	ld de, $4500
-	ld hl, $8e00
-	ld bc, $3e20
+	ld de, Font + $300
+	ld hl, VTiles1 + $600
+	lb bc, BANK(Font), $100 / 8
 	call Functionddc
 	ret
 ; fb48a
@@ -99185,14 +99195,12 @@
 	call PrintNum
 	ld [hl], $6f
 	inc hl
-	ld [hl], $50
+	ld [hl], "@"
 	ret
 ; fbbfc
 
 INCLUDE "battle/magikarp_length.asm"
 
-INCBIN "baserom.gbc",$fbccf,$fbcd2 - $fbccf
-
 Functionfbcd2: ; fbcd2
 	ld a, [$dfe8]
 	ld [Buffer1], a
@@ -99199,12 +99207,16 @@
 	ld a, [$dfe9]
 	ld [Buffer2], a
 	call Functionfbbdb
-	ld hl, $7ce8
+	ld hl, UnknownText_0xfbce8
 	call PrintText
 	ret
 ; fbce8
 
-INCBIN "baserom.gbc",$fbce8,$fbced - $fbce8
+UnknownText_0xfbce8: ; 0xfbce8
+	; "CURRENT RECORD"
+	text_jump UnknownText_0x1c123a
+	db "@"
+; 0xfbced
 
 INCLUDE "battle/hidden_power.asm"