mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-09-17 02:40:50 +12:00
pull some bank 1 code out of main.asm
This commit is contained in:
parent
46a94c63fc
commit
6f1ac06e03
|
@ -969,3 +969,9 @@ CableClub_DrawHorizontalLine:
|
||||||
dec d
|
dec d
|
||||||
jr nz, .loop
|
jr nz, .loop
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
LoadTrainerInfoTextBoxTiles:
|
||||||
|
ld de, TrainerInfoTextBoxTileGraphics
|
||||||
|
ld hl, vChars2 + $760
|
||||||
|
lb bc, BANK(TrainerInfoTextBoxTileGraphics), (TrainerInfoTextBoxTileGraphicsEnd - TrainerInfoTextBoxTileGraphics) / $10
|
||||||
|
jp CopyVideoData
|
||||||
|
|
49
engine/load_mon_data.asm
Normal file
49
engine/load_mon_data.asm
Normal file
|
@ -0,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
|
356
engine/overworld/map_sprite_functions1.asm
Normal file
356
engine/overworld/map_sprite_functions1.asm
Normal file
|
@ -0,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
|
20
engine/print_waiting_text.asm
Normal file
20
engine/print_waiting_text.asm
Normal file
|
@ -0,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...!@"
|
45
engine/test_battle.asm
Normal file
45
engine/test_battle.asm
Normal file
|
@ -0,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
|
|
@ -398,3 +398,6 @@ ENDC
|
||||||
IF DEF(_BLUE)
|
IF DEF(_BLUE)
|
||||||
db $61,$62,$63,$64,$65,$66,$67,$68,"@" ; "Blue Version"
|
db $61,$62,$63,$64,$65,$66,$67,$68,"@" ; "Blue Version"
|
||||||
ENDC
|
ENDC
|
||||||
|
|
||||||
|
NintenText: db "NINTEN@"
|
||||||
|
SonyText: db "SONY@"
|
||||||
|
|
510
main.asm
510
main.asm
|
@ -11,7 +11,6 @@ PICS_3 EQU $B
|
||||||
PICS_4 EQU $C
|
PICS_4 EQU $C
|
||||||
PICS_5 EQU $D
|
PICS_5 EQU $D
|
||||||
|
|
||||||
|
|
||||||
INCLUDE "home.asm"
|
INCLUDE "home.asm"
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,525 +73,26 @@ INCLUDE "data/baseStats/mew.asm"
|
||||||
INCLUDE "engine/battle/safari_zone.asm"
|
INCLUDE "engine/battle/safari_zone.asm"
|
||||||
|
|
||||||
INCLUDE "engine/titlescreen.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 "data/item_prices.asm"
|
||||||
INCLUDE "text/item_names.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/overworld/oam.asm"
|
||||||
INCLUDE "engine/oam_dma.asm"
|
INCLUDE "engine/oam_dma.asm"
|
||||||
|
|
||||||
PrintWaitingText:
|
INCLUDE "engine/print_waiting_text.asm"
|
||||||
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:
|
INCLUDE "engine/overworld/map_sprite_functions1.asm"
|
||||||
db "Waiting...!@"
|
|
||||||
|
|
||||||
|
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/item.asm"
|
||||||
INCLUDE "engine/overworld/movement.asm"
|
INCLUDE "engine/overworld/movement.asm"
|
||||||
|
|
||||||
INCLUDE "engine/cable_club.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"
|
INCLUDE "engine/menu/main_menu.asm"
|
||||||
|
|
||||||
INCLUDE "engine/oak_speech.asm"
|
INCLUDE "engine/oak_speech.asm"
|
||||||
|
|
20
text/unused_names.asm
Normal file
20
text/unused_names.asm
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
UnusedNames::
|
||||||
|
db "かみなりバッヂ@"
|
||||||
|
db "かいがらバッヂ@"
|
||||||
|
db "おじぞうバッヂ@"
|
||||||
|
db "はやぶさバッヂ@"
|
||||||
|
db "ひんやりバッヂ@"
|
||||||
|
db "なかよしバッヂ@"
|
||||||
|
db "バラバッヂ@"
|
||||||
|
db "ひのたまバッヂ@"
|
||||||
|
db "ゴールドバッヂ@"
|
||||||
|
db "たまご@"
|
||||||
|
db "ひよこ@"
|
||||||
|
db "ブロンズ@"
|
||||||
|
db "シルバー@"
|
||||||
|
db "ゴールド@"
|
||||||
|
db "プチキャプテン@"
|
||||||
|
db "キャプテン@"
|
||||||
|
db "プチマスター@"
|
||||||
|
db "マスター@"
|
||||||
|
db "エクセレント"
|
Loading…
Reference in a new issue