mirror of
https://github.com/pret/pokegold-spaceworld.git
synced 2026-09-26 13:32:48 -04:00
433 lines
6.9 KiB
NASM
433 lines
6.9 KiB
NASM
; DebugMapViewer.Jumptable constants
|
||
const_def
|
||
const DEBUGMAPVIEWER_EMPTY ; 0
|
||
const DEBUGMAPVIEWER_INIT ; 1
|
||
const DEBUGMAPVIEWER_CONTROL_CURSOR ; 2
|
||
const DEBUGMAPVIEWER_MOVE_CURSOR_TO_PLAYER ; 3
|
||
const DEBUGMAPVIEWER_WAIT_FINISHED_MOVING ; 4
|
||
const DEBUGMAPVIEWER_CLEANUP ; 5
|
||
|
||
FieldDebug_OpenMapViewer:
|
||
call .DoOpen
|
||
jr c, .done
|
||
ld a, FIELDDEBUG_RETURN_EXIT
|
||
ret
|
||
|
||
.done
|
||
ld a, FIELDDEBUG_RETURN_REOPEN
|
||
ret
|
||
|
||
.DoOpen:
|
||
ld hl, .MapViewPrompt
|
||
call MenuTextBox
|
||
call YesNoBox
|
||
call CloseWindow
|
||
ret c
|
||
|
||
ldh a, [hROMBank]
|
||
ld hl, .MapViewScript
|
||
call QueueScript
|
||
ret
|
||
|
||
.MapViewPrompt:
|
||
text "マップビューワーを"
|
||
line "しようしますか?"
|
||
done
|
||
|
||
.MapViewScript:
|
||
ld a, MAPSTATUS_DEBUG_MAP_VIEWER
|
||
call SetMapStatus
|
||
xor a
|
||
ldh [hJoypadSum], a
|
||
ld a, DEBUGMAPVIEWER_INIT
|
||
ldh [hDebugMapViewerJumptable], a
|
||
ret
|
||
|
||
DebugMapViewer::
|
||
ld a, [wTimeOfDayDebugFlags]
|
||
ld b, a
|
||
ld a, [wToolgearFlags]
|
||
ld c, a
|
||
push bc
|
||
call EnableToolgearCoords
|
||
call InitToolgearBuffer
|
||
.loop
|
||
call GetJoypad
|
||
call .do_jumptable
|
||
jr c, .continue
|
||
call HandleMapObjects
|
||
jr nc, .loop
|
||
callfar CheckObjectEnteringVisibleRange
|
||
jr .loop
|
||
|
||
.continue
|
||
ld a, MAPSTATUS_RETURN_TO_MAIN
|
||
call SetMapStatus
|
||
pop bc
|
||
ld a, b
|
||
ld [wTimeOfDayDebugFlags], a
|
||
ld a, c
|
||
ld [wToolgearFlags], a
|
||
ret
|
||
|
||
.do_jumptable
|
||
ld a, [wDebugFlags]
|
||
bit DEBUG_FIELD_F, a
|
||
ret z
|
||
ldh a, [hDebugMapViewerJumptable]
|
||
and a
|
||
ret z
|
||
ld e, a
|
||
ld d, 0
|
||
ld hl, .Jumptable
|
||
add hl, de
|
||
add hl, de
|
||
ld a, [hli]
|
||
ld h, [hl]
|
||
ld l, a
|
||
jp hl
|
||
|
||
.Jumptable:
|
||
dw .Empty
|
||
dw .Init
|
||
dw .ControlCursor
|
||
dw .MoveCursorToPlayer
|
||
dw .WaitFinishedMoving
|
||
dw .Cleanup
|
||
|
||
.Empty:
|
||
ret
|
||
|
||
.Init:
|
||
call FreezePlayer
|
||
call DebugMapViewer_LoadCursorSprite
|
||
call DebugMapViewer_ReplacePlayerObject
|
||
ld a, movement_step_sleep
|
||
ld [wMovementObject], a
|
||
ld a, DEBUGMAPVIEWER_CONTROL_CURSOR
|
||
ldh [hDebugMapViewerJumptable], a
|
||
and a
|
||
ret
|
||
|
||
.ControlCursor:
|
||
ldh a, [hJoypadSum]
|
||
ld b, a
|
||
xor a
|
||
ldh [hJoypadSum], a
|
||
ld a, b
|
||
and PAD_START
|
||
jr nz, .start_pressed
|
||
ldh a, [hJoyState]
|
||
and PAD_A
|
||
jr nz, .a_pressed
|
||
call DebugMapViewer_DoMovement
|
||
jr .apply_movement
|
||
.start_pressed
|
||
call DebugMapViewer_ShowViewerPrompt
|
||
ld a, movement_step_sleep
|
||
jr .apply_movement
|
||
.a_pressed
|
||
call DebugMapViewer_ShowSelectedDetails
|
||
ld a, movement_step_sleep
|
||
.apply_movement
|
||
ld [wMovementObject], a
|
||
and a
|
||
ret
|
||
|
||
.MoveCursorToPlayer:
|
||
ld a, MAP_VIEWER_CURSOR
|
||
ld hl, wMovementBuffer
|
||
call LoadMovementDataPointer
|
||
ld d, STEP_BIKE
|
||
ld b, MAP_VIEWER_CURSOR
|
||
ld c, PLAYER
|
||
callfar ObjectWalkToPlayer
|
||
ld a, DEBUGMAPVIEWER_WAIT_FINISHED_MOVING
|
||
ldh [hDebugMapViewerJumptable], a
|
||
and a
|
||
ret
|
||
|
||
.WaitFinishedMoving:
|
||
ld hl, wStateFlags
|
||
bit SCRIPTED_MOVEMENT_STATE_F, [hl]
|
||
jr nz, .skip
|
||
ld a, DEBUGMAPVIEWER_CLEANUP
|
||
ldh [hDebugMapViewerJumptable], a
|
||
.skip
|
||
and a
|
||
ret
|
||
|
||
.Cleanup:
|
||
ld a, MAP_VIEWER_CURSOR
|
||
call DeleteMapObject
|
||
call UnfreezePlayer
|
||
ld a, PLAYER
|
||
call CenterObject
|
||
xor a
|
||
ldh [hDebugMapViewerJumptable], a
|
||
scf
|
||
ret
|
||
|
||
DebugMapViewer_ShowViewerPrompt:
|
||
call ReanchorMap
|
||
ld hl, .ChangeViewerPrompt
|
||
call MenuTextBox
|
||
call YesNoBox
|
||
call CloseWindow
|
||
jr c, .no
|
||
ld a, DEBUGMAPVIEWER_MOVE_CURSOR_TO_PLAYER
|
||
ldh [hDebugMapViewerJumptable], a
|
||
.no
|
||
call CloseText
|
||
ret
|
||
|
||
.ChangeViewerPrompt:
|
||
text "ビューワーモードを"
|
||
line "かいじょ しますか?"
|
||
done
|
||
|
||
DebugMapViewer_ShowSelectedDetails:
|
||
ld a, 0
|
||
ldh [hTextBoxCursorBlinkInterval], a
|
||
ld bc, wObjectStructs
|
||
callfar WillObjectBumpIntoSomeoneElse
|
||
jr nc, .skip
|
||
call ReanchorMap
|
||
call .DisplayActorCastID
|
||
call CloseText
|
||
ret
|
||
.skip
|
||
call DisplayBGEventDetails
|
||
ret
|
||
|
||
.DisplayActorCastID:
|
||
ld hl, .ActorCastText
|
||
call MenuTextBox
|
||
|
||
; Display index of selected object from map objects
|
||
; (referred to as "actor number")
|
||
ld de, hEventID
|
||
hlcoord 10, 14
|
||
lb bc, 1, 2
|
||
call PrintNumber
|
||
|
||
; Display index of selected object from visible objects
|
||
; (referred to as "cast number")
|
||
ldh a, [hEventID]
|
||
call GetObjectStruct
|
||
ld hl, OBJECT_MAP_OBJECT_INDEX
|
||
add hl, bc
|
||
ld a, [hl]
|
||
cp NUM_OBJECTS
|
||
jr nc, .invalid_index
|
||
ld d, h
|
||
ld e, l
|
||
hlcoord 10, 16
|
||
lb bc, 1, 2
|
||
call PrintNumber
|
||
jr .wait
|
||
|
||
.invalid_index
|
||
hlcoord 10, 16
|
||
ld de, .NoneText
|
||
call PlaceString
|
||
|
||
.wait
|
||
ld a, PAD_BUTTONS
|
||
call FieldDebug_WaitJoypadInput
|
||
call CloseWindow
|
||
ret
|
||
|
||
.ActorCastText:
|
||
text "アクターナンバー "
|
||
line "キャストナンバー "
|
||
done
|
||
|
||
.NoneText:
|
||
db "なし@"
|
||
|
||
DebugMapViewer_DoMovement:
|
||
ld bc, wObjectStructs
|
||
ldh a, [hJoyState]
|
||
ld d, a
|
||
bit B_PAD_DOWN, a
|
||
jr nz, .down
|
||
bit B_PAD_UP, a
|
||
jr nz, .up
|
||
bit B_PAD_LEFT, a
|
||
jr nz, .left
|
||
bit B_PAD_RIGHT, a
|
||
jr nz, .right
|
||
.done
|
||
ld a, movement_step_sleep
|
||
ret
|
||
|
||
.down
|
||
ld a, [wMapHeight]
|
||
add a
|
||
add 4
|
||
ld e, a
|
||
ld hl, $11
|
||
add hl, bc
|
||
ld a, [hl]
|
||
inc a
|
||
cp e
|
||
jr nc, .done
|
||
bit 1, d
|
||
ld a, $c
|
||
ret nz
|
||
ld a, 8
|
||
ret
|
||
|
||
.up
|
||
ld hl, $11
|
||
add hl, bc
|
||
ld a, [hl]
|
||
dec a
|
||
cp 4
|
||
jr c, .done
|
||
bit 1, d
|
||
ld a, $d
|
||
ret nz
|
||
ld a, 9
|
||
ret
|
||
|
||
.left
|
||
ld hl, $10
|
||
add hl, bc
|
||
ld a, [hl]
|
||
dec a
|
||
cp 4
|
||
jr c, .done
|
||
bit 1, d
|
||
ld a, $e
|
||
ret nz
|
||
ld a, $a
|
||
ret
|
||
|
||
.right
|
||
ld a, [wMapWidth]
|
||
add a
|
||
add 4
|
||
ld e, a
|
||
ld hl, $10
|
||
add hl, bc
|
||
ld a, [hl]
|
||
inc a
|
||
cp e
|
||
jr nc, .done
|
||
bit 1, d
|
||
ld a, $f
|
||
ret nz
|
||
ld a, $b
|
||
ret
|
||
|
||
DebugMapViewer_ReplacePlayerObject:
|
||
callfar DebugMapViewer_SetupCursor
|
||
ld a, MAP_VIEWER_CURSOR
|
||
call CopyMapObjectToReservedObjectStruct
|
||
ld a, MAP_VIEWER_CURSOR
|
||
call CenterObject
|
||
ld bc, wReservedObjectStruct
|
||
ld hl, OBJECT_FLAGS1
|
||
add hl, bc
|
||
set SLIDING_F, [hl]
|
||
set FIXED_FACING_F, [hl]
|
||
set WONT_DELETE_F, [hl]
|
||
ret
|
||
|
||
; Already handled by DebugMapViewer_SetupCursor
|
||
.Unreferenced_CursorObjectTemplate:
|
||
object_event -4, -4, SPRITE_GOLD, $17, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0
|
||
ds 2
|
||
|
||
DebugMapViewer_LoadCursorSprite:
|
||
ldh a, [hBGMapMode]
|
||
push af
|
||
ldh a, [hMapAnims]
|
||
push af
|
||
xor a
|
||
ldh [hBGMapMode], a
|
||
ld de, TownMapCursorGFX
|
||
ld hl, vChars0 tile $0c
|
||
lb bc, BANK(TownMapCursorGFX), 4
|
||
call Get2bpp
|
||
pop af
|
||
ldh [hMapAnims], a
|
||
pop af
|
||
ldh [hBGMapMode], a
|
||
ret
|
||
|
||
TownMapCursorGFX:
|
||
INCBIN "gfx/trainer_gear/town_map_cursor.2bpp"
|
||
|
||
DisplayBGEventDetails:
|
||
call GetBGEvent
|
||
ret nc
|
||
call .SetData
|
||
call ReanchorMap
|
||
ld hl, .TableText
|
||
call MenuTextBox
|
||
call .PrintTableDetails
|
||
call .WaitInput
|
||
call CloseWindow
|
||
call CloseText
|
||
ret
|
||
|
||
.SetData:
|
||
ld a, [hld]
|
||
ld [wFieldMoveScriptID], a
|
||
ld a, [hl]
|
||
ld [wMapBGEventCount], a
|
||
ld a, d
|
||
ld [wMapBlocksAddress], a
|
||
ld a, e
|
||
ld [wHPBarOldHP], a
|
||
ld a, b
|
||
ld [wReplacementBlock], a
|
||
ld a, [wCurMapBGEventCount]
|
||
sub c
|
||
inc a
|
||
ld [wHPBarNewHP], a
|
||
ret
|
||
|
||
.TableText:
|
||
text "テーブル"
|
||
done
|
||
|
||
.PrintTableDetails:
|
||
hlcoord 8, 14
|
||
ld de, wMapBlocksAddress
|
||
call PrintHexByte
|
||
|
||
hlcoord 11, 14
|
||
ld de, wHPBarOldHP
|
||
call PrintHexByte
|
||
|
||
hlcoord 14, 14
|
||
ld de, wMapBGEventCount
|
||
call PrintHexByte
|
||
|
||
hlcoord 17, 14
|
||
ld de, wFieldMoveScriptID
|
||
lb bc, PRINTNUM_LEADINGZEROS | 1, 2
|
||
call PrintNumber
|
||
|
||
hlcoord 14, 16
|
||
ld de, wReplacementBlock
|
||
call PrintHexByte
|
||
|
||
hlcoord 17, 16
|
||
ld de, wHPBarNewHP
|
||
lb bc, PRINTNUM_LEADINGZEROS | 1, 2
|
||
call PrintNumber
|
||
|
||
ret
|
||
|
||
.WaitInput:
|
||
call GetJoypad
|
||
ldh a, [hJoyDown]
|
||
and PAD_A | PAD_B | PAD_SELECT
|
||
jr z, .WaitInput
|
||
ret
|