Split and label Trainer Gear code (#89)

Split and label Trainer Gear code
This commit is contained in:
Zumi 2021-01-26 01:01:22 +07:00 committed by GitHub
parent 000e98b235
commit 5251fe1ec1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 745 additions and 668 deletions

View File

@ -19,7 +19,7 @@
const SGB_POKEDEX_SEARCH_OPTION
const SGB_BETA_POKER
const SGB_POKEPIC
const SGB_13
const SGB_TRAINER_GEAR
const SGB_PACKPALS
const SGB_TRAINER_CARD
const SGB_POKEDEX_UNOWN_MODE

View File

@ -20,8 +20,9 @@ SPRITEANIMSTRUCT_LENGTH EQU const_value
NUM_SPRITE_ANIM_STRUCTS EQU 10 ; see wSpriteAnimationStructs
; wSpriteAnimDict keys
SPRITE_ANIM_DICT_DEFAULT EQU $00
SPRITE_ANIM_DICT_DEFAULT EQU $00
SPRITE_ANIM_DICT_GS_SPLASH EQU $27
SPRITE_ANIM_DICT_29 EQU $29
; wSpriteAnimDict size (see ram/wram.asm)
NUM_SPRITEANIMDICT_ENTRIES EQU 10
@ -56,5 +57,6 @@ SPRITE_ANIM_INDEX_GS_INTRO_STAR EQU $3b
SPRITE_ANIM_INDEX_GS_INTRO_SPARKLE EQU $3c
SPRITE_ANIM_INDEX_40 EQU $40
SPRITE_ANIM_INDEX_41 EQU $41
SPRITE_ANIM_INDEX_44 EQU $44
SPRITE_ANIM_INDEX_4B EQU $4b
SPRITE_ANIM_INDEX_TRAINERGEAR_POINTER EQU $44
SPRITE_ANIM_INDEX_RADIO_TUNING_KNOB EQU $4b

View File

@ -900,7 +900,7 @@ Function86a0:
ld hl, InitEffectObject
ld a, BANK(InitEffectObject)
call FarCall_hl
call Function886a
call PlaceGoldInMap
call WaitBGMap
call SetPalettes
.sub_86b4
@ -924,7 +924,7 @@ FlyMap:
ld hl, InitEffectObject
ld a, BANK(InitEffectObject)
call FarCall_hl
call Function886a
call PlaceGoldInMap
call Function88b3
ld hl, wcb60
ld [hl], c
@ -1141,7 +1141,7 @@ DecompTownMapTilemap:
inc de
jr .sub_8859
Function886a:
PlaceGoldInMap:
ld de, GoldSpriteGFX
ld hl, vChars0
lb bc, BANK(GoldSpriteGFX), $04
@ -1252,666 +1252,7 @@ Data8a53:
db $3c, $14, $3c, $20, $48, $14, $54, $1c
db $54, $2c, $54, $38, $3c, $44, $48, $2c
OpenTrainerGear:
ld hl, wce5f
ld a, [hl]
push af
set 4, [hl]
ldh a, [hMapAnims]
push af
xor a
ldh [hMapAnims], a
ldh a, [hJoypadSum]
push af
ld a, [wVramState]
push af
xor a
ld [wVramState], a
call Function8ae0
call DelayFrame
.sub_8ac9
call Function8ba3
jr nc, .sub_8ac9
pop af
ld [wVramState], a
pop af
ldh [hJoypadSum], a
pop af
ldh [hMapAnims], a
pop af
ld [wce5f], a
call ClearJoypad
ret
Function8ae0:
call ClearBGPalettes
call DisableLCD
call ClearSprites
ld b, $13
call GetSGBLayout
ld hl, TrainerGearGFX
ld de, vChars2
ld bc, $0200
ld a, $02
call FarCopyData
call Function8b2a
call Function8b7e
xor a
ldh [hSCY], a
ldh [hSCX], a
ld [wJumptableIndex], a
ld [wFlyDestination], a
ld a, $ff
ld [wcb60], a
ld a, $07
ldh [hWX], a
ld a, $08
call UpdateSoundNTimes
ld a, $e3
ldh [rLCDC], a
call WaitBGMap
call SetPalettes
ld a, $e0
ldh [rOBP1], a
ret
Function8b2a:
ld hl, wTileMap
ld bc, $0168
ld a, $7f
call ByteFill
ld de, wTileMap
ld hl, Data8b42
ld bc, $003c
call CopyBytes
ret
Data8b42:
db $0d, $1c, $1d, $0b, $1c, $1d, $0b, $1c
db $1d, $0c, $01, $05, $05, $05, $05, $05
db $05, $05, $05, $02, $08, $1e, $1f, $0a
db $1e, $1f, $0a, $1e, $1f, $07, $08, $7f
db $7f, $0f, $7f, $7f, $0f, $7f, $7f, $07
db $03, $06, $06, $09, $06, $06, $09, $06
db $06, $04, $03, $06, $06, $06, $06, $06
db $06, $06, $06, $04
Function8b7e:
coord hl, 1, 0
ld a, $10
call Function8b97
coord hl, 4, 0
ld a, $14
call Function8b97
coord hl, 7, 0
ld a, $18
call Function8b97
ret
Function8b97:
ld [hli], a
inc a
ld [hld], a
ld bc, $0014
add hl, bc
inc a
ld [hli], a
inc a
ld [hld], a
ret
Function8ba3:
call UpdateTime
call GetJoypadDebounced
ld a, [wJumptableIndex]
bit 7, a
jr nz, .sub_8bc3
call Function8bfd
ld a, BANK(EffectObjectJumpNoDelay)
ld hl, EffectObjectJumpNoDelay
call FarCall_hl
call Function8bd5
call DelayFrame
and a
ret
.sub_8bc3
ld hl, InitEffectObject
ld a, BANK(InitEffectObject)
call FarCall_hl
call ClearSprites
xor a
ldh [hSCX], a
ldh [hSCY], a
scf
ret
Function8bd5:
coord hl, 11, 1
ld a, $7f
ld [hli], a
ld [hl], a
ld de, hRTCHours
coord hl, 11, 1
ld bc, $0102
call PrintNumber
inc hl
ld de, hRTCMinutes
ld bc, $8102
call PrintNumber
inc hl
ld de, hRTCSeconds
ld bc, $8102
call PrintNumber
ret
Function8bfd:
ld a, [wJumptableIndex]
ld e, a
ld d, $00
ld hl, Table8c0c
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
Table8c0c:
dw Function8c21
dw Function8c49
dw DrawMap
dw Function8cab
dw Function8cb7
dw Function8d62
dw Function8e6c
dw Function8e9e
Function8c1c:
ld hl, wJumptableIndex
inc [hl]
ret
Function8c21:
ld hl, InitEffectObject
ld a, BANK(InitEffectObject)
call FarCall_hl
ld de, PointerGFX
ld hl, vChars0 + $7c0
lb bc, BANK(PointerGFX), $04
call Request2bpp
ld a, $29
ld hl, wTileMapBackup
ld [hli], a
ld [hl], $7c
depixel 4, 3, 4, 4
ld a, SPRITE_ANIM_INDEX_44
call InitSpriteAnimStruct
call Function8c1c
ret
Function8c49:
ld hl, hJoySum
ld a, [hl]
and $02
jr nz, .sub_8c59
ld a, [hl]
and $01
ret z
call Function8c5f
ret
.sub_8c59
ld hl, wJumptableIndex
set 7, [hl]
ret
Function8c5f:
ld a, [wFlyDestination]
ld hl, wcb60
cp [hl]
ret z
ld [wcb60], a
and $03
ld e, a
ld d, $00
ld hl, Unknown8c78
add hl, de
ld a, [hl]
ld [wJumptableIndex], a
ret
Unknown8c78:
db $02, $04, $06, $02
DrawMap:
call Function8c1c
call Function8eaa
call WaitForAutoBgMapTransfer
ld b, $14
call GetSGBLayout
ld de, TownMapGFX
ld hl, vTilesetEnd
lb bc, BANK(TownMapGFX), ((TownMapGFX.End - TownMapGFX) / LEN_2BPP_TILE - 1)
call Request2bpp
coord hl, 0, 3
call DecompTownMapTilemap
call WaitBGMap
call Function886a
ld hl, $0005
add hl, bc
ld a, [hl]
add $18
ld [hl], a
ret
Function8cab:
ld hl, hJoyDown
ld a, [hl]
and $02
ret z
xor a
ld [wJumptableIndex], a
ret
Function8cb7:
call Function8c1c
call Function8eaa
call WaitForAutoBgMapTransfer
ld b, $15
call GetSGBLayout
ld de, RadioGFX
ld hl, vTilesetEnd
lb bc, BANK(RadioGFX), $09
call Request2bpp
ld de, VerticalPipeGFX
ld hl, vChars0
lb bc, BANK(VerticalPipeGFX), $01
call Request2bpp
coord hl, 0, 3
ld bc, $00b4
ld a, $0e
call ByteFill
coord hl, 1, 8
ld bc, $0412
call Function8ef9
coord hl, 4, 3
ld bc, $060e
call Function8ef9
ld a, $05
coord hl, 0, 11
ld [hl], a
coord hl, 19, 11
ld [hl], a
coord hl, 2, 5
ld a, $60
ld [hli], a
inc a
ld [hld], a
inc a
ld bc, $0014
add hl, bc
ld [hli], a
inc a
ld [hld], a
coord hl, 2, 4
ld a, $64
ld [hli], a
inc a
ld [hl], a
coord hl, 5, 5
ld bc, $000c
ld a, $66
call ByteFill
coord hl, 5, 6
ld bc, $000c
ld a, $67
call ByteFill
ld hl, Text91c2
call PrintText
call WaitBGMap
depixel 9, 4, 4, 3
ld a, SPRITE_ANIM_INDEX_44
call InitSpriteAnimStruct
ld hl, $0002
add hl, bc
ld [hl], $00
ld hl, $0003
add hl, bc
ld [hl], $7c
depixel 8, 6
ld a, SPRITE_ANIM_INDEX_4B
call InitSpriteAnimStruct
ld hl, $0003
add hl, bc
ld [hl], $00
xor a
ld [wcb61], a
ret
Function8d62:
ld hl, hJoyDown
ld a, [hl]
and $02
ret z
xor a
ld [wJumptableIndex], a
ret
Function8d6e:
ld hl, wcb61
ld e, [hl]
ld d, $00
ld hl, Table8d7d
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
Table8d7d:
dw Function8d85
dw Function8d91
dw Function8d85
dw Function8db9
Function8d85:
ld hl, hJoyDown
ld a, [hl]
and $01
ret z
ld hl, wcb61
inc [hl]
ret
Function8d91:
ld hl, $000c
add hl, bc
ld a, [hl]
and a
jr nz, .sub_8da6
call Function8dfd
jr c, .sub_8db1
ld hl, $0006
add hl, bc
ld a, [hl]
and a
jr z, .sub_8dab
.sub_8da6
ld hl, hFFC0
jr Function8de3
.sub_8dab
ld a, $03
ld [wcb61], a
ret
.sub_8db1
call .sub_8da6
xor a
ld [wcb61], a
ret
Function8db9:
ld hl, $000c
add hl, bc
ld a, [hl]
and a
jr nz, .sub_8dcf
call Function8dfd
jr c, .sub_8dda
ld hl, $0006
add hl, bc
ld a, [hl]
cp $60
jr z, .sub_8dd4
.sub_8dcf
ld hl, $0040
jr Function8de3
.sub_8dd4
ld a, $01
ld [wcb61], a
ret
.sub_8dda
call .sub_8dcf
ld a, $02
ld [wcb61], a
ret
Function8de3:
push hl
ld hl, $0006
add hl, bc
ld d, [hl]
ld hl, $000c
add hl, bc
ld e, [hl]
pop hl
add hl, de
ld e, l
ld d, h
ld hl, $000c
add hl, bc
ld [hl], e
ld hl, $0006
add hl, bc
ld [hl], d
ret
Function8dfd:
ld hl, $0006
add hl, bc
push bc
ld c, [hl]
ld a, [wMapGroup]
ld e, a
ld d, $00
ld hl, Table8e2f
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
.sub_8e11
ld a, [hl]
and a
jr z, .sub_8e1e
cp c
jr z, .sub_8e21
ld de, $0006
add hl, de
jr .sub_8e11
.sub_8e1e
pop bc
and a
ret
.sub_8e21
ld de, Function8e2c
push de
inc hl
ld e, [hl]
inc hl
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
Function8e2c:
pop bc
scf
ret
Table8e2f:
dw Data8e4d
dw Data8e4d
dw Data8e4d
dw Data8e4d
dw Data8e4d
dw Data8e4d
dw Data8e4d
dw Data8e4d
dw Data8e4d
dw Data8e4d
dw Data8e4d
dw Data8e4d
dw Data8e4d
dw Data8e4d
dw Data8e4d
Data8e4d:
db $10, $02
dw Function8e66
dw Function8e66
db $20, $05
dw Function8e66
dw Function8e66
db $40, $07
dw Function8e66
dw Function8e66
db $48, $09
dw Function8e66
dw Function8e66
db $00
Function8e66:
ld d, $00
call PlayMusic
ret
Function8e6c:
call Function8c1c
call Function8eaa
call WaitForAutoBgMapTransfer
ld b, $13
call GetSGBLayout
call LoadFontExtra
ld de, Text8e90
coord hl, 7, 7
call PlaceString
ld hl, Text8e95
call PrintText
call WaitBGMap
ret
Text8e90:
db "けんがい@"
Text8e95:
text "ちぇっ⋯⋯⋯⋯"
done
Function8e9e:
ld hl, hJoyDown
ld a, [hl]
and $02
ret z
xor a
ld [wJumptableIndex], a
ret
Function8eaa:
ld hl, InitEffectObject
ld a, BANK(InitEffectObject)
call FarCall_hl
call ClearSprites
call WaitForAutoBgMapTransfer
coord hl, 0, 3
ld bc, $012c
ld a, $7f
call ByteFill
call WaitBGMap
call WaitBGMap
ret
Function8eca:
ld hl, wFlyDestination
ld de, hJoySum
ld a, [de]
and $20
jr nz, .sub_8edc
ld a, [de]
and $10
jr nz, .sub_8ee2
jr .sub_8ee7
.sub_8edc
ld a, [hl]
and a
ret z
dec [hl]
jr .sub_8ee7
.sub_8ee2
ld a, [hl]
cp $02
ret nc
inc [hl]
.sub_8ee7
ld e, [hl]
ld d, $00
ld hl, Data8ef5
add hl, de
ld a, [hl]
ld hl, $0006
add hl, bc
ld [hl], a
ret
Data8ef5:
db $00, $18, $30, $00
Function8ef9:
dec c
dec c
dec b
dec b
ld de, $0014
push bc
push hl
ld a, $01
ld [hli], a
ld a, $05
.sub_8f07
ld [hli], a
dec c
jr nz, .sub_8f07
ld a, $02
ld [hl], a
pop hl
pop bc
add hl, de
.sub_8f11
push bc
push hl
ld a, $08
ld [hli], a
ld a, $7f
.sub_8f18
ld [hli], a
dec c
jr nz, .sub_8f18
ld a, $07
ld [hli], a
pop hl
add hl, de
pop bc
dec b
jr nz, .sub_8f11
ld a, $03
ld [hli], a
ld a, $06
.sub_8f2a
ld [hli], a
dec c
jr nz, .sub_8f2a
ld a, $04
ld [hli], a
ret
SECTION "engine/dumps/bank02.asm@Text91c2", ROMX
Text91c2:
text "エーボタンで チューニング!"
done
SECTION "engine/dumps/bank02.asm@SetTitleBGDecorationBorder", ROMX
SetTitleBGDecorationBorder:
ld de, TitleBGDecorationBorder

726
engine/trainer_gear.asm Normal file
View File

@ -0,0 +1,726 @@
INCLUDE "constants.asm"
SECTION "engine/trainer_gear.asm@OpenTrainerGear", ROMX
TRAINERGEAR_GFX_VERTICAL_PIPE EQU $00
TRAINERGEAR_GFX_POINTER EQU $7c
TRAINERGEAR_GFX_BORDER_TOPLEFT EQU $01
TRAINERGEAR_GFX_BORDER_TOPRIGHT EQU $02
TRAINERGEAR_GFX_BORDER_BOTTOMLEFT EQU $03
TRAINERGEAR_GFX_BORDER_BOTTOMRIGHT EQU $04
TRAINERGEAR_GFX_BORDER_TOP EQU $05
TRAINERGEAR_GFX_BORDER_BOTTOM EQU $06
TRAINERGEAR_GFX_BORDER_RIGHT EQU $07
TRAINERGEAR_GFX_BORDER_LEFT EQU $08
TRAINERGEAR_GFX_GRAYTILE EQU $0e
TRAINERGEAR_GFX_BLANKTILE EQU $7f
TRAINERGEAR_GFX_MAP_ICON EQU $10
TRAINERGEAR_GFX_RADIO_ICON EQU $14
TRAINERGEAR_GFX_PHONE_ICON EQU $18
TRAINERGEAR_GFX_TUNE_BUTTON EQU $60
TRAINERGEAR_GFX_TUNE_TEXT EQU $64
TRAINERGEAR_GFX_RADIO_TOPHALF EQU $66
TRAINERGEAR_GFX_RADIO_BOTTOMHALF EQU $67
; Trainer Gear cards
const_def
const TRAINERGEARCARD_MAP
const TRAINERGEARCARD_RADIO
const TRAINERGEARCARD_PHONE
NUM_TRAINERGEAR_CARDS EQU const_value
; TrainerGear_Jumptable.Jumptable indices
const_def
const TRAINERGEARSTATE_INIT
const TRAINERGEARSTATE_JOYPAD
const TRAINERGEARSTATE_MAPINIT
const TRAINERGEARSTATE_MAPJOYPAD
const TRAINERGEARSTATE_RADIOINIT
const TRAINERGEARSTATE_RADIOJOYPAD
const TRAINERGEARSTATE_PHONEINIT
const TRAINERGEARSTATE_PHONEJOYPAD
TRAINERGEAR_END_LOOP_F EQU 7
; TrainerGear_RadioJumptable.Jumptable indices
const_def
const TRAINERGEAR_RADIOSTATE_WAITINPUT_1
const TRAINERGEAR_RADIOSTATE_ADVANCEDIAL
const TRAINERGEAR_RADIOSTATE_WAITINPUT_2
const TRAINERGEAR_RADIOSTATE_TURNBACKDIAL
OpenTrainerGear:
ld hl, wce5f
ld a, [hl]
push af
set 4, [hl]
ldh a, [hMapAnims]
push af
xor a
ldh [hMapAnims], a
ldh a, [hJoypadSum]
push af
ld a, [wVramState]
push af
xor a
ld [wVramState], a
call TrainerGear_Init
call DelayFrame
.loop
call TrainerGear_Loop
jr nc, .loop
pop af
ld [wVramState], a
pop af
ldh [hJoypadSum], a
pop af
ldh [hMapAnims], a
pop af
ld [wce5f], a
call ClearJoypad
ret
TrainerGear_Init:
call ClearBGPalettes
call DisableLCD
call ClearSprites
ld b, SGB_TRAINER_GEAR
call GetSGBLayout
ld hl, TrainerGearGFX
ld de, vChars2
ld bc, $20 tiles
ld a, BANK(TrainerGearGFX)
call FarCopyData
call TrainerGear_InitTilemap
call TrainerGear_PlaceIcons
xor a
ldh [hSCY], a
ldh [hSCX], a
ld [wJumptableIndex], a
ld [wTrainerGearPointerPosition], a
ld a, $ff
ld [wTrainerGearCard], a
ld a, 7
ldh [hWX], a
ld a, 8
call UpdateSoundNTimes
ld a, LCDC_DEFAULT
ldh [rLCDC], a
call WaitBGMap
call SetPalettes
ld a, %11100000
ldh [rOBP1], a
ret
TrainerGear_InitTilemap:
ld hl, wTileMap
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
ld a, TRAINERGEAR_GFX_BLANKTILE
call ByteFill
ld de, wTileMap
ld hl, TrainerGearTilemap
ld bc, TrainerGearTilemap.End - TrainerGearTilemap
call CopyBytes
ret
TrainerGearTilemap:
INCBIN "gfx/trainer_gear/trainer_gear.tilemap"
.End:
TrainerGear_PlaceIcons:
coord hl, 1, 0
ld a, TRAINERGEAR_GFX_MAP_ICON
call .PlaceIcon
coord hl, 4, 0
ld a, TRAINERGEAR_GFX_RADIO_ICON
call .PlaceIcon
coord hl, 7, 0
ld a, TRAINERGEAR_GFX_PHONE_ICON
call .PlaceIcon
ret
.PlaceIcon:
ld [hli], a
inc a
ld [hld], a
ld bc, SCREEN_WIDTH
add hl, bc
inc a
ld [hli], a
inc a
ld [hld], a
ret
TrainerGear_Loop:
call UpdateTime
call GetJoypadDebounced
ld a, [wJumptableIndex]
bit TRAINERGEAR_END_LOOP_F, a
jr nz, .done
call TrainerGear_Jumptable
callba EffectObjectJumpNoDelay
call TrainerGear_UpdateTime
call DelayFrame
and a
ret
.done
callab InitEffectObject
call ClearSprites
xor a
ldh [hSCX], a
ldh [hSCY], a
scf
ret
TrainerGear_UpdateTime:
coord hl, 11, 1
ld a, TRAINERGEAR_GFX_BLANKTILE
ld [hli], a
ld [hl], a
ld de, hRTCHours
coord hl, 11, 1
lb bc, 1, 2
call PrintNumber
inc hl
ld de, hRTCMinutes
lb bc, PRINTNUM_LEADINGZEROS | 1, 2
call PrintNumber
inc hl
ld de, hRTCSeconds
lb bc, PRINTNUM_LEADINGZEROS | 1, 2
call PrintNumber
ret
TrainerGear_Jumptable:
jumptable .Jumptable, wJumptableIndex
.Jumptable:
dw TrainerGear_InitPointerSprite
dw TrainerGear_Joypad
dw TrainerGear_Map
dw TrainerGear_MapJoypad
dw TrainerGear_Radio
dw TrainerGear_RadioJoypad
dw TrainerGear_Phone
dw TrainerGear_PhoneJoypad
TrainerGear_Next:
ld hl, wJumptableIndex
inc [hl]
ret
TrainerGear_InitPointerSprite:
callab InitEffectObject
ld de, PointerGFX
ld hl, vChars0 tile TRAINERGEAR_GFX_POINTER
lb bc, BANK(PointerGFX), 4
call Request2bpp
ld a, SPRITE_ANIM_DICT_29
ld hl, wSpriteAnimDict
ld [hli], a
ld [hl], TRAINERGEAR_GFX_POINTER
depixel 4, 3, 4, 4
ld a, SPRITE_ANIM_INDEX_TRAINERGEAR_POINTER
call InitSpriteAnimStruct
call TrainerGear_Next
ret
TrainerGear_Joypad:
ld hl, hJoySum
ld a, [hl]
and B_BUTTON
jr nz, .exit
ld a, [hl]
and A_BUTTON
ret z
call TrainerGear_DetermineView
ret
.exit
ld hl, wJumptableIndex
set TRAINERGEAR_END_LOOP_F, [hl]
ret
TrainerGear_DetermineView:
; don't attempt to reload the view if we're already in it
ld a, [wTrainerGearPointerPosition]
ld hl, wTrainerGearCard
cp [hl]
ret z
; load a new view by jumping to its init routine
ld [wTrainerGearCard], a
maskbits NUM_TRAINERGEAR_CARDS
ld e, a
ld d, 0
ld hl, .Views
add hl, de
ld a, [hl]
ld [wJumptableIndex], a
ret
.Views:
db TRAINERGEARSTATE_MAPINIT
db TRAINERGEARSTATE_RADIOINIT
db TRAINERGEARSTATE_PHONEINIT
db TRAINERGEARSTATE_MAPINIT ; unused
TrainerGear_Map:
call TrainerGear_Next
call TrainerGear_ClearView
call WaitForAutoBgMapTransfer
ld b, SGB_PACKPALS
call GetSGBLayout
ld de, TownMapGFX
ld hl, vTilesetEnd
lb bc, BANK(TownMapGFX), ((TownMapGFX.End - TownMapGFX) / LEN_2BPP_TILE - 1)
call Request2bpp
coord hl, 0, 3
call DecompTownMapTilemap
call WaitBGMap
call PlaceGoldInMap
ld hl, SPRITEANIMSTRUCT_YCOORD
add hl, bc
ld a, [hl]
add 3 * TILE_WIDTH ; shift sprite down past the Trainer Gear UI
ld [hl], a
ret
TrainerGear_MapJoypad:
ld hl, hJoyDown
ld a, [hl]
and B_BUTTON
ret z
xor a
ld [wJumptableIndex], a
ret
TrainerGear_Radio:
call TrainerGear_Next
call TrainerGear_ClearView
call WaitForAutoBgMapTransfer
ld b, SGB_TRAINER_CARD
call GetSGBLayout
ld de, RadioGFX
ld hl, vChars2 tile TRAINERGEAR_GFX_TUNE_BUTTON
lb bc, BANK(RadioGFX), 9
call Request2bpp
ld de, VerticalPipeGFX
ld hl, vChars0
lb bc, BANK(VerticalPipeGFX), 1
call Request2bpp
coord hl, 0, 3
ld bc, SCREEN_WIDTH * 9
ld a, TRAINERGEAR_GFX_GRAYTILE
call ByteFill
coord hl, 1, 8
lb bc, 4, 18
call TrainerGear_DrawBox
coord hl, 4, 3
lb bc, 6, 14
call TrainerGear_DrawBox
ld a, TRAINERGEAR_GFX_BORDER_TOP
coord hl, 0, 11
ld [hl], a
coord hl, 19, 11
ld [hl], a
coord hl, 2, 5
ld a, TRAINERGEAR_GFX_TUNE_BUTTON
ld [hli], a
inc a
ld [hld], a
inc a
ld bc, SCREEN_WIDTH
add hl, bc
ld [hli], a
inc a
ld [hld], a
coord hl, 2, 4
ld a, TRAINERGEAR_GFX_TUNE_TEXT
ld [hli], a
inc a
ld [hl], a
coord hl, 5, 5
ld bc, 12
ld a, TRAINERGEAR_GFX_RADIO_TOPHALF
call ByteFill
coord hl, 5, 6
ld bc, 12
ld a, TRAINERGEAR_GFX_RADIO_BOTTOMHALF
call ByteFill
ld hl, TrainerGear_RadioText
call PrintText
call WaitBGMap
depixel 9, 4, 4, 3
ld a, SPRITE_ANIM_INDEX_TRAINERGEAR_POINTER
call InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
add hl, bc
ld [hl], 0
ld hl, SPRITEANIMSTRUCT_TILE_ID
add hl, bc
ld [hl], TRAINERGEAR_GFX_POINTER
depixel 8, 6
ld a, SPRITE_ANIM_INDEX_RADIO_TUNING_KNOB
call InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_TILE_ID
add hl, bc
ld [hl], TRAINERGEAR_GFX_VERTICAL_PIPE
xor a
ld [wTrainerGearRadioIndex], a
ret
TrainerGear_RadioJoypad:
ld hl, hJoyDown
ld a, [hl]
and B_BUTTON
ret z
xor a
ld [wJumptableIndex], a
ret
TrainerGear_RadioJumptable:
ld hl, wTrainerGearRadioIndex
ld e, [hl]
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 .WaitInput
dw .AdvanceDial
dw .WaitInput
dw .TurnBackDial
.WaitInput:
ld hl, hJoyDown
ld a, [hl]
and A_BUTTON
ret z
ld hl, wTrainerGearRadioIndex
inc [hl]
ret
.AdvanceDial:
ld hl, SPRITEANIMSTRUCT_0C
add hl, bc
ld a, [hl]
and a
jr nz, .advance_save_pos
call .GetRadioEvents
jr c, .advance_wait_input
ld hl, SPRITEANIMSTRUCT_XOFFSET
add hl, bc
ld a, [hl]
and a
jr z, .reached_end
.advance_save_pos
ld hl, -$40
jr .SaveCursorPosition
.reached_end
ld a, TRAINERGEAR_RADIOSTATE_TURNBACKDIAL
ld [wTrainerGearRadioIndex], a
ret
.advance_wait_input
call .advance_save_pos
xor a ; TRAINERGEAR_RADIOSTATE_WAITINPUT_1
ld [wTrainerGearRadioIndex], a
ret
.TurnBackDial:
ld hl, SPRITEANIMSTRUCT_0C
add hl, bc
ld a, [hl]
and a
jr nz, .turnback_save_pos
call .GetRadioEvents
jr c, .turnback_wait_input
ld hl, SPRITEANIMSTRUCT_XOFFSET
add hl, bc
ld a, [hl]
cp $60
jr z, .reached_beginning
.turnback_save_pos
ld hl, $40
jr .SaveCursorPosition
.reached_beginning
ld a, TRAINERGEAR_RADIOSTATE_ADVANCEDIAL
ld [wTrainerGearRadioIndex], a
ret
.turnback_wait_input
call .turnback_save_pos
ld a, TRAINERGEAR_RADIOSTATE_WAITINPUT_2
ld [wTrainerGearRadioIndex], a
ret
.SaveCursorPosition:
push hl
ld hl, SPRITEANIMSTRUCT_XOFFSET
add hl, bc
ld d, [hl]
ld hl, SPRITEANIMSTRUCT_0C
add hl, bc
ld e, [hl]
pop hl
add hl, de
ld e, l
ld d, h
ld hl, SPRITEANIMSTRUCT_0C
add hl, bc
ld [hl], e
ld hl, SPRITEANIMSTRUCT_XOFFSET
add hl, bc
ld [hl], d
ret
.GetRadioEvents:
ld hl, SPRITEANIMSTRUCT_XOFFSET
add hl, bc
push bc
ld c, [hl]
ld a, [wMapGroup]
ld e, a
ld d, 0
ld hl, TrainerGear_RadioAreas
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
.find_matches
; Finds an event corresponding to the radio cursor's X offset
ld a, [hl]
and a
jr z, .no_match
cp c
jr z, .found
ld de, 6
add hl, de
jr .find_matches
.no_match
; No associated event found, quit the routine
pop bc
and a
ret
.found
; Execute associated event with a parameter stored in e
; Returns carry upon exiting event
ld de, .AfterEvent
push de
inc hl
ld e, [hl]
inc hl
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
.AfterEvent:
pop bc
scf
ret
TrainerGear_RadioAreas:
; one set of radio stations per map group
dw TrainerGear_RadioStations_Music
dw TrainerGear_RadioStations_Music
dw TrainerGear_RadioStations_Music
dw TrainerGear_RadioStations_Music
dw TrainerGear_RadioStations_Music
dw TrainerGear_RadioStations_Music
dw TrainerGear_RadioStations_Music
dw TrainerGear_RadioStations_Music
dw TrainerGear_RadioStations_Music
dw TrainerGear_RadioStations_Music
dw TrainerGear_RadioStations_Music
dw TrainerGear_RadioStations_Music
dw TrainerGear_RadioStations_Music
dw TrainerGear_RadioStations_Music
dw TrainerGear_RadioStations_Music
radio_station: MACRO
; \1 = "frequency" (tuning knob's X position)
; \2 = parameter (loaded onto E)
; \3 = subroutine to call
; \4 = unused
db \1, \2
dw \3, \4
ENDM
TrainerGear_RadioStations_Music:
; list of radio stations associated with the map group
radio_station $10, MUSIC_ROUTE_1, .PlayMusic, .PlayMusic
radio_station $20, MUSIC_TRAINER_BATTLE, .PlayMusic, .PlayMusic
radio_station $40, MUSIC_VIRIDIAN_CITY, .PlayMusic, .PlayMusic
radio_station $48, MUSIC_BICYCLE, .PlayMusic, .PlayMusic
db 0 ; list terminator
.PlayMusic:
ld d, 0
call PlayMusic
ret
TrainerGear_Phone:
call TrainerGear_Next
call TrainerGear_ClearView
call WaitForAutoBgMapTransfer
ld b, SGB_TRAINER_GEAR
call GetSGBLayout
call LoadFontExtra
ld de, .OutOfRangeText
coord hl, 7, 7
call PlaceString
ld hl, .DarnText
call PrintText
call WaitBGMap
ret
.OutOfRangeText:
db "けんがい@"
.DarnText:
text "ちぇっ⋯⋯⋯⋯"
done
TrainerGear_PhoneJoypad:
ld hl, hJoyDown
ld a, [hl]
and B_BUTTON
ret z
xor a
ld [wJumptableIndex], a
ret
TrainerGear_ClearView:
callab InitEffectObject
call ClearSprites
call WaitForAutoBgMapTransfer
coord hl, 0, 3
ld bc, SCREEN_WIDTH * 15
ld a, TRAINERGEAR_GFX_BLANKTILE
call ByteFill
call WaitBGMap
call WaitBGMap
ret
; called from sprite animation routine
AnimateTrainerGearModeIndicatorPointer::
ld hl, wTrainerGearPointerPosition
ld de, hJoySum
ld a, [de]
and D_LEFT
jr nz, .move_left
ld a, [de]
and D_RIGHT
jr nz, .move_right
jr .update_position
.move_left
ld a, [hl]
and a
ret z
dec [hl]
jr .update_position
.move_right
ld a, [hl]
cp NUM_TRAINERGEAR_CARDS - 1
ret nc
inc [hl]
.update_position
ld e, [hl]
ld d, 0
ld hl, .CursorPositions
add hl, de
ld a, [hl]
ld hl, SPRITEANIMSTRUCT_XOFFSET
add hl, bc
ld [hl], a
ret
.CursorPositions:
db $00, $18, $30, $00
TrainerGear_DrawBox:
dec c
dec c
dec b
dec b
ld de, SCREEN_WIDTH
push bc
push hl
ld a, TRAINERGEAR_GFX_BORDER_TOPLEFT
ld [hli], a
ld a, TRAINERGEAR_GFX_BORDER_TOP
.draw_separator
ld [hli], a
dec c
jr nz, .draw_separator
ld a, TRAINERGEAR_GFX_BORDER_TOPRIGHT
ld [hl], a
pop hl
pop bc
add hl, de
.draw_row
push bc
push hl
ld a, TRAINERGEAR_GFX_BORDER_LEFT
ld [hli], a
ld a, TRAINERGEAR_GFX_BLANKTILE
.loop
ld [hli], a
dec c
jr nz, .loop
ld a, TRAINERGEAR_GFX_BORDER_RIGHT
ld [hli], a
pop hl
add hl, de
pop bc
dec b
jr nz, .draw_row
ld a, TRAINERGEAR_GFX_BORDER_BOTTOMLEFT
ld [hli], a
ld a, TRAINERGEAR_GFX_BORDER_BOTTOM
.draw_bottom
ld [hli], a
dec c
jr nz, .draw_bottom
ld a, TRAINERGEAR_GFX_BORDER_BOTTOMRIGHT
ld [hli], a
ret
SECTION "engine/trainer_gear.asm@TrainerGear_RadioText", ROMX
TrainerGear_RadioText:
text "エーボタンで チューニング!"
done

View File

@ -0,0 +1,3 @@
   

  

View File

@ -124,8 +124,10 @@ ROMX $02
"engine/dumps/bank02.asm@QueueFollowerFirstStep"
"gfx.asm@Mon Nest Icon"
"engine/dumps/bank02.asm@Data8a17"
"engine/trainer_gear.asm@OpenTrainerGear"
"gfx.asm@Trainer Gear GFX"
"engine/dumps/bank02.asm@Text91c2"
"engine/trainer_gear.asm@TrainerGear_RadioText"
"engine/dumps/bank02.asm@SetTitleBGDecorationBorder"
"gfx.asm@Title Screen BG Decoration Border"
"engine/dumps/bank02.asm@Function928b"
"gfx.asm@SGB GFX"

View File

@ -436,13 +436,16 @@ wJumptableIndex:: db
wFlyDestination::
wIntroSceneFrameCounter::
wTrainerGearPointerPosition::
wBattleTransitionCounter:: db
wBattleTransitionSineWaveOffset::
wBattleTransitionSpinQuadrant::
wIntroSceneTimer::
wTrainerGearCard::
wcb60:: ds 1
wTrainerGearRadioIndex::
wcb61:: ds 1
wVBCopySize:: ds 1