AbePralle-FGB/Source/Levels/L1400.asm

660 lines
17 KiB
NASM
Raw Permalink Normal View History

; L1400.asm Appomattox flying
; Generated 02.21.2001 by mlevel
; Modified 02.21.2001 by Abe Pralle
INCLUDE "Source/Defs.inc"
INCLUDE "Source/Levels.inc"
VAR_DESTZONE EQU 0
VAR_DESTCOLOR EQU 1
VAR_DESTBG EQU 3
VAR_DESTBANK EQU 5
VAR_SELSTAGE EQU 6
;---------------------------------------------------------------------
SECTION "Level1400SectionLZ1",ROMX
;---------------------------------------------------------------------
lz_mist_bg::
INCBIN "Data/Cinema/Appomattox/lz_mist.bg"
;---------------------------------------------------------------------
SECTION "Level1400SectionLZ2",ROMX
;---------------------------------------------------------------------
lz_ice1_bg::
INCBIN "Data/Cinema/Appomattox/lz_ice1.bg"
;---------------------------------------------------------------------
SECTION "Level1400SectionLZ3",ROMX
;---------------------------------------------------------------------
lz_gate_bg::
INCBIN "Data/Cinema/Appomattox/lz_gate.bg"
;---------------------------------------------------------------------
SECTION "Level1400SectionLZ4",ROMX
;---------------------------------------------------------------------
lz_brokenwall_bg::
INCBIN "Data/Cinema/Appomattox/lz_brokenwall.bg"
;---------------------------------------------------------------------
SECTION "Level1400SectionLZ5",ROMX
;---------------------------------------------------------------------
lz_canyon_bg::
INCBIN "Data/Cinema/Appomattox/lz_canyon.bg"
;---------------------------------------------------------------------
SECTION "Level1400SectionLZ6",ROMX
;---------------------------------------------------------------------
lz_desert_bg::
INCBIN "Data/Cinema/Appomattox/lz_desert.bg"
;---------------------------------------------------------------------
SECTION "Level1400SectionLZ7",ROMX
;---------------------------------------------------------------------
lz_graves_bg::
INCBIN "Data/Cinema/Appomattox/lz_graves.bg"
;---------------------------------------------------------------------
SECTION "Level1400SectionLZ8",ROMX
;---------------------------------------------------------------------
lz_icecubes_bg::
INCBIN "Data/Cinema/Appomattox/lz_icecubes.bg"
;---------------------------------------------------------------------
SECTION "Level1400SectionLZ9",ROMX
;---------------------------------------------------------------------
lz_jungle_bg::
INCBIN "Data/Cinema/Appomattox/lz_jungle.bg"
;---------------------------------------------------------------------
SECTION "Level1400SectionLZ10",ROMX
;---------------------------------------------------------------------
lz_mountains_bg::
INCBIN "Data/Cinema/Appomattox/lz_mountains.bg"
;---------------------------------------------------------------------
SECTION "Level1400SectionLZ11",ROMX
;---------------------------------------------------------------------
lz_ocean_bg::
INCBIN "Data/Cinema/Appomattox/lz_ocean.bg"
;---------------------------------------------------------------------
SECTION "Level1400SectionLZ12",ROMX
;---------------------------------------------------------------------
lz_pencil_bg::
INCBIN "Data/Cinema/Appomattox/lz_pencil.bg"
;---------------------------------------------------------------------
SECTION "Level1400SectionLZ13",ROMX
;---------------------------------------------------------------------
lz_treepath_bg::
INCBIN "Data/Cinema/Appomattox/lz_treepath.bg"
;---------------------------------------------------------------------
SECTION "Level1400SectionData3",ROMX
;---------------------------------------------------------------------
lz_trees1_bg::
INCBIN "Data/Cinema/Appomattox/lz_trees1.bg"
;---------------------------------------------------------------------
SECTION "Level1400SectionData2",ROMX
;---------------------------------------------------------------------
cloud0_bg::
INCBIN "Data/Cinema/Appomattox/cloud0.bg"
cloud1_bg::
INCBIN "Data/Cinema/Appomattox/cloud1.bg"
cloud2_bg::
INCBIN "Data/Cinema/Appomattox/cloud2.bg"
cloud3_bg::
INCBIN "Data/Cinema/Appomattox/cloud3.bg"
cloud4_bg::
INCBIN "Data/Cinema/Appomattox/cloud4.bg"
;---------------------------------------------------------------------
SECTION "Level1400Section",ROMX
;---------------------------------------------------------------------
cloud5_bg::
INCBIN "Data/Cinema/Appomattox/cloud5.bg"
cloud6_bg::
INCBIN "Data/Cinema/Appomattox/cloud6.bg"
cloud7_bg::
INCBIN "Data/Cinema/Appomattox/cloud7.bg"
L1400_Contents::
DW L1400_Load
DW L1400_Init
DW L1400_Check
DW L1400_Map
;---------------------------------------------------------------------
; Load
;---------------------------------------------------------------------
L1400_Load:
DW ((L1400_LoadFinished - L1400_Load2)) ;size
L1400_Load2:
ld a,1
ld [displayType],a
xor a
ld [scrollSprites],a
ld a,200
ldio [jiggleDuration],a
ld a,1
ldio [jiggleType],a ;take-off jiggle
ld hl,musicEnabled ;disable track 4
res 3,[hl]
ld hl,((.engineSound1-L1400_Load2)+levelCheckRAM)
call PlaySound
ld a,$11
ldio [scrollSpeed],a
ld de,((.tookOff-L1400_Load2)+levelCheckRAM)
call SetDialogSkip
call SetDialogForward
ld a,60
call ((.delayAnimateWave-L1400_Load2)+levelCheckRAM)
xor a
ld [camera_j],a
ld hl,((.engineSound2-L1400_Load2)+levelCheckRAM)
call PlaySound
ld a,69
call ((.delayAdjustHorizon-L1400_Load2)+levelCheckRAM)
.tookOff
ld hl,((.silentSound4-L1400_Load2)+levelCheckRAM)
call PlaySound
call ClearSkipForward
xor a
ldio [jiggleDuration],a
ld [mapTop],a
ld a,1
call ((.delayAdjustHorizon-L1400_Load2)+levelCheckRAM)
ld hl,musicEnabled ;enable track 4
set 3,[hl]
ld a,1
call ((.setupFadeFromSky-L1400_Load2)+levelCheckRAM)
ld a,1
call Delay
ld de,((.skipToLanding-L1400_Load2)+levelCheckRAM)
call SetDialogSkip
call SetDialogForward
.flying
ld a,BANK(cloud0_bg)
ld hl,cloud0_bg
call LoadCinemaBG
ld a,15
call ((.setupFadeToClouds-L1400_Load2)+levelCheckRAM)
ld b,50
ld c,1
.cloudAnim
;load next cloud frame
ld d,0 ;de = c*4
ld e,c
sla e
rl d
sla e
rl d
ld hl,((.cloudFrames-L1400_Load2)+levelCheckRAM)
add hl,de
ld a,[hl+] ;mem bank of cloud frame
inc hl
push af
ld a,[hl+]
ld h,[hl]
ld l,a
pop af
call LoadCinemaBG
;ld a,1
;call Delay
call ((.animateWave-L1400_Load2)+levelCheckRAM)
ld a,c
inc a
and 7
ld c,a
ld a,b
cp 20
jr nz,.afterStartFadeOutInClouds
ld a,15
call ((.setupFadeToSky-L1400_Load2)+levelCheckRAM)
.afterStartFadeOutInClouds
dec b
jr nz,.cloudAnim
jr .naturalLanding
.skipToLanding
call ClearSkipForward
ld a,15
call ((.setupFadeToSky-L1400_Load2)+levelCheckRAM)
call WaitFade
.naturalLanding
ld a,3
ld [levelVars+VAR_SELSTAGE],a
call ((.setPowerBar-L1400_Load2)+levelCheckRAM)
;----Load picture of new landing zone---------------------------------
ld hl,levelVars+VAR_DESTBANK
ld a,[hl-]
push af
ld a,[hl-]
ld l,[hl]
ld h,a
pop af
call LoadCinemaBG
ld a,1
call Delay
ld a,FADEBANK
ld [$ff70],a
ld hl,gamePalette
ld de,fadeFinalPalette
call FadeCommonCopyPalette
ld a,1
call FadeInit
call WaitFade
ld a,2
call Delay
ld a,190
ldio [jiggleDuration],a
ld a,1
ldio [jiggleType],a ;take-off jiggle
ld a,18
ld [camera_j],a
ld a,$11
ldio [scrollSpeed],a
ld a,[amLinkMaster]
bit 7,a
jr nz,.afterRemoteAppx
.addRemoteAppx
ld a,LCHANGEAPPXMAP
call ExchangeByte
call CheckSimultaneousLCC
jr nz,.addRemoteAppx ;must repeat
ld a,[appomattoxMapIndex]
call TransmitByte
.afterRemoteAppx
ld de,((.landed-L1400_Load2)+levelCheckRAM)
call SetDialogSkip
call SetDialogForward
ld hl,musicEnabled ;disable track 4
res 3,[hl]
ld hl,((.engineSound1-L1400_Load2)+levelCheckRAM)
call PlaySound
ld a,40
call ((.delayAdjustHorizon-L1400_Load2)+levelCheckRAM)
ld a,2
ld [levelVars+VAR_SELSTAGE],a
call ((.setPowerBar-L1400_Load2)+levelCheckRAM)
ld a,40
call ((.delayAdjustHorizon-L1400_Load2)+levelCheckRAM)
ld a,1
ld [levelVars+VAR_SELSTAGE],a
call ((.setPowerBar-L1400_Load2)+levelCheckRAM)
ld hl,((.engineSound2-L1400_Load2)+levelCheckRAM)
call PlaySound
ld a,30
call ((.delayAdjustHorizon-L1400_Load2)+levelCheckRAM)
xor a
ld [levelVars+VAR_SELSTAGE],a
call ((.setPowerBar-L1400_Load2)+levelCheckRAM)
ld a,30
call ((.delayAdjustHorizon-L1400_Load2)+levelCheckRAM)
ld hl,musicEnabled ;enable track 4
set 3,[hl]
call ((.powerDown-L1400_Load2)+levelCheckRAM)
.landed
ld hl,((.silentSound4-L1400_Load2)+levelCheckRAM)
call PlaySound
xor a
ldio [jiggleDuration],a
call ClearSkipForward
ld a,15
call SetupFadeToStandard
call WaitFade
call ClearDialog
ld a,2
call Delay
LDHL_CURHERODATA HERODATA_ENTERDIR
ld a,EXIT_N
ld [hl],a
ld hl,$1300
ld a,l
ld [curLevelIndex],a
ld a,h
ld [curLevelIndex+1],a
ld a,1
ld [timeToChangeLevel],a
ret
.powerDown
;xor a
;ld [levelVars+VAR_SELSTAGE],a
call ((.setPowerBar-L1400_Load2)+levelCheckRAM)
call ((.recticleOff-L1400_Load2)+levelCheckRAM)
call ((.horizonOff-L1400_Load2)+levelCheckRAM)
call ((.diagramOff-L1400_Load2)+levelCheckRAM)
ld a,30
call ((.delayAnimateWave-L1400_Load2)+levelCheckRAM)
ret
.silentSound4
DB 4,0,0,0,$c0
.setPowerBar
ld a,[levelVars+VAR_SELSTAGE]
inc a
ld [musicRegisters+0],a
dec a
rlca ;sprite = stage*4 + 44
rlca
add 44
ld hl,spriteOAMBuffer+22*4+2
ld [hl+],a
inc hl
inc hl
inc hl
add 2
ld [hl],a
;ld hl,((.buttonSound-L1400_Load2)+levelCheckRAM)
;call PlaySound
ret
.horizonOff
ld de,4
xor a
ld hl,spriteOAMBuffer+16*4
ld c,4
.horizonOffLoop
ld [hl],a
add hl,de
dec c
jr nz,.horizonOffLoop
ret
.recticleOff
ld de,4
xor a
ld hl,spriteOAMBuffer+8*4
ld c,8
.recticleOffLoop
ld [hl],a
add hl,de
dec c
jr nz,.recticleOffLoop
ret
.diagramOff
ld hl,spriteOAMBuffer+20*4
ld [hl],160
ld hl,spriteOAMBuffer+21*4
ld [hl],160
ret
.delayAdjustHorizon
ld c,a
ld hl,spriteOAMBuffer+16*4
ld de,4
.delayLoop
call ((.animateWave-L1400_Load2)+levelCheckRAM)
ld a,1
call Delay
;horizon = 58 - ((mapTop*8+desiredPixelOffset_y)/4)
ld a,[mapTop]
rlca
rlca
rlca
ld b,a
ld a,[desiredPixelOffset_y]
add b
srl a
srl a
cpl
add 59
push hl
ld b,4
.alterHorizonSpriteLoop
ld [hl],a
add hl,de
dec b
jr nz,.alterHorizonSpriteLoop
pop hl
dec c
jr nz,.delayLoop
ret
.setupFadeFromSky
push af
ld a,FADEBANK
ld [$ff70],a
;set final palette bg7 to be bg7 color 0
ld hl,gamePalette
ld de,fadeCurPalette
call FadeCommonCopyPalette
ld de,fadeFinalPalette
call FadeCommonCopyPalette
ld hl,fadeFinalPalette+8*7
ld a,[hl+]
ld c,a
ld b,[hl]
;call ((.getLandingInfo-L1400_Load2)+levelCheckRAM)
ld hl,fadeFinalPalette+8*7
call ((.setBG7-L1400_Load2)+levelCheckRAM)
pop af
call FadeInit
ret
.setBG7
;copy bc to 4 entries at palette hl
ld hl,fadeFinalPalette+8*7
ld a,4
.setBG7Loop
ld [hl],c
inc hl
ld [hl],b
inc hl
dec a
jr nz,.setBG7Loop
ret
.setupFadeToSky
push bc
push de
push hl
push af
ld hl,gamePalette
ld de,fadeCurPalette
call FadeCommonCopyPalette
ld de,fadeFinalPalette
call FadeCommonCopyPalette
ld hl,levelVars+VAR_DESTZONE
ld a,[hl+]
ld [appomattoxMapIndex],a
ld a,[hl+]
ld b,[hl]
ld c,a
ld hl,fadeCurPalette+8*7
call ((.setBG7-L1400_Load2)+levelCheckRAM)
pop af
call FadeInit
pop hl
pop de
pop bc
ret
.defaultSkyColor
ld bc,$7e20
ret
.setupFadeToClouds
push af
ld a,FADEBANK
ld [$ff70],a
;set final palette bg7 to be bg7 color 0
ld hl,gamePalette
ld de,fadeFinalPalette
call FadeCommonCopyPalette
pop af
call FadeInit
ret
.cloudFrames
DW BANK(cloud0_bg), cloud0_bg, BANK(cloud1_bg), cloud1_bg
DW BANK(cloud2_bg), cloud2_bg, BANK(cloud3_bg), cloud3_bg
DW BANK(cloud4_bg), cloud4_bg, BANK(cloud5_bg), cloud5_bg
DW BANK(cloud6_bg), cloud6_bg, BANK(cloud7_bg), cloud7_bg
.engineSound1
DB 4,$00,$df,$a9,$80 ;looping/infinite
.engineSound2
DB 4,$00,$d7,$a9,$80 ;fades
.buttonSound
DB 1,$79,$80,$f1,$00,$87
.byte8
DB 8
.delayAnimateWave
push af
call ((.animateWave-L1400_Load2)+levelCheckRAM)
ld a,1
call Delay
pop af
dec a
jr nz,.delayAnimateWave
ret
.animateWave
push bc
push de
push hl
PUSHROM
ld a,BANK(appwaves0_dat)
call SetActiveROM
ld a,[levelVars+VAR_SELSTAGE] ;a=stage*8 + frame*2
rlca
rlca
rlca
ld b,a
ldio a,[vblankTimer]
and %11000
rrca
rrca
or b
add (((.waveFrameTable-L1400_Load2)+levelCheckRAM) & $ff)
ld l,a
ld a,0
adc ((((.waveFrameTable-L1400_Load2)+levelCheckRAM)>>8) & $ff)
ld h,a
ld a,[hl+]
ld h,[hl]
ld l,a
ld de,$9420
ld c,40
ld a,1
call VMemCopy
POPROM
pop hl
pop de
pop bc
ret
.waveFrameTable
DW appwaves0_dat,appwaves0_dat+640,appwaves0_dat+640*2,appwaves0_dat+640*3
DW appwaves1_dat,appwaves1_dat+640,appwaves1_dat+640*2,appwaves1_dat+640*3
DW appwaves2_dat,appwaves2_dat+640,appwaves2_dat+640*2,appwaves2_dat+640*3
DW appwaves3_dat,appwaves3_dat+640,appwaves3_dat+640*2,appwaves3_dat+640*3
DW appwaves4_dat,appwaves4_dat+640,appwaves4_dat+640*2,appwaves4_dat+640*3
L1400_LoadFinished:
;---------------------------------------------------------------------
; Map
;---------------------------------------------------------------------
L1400_Map:
;---------------------------------------------------------------------
; Init
;---------------------------------------------------------------------
L1400_Init:
DW ((L1400_InitFinished - L1400_Init2)) ;size
L1400_Init2:
ret
L1400_InitFinished:
;---------------------------------------------------------------------
; Check
;---------------------------------------------------------------------
L1400_Check:
DW ((L1400_CheckFinished - L1400_Check2)) ;size
L1400_Check2:
ret
L1400_CheckFinished:
PRINT "1400 Script Sizes (Load/Init/Check) (of $500): "
PRINT (L1400_LoadFinished - L1400_Load2)
PRINT " / "
PRINT (L1400_InitFinished - L1400_Init2)
PRINT " / "
PRINT (L1400_CheckFinished - L1400_Check2)
PRINT "\n"