pokecrystal-board/event/magnet_train.asm

483 lines
7.2 KiB
NASM
Raw Normal View History

2015-11-16 18:46:36 -08:00
Special_MagnetTrain: ; 8cc04
ld a, [ScriptVar]
and a
jr nz, .ToGoldenrod
ld a, 1 ; forwards
2015-12-18 17:07:09 -08:00
lb bc, $40, $60
lb de, (11 * 8) - (11 * 8 + 4), -$60
2015-11-16 18:46:36 -08:00
jr .continue
.ToGoldenrod:
2015-11-16 18:46:36 -08:00
ld a, -1 ; backwards
2015-12-18 17:07:09 -08:00
lb bc, -$40, -$60
lb de, (11 * 8) + (11 * 8 + 4), $60
2015-11-16 18:46:36 -08:00
.continue
ld h, a
ld a, [rSVBK]
push af
ld a, $5
ld [rSVBK], a
2015-12-18 17:07:09 -08:00
2015-11-16 18:46:36 -08:00
ld a, h
2015-12-18 17:07:09 -08:00
ld [wMagnetTrainDirection], a
2015-11-16 18:46:36 -08:00
ld a, c
2015-12-18 17:07:09 -08:00
ld [wMagnetTrainInitPosition], a
2015-11-16 18:46:36 -08:00
ld a, b
2015-12-18 17:07:09 -08:00
ld [wMagnetTrainHoldPosition], a
2015-11-16 18:46:36 -08:00
ld a, e
2015-12-18 17:07:09 -08:00
ld [wMagnetTrainFinalPosition], a
2015-11-16 18:46:36 -08:00
ld a, d
2015-12-18 17:07:09 -08:00
ld [wMagnetTrainPlayerSpriteInitX], a
2015-11-16 18:46:36 -08:00
ld a, [hSCX]
push af
ld a, [hSCY]
push af
2015-12-18 17:07:09 -08:00
call MagntTrain_LoadGFX_PlayMusic
2015-11-16 18:46:36 -08:00
ld hl, hVBlank
ld a, [hl]
push af
ld [hl], $1
.loop
ld a, [wJumptableIndex]
and a
jr z, .initialize
bit 7, a
jr nz, .done
callab PlaySpriteAnimations
2015-12-18 17:07:09 -08:00
call MagnetTrain_Jumptable
call MagnetTrain_UpdateLYOverrides
call PushLYOverrides
2015-11-16 18:46:36 -08:00
call DelayFrame
jr .loop
.initialize
2015-12-18 17:07:09 -08:00
call MagnetTrain_Jumptable_FirstRunThrough
2015-11-16 18:46:36 -08:00
jr .loop
.done
pop af
ld [hVBlank], a
call ClearBGPalettes
xor a
2016-06-13 19:53:33 -07:00
ld [hLCDCPointer], a
2016-05-05 12:07:37 -07:00
ld [hLYOverrideStart], a
ld [hLYOverrideEnd], a
2015-11-16 18:46:36 -08:00
ld [hSCX], a
ld [Requested2bppSource], a
ld [Requested2bppSource + 1], a
ld [Requested2bppDest], a
ld [Requested2bppDest + 1], a
ld [Requested2bpp], a
call ClearTileMap
2015-12-18 17:07:09 -08:00
2015-11-16 18:46:36 -08:00
pop af
ld [hSCY], a
pop af
ld [hSCX], a
xor a
ld [hBGMapMode], a
pop af
ld [rSVBK], a
ret
; 8cc99
2015-12-18 17:07:09 -08:00
MagnetTrain_UpdateLYOverrides: ; 8cc99
2015-11-16 18:46:36 -08:00
ld hl, LYOverridesBackup
ld c, $2f
ld a, [wcf64]
add a
ld [hSCX], a
2015-12-18 17:07:09 -08:00
call .loadloop
2015-11-16 18:46:36 -08:00
ld c, $30
ld a, [wcf65]
2015-12-18 17:07:09 -08:00
call .loadloop
2015-11-16 18:46:36 -08:00
ld c, $31
ld a, [wcf64]
add a
2015-12-18 17:07:09 -08:00
call .loadloop
ld a, [wMagnetTrainDirection]
2015-11-16 18:46:36 -08:00
ld d, a
ld hl, wcf64
ld a, [hl]
add d
add d
2015-11-16 18:46:36 -08:00
ld [hl], a
ret
2015-12-18 17:07:09 -08:00
.loadloop
2015-11-16 18:46:36 -08:00
ld [hli], a
dec c
2015-12-18 17:07:09 -08:00
jr nz, .loadloop
2015-11-16 18:46:36 -08:00
ret
; 8ccc9
2015-12-18 17:07:09 -08:00
MagntTrain_LoadGFX_PlayMusic: ; 8ccc9
2015-11-16 18:46:36 -08:00
call ClearBGPalettes
call ClearSprites
call DisableLCD
callab ClearSpriteAnims
2015-11-16 18:46:36 -08:00
call SetMagnetTrainPals
call DrawMagnetTrain
ld a, $90
ld [hWY], a
call EnableLCD
xor a
ld [hBGMapMode], a
ld [hSCX], a
ld [hSCY], a
ld a, [rSVBK]
push af
ld a, $1
ld [rSVBK], a
callba GetPlayerIcon
pop af
ld [rSVBK], a
ld hl, VTiles0
2015-12-18 17:07:09 -08:00
ld c, 4
2015-11-16 18:46:36 -08:00
call Request2bpp
2015-12-18 17:07:09 -08:00
ld hl, 12 tiles
2015-11-16 18:46:36 -08:00
add hl, de
ld d, h
ld e, l
ld hl, VTiles0 tile $04
2015-12-18 17:07:09 -08:00
ld c, 4
2015-11-16 18:46:36 -08:00
call Request2bpp
2015-12-18 17:07:09 -08:00
call MagnetTrain_InitLYOverrides
2015-11-16 18:46:36 -08:00
ld hl, wJumptableIndex
xor a
ld [hli], a
2015-12-18 17:07:09 -08:00
ld a, [wMagnetTrainInitPosition]
2015-11-16 18:46:36 -08:00
ld [hli], a
ld [hli], a
ld [hli], a
2015-11-16 18:46:36 -08:00
ld de, MUSIC_MAGNET_TRAIN
call PlayMusic2
ret
; 8cd27
DrawMagnetTrain: ; 8cd27
2015-11-20 08:47:52 -08:00
hlbgcoord 0, 0
2015-11-16 18:46:36 -08:00
xor a
2015-12-18 17:07:09 -08:00
.loop
2015-11-16 18:46:36 -08:00
call GetMagnetTrainBGTiles
ld b, 32 / 2
call .FillAlt
inc a
cp $12
2015-12-18 17:07:09 -08:00
jr c, .loop
2015-11-20 08:47:52 -08:00
hlbgcoord 0, 6
2015-11-16 18:46:36 -08:00
ld de, MagnetTrainTilemap1
ld c, 20
call .FillLine
2015-11-20 08:47:52 -08:00
hlbgcoord 0, 7
2015-11-16 18:46:36 -08:00
ld de, MagnetTrainTilemap2
ld c, 20
call .FillLine
2015-11-20 08:47:52 -08:00
hlbgcoord 0, 8
2015-11-16 18:46:36 -08:00
ld de, MagnetTrainTilemap3
ld c, 20
call .FillLine
2015-11-20 08:47:52 -08:00
hlbgcoord 0, 9
2015-11-16 18:46:36 -08:00
ld de, MagnetTrainTilemap4
ld c, 20
call .FillLine
ret
; 8cd65
.FillLine: ; 8cd65
2015-11-16 18:46:36 -08:00
ld a, [de]
inc de
ld [hli], a
dec c
jr nz, .FillLine
ret
; 8cd6c
.FillAlt: ; 8cd6c
2015-11-16 18:46:36 -08:00
ld [hl], e
inc hl
ld [hl], d
inc hl
dec b
jr nz, .FillAlt
ret
; 8cd74
GetMagnetTrainBGTiles: ; 8cd74
push hl
ld e, a
ld d, 0
ld hl, MagnetTrainBGTiles
add hl, de
add hl, de
2015-11-16 18:46:36 -08:00
ld e, [hl]
inc hl
ld d, [hl]
pop hl
ret
; 8cd82
MagnetTrainBGTiles: ; 8cd82
; Alternating tiles for each line
; of the Magnet Train tilemap.
db $4c, $4d ; bush
db $5c, $5d ; bush
db $4c, $4d ; bush
db $5c, $5d ; bush
db $08, $08 ; fence
db $18, $18 ; fence
db $1f, $1f ; track
db $31, $31 ; track
db $11, $11 ; track
db $11, $11 ; track
db $0d, $0d ; track
db $31, $31 ; track
db $04, $04 ; fence
db $18, $18 ; fence
db $4c, $4d ; bush
db $5c, $5d ; bush
db $4c, $4d ; bush
db $5c, $5d ; bush
; 8cda6
2015-12-18 17:07:09 -08:00
MagnetTrain_InitLYOverrides: ; 8cda6
2015-11-16 18:46:36 -08:00
ld hl, LYOverrides
2015-12-18 17:07:09 -08:00
ld bc, LYOverridesEnd - LYOverrides
ld a, [wMagnetTrainInitPosition]
2015-11-16 18:46:36 -08:00
call ByteFill
ld hl, LYOverridesBackup
2015-12-18 17:07:09 -08:00
ld bc, LYOverridesBackupEnd - LYOverridesBackup
ld a, [wMagnetTrainInitPosition]
2015-11-16 18:46:36 -08:00
call ByteFill
2016-06-13 19:53:33 -07:00
ld a, rSCX - $ff00
ld [hLCDCPointer], a
2015-11-16 18:46:36 -08:00
ret
; 8cdc3
SetMagnetTrainPals: ; 8cdc3
ld a, $1
ld [rVBK], a
; bushes
2015-11-20 08:47:52 -08:00
hlbgcoord 0, 0
ld bc, 4 bgrows
2015-11-16 18:46:36 -08:00
ld a, $2
call ByteFill
; train
2015-11-20 08:47:52 -08:00
hlbgcoord 0, 4
ld bc, 10 bgrows
2015-11-16 18:46:36 -08:00
xor a
call ByteFill
; more bushes
2015-11-20 08:47:52 -08:00
hlbgcoord 0, 14
ld bc, 4 bgrows
2015-11-16 18:46:36 -08:00
ld a, $2
call ByteFill
; train window
2015-11-20 08:47:52 -08:00
hlbgcoord 7, 8
2015-11-16 18:46:36 -08:00
ld bc, 6
ld a, $4
call ByteFill
ld a, $0
ld [rVBK], a
ret
; 8cdf7
2015-12-18 17:07:09 -08:00
MagnetTrain_Jumptable: ; 8cdf7
2015-11-16 18:46:36 -08:00
ld a, [wJumptableIndex]
ld e, a
ld d, 0
2015-12-18 17:07:09 -08:00
ld hl, .Jumptable
2015-11-16 18:46:36 -08:00
add hl, de
add hl, de
2015-11-16 18:46:36 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
2015-11-16 18:46:36 -08:00
; 8ce06
2015-12-18 17:07:09 -08:00
.Jumptable: ; 8ce06
2015-12-26 18:59:03 -08:00
dw .InitPlayerSpriteAnim
dw .WaitScene
dw .MoveTrain1
dw .WaitScene
dw .MoveTrain2
dw .WaitScene
dw .TrainArrived
2015-11-16 18:46:36 -08:00
; 8ce14
2015-12-18 17:07:09 -08:00
.Next: ; 8ce14
2015-11-16 18:46:36 -08:00
ld hl, wJumptableIndex
inc [hl]
ret
; 8ce19
2015-12-18 17:07:09 -08:00
.InitPlayerSpriteAnim: ; 8ce19
ld d, 10 * 8 + 5
ld a, [wMagnetTrainPlayerSpriteInitX]
2015-11-16 18:46:36 -08:00
ld e, a
ld b, SPRITE_ANIM_INDEX_MAGNET_TRAIN_RED
2015-11-16 18:46:36 -08:00
ld a, [rSVBK]
push af
ld a, $1
ld [rSVBK], a
ld a, [PlayerGender]
bit 0, a
2015-12-18 17:07:09 -08:00
jr z, .got_gender
ld b, SPRITE_ANIM_INDEX_MAGNET_TRAIN_BLUE
2015-11-16 18:46:36 -08:00
2015-12-18 17:07:09 -08:00
.got_gender
2015-11-16 18:46:36 -08:00
pop af
ld [rSVBK], a
ld a, b
call _InitSpriteAnimStruct
2015-12-18 17:07:09 -08:00
ld hl, SPRITEANIMSTRUCT_TILE_ID
2015-11-16 18:46:36 -08:00
add hl, bc
ld [hl], $0
2015-12-18 17:07:09 -08:00
call .Next
2015-11-16 18:46:36 -08:00
ld a, $80
ld [wcf66], a
ret
; 8ce47
2015-12-18 17:07:09 -08:00
.MoveTrain1: ; 8ce47
ld hl, wMagnetTrainHoldPosition
2015-11-16 18:46:36 -08:00
ld a, [wcf65]
cp [hl]
2015-12-18 17:07:09 -08:00
jr z, .PrepareToHoldTrain
2015-11-16 18:46:36 -08:00
ld e, a
2015-12-18 17:07:09 -08:00
ld a, [wMagnetTrainDirection]
2015-11-16 18:46:36 -08:00
xor $ff
inc a
add e
ld [wcf65], a
2015-12-02 14:59:05 -08:00
ld hl, wGlobalAnimXOffset
2015-12-18 17:07:09 -08:00
ld a, [wMagnetTrainDirection]
2015-11-16 18:46:36 -08:00
add [hl]
ld [hl], a
ret
.PrepareToHoldTrain:
2015-12-18 17:07:09 -08:00
call .Next
2015-11-16 18:46:36 -08:00
ld a, $80
ld [wcf66], a
ret
; 8ce6d
2015-12-18 17:07:09 -08:00
.WaitScene: ; 8ce6d
2015-11-16 18:46:36 -08:00
ld hl, wcf66
ld a, [hl]
and a
2015-12-18 17:07:09 -08:00
jr z, .DoneWaiting
2015-11-16 18:46:36 -08:00
dec [hl]
ret
.DoneWaiting:
2015-12-18 17:07:09 -08:00
call .Next
2015-11-16 18:46:36 -08:00
ret
; 8ce7a
2015-12-18 17:07:09 -08:00
.MoveTrain2: ; 8ce7a
ld hl, wMagnetTrainFinalPosition
2015-11-16 18:46:36 -08:00
ld a, [wcf65]
cp [hl]
2015-12-18 17:07:09 -08:00
jr z, .PrepareToFinishAnim
2015-11-16 18:46:36 -08:00
ld e, a
2015-12-18 17:07:09 -08:00
ld a, [wMagnetTrainDirection]
2015-11-16 18:46:36 -08:00
xor $ff
inc a
ld d, a
ld a, e
add d
add d
2015-11-16 18:46:36 -08:00
ld [wcf65], a
2015-12-02 14:59:05 -08:00
ld hl, wGlobalAnimXOffset
2015-12-18 17:07:09 -08:00
ld a, [wMagnetTrainDirection]
2015-11-16 18:46:36 -08:00
ld d, a
ld a, [hl]
add d
add d
2015-11-16 18:46:36 -08:00
ld [hl], a
ret
ret
.PrepareToFinishAnim:
2015-12-18 17:07:09 -08:00
call .Next
2015-11-16 18:46:36 -08:00
ret
; 8cea2
2015-12-18 17:07:09 -08:00
.TrainArrived: ; 8cea2
2015-11-16 18:46:36 -08:00
ld a, $80
ld [wJumptableIndex], a
ld de, SFX_TRAIN_ARRIVED
call PlaySFX
ret
; 8ceae
2015-12-18 17:07:09 -08:00
MagnetTrain_Jumptable_FirstRunThrough: ; 8ceae
callba PlaySpriteAnimations
2015-12-18 17:07:09 -08:00
call MagnetTrain_Jumptable
call MagnetTrain_UpdateLYOverrides
call PushLYOverrides
2015-11-16 18:46:36 -08:00
call DelayFrame
ld a, [rSVBK]
push af
ld a, $1
ld [rSVBK], a
ld a, [TimeOfDayPal]
push af
ld a, [wPermission]
push af
ld a, [TimeOfDay]
and $3
ld [TimeOfDayPal], a
ld a, $1
ld [wPermission], a
ld b, SCGB_MAPPALS
2015-11-16 18:46:36 -08:00
call GetSGBLayout
call UpdateTimePals
ld a, [rBGP]
2015-12-23 11:00:29 -08:00
ld [wBGP], a
2015-11-16 18:46:36 -08:00
ld a, [rOBP0]
2015-12-23 11:00:29 -08:00
ld [wOBP0], a
2015-11-16 18:46:36 -08:00
ld a, [rOBP1]
2015-12-23 11:00:29 -08:00
ld [wOBP1], a
2015-11-16 18:46:36 -08:00
pop af
ld [wPermission], a
pop af
ld [TimeOfDayPal], a
pop af
ld [rSVBK], a
ret
; 8ceff
MagnetTrainTilemap1:
db $1f, $05, $06, $0a, $0a
db $0a, $09, $0a, $0a, $0a
db $0a, $0a, $0a, $09, $0a
db $0a, $0a, $0b, $0c, $1f
MagnetTrainTilemap2:
db $14, $15, $16, $1a, $1a
db $1a, $19, $1a, $1a, $1a
db $1a, $1a, $1a, $19, $1a
db $1a, $1a, $1b, $1c, $1d
MagnetTrainTilemap3:
db $24, $25, $26, $27, $07
db $2f, $29, $28, $28, $28
db $28, $28, $28, $29, $07
db $2f, $2a, $2b, $2c, $2d
MagnetTrainTilemap4:
db $20, $1f, $2e, $1f, $17
db $00, $2e, $1f, $1f, $1f
db $1f, $1f, $1f, $2e, $17
db $00, $1f, $2e, $1f, $0f
; 8cf4f