2020-05-31 09:42:40 +01:00
|
|
|
; L0015.asm
|
2020-05-31 04:23:06 +01:00
|
|
|
; Generated 07.09.2000 by mlevel
|
|
|
|
; Modified 07.09.2000 by Abe Pralle
|
|
|
|
|
2020-06-15 06:19:36 +01:00
|
|
|
INCLUDE "Source/Defs.inc"
|
|
|
|
INCLUDE "Source/Levels.inc"
|
2020-05-31 04:23:06 +01:00
|
|
|
|
|
|
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
SECTION "Level0015Section",ROMX
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
|
|
|
L0015_Contents::
|
|
|
|
DW L0015_Load
|
|
|
|
DW L0015_Init
|
|
|
|
DW L0015_Check
|
|
|
|
DW L0015_Map
|
|
|
|
|
|
|
|
|
|
|
|
dialog:
|
|
|
|
soldier_how_gtx:
|
2020-06-15 01:47:17 +01:00
|
|
|
INCBIN "Data/Dialog/IntroBS/soldier_how.gtx"
|
2020-05-31 04:23:06 +01:00
|
|
|
|
|
|
|
bs_likeButter_gtx:
|
2020-06-15 01:47:17 +01:00
|
|
|
INCBIN "Data/Dialog/IntroBS/bs_likeButter.gtx"
|
2020-05-31 04:23:06 +01:00
|
|
|
|
|
|
|
soldier_yellow_gtx:
|
2020-06-15 01:47:17 +01:00
|
|
|
INCBIN "Data/Dialog/IntroBS/soldier_yellow.gtx"
|
2020-05-31 04:23:06 +01:00
|
|
|
|
|
|
|
bs_slippery_gtx:
|
2020-06-15 01:47:17 +01:00
|
|
|
INCBIN "Data/Dialog/IntroBS/bs_slippery.gtx"
|
2020-05-31 04:23:06 +01:00
|
|
|
|
|
|
|
guard_freeze_gtx:
|
2020-06-15 01:47:17 +01:00
|
|
|
INCBIN "Data/Dialog/IntroBS/guard_freeze.gtx"
|
2020-05-31 04:23:06 +01:00
|
|
|
|
|
|
|
bs_actually_gtx:
|
2020-06-15 01:47:17 +01:00
|
|
|
INCBIN "Data/Dialog/IntroBS/bs_actually.gtx"
|
2020-05-31 04:23:06 +01:00
|
|
|
|
|
|
|
guard_moveAlong_gtx:
|
2020-06-15 01:47:17 +01:00
|
|
|
INCBIN "Data/Dialog/IntroBS/guard_moveAlong.gtx"
|
2020-05-31 04:23:06 +01:00
|
|
|
|
|
|
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
; Load
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
L0015_Load:
|
|
|
|
DW ((L0015_LoadFinished - L0015_Load2)) ;size
|
|
|
|
L0015_Load2:
|
|
|
|
call ParseMap
|
|
|
|
ret
|
|
|
|
|
|
|
|
L0015_LoadFinished:
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
; Map
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
L0015_Map:
|
2020-05-31 09:42:40 +01:00
|
|
|
INCBIN "Data/Levels/L0015_intro_bs1.lvl"
|
2020-05-31 04:23:06 +01:00
|
|
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
; Init
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
VAR_RADAR EQU 0
|
|
|
|
VAR_SPEAKINGHERO EQU 1
|
|
|
|
|
|
|
|
RADARINDEX EQU 52
|
|
|
|
GRUNTINDEX EQU 87
|
|
|
|
B12SOLDIERINDEX EQU 88
|
|
|
|
|
|
|
|
STATE_INITIALDRAW EQU 0
|
|
|
|
STATE_TALKSOLDIER1 EQU 1
|
|
|
|
STATE_TALKSOLDIER2 EQU 2
|
|
|
|
STATE_TALKSOLDIER3 EQU 3
|
|
|
|
STATE_TALKSOLDIER4 EQU 4
|
|
|
|
STATE_TALKGUARD1 EQU 5
|
|
|
|
STATE_TALKGUARD2 EQU 6
|
|
|
|
STATE_TALKGUARD3 EQU 7
|
|
|
|
STATE_NORMAL EQU 8
|
|
|
|
STATE_WAIT_DIALOG EQU 9
|
|
|
|
|
|
|
|
L0015_Init:
|
|
|
|
DW ((L0015_InitFinished - L0015_Init2)) ;size
|
|
|
|
L0015_Init2:
|
|
|
|
ld hl,$0015
|
|
|
|
call SetJoinMap
|
|
|
|
|
|
|
|
ld hl,$0015
|
|
|
|
call SetRespawnMap
|
|
|
|
|
|
|
|
ld a,BANK(bs_gbm)
|
|
|
|
ld hl,bs_gbm
|
|
|
|
call InitMusic
|
|
|
|
|
|
|
|
call SetPressBDialog
|
|
|
|
ld a,BANK(dialog)
|
|
|
|
ld [dialogBank],a
|
|
|
|
|
|
|
|
ld a,[bgTileMap+RADARINDEX]
|
|
|
|
ld [levelVars+VAR_RADAR],a
|
|
|
|
|
|
|
|
ld bc,classB12Soldier
|
|
|
|
ld de,classDoNothing
|
|
|
|
call ChangeClass
|
|
|
|
|
|
|
|
ld bc,classCroutonGrunt
|
|
|
|
ld de,classDoNothing
|
|
|
|
call ChangeClass
|
|
|
|
ret
|
|
|
|
|
|
|
|
L0015_InitFinished:
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
; Check
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
L0015_Check:
|
|
|
|
DW ((L0015_CheckFinished - L0015_Check2)) ;size
|
|
|
|
L0015_Check2:
|
|
|
|
call ((.animateRadar-L0015_Check2)+levelCheckRAM)
|
|
|
|
|
|
|
|
ldio a,[mapState]
|
|
|
|
cp STATE_NORMAL
|
|
|
|
jr nz,.checkInitialDraw
|
|
|
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
.checkInitialDraw
|
|
|
|
cp STATE_INITIALDRAW
|
|
|
|
jr nz,.checkTalkSoldier1
|
|
|
|
|
|
|
|
ld a,STATE_TALKSOLDIER1
|
|
|
|
ldio [mapState],a
|
|
|
|
ret
|
|
|
|
|
|
|
|
.checkTalkSoldier1
|
|
|
|
cp STATE_TALKSOLDIER1
|
|
|
|
jr nz,.checkTalkSoldier2
|
|
|
|
|
|
|
|
call SetSpeakerToFirstHero
|
|
|
|
|
|
|
|
ld de,soldier_how_gtx
|
|
|
|
ld c,B12SOLDIERINDEX
|
|
|
|
call ShowDialogAtTopNoWait
|
|
|
|
|
|
|
|
ld de,((.endTalkSoldier-L0015_Check2)+levelCheckRAM)
|
|
|
|
call SetDialogSkip
|
|
|
|
|
|
|
|
ld a,1
|
|
|
|
ld [heroesIdle],a
|
|
|
|
ld a,STATE_TALKSOLDIER2
|
|
|
|
ldio [mapState+1],a
|
|
|
|
ld a,STATE_WAIT_DIALOG
|
|
|
|
ldio [mapState],a
|
|
|
|
ret
|
|
|
|
|
|
|
|
.checkTalkSoldier2
|
|
|
|
cp STATE_TALKSOLDIER2
|
|
|
|
jr nz,.checkTalkSoldier3
|
|
|
|
|
|
|
|
call SetSpeakerToFirstHero
|
|
|
|
ld de,bs_likeButter_gtx
|
|
|
|
call ShowDialogAtBottomNoWait
|
|
|
|
|
|
|
|
ld a,1
|
|
|
|
ld [heroesIdle],a
|
|
|
|
ld a,STATE_TALKSOLDIER3
|
|
|
|
ldio [mapState+1],a
|
|
|
|
ld a,STATE_WAIT_DIALOG
|
|
|
|
ldio [mapState],a
|
|
|
|
ret
|
|
|
|
|
|
|
|
.checkTalkSoldier3
|
|
|
|
cp STATE_TALKSOLDIER3
|
|
|
|
jr nz,.checkTalkSoldier4
|
|
|
|
|
|
|
|
ld de,soldier_yellow_gtx
|
|
|
|
ld c,B12SOLDIERINDEX
|
|
|
|
call ShowDialogAtTopNoWait
|
|
|
|
|
|
|
|
ld a,1
|
|
|
|
ld [heroesIdle],a
|
|
|
|
ld a,STATE_TALKSOLDIER4
|
|
|
|
ldio [mapState+1],a
|
|
|
|
ld a,STATE_WAIT_DIALOG
|
|
|
|
ldio [mapState],a
|
|
|
|
ret
|
|
|
|
|
|
|
|
.checkTalkSoldier4
|
|
|
|
cp STATE_TALKSOLDIER4
|
|
|
|
jr nz,.checkTalkGuard1
|
|
|
|
|
|
|
|
call SetSpeakerToFirstHero
|
|
|
|
ld de,bs_slippery_gtx
|
|
|
|
call ShowDialogAtBottomNoWait
|
|
|
|
|
|
|
|
ld a,1
|
|
|
|
ld [heroesIdle],a
|
|
|
|
ld a,STATE_TALKGUARD1
|
|
|
|
ldio [mapState+1],a
|
|
|
|
ld a,STATE_WAIT_DIALOG
|
|
|
|
ldio [mapState],a
|
|
|
|
ret
|
|
|
|
|
|
|
|
.endTalkSoldier
|
|
|
|
xor a
|
|
|
|
ld [heroesIdle],a
|
|
|
|
ld [allIdle],a
|
|
|
|
ld de,0
|
|
|
|
call SetDialogSkip
|
|
|
|
call ClearDialog
|
|
|
|
ld a,STATE_TALKGUARD1
|
|
|
|
ldio [mapState],a
|
|
|
|
ret
|
|
|
|
|
|
|
|
.checkTalkGuard1
|
|
|
|
cp STATE_TALKGUARD1
|
|
|
|
jr nz,.checkTalkGuard2
|
|
|
|
|
|
|
|
ld a,[hero0_index]
|
|
|
|
call ((.checkHeroTalkToGuard-L0015_Check2)+levelCheckRAM)
|
|
|
|
ld a,[hero1_index]
|
|
|
|
call ((.checkHeroTalkToGuard-L0015_Check2)+levelCheckRAM)
|
|
|
|
ret
|
|
|
|
|
|
|
|
.checkTalkGuard2
|
|
|
|
cp STATE_TALKGUARD2
|
|
|
|
jr nz,.checkTalkGuard3
|
|
|
|
|
|
|
|
ld a,[levelVars + VAR_SPEAKINGHERO]
|
|
|
|
ld c,a
|
|
|
|
call SetSpeakerFromHeroIndex
|
|
|
|
ld de,bs_actually_gtx
|
|
|
|
call ShowDialogAtBottomNoWait
|
|
|
|
|
|
|
|
ld a,1
|
|
|
|
ld [heroesIdle],a
|
|
|
|
ld a,STATE_TALKGUARD3
|
|
|
|
ldio [mapState+1],a
|
|
|
|
ld a,STATE_WAIT_DIALOG
|
|
|
|
ldio [mapState],a
|
|
|
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
.checkTalkGuard3
|
|
|
|
cp STATE_TALKGUARD3
|
|
|
|
jr nz,.checkWaitDialog
|
|
|
|
|
|
|
|
ld c,GRUNTINDEX
|
|
|
|
ld de,guard_moveAlong_gtx
|
|
|
|
call ShowDialogAtTopNoWait
|
|
|
|
|
|
|
|
ld a,1
|
|
|
|
ld [heroesIdle],a
|
|
|
|
ld a,STATE_NORMAL
|
|
|
|
ldio [mapState+1],a
|
|
|
|
ld a,STATE_WAIT_DIALOG
|
|
|
|
ldio [mapState],a
|
|
|
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
.endTalkGuard
|
|
|
|
ld de,0
|
|
|
|
call SetDialogSkip
|
|
|
|
xor a
|
|
|
|
ld [heroesIdle],a
|
|
|
|
ld [allIdle],a
|
|
|
|
call ClearDialog
|
|
|
|
ld a,STATE_NORMAL
|
|
|
|
ldio [mapState],a
|
|
|
|
ret
|
|
|
|
|
|
|
|
.checkWaitDialog
|
|
|
|
call CheckDialogContinue
|
|
|
|
or a
|
|
|
|
ret z
|
|
|
|
|
|
|
|
xor a
|
|
|
|
ld [heroesIdle],a
|
|
|
|
|
|
|
|
ldio a,[mapState+1]
|
|
|
|
ldio [mapState],a
|
|
|
|
ret
|
|
|
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
.animateRadar
|
|
|
|
;animate the radar tower (index 47-52) based on timer/8
|
|
|
|
ldio a,[updateTimer]
|
|
|
|
rrca ;(t/8)*6 == t/4*3
|
|
|
|
and %00000110
|
|
|
|
ld b,a
|
|
|
|
add b
|
|
|
|
add b
|
|
|
|
ld b,a
|
|
|
|
ld a,[levelVars+VAR_RADAR]
|
|
|
|
add b
|
|
|
|
|
|
|
|
ld hl,bgTileMap + RADARINDEX
|
|
|
|
ld c,6
|
|
|
|
.animateTower
|
|
|
|
ld [hl+],a
|
|
|
|
inc a
|
|
|
|
dec c
|
|
|
|
jr nz,.animateTower
|
|
|
|
ret
|
|
|
|
|
|
|
|
.checkHeroTalkToGuard
|
|
|
|
or a
|
|
|
|
ret z
|
|
|
|
ld c,a
|
|
|
|
call GetFirst
|
|
|
|
call GetCurZone
|
|
|
|
cp 2
|
|
|
|
ret nz
|
|
|
|
|
|
|
|
ld a,c
|
|
|
|
ld [levelVars + VAR_SPEAKINGHERO],a
|
|
|
|
call SetSpeakerFromHeroIndex
|
|
|
|
|
|
|
|
ld de,guard_freeze_gtx
|
|
|
|
ld c,GRUNTINDEX
|
|
|
|
call ShowDialogAtTopNoWait
|
|
|
|
|
|
|
|
pop bc ;adjust stack pos for dialog skip
|
|
|
|
ld de,((.endTalkGuard-L0015_Check2)+levelCheckRAM)
|
|
|
|
call SetDialogSkip
|
|
|
|
push bc
|
|
|
|
|
|
|
|
ld a,1
|
|
|
|
ld [heroesIdle],a
|
|
|
|
ld a,STATE_TALKGUARD2
|
|
|
|
ldio [mapState+1],a
|
|
|
|
ld a,STATE_WAIT_DIALOG
|
|
|
|
ldio [mapState],a
|
|
|
|
ret
|
|
|
|
|
|
|
|
L0015_CheckFinished:
|
|
|
|
PRINTT "0015 Script Sizes (Load/Init/Check) (of $500): "
|
|
|
|
PRINTV (L0015_LoadFinished - L0015_Load2)
|
|
|
|
PRINTT " / "
|
|
|
|
PRINTV (L0015_InitFinished - L0015_Init2)
|
|
|
|
PRINTT " / "
|
|
|
|
PRINTV (L0015_CheckFinished - L0015_Check2)
|
|
|
|
PRINTT "\n"
|
|
|
|
|