mirror of
https://github.com/pret/pokegold-spaceworld.git
synced 2026-04-26 08:13:44 -05:00
Some checks failed
CI / build (push) Has been cancelled
* Sporadic constantifying and function naming * Added bank 14 * Delete .DS_Store files * Delete EOL whitespace * Use Tab indents instead of four spaces * Identify some routines * Identify more stuff * Identified party and box structs * Identified wBattleMon and wEnemyMon structs * Macro'd landmarks, cleaned up comments --------- Co-authored-by: vulcandth <vulcandth@gmail.com>
1222 lines
17 KiB
NASM
Executable File
1222 lines
17 KiB
NASM
Executable File
INCLUDE "constants.asm"
|
|
|
|
SECTION "engine/dumps/bank02.asm@SpawnPlayer", ROMX
|
|
|
|
SpawnPlayer:
|
|
ld a, PLAYER
|
|
ld hl, PlayerObjectTemplate
|
|
call CopyPlayerObjectTemplate
|
|
call Spawn_ConvertCoords
|
|
ld a, PLAYER_STRUCT
|
|
ldh [hObjectStructIndex], a
|
|
ld de, wPlayerStruct
|
|
ld a, PLAYER_OBJECT
|
|
ldh [hMapObjectIndex], a
|
|
ld bc, wMapObjects
|
|
call CopyMapObjectToObjectStruct
|
|
ld a, PLAYER_OBJECT
|
|
call Function1908
|
|
ret
|
|
|
|
PlayerObjectTemplate:
|
|
object_event -4, -4, SPRITE_GOLD, $10, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0
|
|
db $00, $00
|
|
|
|
SpawnFollower:
|
|
call SetFollowerDefaultAttributes
|
|
ld a, [wUsedSprites+1]
|
|
ld [wMap1ObjectSprite], a
|
|
ld a, FOLLOWER
|
|
call Function1602
|
|
ld b, PLAYER
|
|
ld c, FOLLOWER
|
|
call StartFollow
|
|
ret
|
|
|
|
SetFollowerDefaultAttributes:
|
|
ld a, FOLLOWER
|
|
ld hl, FollowerObjectTemplate
|
|
call CopyPlayerObjectTemplate
|
|
ld a, [wPlayerMapX]
|
|
ld [wMap1ObjectXCoord], a
|
|
ld a, [wPlayerMapY]
|
|
dec a
|
|
ld [wMap1ObjectYCoord], a
|
|
ret
|
|
|
|
FollowerObjectTemplate:
|
|
object_event -4, -4, SPRITE_RHYDON, $18, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0
|
|
db $00, $00
|
|
|
|
DeleteFollower:
|
|
ld a, FOLLOWER
|
|
call DeleteMapObject
|
|
xor a
|
|
ld [wObjectFollow_Follower], a
|
|
ld a, $ff
|
|
ld [wObjectFollow_Leader], a
|
|
ret
|
|
|
|
DebugMapViewer_SetupCursor:
|
|
ld a, $01
|
|
ld hl, Data8089
|
|
call CopyPlayerObjectTemplate
|
|
ld a, $01
|
|
call Spawn_ConvertCoords
|
|
ret
|
|
|
|
Data8089:
|
|
object_event -4, -4, SPRITE_GOLD, $17, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0
|
|
db $00, $00
|
|
|
|
_InitializeVisibleSprites:
|
|
ld bc, wMap2Object
|
|
ld a, 2
|
|
.loop
|
|
ldh [hConnectionStripLength], a
|
|
ld hl, MAPOBJECT_SPRITE
|
|
add hl, bc
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .next
|
|
|
|
ld hl, MAPOBJECT_OBJECT_STRUCT_ID
|
|
add hl, bc
|
|
ld a, [hl]
|
|
cp -1
|
|
jr nz, .next
|
|
|
|
ld a, [wXCoord]
|
|
ld d, a
|
|
ld a, [wYCoord]
|
|
ld e, a
|
|
|
|
ld hl, MAPOBJECT_X_COORD
|
|
add hl, bc
|
|
ld a, [hl]
|
|
add 1
|
|
sub d
|
|
jr c, .next
|
|
|
|
cp MAPOBJECT_SCREEN_WIDTH
|
|
jr nc, .next
|
|
|
|
ld hl, MAPOBJECT_Y_COORD
|
|
add hl, bc
|
|
ld a, [hl]
|
|
add 1
|
|
sub e
|
|
jr c, .next
|
|
|
|
cp MAPOBJECT_SCREEN_HEIGHT
|
|
jr nc, .next
|
|
|
|
push bc
|
|
call Function80eb
|
|
pop bc
|
|
jp c, .ret
|
|
|
|
.next
|
|
ld hl, MAPOBJECT_LENGTH
|
|
add hl, bc
|
|
ld b, h
|
|
ld c, l
|
|
ldh a, [hConnectionStripLength]
|
|
inc a
|
|
cp NUM_OBJECTS
|
|
jr nz, .loop
|
|
ret
|
|
|
|
.ret:
|
|
ret
|
|
|
|
Function80eb:
|
|
call Function811a
|
|
and a
|
|
ret nz ; masked
|
|
|
|
ld hl, wObject1StructEnd
|
|
ld a, $03
|
|
ld de, OBJECT_LENGTH
|
|
.loop
|
|
ldh [hConnectedMapWidth], a
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .done
|
|
add hl, de
|
|
ldh a, [hConnectedMapWidth]
|
|
inc a
|
|
cp NUM_OBJECT_STRUCTS
|
|
jr nz, .loop
|
|
scf
|
|
ret ; overflow
|
|
|
|
.done
|
|
ld d, h
|
|
ld e, l
|
|
call CopyMapObjectToObjectStruct
|
|
ld a, [wVramState]
|
|
bit 7, a
|
|
ret z
|
|
|
|
ld hl, OBJECT_FLAGS2
|
|
add hl, de
|
|
set 5, [hl]
|
|
ret
|
|
|
|
Function811a:
|
|
ldh a, [hConnectionStripLength]
|
|
ld e, a
|
|
ld d, $00
|
|
ld hl, wUnknownWordcc9c
|
|
add hl, de
|
|
ld a, [hl]
|
|
ret
|
|
|
|
Function8125:
|
|
ldh a, [hConnectionStripLength]
|
|
ld e, a
|
|
ld d, $00
|
|
ld hl, wUnknownWordcc9c
|
|
add hl, de
|
|
ld [hl], $ff
|
|
ret
|
|
|
|
Function8131:
|
|
ldh a, [hMapObjectIndex]
|
|
ld e, a
|
|
ld d, $00
|
|
ld hl, wUnknownWordcc9c
|
|
add hl, de
|
|
ld [hl], $00
|
|
ret
|
|
|
|
CopyMapObjectToObjectStruct:
|
|
ldh a, [hMapObjectIndex]
|
|
ld hl, OBJECT_MAP_OBJECT_INDEX
|
|
add hl, de
|
|
ld [hl], a
|
|
|
|
ldh a, [hObjectStructIndex]
|
|
ld hl, MAPOBJECT_OBJECT_STRUCT_ID
|
|
add hl, bc
|
|
ld [hl], a
|
|
|
|
ld hl, OBJECT_STEP_TYPE
|
|
add hl, de
|
|
ld [hl], $00
|
|
|
|
ld hl, MAPOBJECT_Y_COORD
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld hl, OBJECT_INIT_Y
|
|
add hl, de
|
|
ld [hl], a
|
|
|
|
ld hl, OBJECT_MAP_Y
|
|
add hl, de
|
|
ld [hl], a
|
|
ld hl, wYCoord
|
|
sub [hl]
|
|
and $f
|
|
swap a
|
|
ld hl, OBJECT_SPRITE_Y
|
|
add hl, de
|
|
ld [hl], a
|
|
|
|
ld hl, MAPOBJECT_X_COORD
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld hl, OBJECT_INIT_X
|
|
add hl, de
|
|
ld [hl], a
|
|
|
|
ld hl, OBJECT_MAP_X
|
|
add hl, de
|
|
ld [hl], a
|
|
ld hl, wXCoord
|
|
sub [hl]
|
|
and $f
|
|
swap a
|
|
ld hl, OBJECT_SPRITE_X
|
|
add hl, de
|
|
ld [hl], a
|
|
|
|
ld hl, MAPOBJECT_MOVEMENT
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld hl, OBJECT_MOVEMENT_TYPE
|
|
add hl, de
|
|
ld [hl], a
|
|
|
|
call InitObjectFlags
|
|
|
|
ld hl, OBJECT_FACING
|
|
add hl, de
|
|
ld [hl], -1
|
|
|
|
ld hl, OBJECT_ACTION
|
|
add hl, de
|
|
ld [hl], 0
|
|
|
|
ld hl, OBJECT_DIRECTION
|
|
add hl, de
|
|
ld [hl], 0
|
|
|
|
ld hl, MAPOBJECT_SPRITE
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld hl, OBJECT_SPRITE
|
|
add hl, de
|
|
ld [hl], a
|
|
|
|
call Function820d
|
|
ld hl, OBJECT_SPRITE_TILE
|
|
add hl, de
|
|
ld [hl], a
|
|
|
|
ld hl, MAPOBJECT_RADIUS
|
|
add hl, bc
|
|
ld a, [hl]
|
|
call CopyMapObject_Radius
|
|
|
|
ld hl, MAPOBJECT_SCRIPT_POINTER + 1
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld hl, OBJECT_21
|
|
add hl, de
|
|
ld [hl], a
|
|
and a
|
|
ret
|
|
|
|
InitObjectFlags:
|
|
ld hl, OBJECT_FLAGS1
|
|
add hl, de
|
|
ld [hl], $70
|
|
ldh a, [hObjectStructIndex]
|
|
push hl
|
|
ld hl, wCenteredObject
|
|
cp [hl]
|
|
pop hl
|
|
jr nz, .sub_81e0
|
|
set 7, [hl]
|
|
.sub_81e0
|
|
cp $01
|
|
jr z, .sub_81e8
|
|
cp $02
|
|
jr nz, .sub_81ea
|
|
.sub_81e8
|
|
set 1, [hl]
|
|
.sub_81ea
|
|
ld hl, OBJECT_FLAGS2
|
|
add hl, de
|
|
ld [hl], $00
|
|
ldh a, [hObjectStructIndex]
|
|
cp $01
|
|
ret z
|
|
set 4, [hl]
|
|
ret
|
|
|
|
CopyMapObject_Radius:
|
|
push af
|
|
swap a
|
|
and $0f
|
|
inc a
|
|
ld hl, OBJECT_RADIUS_X
|
|
add hl, de
|
|
ld [hl], a
|
|
pop af
|
|
and $0f
|
|
inc a
|
|
ld hl, OBJECT_RADIUS_Y
|
|
add hl, de
|
|
ld [hl], a
|
|
ret
|
|
|
|
Function820d:
|
|
push af
|
|
ldh a, [hMapObjectIndex]
|
|
cp PLAYER_OBJECT
|
|
jr nz, .not_player
|
|
pop af
|
|
ld a, $00
|
|
ret
|
|
.not_player
|
|
cp $01
|
|
jr nz, .sub_8220
|
|
pop af
|
|
ld a, $0c
|
|
ret
|
|
.sub_8220
|
|
pop af
|
|
push hl
|
|
push de
|
|
ld d, a
|
|
ld e, $00
|
|
ld hl, wUsedNPCSprites
|
|
.sub_8229
|
|
ld a, [hli]
|
|
cp d
|
|
jr z, .sub_8238
|
|
inc e
|
|
ld a, e
|
|
cp $0a
|
|
jr nz, .sub_8229
|
|
ld a, $00
|
|
scf
|
|
jr .sub_823f
|
|
.sub_8238
|
|
ld hl, Data8242
|
|
ld d, $00
|
|
add hl, de
|
|
ld a, [hl]
|
|
.sub_823f
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
Data8242:
|
|
db $18, $24, $30, $3c, $48, $54, $60, $6c
|
|
db $78, $7c
|
|
|
|
Function824c:
|
|
nop
|
|
ld a, [wPlayerStepDirection]
|
|
cp $ff
|
|
ret z
|
|
ld hl, Table8259
|
|
jp CallJumptable
|
|
|
|
Table8259:
|
|
dw Function8299
|
|
dw Function8292
|
|
dw Function82e6
|
|
dw Function82ed
|
|
|
|
Function8261:
|
|
ret
|
|
|
|
Function8262:
|
|
ld a, [wPlayerStepDirection]
|
|
cp $ff
|
|
ret z
|
|
ld hl, Table826e
|
|
jp CallJumptable
|
|
|
|
Table826e:
|
|
dw Function827d
|
|
dw Function8276
|
|
dw Function8284
|
|
dw Function828b
|
|
|
|
Function8276:
|
|
ld a, [wYCoord]
|
|
sub $02
|
|
jr Function829e
|
|
|
|
Function827d:
|
|
ld a, [wYCoord]
|
|
add $0a
|
|
jr Function829e
|
|
|
|
Function8284:
|
|
ld a, [wXCoord]
|
|
sub $02
|
|
jr Function82f2
|
|
|
|
Function828b:
|
|
ld a, [wXCoord]
|
|
add $0b
|
|
jr Function82f2
|
|
|
|
Function8292:
|
|
ld a, [wYCoord]
|
|
sub $01
|
|
jr Function829e
|
|
|
|
Function8299:
|
|
ld a, [wYCoord]
|
|
add $09
|
|
|
|
Function829e:
|
|
ld d, a
|
|
ld a, [wXCoord]
|
|
ld e, a
|
|
ld bc, wMap2Object
|
|
ld a, $02
|
|
.sub_82a8
|
|
ldh [hConnectionStripLength], a
|
|
ld hl, $0001
|
|
add hl, bc
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .sub_82d8
|
|
ld hl, $0002
|
|
add hl, bc
|
|
ld a, d
|
|
cp [hl]
|
|
jr nz, .sub_82d8
|
|
ld hl, $0000
|
|
add hl, bc
|
|
ld a, [hl]
|
|
cp $ff
|
|
jr nz, .sub_82d8
|
|
ld hl, $0003
|
|
add hl, bc
|
|
ld a, [hl]
|
|
add $01
|
|
sub e
|
|
jr c, .sub_82d8
|
|
cp $0c
|
|
jr nc, .sub_82d8
|
|
push de
|
|
push bc
|
|
call Function80eb
|
|
pop bc
|
|
pop de
|
|
.sub_82d8
|
|
ld hl, $0010
|
|
add hl, bc
|
|
ld b, h
|
|
ld c, l
|
|
ldh a, [hConnectionStripLength]
|
|
inc a
|
|
cp $10
|
|
jr nz, .sub_82a8
|
|
ret
|
|
|
|
Function82e6:
|
|
ld a, [wXCoord]
|
|
sub $01
|
|
jr Function82f2
|
|
|
|
Function82ed:
|
|
ld a, [wXCoord]
|
|
add $0a
|
|
|
|
Function82f2:
|
|
ld e, a
|
|
ld a, [wYCoord]
|
|
ld d, a
|
|
ld bc, wMap2Object
|
|
ld a, $02
|
|
.sub_82fc
|
|
ldh [hConnectionStripLength], a
|
|
ld hl, $0001
|
|
add hl, bc
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .sub_832c
|
|
ld hl, $0003
|
|
add hl, bc
|
|
ld a, e
|
|
cp [hl]
|
|
jr nz, .sub_832c
|
|
ld hl, $0000
|
|
add hl, bc
|
|
ld a, [hl]
|
|
cp $ff
|
|
jr nz, .sub_832c
|
|
ld hl, $0002
|
|
add hl, bc
|
|
ld a, [hl]
|
|
add $01
|
|
sub d
|
|
jr c, .sub_832c
|
|
cp $0b
|
|
jr nc, .sub_832c
|
|
push de
|
|
push bc
|
|
call Function80eb
|
|
pop bc
|
|
pop de
|
|
.sub_832c
|
|
ld hl, $0010
|
|
add hl, bc
|
|
ld b, h
|
|
ld c, l
|
|
ldh a, [hConnectionStripLength]
|
|
inc a
|
|
cp $10
|
|
jr nz, .sub_82fc
|
|
ret
|
|
|
|
Function833a:
|
|
ld a, c
|
|
push af
|
|
call InitMovementBuffer
|
|
ld a, $29
|
|
call AppendToMovementBuffer
|
|
ld a, b
|
|
call GetMapObject
|
|
ld hl, $0000
|
|
add hl, bc
|
|
ld a, [hl]
|
|
cp $ff
|
|
jr z, .sub_8361
|
|
call GetObjectStruct
|
|
ld hl, $0011
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld hl, $0010
|
|
add hl, bc
|
|
ld b, [hl]
|
|
ld c, a
|
|
jr .sub_836c
|
|
.sub_8361
|
|
ld hl, $0002
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld hl, $0003
|
|
add hl, bc
|
|
ld b, [hl]
|
|
ld c, a
|
|
.sub_836c
|
|
pop af
|
|
call ComputePathToWalkToPlayer
|
|
ld a, $28
|
|
call AppendToMovementBuffer
|
|
ld a, $32
|
|
call AppendToMovementBuffer
|
|
xor a
|
|
ret
|
|
|
|
Function837c:
|
|
call InitMovementBuffer
|
|
push bc
|
|
ld a, b
|
|
call GetMapObject
|
|
ld hl, $0000
|
|
add hl, bc
|
|
ld a, [hl]
|
|
call GetObjectStruct
|
|
ld hl, $0010
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld hl, $0011
|
|
add hl, bc
|
|
ld c, [hl]
|
|
ld b, a
|
|
pop hl
|
|
ld a, l
|
|
call ComputePathToWalkToPlayer
|
|
ld a, $32
|
|
call AppendToMovementBuffer
|
|
ret
|
|
|
|
Function83a2:
|
|
push de
|
|
call InitMovementBuffer
|
|
pop de
|
|
call Function83b0
|
|
ld a, $32
|
|
call AppendToMovementBuffer
|
|
ret
|
|
|
|
Function83b0:
|
|
push de
|
|
push bc
|
|
ld a, c
|
|
call GetMapObject
|
|
ld hl, $0000
|
|
add hl, bc
|
|
ld a, [hl]
|
|
call GetObjectStruct
|
|
ld d, b
|
|
ld e, c
|
|
pop bc
|
|
ld a, b
|
|
call GetMapObject
|
|
ld hl, $0000
|
|
add hl, bc
|
|
ld a, [hl]
|
|
call GetObjectStruct
|
|
ld hl, $0010
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld hl, $0011
|
|
add hl, bc
|
|
ld c, [hl]
|
|
ld b, a
|
|
ld hl, $0010
|
|
add hl, de
|
|
ld a, [hl]
|
|
ld hl, $0011
|
|
add hl, de
|
|
ld e, [hl]
|
|
ld d, a
|
|
pop af
|
|
call ComputePathToWalkToPlayer
|
|
ret
|
|
|
|
Function83e8:
|
|
ld hl, wcb70
|
|
push hl
|
|
ld a, [hl]
|
|
ld l, a
|
|
ld h, $00
|
|
ld de, .Table83fb
|
|
add hl, hl
|
|
add hl, de
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
pop hl
|
|
push de
|
|
ret
|
|
|
|
.Table83fb:
|
|
dw .LoadDone
|
|
dw .LoadJumpShadow
|
|
dw .LoadUnknownBouncingOrb
|
|
dw .LoadShockEmote
|
|
dw .LoadQuestionEmote
|
|
dw .LoadHappyEmote
|
|
dw .LoadBoulderDust
|
|
dw .LoadGrampsSpriteStandPt0
|
|
dw .LoadGrampsSpriteStandPt1
|
|
dw .LoadGrampsSpriteWalkPt0
|
|
dw .LoadGrampsSpriteWalkPt1
|
|
dw .LoadClefairySpriteStandPt0
|
|
dw .LoadClefairySpriteStandPt1
|
|
dw .LoadClefairySpriteWalkPt0
|
|
dw .LoadClefairySpriteWalkPt1
|
|
|
|
.FarCopy:
|
|
ld a, c
|
|
ld [wVBCopyFarSrcBank], a
|
|
ld a, l
|
|
ld [wVBCopyFarSrc], a
|
|
ld a, h
|
|
ld [wVBCopyFarSrc+1], a
|
|
.ContinueFarCopyNewDst:
|
|
ld a, e
|
|
ld [wVBCopyFarDst], a
|
|
ld a, d
|
|
ld [wVBCopyFarDst+1], a
|
|
.ContinueFarCopy:
|
|
ld a, b
|
|
ld [wVBCopyFarSize], a
|
|
ret
|
|
|
|
.LoadDone:
|
|
ret
|
|
|
|
.LoadShockEmote:
|
|
ld hl, ShockEmoteGFX
|
|
jr .load_emote
|
|
.LoadQuestionEmote:
|
|
ld hl, QuestionEmoteGFX
|
|
jr .load_emote
|
|
.LoadHappyEmote:
|
|
ld hl, HappyEmoteGFX
|
|
.load_emote:
|
|
ld de, vChars1 + $780
|
|
ld b, (HappyEmoteGFX.end - HappyEmoteGFX) / LEN_2BPP_TILE
|
|
ld c, BANK(EmoteGFX)
|
|
jp .FarCopy
|
|
|
|
.LoadJumpShadow:
|
|
ld [hl], $00
|
|
ld hl, JumpShadowGFX
|
|
ld de, vChars1 + $7c0
|
|
ld b, (JumpShadowGFX.end - JumpShadowGFX) / LEN_2BPP_TILE
|
|
ld c, BANK(JumpShadowGFX)
|
|
jp .FarCopy
|
|
|
|
.LoadUnknownBouncingOrb:
|
|
ld [hl], $00
|
|
ld hl, UnknownBouncingOrbGFX
|
|
ld de, vChars1 + $7c0
|
|
ld b, (UnknownBouncingOrbGFX.end - UnknownBouncingOrbGFX) / LEN_2BPP_TILE
|
|
ld c, BANK(UnknownBouncingOrbGFX)
|
|
jp .FarCopy
|
|
|
|
.LoadBoulderDust:
|
|
ld [hl], $00
|
|
ld hl, BoulderDustGFX
|
|
ld de, vChars1 + $7c0
|
|
ld b, (BoulderDustGFX.end - BoulderDustGFX) / LEN_2BPP_TILE
|
|
ld c, BANK(BoulderDustGFX)
|
|
jp .FarCopy
|
|
|
|
.LoadGrampsSpriteStandPt0:
|
|
inc [hl]
|
|
ld hl, GrampsSpriteGFX
|
|
ld de, vChars0
|
|
ld b, (GrampsSpriteGFX.end - GrampsSpriteGFX) / LEN_2BPP_TILE / 4
|
|
ld c, BANK(GrampsSpriteGFX)
|
|
jp .FarCopy
|
|
|
|
.LoadGrampsSpriteStandPt1:
|
|
inc [hl]
|
|
ld b, (GrampsSpriteGFX.end - GrampsSpriteGFX) / LEN_2BPP_TILE / 4
|
|
jp .ContinueFarCopy
|
|
|
|
.LoadGrampsSpriteWalkPt0:
|
|
inc [hl]
|
|
ld de, vChars1
|
|
ld b, (GrampsSpriteGFX.end - GrampsSpriteGFX) / LEN_2BPP_TILE / 4
|
|
jp .ContinueFarCopyNewDst
|
|
|
|
.LoadGrampsSpriteWalkPt1:
|
|
ld [hl], $00
|
|
ld b, (GrampsSpriteGFX.end - GrampsSpriteGFX) / LEN_2BPP_TILE / 4
|
|
jp .ContinueFarCopy
|
|
|
|
.LoadClefairySpriteStandPt0:
|
|
inc [hl]
|
|
ld hl, ClefairySpriteGFX
|
|
ld de, vChars0
|
|
ld b, (ClefairySpriteGFX.end - ClefairySpriteGFX) / LEN_2BPP_TILE / 4
|
|
ld c, BANK(ClefairySpriteGFX)
|
|
jp .FarCopy
|
|
|
|
.LoadClefairySpriteStandPt1:
|
|
inc [hl]
|
|
ld b, (ClefairySpriteGFX.end - ClefairySpriteGFX) / LEN_2BPP_TILE / 4
|
|
jp .ContinueFarCopy
|
|
|
|
.LoadClefairySpriteWalkPt0:
|
|
inc [hl]
|
|
ld de, vChars1
|
|
ld b, (ClefairySpriteGFX.end - ClefairySpriteGFX) / LEN_2BPP_TILE / 4
|
|
jp .ContinueFarCopyNewDst
|
|
|
|
.LoadClefairySpriteWalkPt1:
|
|
ld [hl], $00
|
|
ld b, (ClefairySpriteGFX.end - ClefairySpriteGFX) / LEN_2BPP_TILE / 4
|
|
jp .ContinueFarCopy
|
|
|
|
SECTION "engine/dumps/bank02.asm@QueueFollowerFirstStep", ROMX
|
|
|
|
QueueFollowerFirstStep:
|
|
call Function85f2
|
|
jr c, .sub_85ec
|
|
ld [wFollowMovementQueue], a
|
|
xor a
|
|
ld [wFollowerMovementQueueLength], a
|
|
ret
|
|
.sub_85ec
|
|
ld a, $ff
|
|
ld [wFollowerMovementQueueLength], a
|
|
ret
|
|
|
|
Function85f2:
|
|
ld a, [wObjectFollow_Leader]
|
|
call GetObjectStruct
|
|
ld hl, $0010
|
|
add hl, bc
|
|
ld d, [hl]
|
|
ld hl, $0011
|
|
add hl, bc
|
|
ld e, [hl]
|
|
ld a, [wObjectFollow_Follower]
|
|
call GetObjectStruct
|
|
ld hl, $0010
|
|
add hl, bc
|
|
ld a, d
|
|
cp [hl]
|
|
jr z, .sub_861a
|
|
jr c, .sub_8616
|
|
and a
|
|
ld a, $0b
|
|
ret
|
|
.sub_8616
|
|
and a
|
|
ld a, $0a
|
|
ret
|
|
.sub_861a
|
|
ld hl, $0011
|
|
add hl, bc
|
|
ld a, e
|
|
cp [hl]
|
|
jr z, .sub_862c
|
|
jr c, .sub_8628
|
|
and a
|
|
ld a, $08
|
|
ret
|
|
.sub_8628
|
|
and a
|
|
ld a, $09
|
|
ret
|
|
.sub_862c
|
|
scf
|
|
ret
|
|
|
|
Function862e:
|
|
ld a, e
|
|
and $3f
|
|
cp $20
|
|
jr nc, .sub_863a
|
|
call Function8644
|
|
ld a, h
|
|
ret
|
|
.sub_863a
|
|
and $1f
|
|
call Function8644
|
|
ld a, h
|
|
xor $ff
|
|
inc a
|
|
ret
|
|
|
|
Function8644:
|
|
ld e, a
|
|
ld a, d
|
|
ld d, $00
|
|
ld hl, Data8660
|
|
add hl, de
|
|
add hl, de
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
ld hl, $0000
|
|
.sub_8653
|
|
srl a
|
|
jr nc, .sub_8658
|
|
add hl, de
|
|
.sub_8658
|
|
sla e
|
|
rl d
|
|
and a
|
|
jr nz, .sub_8653
|
|
ret
|
|
|
|
Data8660:
|
|
dw $00
|
|
dw $19
|
|
dw $32
|
|
dw $4a
|
|
dw $62
|
|
dw $79
|
|
dw $8e
|
|
dw $a2
|
|
dw $b5
|
|
dw $c6
|
|
dw $d5
|
|
dw $e2
|
|
dw $ed
|
|
dw $f5
|
|
dw $fb
|
|
dw $ff
|
|
dw $100
|
|
dw $ff
|
|
dw $fb
|
|
dw $f5
|
|
dw $ed
|
|
dw $e2
|
|
dw $d5
|
|
dw $c6
|
|
dw $b5
|
|
dw $a2
|
|
dw $8e
|
|
dw $79
|
|
dw $62
|
|
dw $4a
|
|
dw $32
|
|
dw $19
|
|
|
|
Function86a0:
|
|
call Function881e
|
|
ld hl, InitEffectObject
|
|
ld a, BANK(InitEffectObject)
|
|
call FarCall_hl
|
|
call PlaceGoldInMap
|
|
call WaitBGMap
|
|
call SetPalettes
|
|
.sub_86b4
|
|
call DelayFrame
|
|
call GetJoypadDebounced
|
|
ld hl, EffectObjectJumpNoDelay
|
|
ld a, BANK(EffectObjectJumpNoDelay)
|
|
call FarCall_hl
|
|
ld hl, hJoyDown
|
|
ld a, [hl]
|
|
and $03
|
|
jr z, .sub_86b4
|
|
ret
|
|
|
|
FlyMap:
|
|
ld hl, hJoyDebounceSrc
|
|
ld a, [hl]
|
|
push af
|
|
ld [hl], $01
|
|
call Function881e
|
|
ld hl, InitEffectObject
|
|
ld a, BANK(InitEffectObject)
|
|
call FarCall_hl
|
|
call PlaceGoldInMap
|
|
call Function88b3
|
|
ld hl, wcb60
|
|
ld [hl], c
|
|
inc hl
|
|
ld [hl], b
|
|
coord hl, 1, 15
|
|
ld de, Text8776
|
|
call PlaceString
|
|
call WaitBGMap
|
|
call SetPalettes
|
|
xor a
|
|
ld [wFlyDestination], a
|
|
.sub_86fc
|
|
call DelayFrame
|
|
call GetJoypadDebounced
|
|
|
|
callfar EffectObjectJumpNoDelay
|
|
|
|
ld hl, hJoyDown
|
|
ld a, [hl]
|
|
and $02
|
|
jr nz, .sub_873e
|
|
ld a, [hl]
|
|
and $01
|
|
jr nz, .sub_8743
|
|
call Function8747
|
|
|
|
callfar GetFlyPointMapLocation
|
|
|
|
ld d, $00
|
|
ld hl, LandmarkPositions
|
|
add hl, de
|
|
add hl, de
|
|
ld d, [hl]
|
|
inc hl
|
|
ld e, [hl]
|
|
ld hl, wcb60
|
|
ld c, [hl]
|
|
inc hl
|
|
ld b, [hl]
|
|
ld hl, $0004
|
|
add hl, bc
|
|
ld [hl], e
|
|
ld hl, $0005
|
|
add hl, bc
|
|
ld [hl], d
|
|
jr .sub_86fc
|
|
.sub_873e
|
|
ld a, $ff
|
|
ld [wFlyDestination], a
|
|
.sub_8743
|
|
pop af
|
|
ldh [hJoyDebounceSrc], a
|
|
ret
|
|
|
|
Function8747: ; Choose fly destination based on D-Pad input
|
|
ld a, [wFlyDestination]
|
|
ld l, a
|
|
ld h, $00
|
|
add hl, hl
|
|
add hl, hl
|
|
ld de, FlyPointPaths
|
|
add hl, de
|
|
ld de, hJoySum
|
|
ld a, [de]
|
|
and D_UP
|
|
jr nz, .sub_876e
|
|
inc hl
|
|
ld a, [de]
|
|
and D_DOWN
|
|
jr nz, .sub_876e
|
|
inc hl
|
|
ld a, [de]
|
|
and D_LEFT
|
|
jr nz, .sub_876e
|
|
inc hl
|
|
ld a, [de]
|
|
and D_RIGHT
|
|
jr nz, .sub_876e
|
|
ret
|
|
.sub_876e
|
|
ld a, [hl]
|
|
cp $ff
|
|
ret z
|
|
ld [wFlyDestination], a
|
|
ret
|
|
|
|
Text8776:
|
|
db "とびさき を えらんでください@"
|
|
|
|
Function8786:
|
|
ld a, [wFlyDestination]
|
|
push af
|
|
xor a
|
|
ld [wFlyDestination], a
|
|
call Function881e
|
|
ld de, PokedexNestIconGFX
|
|
ld hl, vChars0 + $7f0
|
|
lb bc, BANK(PokedexNestIconGFX), $01
|
|
call Request1bpp
|
|
call GetPokemonName
|
|
coord hl, 4, 15
|
|
call PlaceString
|
|
coord hl, 9, 15
|
|
ld de, Text87e4
|
|
call PlaceString
|
|
call WaitBGMap
|
|
call SetPalettes
|
|
xor a
|
|
ldh [hBGMapMode], a
|
|
ld hl, wTileMap
|
|
ld bc, $0168
|
|
xor a
|
|
call ByteFill
|
|
ld hl, Function3e9dc
|
|
ld a, BANK(Function3e9dc)
|
|
call FarCall_hl
|
|
.sub_87ca
|
|
call Function87ea
|
|
call GetJoypadDebounced
|
|
ldh a, [hJoyDown]
|
|
and $03
|
|
jr nz, .sub_87df
|
|
ld hl, wFlyDestination
|
|
inc [hl]
|
|
call DelayFrame
|
|
jr .sub_87ca
|
|
.sub_87df
|
|
pop af
|
|
ld [wFlyDestination], a
|
|
ret
|
|
|
|
Text87e4:
|
|
db "の すみか@"
|
|
|
|
Function87ea:
|
|
ld a, [wFlyDestination]
|
|
and $10
|
|
jr z, .sub_881a
|
|
ld de, wTileMap
|
|
ld hl, wShadowOAM
|
|
.sub_87f7
|
|
ld a, [de]
|
|
and a
|
|
ret z
|
|
push de
|
|
push hl
|
|
ld e, a
|
|
ld d, $00
|
|
ld hl, LandmarkPositions
|
|
add hl, de
|
|
add hl, de
|
|
ld e, l
|
|
ld d, h
|
|
pop hl
|
|
ld a, [de]
|
|
inc de
|
|
sub $04
|
|
ld [hli], a
|
|
ld a, [de]
|
|
inc de
|
|
sub $04
|
|
ld [hli], a
|
|
ld a, $7f
|
|
ld [hli], a
|
|
xor a
|
|
ld [hli], a
|
|
pop de
|
|
inc de
|
|
jr .sub_87f7
|
|
.sub_881a
|
|
call ClearSprites
|
|
ret
|
|
|
|
Function881e:
|
|
call ClearBGPalettes
|
|
call ClearTileMap
|
|
call UpdateSprites
|
|
call DisableLCD
|
|
ld hl, TownMapGFX
|
|
ld de, vTilesetEnd
|
|
ld bc, TownMapGFX.End - TownMapGFX
|
|
ld a, BANK(TownMapGFX)
|
|
call FarCopyData
|
|
ld hl, wTileMap
|
|
call DecompTownMapTilemap
|
|
coord hl, 0, 13
|
|
ld b, $03
|
|
ld c, $12
|
|
call DrawTextBox
|
|
ld a, $03
|
|
call UpdateSoundNTimes
|
|
call EnableLCD
|
|
ld b, $02
|
|
call GetSGBLayout
|
|
ret
|
|
|
|
DecompTownMapTilemap:
|
|
ld de, TownMapTilemap
|
|
.sub_8859
|
|
ld a, [de]
|
|
and a
|
|
ret z
|
|
ld b, a
|
|
inc de
|
|
ld a, [de]
|
|
ld c, a
|
|
ld a, b
|
|
add $60
|
|
.sub_8863
|
|
ld [hli], a
|
|
dec c
|
|
jr nz, .sub_8863
|
|
inc de
|
|
jr .sub_8859
|
|
|
|
PlaceGoldInMap:
|
|
ld de, GoldSpriteGFX
|
|
ld hl, vChars0
|
|
lb bc, BANK(GoldSpriteGFX), $04
|
|
call Request2bpp
|
|
ld de, GoldSpriteGFX + LEN_2BPP_TILE * 12 ; Gold's front-facing walking sprite
|
|
ld hl, vChars0 + $40
|
|
lb bc, BANK(GoldSpriteGFX), $04
|
|
call Request2bpp
|
|
depixel 0, 0
|
|
ld a, SPRITE_ANIM_INDEX_41
|
|
call InitSpriteAnimStruct
|
|
ld hl, $0003
|
|
add hl, bc
|
|
ld [hl], $00
|
|
push bc
|
|
ld a, [wMapGroup]
|
|
ld b, a
|
|
ld a, [wMapId]
|
|
ld c, a
|
|
call GetWorldMapLocation
|
|
ld e, a
|
|
ld d, $00
|
|
ld hl, LandmarkPositions
|
|
add hl, de
|
|
add hl, de
|
|
ld d, [hl]
|
|
inc hl
|
|
ld e, [hl]
|
|
pop bc
|
|
ld hl, $0004
|
|
add hl, bc
|
|
ld [hl], e
|
|
ld hl, $0005
|
|
add hl, bc
|
|
ld [hl], d
|
|
ret
|
|
|
|
Function88b3:
|
|
ld de, PidgeySpriteGFX
|
|
ld hl, vChars0 + $80
|
|
lb bc, BANK(PidgeySpriteGFX), $04
|
|
call Request2bpp
|
|
ld de, PidgeySpriteGFX + $c0
|
|
ld hl, vChars0 + $c0
|
|
lb bc, BANK(PidgeySpriteGFX), $04
|
|
call Request2bpp
|
|
depixel 0, 0
|
|
ld a, SPRITE_ANIM_INDEX_41
|
|
call InitSpriteAnimStruct
|
|
ld hl, $0003
|
|
add hl, bc
|
|
ld [hl], $08
|
|
ret
|
|
|
|
TownMapTilemap:
|
|
INCBIN "gfx/trainer_gear/town_map.tilemap.rle"
|