shithub: pokered

Download patch

ref: 6f1ac06e03cd046f61fb2370ff7379a29932bbb1
parent: 46a94c63fc287e7290502776d02648476bc44171
author: YamaArashi <shadow962@live.com>
date: Sat Sep 17 13:37:32 EDT 2016

pull some bank 1 code out of main.asm

--- a/engine/cable_club.asm
+++ b/engine/cable_club.asm
@@ -969,3 +969,9 @@
 	dec d
 	jr nz, .loop
 	ret
+
+LoadTrainerInfoTextBoxTiles:
+	ld de, TrainerInfoTextBoxTileGraphics
+	ld hl, vChars2 + $760
+	lb bc, BANK(TrainerInfoTextBoxTileGraphics), (TrainerInfoTextBoxTileGraphicsEnd - TrainerInfoTextBoxTileGraphics) / $10
+	jp CopyVideoData
--- /dev/null
+++ b/engine/load_mon_data.asm
@@ -1,0 +1,49 @@
+LoadMonData_:
+; Load monster [wWhichPokemon] from list [wMonDataLocation]:
+;  0: partymon
+;  1: enemymon
+;  2: boxmon
+;  3: daycaremon
+; Return monster id at wcf91 and its data at wLoadedMon.
+; Also load base stats at wMonHeader for convenience.
+
+	ld a, [wDayCareMonSpecies]
+	ld [wcf91], a
+	ld a, [wMonDataLocation]
+	cp DAYCARE_DATA
+	jr z, .GetMonHeader
+
+	ld a, [wWhichPokemon]
+	ld e, a
+	callab GetMonSpecies
+
+.GetMonHeader
+	ld a, [wcf91]
+	ld [wd0b5], a ; input for GetMonHeader
+	call GetMonHeader
+
+	ld hl, wPartyMons
+	ld bc, wPartyMon2 - wPartyMon1
+	ld a, [wMonDataLocation]
+	cp ENEMY_PARTY_DATA
+	jr c, .getMonEntry
+
+	ld hl, wEnemyMons
+	jr z, .getMonEntry
+
+	cp 2
+	ld hl, wBoxMons
+	ld bc, wBoxMon2 - wBoxMon1
+	jr z, .getMonEntry
+
+	ld hl, wDayCareMon
+	jr .copyMonData
+
+.getMonEntry
+	ld a, [wWhichPokemon]
+	call AddNTimes
+
+.copyMonData
+	ld de, wLoadedMon
+	ld bc, wPartyMon2 - wPartyMon1
+	jp CopyData
--- /dev/null
+++ b/engine/overworld/map_sprite_functions1.asm
@@ -1,0 +1,356 @@
+_UpdateSprites:
+	ld h, $c1
+	inc h
+	ld a, $e    ; wSpriteStateData2 + $0e
+.spriteLoop
+	ld l, a
+	sub $e
+	ld c, a
+	ld [H_CURRENTSPRITEOFFSET], a
+	ld a, [hl]
+	and a
+	jr z, .skipSprite   ; tests $c2Xe
+	push hl
+	push de
+	push bc
+	call .updateCurrentSprite
+	pop bc
+	pop de
+	pop hl
+.skipSprite
+	ld a, l
+	add $10             ; move to next sprite
+	cp $e               ; test for overflow (back at $0e)
+	jr nz, .spriteLoop
+	ret
+.updateCurrentSprite
+	cp $1
+	jp nz, UpdateNonPlayerSprite
+	jp UpdatePlayerSprite
+
+UpdateNonPlayerSprite:
+	dec a
+	swap a
+	ld [$ff93], a  ; $10 * sprite#
+	ld a, [wNPCMovementScriptSpriteOffset] ; some sprite offset?
+	ld b, a
+	ld a, [H_CURRENTSPRITEOFFSET]
+	cp b
+	jr nz, .unequal
+	jp DoScriptedNPCMovement
+.unequal
+	jp UpdateNPCSprite
+
+; This detects if the current sprite (whose offset is at H_CURRENTSPRITEOFFSET)
+; is going to collide with another sprite by looping over the other sprites.
+; The current sprite's offset will be labelled with i (e.g. $c1i0).
+; The loop sprite's offset will labelled with j (e.g. $c1j0).
+;
+; Note that the Y coordinate of the sprite (in [$c1k4]) is one of the following
+; 9 values when the sprite is aligned with the grid: $fc, $0c, $1c, $2c, ..., $7c.
+; The reason that 4 is added below to the coordinate is to make it align with a
+; multiple of $10 to make comparisons easier.
+DetectCollisionBetweenSprites:
+	nop
+
+	ld h, wSpriteStateData1 / $100
+	ld a, [H_CURRENTSPRITEOFFSET]
+	add wSpriteStateData1 % $100
+	ld l, a
+
+	ld a, [hl] ; a = [$c1i0] (picture) (0 if slot is unused)
+	and a ; is this sprite slot slot used?
+	ret z ; return if not used
+
+	ld a, l
+	add 3
+	ld l, a
+
+	ld a, [hli] ; a = [$c1i3] (delta Y) (-1, 0, or 1)
+	call SetSpriteCollisionValues
+
+	ld a, [hli] ; a = [$C1i4] (Y screen coordinate)
+	add 4 ; align with multiple of $10
+
+; The effect of the following 3 lines is to
+; add 7 to a if moving south or
+; subtract 7 from a if moving north.
+	add b
+	and $f0
+	or c
+
+	ld [$ff90], a ; store Y coordinate adjusted for direction of movement
+
+	ld a, [hli] ; a = [$c1i5] (delta X) (-1, 0, or 1)
+	call SetSpriteCollisionValues
+	ld a, [hl] ; a = [$C1i6] (X screen coordinate)
+
+; The effect of the following 3 lines is to
+; add 7 to a if moving east or
+; subtract 7 from a if moving west.
+	add b
+	and $f0
+	or c
+
+	ld [$ff91], a ; store X coordinate adjusted for direction of movement
+
+	ld a, l
+	add 7
+	ld l, a
+
+	xor a
+	ld [hld], a ; zero [$c1id] XXX what's [$c1id] for?
+	ld [hld], a ; zero [$c1ic] (directions in which collisions occurred)
+
+	ld a, [$ff91]
+	ld [hld], a ; [$c1ib] = adjusted X coordinate
+	ld a, [$ff90]
+	ld [hl], a ; [$c1ia] = adjusted Y coordinate
+
+	xor a ; zero the loop counter
+
+.loop
+	ld [$ff8f], a ; store loop counter
+	swap a
+	ld e, a
+	ld a, [H_CURRENTSPRITEOFFSET]
+	cp e ; does the loop sprite match the current sprite?
+	jp z, .next ; go to the next sprite if they match
+
+	ld d, h
+	ld a, [de] ; a = [$c1j0] (picture) (0 if slot is unused)
+	and a ; is this sprite slot slot used?
+	jp z, .next ; go the next sprite if not used
+
+	inc e
+	inc e
+	ld a, [de] ; a = [$c1j2] ($ff means the sprite is offscreen)
+	inc a
+	jp z, .next ; go the next sprite if offscreen
+
+	ld a, [H_CURRENTSPRITEOFFSET]
+	add 10
+	ld l, a
+
+	inc e
+	ld a, [de] ; a = [$c1j3] (delta Y)
+	call SetSpriteCollisionValues
+
+	inc e
+	ld a, [de] ; a = [$C1j4] (Y screen coordinate)
+	add 4 ; align with multiple of $10
+
+; The effect of the following 3 lines is to
+; add 7 to a if moving south or
+; subtract 7 from a if moving north.
+	add b
+	and $f0
+	or c
+
+	sub [hl] ; subtract the adjusted Y coordinate of sprite i ([$c1ia]) from that of sprite j
+
+; calculate the absolute value of the difference to get the distance
+	jr nc, .noCarry1
+	cpl
+	inc a
+.noCarry1
+	ld [$ff90], a ; store the distance between the two sprites' adjusted Y values
+
+; Use the carry flag set by the above subtraction to determine which sprite's
+; Y coordinate is larger. This information is used later to set [$c1ic],
+; which stores which direction the collision occurred in.
+; The following 5 lines set the lowest 2 bits of c, which are later shifted left by 2.
+; If sprite i's Y is larger, set lowest 2 bits of c to 10.
+; If sprite j's Y is larger or both are equal, set lowest 2 bits of c to 01.
+	push af
+	rl c
+	pop af
+	ccf
+	rl c
+
+; If sprite i's delta Y is 0, then b = 7, else b = 9.
+	ld b, 7
+	ld a, [hl] ; a = [$c1ia] (adjusted Y coordinate)
+	and $f
+	jr z, .next1
+	ld b, 9
+
+.next1
+	ld a, [$ff90] ; a = distance between adjusted Y coordinates
+	sub b
+	ld [$ff92], a ; store distance adjusted using sprite i's direction
+	ld a, b
+	ld [$ff90], a ; store 7 or 9 depending on sprite i's delta Y
+	jr c, .checkXDistance
+
+; If sprite j's delta Y is 0, then b = 7, else b = 9.
+	ld b, 7
+	dec e
+	ld a, [de] ; a = [$c1j3] (delta Y)
+	inc e
+	and a
+	jr z, .next2
+	ld b, 9
+
+.next2
+	ld a, [$ff92] ; a = distance adjusted using sprite i's direction
+	sub b ; adjust distance using sprite j's direction
+	jr z, .checkXDistance
+	jr nc, .next ; go to next sprite if distance is still positive after both adjustments
+
+.checkXDistance
+	inc e
+	inc l
+	ld a, [de] ; a = [$c1j5] (delta X)
+
+	push bc
+
+	call SetSpriteCollisionValues
+	inc e
+	ld a, [de] ; a = [$c1j6] (X screen coordinate)
+
+; The effect of the following 3 lines is to
+; add 7 to a if moving east or
+; subtract 7 from a if moving west.
+	add b
+	and $f0
+	or c
+
+	pop bc
+
+	sub [hl] ; subtract the adjusted X coordinate of sprite i ([$c1ib]) from that of sprite j
+
+; calculate the absolute value of the difference to get the distance
+	jr nc, .noCarry2
+	cpl
+	inc a
+.noCarry2
+	ld [$ff91], a ; store the distance between the two sprites' adjusted X values
+
+; Use the carry flag set by the above subtraction to determine which sprite's
+; X coordinate is larger. This information is used later to set [$c1ic],
+; which stores which direction the collision occurred in.
+; The following 5 lines set the lowest 2 bits of c.
+; If sprite i's X is larger, set lowest 2 bits of c to 10.
+; If sprite j's X is larger or both are equal, set lowest 2 bits of c to 01.
+	push af
+	rl c
+	pop af
+	ccf
+	rl c
+
+; If sprite i's delta X is 0, then b = 7, else b = 9.
+	ld b, 7
+	ld a, [hl] ; a = [$c1ib] (adjusted X coordinate)
+	and $f
+	jr z, .next3
+	ld b, 9
+
+.next3
+	ld a, [$ff91] ; a = distance between adjusted X coordinates
+	sub b
+	ld [$ff92], a ; store distance adjusted using sprite i's direction
+	ld a, b
+	ld [$ff91], a ; store 7 or 9 depending on sprite i's delta X
+	jr c, .collision
+
+; If sprite j's delta X is 0, then b = 7, else b = 9.
+	ld b, 7
+	dec e
+	ld a, [de] ; a = [$c1j5] (delta X)
+	inc e
+	and a
+	jr z, .next4
+	ld b, 9
+
+.next4
+	ld a, [$ff92] ; a = distance adjusted using sprite i's direction
+	sub b ; adjust distance using sprite j's direction
+	jr z, .collision
+	jr nc, .next ; go to next sprite if distance is still positive after both adjustments
+
+.collision
+	ld a, [$ff91] ; a = 7 or 9 depending on sprite i's delta X
+	ld b, a
+	ld a, [$ff90] ; a = 7 or 9 depending on sprite i's delta Y
+	inc l
+
+; If delta X isn't 0 and delta Y is 0, then b = %0011, else b = %1100.
+; (note that normally if delta X isn't 0, then delta Y must be 0 and vice versa)
+	cp b
+	jr c, .next5
+	ld b, %1100
+	jr .next6
+.next5
+	ld b, %0011
+
+.next6
+	ld a, c ; c has 2 bits set (one of bits 0-1 is set for the X axis and one of bits 2-3 for the Y axis)
+	and b ; we select either the bit in bits 0-1 or bits 2-3 based on the calculation immediately above
+	or [hl] ; or with existing collision direction bits in [$c1ic]
+	ld [hl], a ; store new value
+	ld a, c ; useless code because a is overwritten before being used again
+
+; set bit in [$c1ie] or [$c1if] to indicate which sprite the collision occurred with
+	inc l
+	inc l
+	ld a, [$ff8f] ; a = loop counter
+	ld de, SpriteCollisionBitTable
+	add a
+	add e
+	ld e, a
+	jr nc, .noCarry3
+	inc d
+.noCarry3
+	ld a, [de]
+	or [hl]
+	ld [hli], a
+	inc de
+	ld a, [de]
+	or [hl]
+	ld [hl], a
+
+.next
+	ld a, [$ff8f] ; a = loop counter
+	inc a
+	cp $10
+	jp nz, .loop
+	ret
+
+; takes delta X or delta Y in a
+; b = delta X/Y
+; c = 0 if delta X/Y is 0
+; c = 7 if delta X/Y is 1
+; c = 9 if delta X/Y is -1
+SetSpriteCollisionValues:
+	and a
+	ld b, 0
+	ld c, 0
+	jr z, .done
+	ld c, 9
+	cp -1
+	jr z, .ok
+	ld c, 7
+	ld a, 0
+.ok
+	ld b, a
+.done
+	ret
+
+SpriteCollisionBitTable:
+	db %00000000,%00000001
+	db %00000000,%00000010
+	db %00000000,%00000100
+	db %00000000,%00001000
+	db %00000000,%00010000
+	db %00000000,%00100000
+	db %00000000,%01000000
+	db %00000000,%10000000
+	db %00000001,%00000000
+	db %00000010,%00000000
+	db %00000100,%00000000
+	db %00001000,%00000000
+	db %00010000,%00000000
+	db %00100000,%00000000
+	db %01000000,%00000000
+	db %10000000,%00000000
--- /dev/null
+++ b/engine/print_waiting_text.asm
@@ -1,0 +1,20 @@
+PrintWaitingText:
+	coord hl, 3, 10
+	ld b, $1
+	ld c, $b
+	ld a, [wIsInBattle]
+	and a
+	jr z, .asm_4c17
+	call TextBoxBorder
+	jr .asm_4c1a
+.asm_4c17
+	call CableClub_TextBoxBorder
+.asm_4c1a
+	coord hl, 4, 11
+	ld de, WaitingText
+	call PlaceString
+	ld c, 50
+	jp DelayFrames
+
+WaitingText:
+	db "Waiting...!@"
--- /dev/null
+++ b/engine/test_battle.asm
@@ -1,0 +1,45 @@
+TestBattle:
+	ret
+
+.loop
+	call GBPalNormal
+
+	; Don't mess around
+	; with obedience.
+	ld a, %10000000 ; EARTHBADGE
+	ld [wObtainedBadges], a
+
+	ld hl, wFlags_D733
+	set BIT_TEST_BATTLE, [hl]
+
+	; Reset the party.
+	ld hl, wPartyCount
+	xor a
+	ld [hli], a
+	dec a
+	ld [hl], a
+
+	; Give the player a
+	; level 20 Rhydon.
+	ld a, RHYDON
+	ld [wcf91], a
+	ld a, 20
+	ld [wCurEnemyLVL], a
+	xor a
+	ld [wMonDataLocation], a
+	ld [wCurMap], a
+	call AddPartyMon
+
+	; Fight against a
+	; level 20 Rhydon.
+	ld a, RHYDON
+	ld [wCurOpponent], a
+
+	predef InitOpponent
+
+	; When the battle ends,
+	; do it all again.
+	ld a, 1
+	ld [wUpdateSpritesEnabled], a
+	ld [H_AUTOBGTRANSFERENABLED], a
+	jr .loop
--- a/engine/titlescreen.asm
+++ b/engine/titlescreen.asm
@@ -398,3 +398,6 @@
 IF DEF(_BLUE)
 	db $61,$62,$63,$64,$65,$66,$67,$68,"@" ; "Blue Version"
 ENDC
+
+NintenText: db "NINTEN@"
+SonyText:   db "SONY@"
--- a/main.asm
+++ b/main.asm
@@ -11,7 +11,6 @@
 PICS_4 EQU $C
 PICS_5 EQU $D
 
-
 INCLUDE "home.asm"
 
 
@@ -74,524 +73,25 @@
 INCLUDE "engine/battle/safari_zone.asm"
 
 INCLUDE "engine/titlescreen.asm"
+INCLUDE "engine/load_mon_data.asm"
 
-NintenText: db "NINTEN@"
-SonyText:   db "SONY@"
-
-
-LoadMonData_:
-; Load monster [wWhichPokemon] from list [wMonDataLocation]:
-;  0: partymon
-;  1: enemymon
-;  2: boxmon
-;  3: daycaremon
-; Return monster id at wcf91 and its data at wLoadedMon.
-; Also load base stats at wMonHeader for convenience.
-
-	ld a, [wDayCareMonSpecies]
-	ld [wcf91], a
-	ld a, [wMonDataLocation]
-	cp DAYCARE_DATA
-	jr z, .GetMonHeader
-
-	ld a, [wWhichPokemon]
-	ld e, a
-	callab GetMonSpecies
-
-.GetMonHeader
-	ld a, [wcf91]
-	ld [wd0b5], a ; input for GetMonHeader
-	call GetMonHeader
-
-	ld hl, wPartyMons
-	ld bc, wPartyMon2 - wPartyMon1
-	ld a, [wMonDataLocation]
-	cp ENEMY_PARTY_DATA
-	jr c, .getMonEntry
-
-	ld hl, wEnemyMons
-	jr z, .getMonEntry
-
-	cp 2
-	ld hl, wBoxMons
-	ld bc, wBoxMon2 - wBoxMon1
-	jr z, .getMonEntry
-
-	ld hl, wDayCareMon
-	jr .copyMonData
-
-.getMonEntry
-	ld a, [wWhichPokemon]
-	call AddNTimes
-
-.copyMonData
-	ld de, wLoadedMon
-	ld bc, wPartyMon2 - wPartyMon1
-	jp CopyData
-
-
 INCLUDE "data/item_prices.asm"
 INCLUDE "text/item_names.asm"
+INCLUDE "text/unused_names.asm"
 
-UnusedNames:
-	db "かみなりバッヂ@"
-	db "かいがらバッヂ@"
-	db "おじぞうバッヂ@"
-	db "はやぶさバッヂ@"
-	db "ひんやりバッヂ@"
-	db "なかよしバッヂ@"
-	db "バラバッヂ@"
-	db "ひのたまバッヂ@"
-	db "ゴールドバッヂ@"
-	db "たまご@"
-	db "ひよこ@"
-	db "ブロンズ@"
-	db "シルバー@"
-	db "ゴールド@"
-	db "プチキャプテン@"
-	db "キャプテン@"
-	db "プチマスター@"
-	db "マスター@"
-	db "エクセレント"
-
 INCLUDE "engine/overworld/oam.asm"
 INCLUDE "engine/oam_dma.asm"
 
-PrintWaitingText:
-	coord hl, 3, 10
-	ld b, $1
-	ld c, $b
-	ld a, [wIsInBattle]
-	and a
-	jr z, .asm_4c17
-	call TextBoxBorder
-	jr .asm_4c1a
-.asm_4c17
-	call CableClub_TextBoxBorder
-.asm_4c1a
-	coord hl, 4, 11
-	ld de, WaitingText
-	call PlaceString
-	ld c, 50
-	jp DelayFrames
+INCLUDE "engine/print_waiting_text.asm"
 
-WaitingText:
-	db "Waiting...!@"
+INCLUDE "engine/overworld/map_sprite_functions1.asm"
 
+INCLUDE "engine/test_battle.asm"
 
-_UpdateSprites:
-	ld h, $c1
-	inc h
-	ld a, $e    ; wSpriteStateData2 + $0e
-.spriteLoop
-	ld l, a
-	sub $e
-	ld c, a
-	ld [H_CURRENTSPRITEOFFSET], a
-	ld a, [hl]
-	and a
-	jr z, .skipSprite   ; tests $c2Xe
-	push hl
-	push de
-	push bc
-	call .updateCurrentSprite
-	pop bc
-	pop de
-	pop hl
-.skipSprite
-	ld a, l
-	add $10             ; move to next sprite
-	cp $e               ; test for overflow (back at $0e)
-	jr nz, .spriteLoop
-	ret
-.updateCurrentSprite
-	cp $1
-	jp nz, UpdateNonPlayerSprite
-	jp UpdatePlayerSprite
-
-UpdateNonPlayerSprite:
-	dec a
-	swap a
-	ld [$ff93], a  ; $10 * sprite#
-	ld a, [wNPCMovementScriptSpriteOffset] ; some sprite offset?
-	ld b, a
-	ld a, [H_CURRENTSPRITEOFFSET]
-	cp b
-	jr nz, .unequal
-	jp DoScriptedNPCMovement
-.unequal
-	jp UpdateNPCSprite
-
-; This detects if the current sprite (whose offset is at H_CURRENTSPRITEOFFSET)
-; is going to collide with another sprite by looping over the other sprites.
-; The current sprite's offset will be labelled with i (e.g. $c1i0).
-; The loop sprite's offset will labelled with j (e.g. $c1j0).
-;
-; Note that the Y coordinate of the sprite (in [$c1k4]) is one of the following
-; 9 values when the sprite is aligned with the grid: $fc, $0c, $1c, $2c, ..., $7c.
-; The reason that 4 is added below to the coordinate is to make it align with a
-; multiple of $10 to make comparisons easier.
-DetectCollisionBetweenSprites:
-	nop
-
-	ld h, wSpriteStateData1 / $100
-	ld a, [H_CURRENTSPRITEOFFSET]
-	add wSpriteStateData1 % $100
-	ld l, a
-
-	ld a, [hl] ; a = [$c1i0] (picture) (0 if slot is unused)
-	and a ; is this sprite slot slot used?
-	ret z ; return if not used
-
-	ld a, l
-	add 3
-	ld l, a
-
-	ld a, [hli] ; a = [$c1i3] (delta Y) (-1, 0, or 1)
-	call SetSpriteCollisionValues
-
-	ld a, [hli] ; a = [$C1i4] (Y screen coordinate)
-	add 4 ; align with multiple of $10
-
-; The effect of the following 3 lines is to
-; add 7 to a if moving south or
-; subtract 7 from a if moving north.
-	add b
-	and $f0
-	or c
-
-	ld [$ff90], a ; store Y coordinate adjusted for direction of movement
-
-	ld a, [hli] ; a = [$c1i5] (delta X) (-1, 0, or 1)
-	call SetSpriteCollisionValues
-	ld a, [hl] ; a = [$C1i6] (X screen coordinate)
-
-; The effect of the following 3 lines is to
-; add 7 to a if moving east or
-; subtract 7 from a if moving west.
-	add b
-	and $f0
-	or c
-
-	ld [$ff91], a ; store X coordinate adjusted for direction of movement
-
-	ld a, l
-	add 7
-	ld l, a
-
-	xor a
-	ld [hld], a ; zero [$c1id] XXX what's [$c1id] for?
-	ld [hld], a ; zero [$c1ic] (directions in which collisions occurred)
-
-	ld a, [$ff91]
-	ld [hld], a ; [$c1ib] = adjusted X coordinate
-	ld a, [$ff90]
-	ld [hl], a ; [$c1ia] = adjusted Y coordinate
-
-	xor a ; zero the loop counter
-
-.loop
-	ld [$ff8f], a ; store loop counter
-	swap a
-	ld e, a
-	ld a, [H_CURRENTSPRITEOFFSET]
-	cp e ; does the loop sprite match the current sprite?
-	jp z, .next ; go to the next sprite if they match
-
-	ld d, h
-	ld a, [de] ; a = [$c1j0] (picture) (0 if slot is unused)
-	and a ; is this sprite slot slot used?
-	jp z, .next ; go the next sprite if not used
-
-	inc e
-	inc e
-	ld a, [de] ; a = [$c1j2] ($ff means the sprite is offscreen)
-	inc a
-	jp z, .next ; go the next sprite if offscreen
-
-	ld a, [H_CURRENTSPRITEOFFSET]
-	add 10
-	ld l, a
-
-	inc e
-	ld a, [de] ; a = [$c1j3] (delta Y)
-	call SetSpriteCollisionValues
-
-	inc e
-	ld a, [de] ; a = [$C1j4] (Y screen coordinate)
-	add 4 ; align with multiple of $10
-
-; The effect of the following 3 lines is to
-; add 7 to a if moving south or
-; subtract 7 from a if moving north.
-	add b
-	and $f0
-	or c
-
-	sub [hl] ; subtract the adjusted Y coordinate of sprite i ([$c1ia]) from that of sprite j
-
-; calculate the absolute value of the difference to get the distance
-	jr nc, .noCarry1
-	cpl
-	inc a
-.noCarry1
-	ld [$ff90], a ; store the distance between the two sprites' adjusted Y values
-
-; Use the carry flag set by the above subtraction to determine which sprite's
-; Y coordinate is larger. This information is used later to set [$c1ic],
-; which stores which direction the collision occurred in.
-; The following 5 lines set the lowest 2 bits of c, which are later shifted left by 2.
-; If sprite i's Y is larger, set lowest 2 bits of c to 10.
-; If sprite j's Y is larger or both are equal, set lowest 2 bits of c to 01.
-	push af
-	rl c
-	pop af
-	ccf
-	rl c
-
-; If sprite i's delta Y is 0, then b = 7, else b = 9.
-	ld b, 7
-	ld a, [hl] ; a = [$c1ia] (adjusted Y coordinate)
-	and $f
-	jr z, .next1
-	ld b, 9
-
-.next1
-	ld a, [$ff90] ; a = distance between adjusted Y coordinates
-	sub b
-	ld [$ff92], a ; store distance adjusted using sprite i's direction
-	ld a, b
-	ld [$ff90], a ; store 7 or 9 depending on sprite i's delta Y
-	jr c, .checkXDistance
-
-; If sprite j's delta Y is 0, then b = 7, else b = 9.
-	ld b, 7
-	dec e
-	ld a, [de] ; a = [$c1j3] (delta Y)
-	inc e
-	and a
-	jr z, .next2
-	ld b, 9
-
-.next2
-	ld a, [$ff92] ; a = distance adjusted using sprite i's direction
-	sub b ; adjust distance using sprite j's direction
-	jr z, .checkXDistance
-	jr nc, .next ; go to next sprite if distance is still positive after both adjustments
-
-.checkXDistance
-	inc e
-	inc l
-	ld a, [de] ; a = [$c1j5] (delta X)
-
-	push bc
-
-	call SetSpriteCollisionValues
-	inc e
-	ld a, [de] ; a = [$c1j6] (X screen coordinate)
-
-; The effect of the following 3 lines is to
-; add 7 to a if moving east or
-; subtract 7 from a if moving west.
-	add b
-	and $f0
-	or c
-
-	pop bc
-
-	sub [hl] ; subtract the adjusted X coordinate of sprite i ([$c1ib]) from that of sprite j
-
-; calculate the absolute value of the difference to get the distance
-	jr nc, .noCarry2
-	cpl
-	inc a
-.noCarry2
-	ld [$ff91], a ; store the distance between the two sprites' adjusted X values
-
-; Use the carry flag set by the above subtraction to determine which sprite's
-; X coordinate is larger. This information is used later to set [$c1ic],
-; which stores which direction the collision occurred in.
-; The following 5 lines set the lowest 2 bits of c.
-; If sprite i's X is larger, set lowest 2 bits of c to 10.
-; If sprite j's X is larger or both are equal, set lowest 2 bits of c to 01.
-	push af
-	rl c
-	pop af
-	ccf
-	rl c
-
-; If sprite i's delta X is 0, then b = 7, else b = 9.
-	ld b, 7
-	ld a, [hl] ; a = [$c1ib] (adjusted X coordinate)
-	and $f
-	jr z, .next3
-	ld b, 9
-
-.next3
-	ld a, [$ff91] ; a = distance between adjusted X coordinates
-	sub b
-	ld [$ff92], a ; store distance adjusted using sprite i's direction
-	ld a, b
-	ld [$ff91], a ; store 7 or 9 depending on sprite i's delta X
-	jr c, .collision
-
-; If sprite j's delta X is 0, then b = 7, else b = 9.
-	ld b, 7
-	dec e
-	ld a, [de] ; a = [$c1j5] (delta X)
-	inc e
-	and a
-	jr z, .next4
-	ld b, 9
-
-.next4
-	ld a, [$ff92] ; a = distance adjusted using sprite i's direction
-	sub b ; adjust distance using sprite j's direction
-	jr z, .collision
-	jr nc, .next ; go to next sprite if distance is still positive after both adjustments
-
-.collision
-	ld a, [$ff91] ; a = 7 or 9 depending on sprite i's delta X
-	ld b, a
-	ld a, [$ff90] ; a = 7 or 9 depending on sprite i's delta Y
-	inc l
-
-; If delta X isn't 0 and delta Y is 0, then b = %0011, else b = %1100.
-; (note that normally if delta X isn't 0, then delta Y must be 0 and vice versa)
-	cp b
-	jr c, .next5
-	ld b, %1100
-	jr .next6
-.next5
-	ld b, %0011
-
-.next6
-	ld a, c ; c has 2 bits set (one of bits 0-1 is set for the X axis and one of bits 2-3 for the Y axis)
-	and b ; we select either the bit in bits 0-1 or bits 2-3 based on the calculation immediately above
-	or [hl] ; or with existing collision direction bits in [$c1ic]
-	ld [hl], a ; store new value
-	ld a, c ; useless code because a is overwritten before being used again
-
-; set bit in [$c1ie] or [$c1if] to indicate which sprite the collision occurred with
-	inc l
-	inc l
-	ld a, [$ff8f] ; a = loop counter
-	ld de, SpriteCollisionBitTable
-	add a
-	add e
-	ld e, a
-	jr nc, .noCarry3
-	inc d
-.noCarry3
-	ld a, [de]
-	or [hl]
-	ld [hli], a
-	inc de
-	ld a, [de]
-	or [hl]
-	ld [hl], a
-
-.next
-	ld a, [$ff8f] ; a = loop counter
-	inc a
-	cp $10
-	jp nz, .loop
-	ret
-
-; takes delta X or delta Y in a
-; b = delta X/Y
-; c = 0 if delta X/Y is 0
-; c = 7 if delta X/Y is 1
-; c = 9 if delta X/Y is -1
-SetSpriteCollisionValues:
-	and a
-	ld b, 0
-	ld c, 0
-	jr z, .done
-	ld c, 9
-	cp -1
-	jr z, .ok
-	ld c, 7
-	ld a, 0
-.ok
-	ld b, a
-.done
-	ret
-
-SpriteCollisionBitTable:
-	db %00000000,%00000001
-	db %00000000,%00000010
-	db %00000000,%00000100
-	db %00000000,%00001000
-	db %00000000,%00010000
-	db %00000000,%00100000
-	db %00000000,%01000000
-	db %00000000,%10000000
-	db %00000001,%00000000
-	db %00000010,%00000000
-	db %00000100,%00000000
-	db %00001000,%00000000
-	db %00010000,%00000000
-	db %00100000,%00000000
-	db %01000000,%00000000
-	db %10000000,%00000000
-
-TestBattle:
-	ret
-
-.loop
-	call GBPalNormal
-
-	; Don't mess around
-	; with obedience.
-	ld a, %10000000 ; EARTHBADGE
-	ld [wObtainedBadges], a
-
-	ld hl, wFlags_D733
-	set BIT_TEST_BATTLE, [hl]
-
-	; Reset the party.
-	ld hl, wPartyCount
-	xor a
-	ld [hli], a
-	dec a
-	ld [hl], a
-
-	; Give the player a
-	; level 20 Rhydon.
-	ld a, RHYDON
-	ld [wcf91], a
-	ld a, 20
-	ld [wCurEnemyLVL], a
-	xor a
-	ld [wMonDataLocation], a
-	ld [wCurMap], a
-	call AddPartyMon
-
-	; Fight against a
-	; level 20 Rhydon.
-	ld a, RHYDON
-	ld [wCurOpponent], a
-
-	predef InitOpponent
-
-	; When the battle ends,
-	; do it all again.
-	ld a, 1
-	ld [wUpdateSpritesEnabled], a
-	ld [H_AUTOBGTRANSFERENABLED], a
-	jr .loop
-
 INCLUDE "engine/overworld/item.asm"
 INCLUDE "engine/overworld/movement.asm"
 
 INCLUDE "engine/cable_club.asm"
-
-LoadTrainerInfoTextBoxTiles:
-	ld de, TrainerInfoTextBoxTileGraphics
-	ld hl, vChars2 + $760
-	lb bc, BANK(TrainerInfoTextBoxTileGraphics), (TrainerInfoTextBoxTileGraphicsEnd - TrainerInfoTextBoxTileGraphics) / $10
-	jp CopyVideoData
 
 INCLUDE "engine/menu/main_menu.asm"
 
--- /dev/null
+++ b/text/unused_names.asm
@@ -1,0 +1,20 @@
+UnusedNames::
+	db "かみなりバッヂ@"
+	db "かいがらバッヂ@"
+	db "おじぞうバッヂ@"
+	db "はやぶさバッヂ@"
+	db "ひんやりバッヂ@"
+	db "なかよしバッヂ@"
+	db "バラバッヂ@"
+	db "ひのたまバッヂ@"
+	db "ゴールドバッヂ@"
+	db "たまご@"
+	db "ひよこ@"
+	db "ブロンズ@"
+	db "シルバー@"
+	db "ゴールド@"
+	db "プチキャプテン@"
+	db "キャプテン@"
+	db "プチマスター@"
+	db "マスター@"
+	db "エクセレント"