;-------------------------------------------------------------------;
;                                                                   ;
;                    STARFOX II - THE SEQUEL                        ;
;                                                                   ;
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
;                                                                   ;
; FILE:         MISMAP.ASM                                          ;
; AUTHOR:       Yasuhiro Kawaguchi                                  ;
; DESCRIPTION:  Mission Map Select Main Routine                     ;
; DATE CREATED: 10-3-93                                             ;
;                                                                   ;
;-------------------------------------------------------------------;
	INCPUB	mismap

;*********************************************************************
;*								*
;*		Select Mission Map 	[MISSION]		*
;*								*
;*********************************************************************
SelectMissionMap_l
	php
	a8i16
;* Initial *
	jsr	Init_MissionMapParams

;* IRQ enable *
	km_IRQenable	mismapirq,226	;[IRQ enable]

;*********************************************************************
;*			 Main Loop				*
;*********************************************************************
	shorta
	longi
	phb
	db7e
;* gameover check *
	km_cmpcheckmismapsyori	missiongameover
	km_beq	.GameOver

.LOOP
;* Game no Syori Frame Initial *
	a16
	km_setmismapstflag	noirqsyori	;[irq syori skip]
	km_clrmismapstflag	finishtrans	;[planet trans enable]
	km_setmismapstflag	gmframesyori	;[1 game fram (8frame) ni 1kai syori]
	a8

;* Syori Over Check *
	ifne	kbugsw
	stz	checkirq
	stz	kw_gameframeptr
	endc

;-------------------------------------------------------------
;* 		GAME FRAME Routine  [ROM Access Enable]	*
;* memo :kokoni program wo okuto Game Frame ni natte shimau	*
;-------------------------------------------------------------
	shorta
	jsr	mm_GameFrameROMRoutine

;-------------------------------------------------------------
;*		Draw Planet	[RAM Parallel]		* 
;-------------------------------------------------------------
	jsr	mm_setmarioparms
	jsl	mm_startmario_l

;* Draw Map Swap *
	swapdrawmap

;	km_setvar	checkirq2,checkirq
;-------------------------------------------------------------
;*		Wait Bitmap Data Transfer Wait		*
;-------------------------------------------------------------
;* wait irq *
	a16
.waittrans	;(8 frame wait)
	km_bitcheckmismapstflag	finishtrans
	beq	.waittrans

	ifne	kbugsw
	a8
	km_setvar	checkirq2,checkirq
	a16
	endc

;-------------------------------------------------------------
;*		Jump Sequence				*
;-------------------------------------------------------------
;-------------------------------------------------------------
;94/11/10 :kono flag set wa hazusanaikoto !!!!
; nazenara WIPE Close surutokini IRQ ga kiteshimauto (wipe_l ,find_window_pri_l)
;no syori ga dabute shimau kara !!!

	km_setmismapstflag	noirqsyori	;[irq syori skip]
;-------------------------------------------------------------
	km_nastycheck
;-------------------------------------------------------------
	km_lldaslx	kw_mismapsyori
	a8
	jmp	(.mapsyori,x)
.mapsyori
	dw	.loop&WM		;[main]
	dw	.ExplainFinish&WM	;[explain demo finish]
	dw	.Missionstart&WM	;[mission start]
	dw	.Allclear&WM		;[mission all clear]
	dw	.Gameover&WM		;[mission game over]
	dw	.SpecialEnemy&WM	;[special enemy appear]
	dw	.PlanetcannonDemo&WM	;[planet cannon demo]


;=============================================================
;*		Planet cannon Demo			*
;=============================================================
	shorta
	longi
.PlanetcannonDemo
	km_settmpgamemode	demo
	km_setdemonumber	planetcannondemo
;* flag *
	km_setmismapflag	returnmap
;* wipe close pos *
	ldy	kx_PlanetcannonListPtr
	lda.w	mmx_planetcannonsx,y
	sta	mmx_wipeposX
	lda.w	mmx_planetcannonsy,y
	sta	mmx_wipeposY
;* BGM *
	brl	.startwipeclose

;=============================================================
;*		Special Enemy Appear			*
;=============================================================
	shorta
	longi
.SpecialEnemy
;* demo sequence *
	km_settmpgamemode	demo
	km_setdemonumber	specialendemo
;* flag *
	km_setmismapflag	returnmap
	km_setmismapflag	spenappear
;* wipe close pos *
	km_setval	mmx_wipeposX,$1d*8
	km_setval	mmx_wipeposY,$04*8
;* BGM *
;;;	kbgm	fadeout
	ksound	en_map_encount2
	brl	.startwipeclose

;=============================================================
;*		Mission Explain Demo Finish		*
;=============================================================
.ExplainFinish
	shorta
	km_settmpgamemode	selectmissionplayer	;[game mode]
	a16
	km_clrmistotalflag	initialmap
	km_clrmistotalflag	explain1
	km_clrmismapfzflag	gamefreeze
;;;	km_clrflag16	kw_mismapfreezeflag,kfz_allfreeze
	a8
	brl	.screenfade

;=============================================================
;*		Mission All Clear			*
;=============================================================
.AllClear
	shorta
	brl	.screenfade

;=============================================================
;*		Mission Game Over			*
;=============================================================
.GameOver
	shorta
	km_clrmismapfzflag	gamefreeze
	km_setmistotalflag	destcorneria

	km_settmpgamemode	demo
	km_setdemonumber	corneriafelldemo	;[game mode]

	km_setval	mmx_wipeposX,$04*8
	km_setval	mmx_wipeposY,$18*8

	brl	.startwipeclose

;=============================================================
;*		Mission Game Start			*
;=============================================================
.MissionStart
;* Get Mission Type *
	a16
	km_setmismapflag	returnmap
	jsl	init_ealcs_l

	km_bitcheckmistotalflag	finalbossbattle
	bne	.typ_finalboss
	km_bitcheckmismapflag	enemylist
	km_beq	.Typ_Planet

	ldy	kx_SOSEnemyptr	;enemy pointer keep
	km_clrmismapflag	asteroid   ;[MISSION MAP FLAG]
	km_bitcheckflag16.w	mmx_enflags2,enfl2_asteroid,y
	beq	.skip2
	km_setmismapflag	asteroid   ;[MISSION MAP FLAG]
.skip2
	a8
	lda.w	mmx_arwingposx+1
	sta	mmx_wipeposx	;wipe postion CX
	lda.w	mmx_arwingposy+1
	sta	mmx_wipeposy	;wipe postion CY

	a16
	km_bitcheckflag16.w	mmx_enflags,enfl_battleship,y
	bne	.typ_battleship
	km_bitcheckflag16.w	mmx_enflags,enfl_special,y
	bne	.typ_special
	bra	.typ_zaco

;---------------------------------------------
;*	Mission Type Syori		*
;* Yreg :Enemy List Pointer(planet wa nashi)	*
;---------------------------------------------
.typ_finalboss
	longa
	km_settmpgamemode	initmission	;[game mode]
	km_setmissionflag	finalboss	;[for mission pause screen cancel]
	a8
;;;	kbgm	fadeout
	ksound	en_map_encount2
	brl	.startwipeclose
.typ_planet
	longa
	a8
;;;	kbgm	demo2
;;;	kbgm	fadeout
	ksound	en_map_encount2
	km_settmpgamemode	missionexplain	;[game mode]
	jsr	start_misplanet			;[for eguchi's]
	brl	.startwipeclose
.typ_battleship
	longa
	km_setval	kx_missiontype,mistyp_battleship
	lda.w	mmx_enlinkptr,y
	tax
	km_setflag16.w	mmx_planetflag,mmpnf_battleplayer,x

	km_bitcheckflag16.w	mmx_battleshipflag,mmbsf_cannonareain,x
	beq	.no_planetcannon
	a8
	km_setval	eaction2,1
.no_planetcannon
	a8
	km_settmpgamemode	missionexplain	;[game mode]
;	kbgm	demo2
;;;;	kbgm	fadeout
	ksound	en_map_encount2
	bra	.setspace
.typ_special
	longa
	km_setval	kx_missiontype,mistyp_special
	bra	.skipaaa
.typ_zaco
	longa
	km_setval	kx_missiontype,mistyp_sosenemy

	km_bitcheckflag16.w	mmx_enflags,enfl_virus,y
	bne	.virus
	bit	#enfl_wolf
	bne	.skipaaa

;* missile or zaco *
	km_setmismapflag2	rannyuenable
	bra	.skipaaa

;* virus (satellite battle check) *
.virus
	km_bitcheckflag16	kx_satelliteflag,safl_virustorituki
	beq	.skipaaa
	km_setflag16	kx_satelliteflag,safl_satellitebattle
.skipaaa
	a8
	km_settmpgamemode	initmission	;[game mode]
;;;	kbgm	fadeout
	ksound	en_map_encount
.setspace
	shorta
	jsr	start_sosenemy

;* player states (kawagoe's)*
	a16
	km_loblda.w	mmx_arwingposx+1
	sta	p1_worldx_init
	km_loblda.w	mmx_arwingposy+1
	km_nega
	km_loba
	sta	p1_worldz_init
	a8
	lda.w	mmx_arwingangY+1
	sta	p1_roty_init

;* enemy states (eguchi's)*
	a16
	ldy	kx_SOSEnemyptr	;enemy pointer keep
	lda.w	mmx_enposx,y
	km_hibswapa
	sta	e_worldx_init

	lda.w	mmx_enposy,y
	km_hibswapa
	km_nega
	km_loba
	sta	e_worldz_init
	a8
	lda.w	mmx_enangY+1,y
	sta	Kinitroty
;-----------------------------------------------------------------------
;* wipe close *
.startwipeclose
	shorta
	kbgm	fadeout
	km_setsndflag	allstop
	km_initwipeclose	mismap
	km_wipefadewait_l
	bra	.init_mem
;-----------------------------------------------------------------------
;* screen fade *
.screenfade
	km_screenfade	60
;-----------------------------------------------------------------------
;* heap ram all free *
.init_mem
	jsl	initmem_l		;[heap RAM free]
;* clear flags *
	a16
;-------------------------------------------------------
	km_setnextgamemode		;[game mode]
	km_setmismapsyori	normal
	km_setval	kx_MotherShipSeq,0

	km_clrmismapfzflag	gamefreeze	;[freeze flag]
	km_clrmismapstflag	all 		;[state  flag]
	km_clrmismapchflag	allenable	;[chart  flag]
	km_clrscreenflag	all		;[screen flag]
	km_clrwindowflag	all		;[window flag]
	km_clrscrollflag	all		;[scroll flag]
	km_clrsndflag		allstop 	;[sound  flag]

	km_clrflag16	mmx_arwingflag,mmf_all
	km_clrflag16	mmx_partnerflag,mmf_all
	km_clrflag16	mmx_cursorflag,curf_all
	km_clrflag16	mmx_cursorflag2,curf2_all
;-------------------------------------------------------
	plb
	plp
	rtl


;=====================================================================
;*		Initial Eguchi's Work RAM			*
;* data bank :7e							*
;=====================================================================
init_ealcs_l
	phb
	php
	a8
	db7e
	ai16
	stz	ebyte1
	stz	ebyte3
	stz	ebyte5
	stz	ebyte7
	stz	eword1
	stz	eword2
	stz	switchflags
	stz	RannyuModeSwitch

;* enemy hight *
	jsl	KGetRandomPtr_l
	and	#%1110		;(0,2,4,6,8,10,12,14)	:8 type
	tax
	lda.l	enemy_ehight,x
	sta	ehight

	a8
	stz	eaction1
	stz	etrigger
	plp
	plb
	rtl

;=====================================================================
;*			Mission Planet 	Start			*
;* data bank :7e							*
;=====================================================================
start_misplanet
	shorta
	longi
	ldx	mmx_arwingdestptr
	lda.w	mmx_stage,x
	km_loba
	sta	KGameMapPtr	;stage pointer
	lda.w	mmx_planetskill,x
	sta	currentlevel
	lda.w	mmx_planetswitch,x
	sta	PlanetSwitch

	km_hib0
	ldx	KGameMapPtr
	lda	EEnemyNumPlanet1,x
	bne	.got_params
	lda	KGameMapPtr
	asl	a
	clc
	adc	KGameMapPtr	;*3
	clc
	adc	kdifficulty
	tax
	lda.l	KEnum_tab,x
.got_params
	sta	KEnemyNumber
	sta	CurrentEEnemyNumber
	rts

;=====================================================================
;*		Mission Planet States Save			*
;* data bank :7e							*
;* Xreg :Planet List Pointer (keep)					*
;=====================================================================
return_misplanet
	phx
	php
	a16
	lda	currentlevel
	sta.w	mmx_planetskill,x
	lda	PlanetSwitch
	sta.w	mmx_planetswitch,x
	a8
	ldx	KGameMapPtr
	lda	CurrentEEnemyNumber
	sta	EEnemyNumPlanet1,x
	plp
	plx
	rts	

;=====================================================================
;*			SOS Enemy Start				*
;* data bank :7e							*
;* tmp work :kz_x1,kz_tpx						*
;=====================================================================
	shorta
	longi
start_sosenemy

	ldy	kx_SOSEnemyptr	;enemy pointer keep
	lda.w	mmx_enstage,y
	sta	kgamemapptr	;sos1/sos2/sos3
	lda.w	mmx_enskill,y
	sta	currentlevel	;skill (step)
	lda.w	mmx_enstackptr,y
	sta	kstacknumber

	lda.w	mmx_enwolfnum,y
	sta	starwolfNo	;start wolf team No

	lda	kx_MissionType
	cmp	#mistyp_battleship
	bne	.sosenemy
;----------------------------------------------------------------------
.battleship
	km_setval	kenemynumber,1
	brl	.end
;----------------------------------------------------------------------
.sosenemy
	a16
	ldx	kstacknumber
	txa
	asl	a
	sta	kz_tpx
	a8
	lda	EEnemyNumber_0,x

	IFEQ	1
	bne	.got_params
	a16
	ldx	kz_tpx
	lda	#0
	sta	sebangoSwitch_0,x

	ldx	currentlevel	;skill (step)
	km_bitcheckflag16.w	mmx_enflags,enfl_missile,y
	a8
	bne	.missile

	lda.l	sos1_target,x
	bra	.got_params
.missile
	lda.l	sos2_target,x
.got_params
	ENDC

	sta	CurrentEEnemyNumber
	pha
	and	#%1111
	sta	kz_x1
	pla
	lsr	a
	lsr	a
	lsr	a
	lsr	a
	clc
	adc	kz_x1
	sta	kenemynumber

	a16
	ldx	kz_tpx
	lda	SebangoSwitch_0,x
	sta	CurrentSwitch
	a8
;----------------------------------------------------------------------
.end
	rts

;=====================================================================
;*		SOS Enemy States Save				*
;* data bank :7e							*
;* Xreg :Planet List Pointer (keep)					*
;* Yreg :Enemy  List Pointer (keep)					*
;=====================================================================
return_sosenemy
	phx
	php
	a8

	ldx	kstacknumber
	lda	CurrentEEnemyNumber
	sta	EEnemyNumber_0,x

	lda	kenemynumber
	sta.w	mmx_enkazu,y

	a16
	txa
	asl	a
	tax
	lda	CurrentSwitch
	sta	SebangoSwitch_0,x
	
	plp
	plx
	rts	

;*********************************************************************
;*								*
;*		Mission CompleteCheck				*
;* Data bank 7e							*
;* Ret :a8i16							*
;*********************************************************************
mm_checkmiscomplete
	a8
	phb
	db7e
	a16
;-------------------------------------------------------------
;*		Mission Complete Check			*
;-------------------------------------------------------------
	km_bitcheckmismapflag	returnmap
	km_beq	.end
.complete
	LONGA
	km_clrmismapflag	returnmap	;[mission kara modotte kita flag]
	km_clrflag16		mmx_cursorflag,(curf_destdisp!curf_readyspup)
	km_clrflag16		mmx_cursorflag2,(curf2_hitplanet!curf2_hitplanettrig!curf2_goplanet)
	km_clrmismapflag	battleplayer	;[player ga mission tyuu no flag]
	km_clrflag16	kw_mismapflag2,(kmimpf2_rannyuenable)

;* sound *
	ksound	map_open_wipe

;* Enemy List Return *
	km_bitcheckmismapflag	enemylist
	beq	.planetlist
	ldy	kx_SOSEnemyptr		;enemy List pointer
	lda.w	mmx_ensequence_bak,y
	sta.w	mmx_ensequence,y
	lda.w	mmx_enstratptr_bak,y
	sta.w	mmx_enstratptr,y
.planetlist

;* Demo Basic States *
	km_stxval	kx_MMPlayerSeq,plseq_wipeopen	;
	km_setval	kx_demoflag,demof_wipeopen	;(For Yajima's)
;------------------------
;* Satellite Shot Check *
	km_bitcheckflag	kx_satelliteflag,safl_lockon
	beq	.skipa
	km_bitcheckflag16	kx_satelliteflag,safl_satellitebattle
	beq	.fire_corneria
	km_bitcheckmismapflag	missionresult
	bne	.skipa
.fire_corneria
	inc	kx_SatelliteBeemChart	;[mismap.asm]
	inc	kx_satelliteSeq		;[mmtbl.asm]
.skipa
	km_clrflag16	kx_satelliteflag,(safl_satellitebattle!safl_lockon)
;------------------------
;* planet cannon demo *
	km_bitcheckmismapflag2	planetcannondemo
	bne	.planetcannon
;* special enemy appear *
	km_bitcheckmismapflag	spenappear
	bne	.appear_specialenemy

;* Check Battle Mission Return *
.normal_mission
	km_bitcheckmismapflag	missionresult
	beq	.skip1
	km_clrmismaptrflag	timechartstop	;[stopper kaijyo]
	km_clrmismaptrflag	eventdisable	;[event enable]
.skip1
	ldx	kx_MissionType
	jsr	(.TypeTbl,x)
	km_setvar	mmx_wipeposX,mmx_arwingposx+1	;[wipe center X]
	km_setvar	mmx_wipeposY,mmx_arwingposy+1	;[wipe center Y]
	bra	.end
;-----------
.appear_specialenemy
	km_clrmismapflag	spenappear
	km_setval	mmx_wipeposX,$80
	km_setval	mmx_wipeposY,$60
	km_setval	kx_MMPlayerSeq_next,plseq_tmcharttrig
	bra	.end
;-----------
.planetcannon
	km_clrmismapflag2	planetcannondemo
	km_setval	kx_MMPlayerSeq_next,plseq_tmcharttrig
	bra	.end
;-----------
.end
	a8
	plb
	rts

;-----------------------------
;*	Table		*
;-----------------------------
.TypeTbl
	dw	comp_PlanetList&WM		;[planet]
	dw	comp_BattleShip&WM		;[battle ship]
	dw	comp_EnemyList&WM		;[sos enemy]
	dw	comp_SpecialEnemyList&WM	;[taiman kun]
	dw	comp_EnemyList&WM		;[final boss]

;=====================================================================
;*								*
;*			Mission Planet				*
;*								*
;=====================================================================
;*** Mission ga Planet no baai !! ***
comp_PlanetList
	LONGA
	ldx	mmx_arwingdestptr	;Planet List Pointer
	km_bitcheckflag16.w	mmx_planetflag,mmpnf_battleship,x
	bne	comp_BattleShip

;	km_bitcheckmismapfzflag	misbornfreeze
;	bne	.freeze
	km_clrflag16.w	mmx_planetflag,mmpnf_battleplayer,x
;.freeze

;* Mission Planet Params Save *
	jsr	return_misplanet	;[for eguchi's]

;* Moshi Mission no totyuu de escape shitara !! *
	km_setval	kx_MMPlayerSeq_next,plseq_plareturnmaptrig

	km_bitcheckmismapflag	missionresult
	beq	.skip1
	jsr	clearplanet
	km_setval	kx_MMPlayerSeq_next,plseq_plamiscleardemotrig
.skip1
	rts
;---------------------------------------------------------------------
;*		Mission Planet Clear				*
;---------------------------------------------------------------------
	longa
	longi
clearplanet
	km_setflag16.w	mmx_planetflag,mmpnf_complete,x	;mission planet complete
	km_setval.w	mmx_dokuroanm,0,x		;dokuro animation off

;* moshi battle shiteita planet no missile ga born wait jyoutai dattara !! * 
	lda.w	mmx_psos,x
	beq	.skip1
	km_clrflag16.w	mmx_planetflag,mmpnf_sosappear,x
	lda	#enbase_inittime
	sta.w	mmx_psos,x
.skip1
	lda	#step_Neutral
	sta.w	mmx_planetskill,x	;neutral

	dec	kx_senryoucurrent
	dec	kx_planetkazu
	dec	kx_missiontotal
	inc	kx_planetclearcnt

	jsr	CheckMissionNokori1
	rts

;---------------------------------------------------------------------
;*		Mission ga nokori 1 tu ni nattaka douka Check	*
;---------------------------------------------------------------------
	longa
	longi
CheckMissionNokori1
	lda	kx_missiontotal
	cmp	#1
	bne	.end
	km_setmismapstflag	nokori1
.end
	rts

;=====================================================================
;*								*
;*			Battle Ship				*
;*								*
;=====================================================================
comp_BattleShip
;* Xreg = planet list pointer
;* Yreg = enemy list pointer
;* Moshi Mission no totyuu de escape shitara !! *
	LONGA

	a8
	km_setval	eaction2,0
	a16

	km_bitcheckmismapflag	missionresult
	beq	.battleship_failed
	km_setval	kx_MMPlayerSeq_next,plseq_batmiscleardemotrig
	rts

.battleship_failed
	longa
	ldy	kx_SOSEnemyptr		;enemy List pointer
	lda.w	mmx_enlinkptr,y
	tax
	km_clrflag16.w	mmx_planetflag,mmpnf_battleplayer,x
	km_clrflag16.w	mmx_enflags,(enfl_nocollision),y
	km_setval	kx_MMPlayerSeq_next,plseq_batreturnmaptrig
	rts

;---------------------------------------------------------------------
;*								*
;*		Mission Battle Ship Clear			*
;* Input :Xreg = Planet List Pointer					*
;*       :Yreg = Enemy List Pointer					*			*
;---------------------------------------------------------------------
clearbattleship
	longa
	longi

;* planet cannon cancell *
	cpx	kx_PlanetcannonListPtr
	bne	.NotCharge_cannon
	stz	kx_PlanetcannonPtr
	stz	kx_PlanetcannonListPtr
	km_clrmismapflag	cannonstart
.NotCharge_cannon

	jsr	freeplanetlistptr
	jsr	freeenemylistptr
	dec	kx_battleshipcurrent	;ima deteiru battle ship no kazu
	dec	kx_battleshipkazu
	dec	kx_missiontotal
	inc	kx_battleshipclearcnt
	jsr	CheckMissionNokori1
	rts

;=====================================================================
;*								*
;*			Zaco Enemy				*
;*								*
;=====================================================================
;**** MIssion ga Enemy no baai !!! ****
comp_EnemyList
comp_SpecialEnemyList
	LONGA
	LONGI
	ldy	kx_SOSEnemyptr		;enemy List pointer
	km_clrflag16.w	mmx_enflags,(enfl_nocollision),y
	jsr	return_sosenemy

	km_bitcheckmismapflag	missionresult
	km_beq	.sosmis_failed
;----------------------------------------------
.sosmis_clear
	km_bitcheckflag16.w	mmx_enflags,enfl_virus,y
	bne	.sos_virus
	bit	#enfl_missile
	bne	.sos_missile
	bit	#enfl_special
	bne	.sos_special
	bit	#enfl_wolf
	bne	.sos_wolf
.sos_zaco
	inc	kx_zacoclearcnt	;(jyokenga mitaseba reset shite shimau)
	inc	kx_zacogekitui	;(reset shinai)
	bra	.sos_common
.sos_missile
	inc	kx_missileclearcnt ;(jyokenga mitaseba reset shite shimau)
	inc	kx_missilegekitui  ;(reset shinai)
	bra	.sos_common

.sos_virus
	ldx	kx_FinalBossPlPtr
	stz.w	mmx_psos,x		;Virus Sequence Reset

	lda	kx_satellitetype	;Satellite dakkan Check
	beq	.sos_common		;moshi friend dattra
	km_setflag16.w	kx_satelliteflag,safl_virusgekitui
	bra	.sos_common
.sos_special
	bra	.sos_common
.sos_wolf
	km_bitcheckmismapflag2	wolfboss
	beq	.skipAAA
	km_setmismapstflag	wolfbossdead
.skipAAA
	bra	.sos_common
.sos_common
	km_clrmismapflag	enemylist
	km_setval	kx_MMPlayerSeq_Next,plseq_sosmiscleardemotrig
	rts
;----------------------------------------------
.sosmis_failed
	km_bitcheckmismapflag	missilefell	;[mission map flag]
	bne	.sosmis_missilefell
	km_bitcheckmismapflag	enemygone	;[mission map flag]
	beq	.sosmis_returnmap
;--------------------------
.sosmis_enemygone
	km_clrmismapflag	enemygone	;[mission map flag]
	km_setval	kx_MMPlayerSeq_next,plseq_sosgonedemotrig
	rts
;--------------------------
.sosmis_missilefell
	km_clrflag16	kw_mismapflag,(kmimpf_enemygone!kmimpf_missilefell)	;[mission map flag]
	km_setval	kx_MMPlayerSeq_next,plseq_missilefelltrig
	rts
;--------------------------
.sosmis_returnmap
	km_setval	kx_MMPlayerSeq_next,plseq_sosreturnmaptrig
	rts
;----------------------------------------------

;*********************************************************************
;*								*
;* 		Every FRAME Routine  [ROM Access Enable]	*
;* Call From IRA.ASM							*
;* Data bank 7e							*
;*********************************************************************
mm_ROMRoutine_l
	php
	a8
	phb
	db7e
;---------------------------------------------------------------------
	a16
	lda	kw_gameframeptr
	inc	a
	inc	a
	and	#$f
	sta	kw_gameframeptr

	jsr	mm_romroutinecommon	

	ldx	kw_gameframeptr
	jsr	(mm_romsyoritbl,x)
;---------------------------------------------------------------------
	plb
	plp
	rtl

	longa
	longi
mm_romroutinecommon
	jsr	mm_maincheck

	km_bitcheckmismapdemoflag	all
	beq	.nodemo
	jsr	mm_sosdemosequence
.nodemo

	jsr	mm_objdemochart
	jsr	SelectWarpPlace
	rts

mm_romsyoritbl
	dw	mm_romroutine0&WM
	dw	mm_romroutine1&WM
	dw	mm_romroutine2&WM
	dw	mm_romroutine3&WM
	dw	mm_romroutine4&WM
	dw	mm_romroutine5&WM
	dw	mm_romroutine6&WM
	dw	mm_romroutine7&WM

mm_romroutine0
mm_romroutine1
mm_romroutine2
mm_romroutine3
mm_romroutine4
mm_romroutine5
mm_romroutine6
mm_romroutine7
	rts



;*********************************************************************
;*								*
;*			Select Main Check			*
;* data bank :7e							*
;*********************************************************************
mm_maincheck
;---------------------------------------------
;*	Itumo ugoku routine	  	*
;---------------------------------------------
;* Key Enable Check *
	km_bitcheckgameflag	keydisable
	km_bne	.Sound
;* Bug Mode Check *
	jsr	mm_bugcheck
;* Button Check *
	jsr	mm_pausecheck	;{Game Frame Syori}

;* check pause *
;	km_bitcheckgameflag	PAUSEON
;	km_bne	.Sound

;---------------------------------------------
;*		Cursor			*
;---------------------------------------------
;*** flag clear ****
	LONGA
;'94/10/12 :kono basyo ga good !! (for yajima) :Pause notoki wa val keep
	km_clrflag16	mmx_mapcursor,%00000001	;(For Message)

	km_bitcheckflag16	mmx_cursorflag,curf_demo
	bne	.demo_cursor
	bit	#curf_warpselect
	bne	.skip_cursor

	km_bitcheckmismapfzflag	cursorfreeze
	bne	.skip_cursor
;* cursor *
	LONGA
	km_clrflag16	mmx_cursorflag,(curf_pushA!curf_samearwing)
	km_clrflag16	mmx_cursorflag2,(curf2_hitplanet)
	jsr	mm_movecursor		;[move cursor]
	jsr	mm_CollisionCursor	;[collision check]
	bra	.skip_cursor
.warp_cursor
	jsr	SelectWarpPlace
	bra	.skip_cursor
.demo_cursor
	LONGA
	jsr	mm_demomovecursor	;[move cursor]
.skip_cursor

;---------------------------------------------
;*	Check Button			*
;---------------------------------------------
;* Normal button Check*
;cursor check no ushironi oku 
;nazenara planet hit check wo maeni shinaito arwing ga okashina tokoroni tobu !!
	LONGA
	jsr	mm_checkbutton

;---------------------------------------------
;*	Game Timer			*
;---------------------------------------------
	LONGA
	jsr	mm_gametotaltm

;---------------------------------------------
;*	Player Stratage			*
;---------------------------------------------
.playerstratage
	longa
	km_bitcheckmismapfzflag	playerfreeze
	bne	.skip_playerstratage
;* main arwing *
	km_bitcheckflag16	mmx_arwingflag,mmf_demo
	bne	.skip_move
	LONGA
	jsr	mm_checkplayerdestpos	;[player dest postion check]
	jsr	mm_calcplayerangle	;[player angle]
	jsr	mm_calcplayercgxptr	;[player cgx ptr]
	jsr	mm_moveplayer		;[player move]
.skip_move

;* partner arwing *
	LONGA
	jsr	mm_calcpartnercgxptr	;[player cgx ptr]
	jsr	mm_MovePartner
.skip_playerstratage

;---------------------------------------------
;*	Dsiplay Routine			*
;---------------------------------------------
;* Set Sound *
.Sound
	a8
	jsr	mm_soundBGM
;---------------------------------------------
;*	     End			*
;---------------------------------------------
.end
	a16
	km_bitcheckmismapstflag	gmframesyori
	beq	.noclearflag
	km_clrgmjoypad
	km_clrgmkeydown
	km_clrmismapstflag	gmframesyori
	km_clrflag16	mmx_cursorflag,curf_gospup
.noclearflag
;---------------------------------------------
	rts



;*********************************************************************
;*								*
;*			 OBJ Demo Chart				*
;* data bank :7e							*
;*********************************************************************
objdemotype	macro	[addr]
	dw	(objdemo_{addr}-mm_objdemotypetbl)&WM
	endm
objdemoseq	macro	[addr]
	dw	{addr}&WM
	endm
objdemoseqend	macro
	dw	1
	endm
;=====================================================================
;*								*
;*		OBJ Demo Main Sequence				*
;*								*
;=====================================================================
	longa
	longi
mm_objdemochart

.Initial
	ldx	kx_objdemonumber
	beq	.End
	bmi	.Main

	lda.l	mm_objdemotypetbl,x
	sta	kx_objdemopointer
	km_setval	kx_objdemonumber,-1
.Main	
	ldx	kx_objdemopointer
	ldy	kx_objdemolistptr

	lda.l	mm_objdemotypetbl,x
	dec	a
	beq	.ChartFinish
	pha	;[jump addr]
	rts
.ChartFinish
	km_setval	kx_objdemonumber,0
.End
	rts
;---------------------------------------------------------------------
;*		OBJ DEMO TYPE Table				*
;---------------------------------------------------------------------
mm_objdemotypetbl
	objdemotype	nothing		;00 :(nothing)
	objdemotype	finalwarp	;02 :(mothership)
	objdemotype	returnmap	;04 :(player)
	objdemotype	normalwarp	;06 :(mothership)
	objdemotype	missilefell	;08 :(missile)
	objdemotype	zacoexplode	;0a :(sos zaco)
	objdemotype	enemygone	;0c :(sos zaco)
	objdemotype	bshipexplode	;0e :(battleship)
	objdemotype	planetexplode	;10 :(planet)
	objdemotype	wolfexplode	;12 :(wolf team)
	objdemotype	wolfappear	;14 :(wolf boss appear)
	objdemotype	start_easy	;16 :(planet senryou,battleship&zaco&missile appear)
	objdemotype	start_normal	;18 :(planet senryou,battleship&zaco&missile appear)
	objdemotype	start_hard	;1a :(planet senryou,battleship&zaco&missile appear)
	objdemotype	wolfwarp	;1c :(mothership)

;---------------------------------------------------------------------
;*		OBJ Demo Chart					*
;---------------------------------------------------------------------
objdemo_nothing
	objdemoseqend

objdemo_returnmap
	objdemoseq	ardemo_returnmaptrig
	objdemoseq	ardemo_returnmap
	objdemoseq	ardemo_partnerwait
	objdemoseqend

objdemo_finalwarp
	objdemoseq	dm_returnmothertrig
	objdemoseq	dm_returnmother
	objdemoseq	dm_mshipdisappeartrig
	objdemoseq	dm_animewait
	objdemoseq	dm_mshipwarptrig
	objdemoseq	dm_mshipwarpwait
	objdemoseqend

objdemo_wolfwarp
	objdemoseq	dm_setwolfwarpdestpos
	objdemoseq	dm_mshipdisappeartrig
	objdemoseq	dm_animewait
	objdemoseq	dm_mshipwarptrig
	objdemoseq	dm_mshipwarpwait
	objdemoseq	dm_mshipappeartrig
	objdemoseq	dm_animewait
	objdemoseq	dm_warpfinishtrig
	objdemoseq	dm_returnmothertimetrig
	objdemoseq	dm_returnmothertimewait
	objdemoseqend

objdemo_normalwarp
	objdemoseq	dm_setwarpdestpos
	objdemoseq	dm_mshipdisappeartrig
	objdemoseq	dm_animewait
	objdemoseq	dm_mshipwarptrig
	objdemoseq	dm_mshipwarpwait
	objdemoseq	dm_mshipappeartrig
	objdemoseq	dm_animewait
	objdemoseq	dm_warpfinishtrig
	objdemoseqend

objdemo_missilefell
	objdemoseq	dm_missilefelltrig
	objdemoseq	dm_missilefellwait
	objdemoseqend

objdemo_zacoexplode	
	objdemoseq	dm_sosexpdemotrig
	objdemoseq	dm_animewait
	objdemoseq	dm_sosdisappear
	objdemoseqend

objdemo_wolfexplode
	objdemoseq	dm_wolfexpdemotrig
	objdemoseq	dm_animewait
	objdemoseq	dm_sosdisappear
	objdemoseqend

objdemo_enemygone
	objdemoseq	dm_engonedemotrig
	objdemoseq	dm_engonedemowait
	objdemoseqend

objdemo_bshipexplode	
	objdemoseq	ardemo_returnmaptrig
	objdemoseq	ardemo_returnmap
	objdemoseq	ardemo_partnerwait
	objdemoseq	dm_batexpdemotrig
	objdemoseq	dm_animewait
	objdemoseqend

objdemo_planetexplode
	objdemoseq	ardemo_returnmaptrig
	objdemoseq	ardemo_returnmap
	objdemoseq	ardemo_partnerwait
	objdemoseq	dm_planetexpdemotrig	
	objdemoseq	dm_planetexpdemowait
	objdemoseqend

objdemo_wolfappear
	objdemoseqend


objdemo_start_easy
objdemo_start_normal
objdemo_start_hard
	objdemoseq	dm_bsappeartrig
	objdemoseq	dm_bsappearwait
	objdemoseq	dm_plappeartrig
	objdemoseq	dm_plappearwait

;	objdemoseq	dm_senryouplanettrig
;	objdemoseq	dm_senryouplanetwait
	objdemoseqend


;----------------------------------------------------------------------
	longa
	longi
objdemo_next
	inc	kx_objdemopointer
	inc	kx_objdemopointer
	rts
;----------------------------------------------------------------------
	longa
	longi
dm_animewait
	lda.w	mmx_enwaittm,y
	dec	a
	sta.w	mmx_enwaittm,y
	beq	.objdemo_next
	rts
.objdemo_next
	bra	objdemo_next
;---------------------------------------------------------------
	longa
	longi
dm_bsappeartrig
	jsr	SetBattleShip
	km_stxval	mmx_expwaitcnt,2	;explain demo wait counter (sos no kazu)
	km_clrflag16.w	kw_MisMapFreezeFlag,kfz_enemyfreeze
	bra	objdemo_next
;---------------------------------------------------------------
dm_bsappearwait
dm_plappearwait
	lda	mmx_expwaitcnt
	beq	.finish
	rts
.finish
	bra	objdemo_next
;---------------------------------------------------------------
	IFEQ	0
	longa
	longi
dm_plappeartrig
	km_stxval	mmx_expwaitcnt,1	;explain demo wait counter (sos no kazu)
	ldx	kdifficulty
	km_loblda.l	pl_senryoukazutbl,x
	sta	mmx_senryoucnt
	jsr	SenryouPlanet
	bra	objdemo_next

	ENDC
pl_senryoukazutbl

	db	planetkazu_easy
	db	planetkazu_normal
	db	planetkazu_hard_1st
;---------------------------------------------------------------
	IFEQ	1
	longa
	longi
dm_senryouplanettrig
	ldx	kx_senryoustgptr	;<<< Planet Stage Pattern Pointer
	stx	kx_objdemolistptr

	km_loblda.l	randomtbl,x
	sta	kz_x1
;------------------------------------------
	ldy	kx_planetlistptr
.Planet_Search
	km_bitcheckflag16.w	mmx_planetflag,mmpnf_planet,y
	beq	.tugino_kouhochi
	lda.w	mmx_stage,y
	cmp	kz_x1
	beq	.Found
.tugino_kouhochi
	lda.w	mmx_planetnext,y
	tay
	bne	.Planet_Search
;------------------------------------------
.Found
	tyx
	jsr	InitWolfTeam2
	ENDC
	km_setval	mmx_specialapcocnt,1
	bra	objdemo_next

dm_senryouplanetwait
	lda	mmx_specialapcocnt
	beq	.finish
	rts
.finish
	brl	objdemo_next
;---------------------------------------------------------------
	longa
	longi
dm_returnmothertimetrig
	km_setval	kx_objdemowaittm,2

	longa
	longi
dm_returnmothertrig
	km_setflag16	mmx_arwingflag,(mmf_initmove!mmf_go!mmf_demo!mmf_nocoll)
	km_setvar	mmx_arwingdestposx,kx_mshipx
	km_setvar	mmx_arwingdestposy,kx_mshipy
	km_stxval	mmx_arwingsp,arwingspeed*8
	jsr	mm_calcplayerangle	;[player angle]
	jsr	mm_calcplayercgxptr	;[player cgx ptr]
	brl	objdemo_next
;---------------------------------------------------------------
	longa
	longi
dm_returnmother
	jsr	mm_demomoveplayer_sub
	jsr	ardemo_collcheck
	bcs	.finish
	rts
.finish
	ldy	kx_MotherShipEnPtr
	km_setval.w	mmx_endestx,enemybaseX,y
	km_setval.w	mmx_endesty,enemybaseY,y
	km_setflag16	mmx_arwingflag,mmf_notdisplay
	brl	objdemo_next
;----------------------------------------------------------------------
	longa
	longi
dm_returnmothertimewait
	jsr	mm_demomoveplayer_sub
	dec	kx_objdemowaittm	;kx_mismapdemotm
	beq	.finish
	rts
.finish
	brl	objdemo_next
;----------------------------------------------------------------------
	longa
	longi
dm_setwarpdestpos
	ldx	kx_warpplaceptr
	ldy	kx_MotherShipEnPtr
	a8
	lda.w	mmx_planetcx,x
	sta	kx_mshipx
	sta.w	mmx_endestx,y
	lda.w	mmx_planetcy,x
	sta.w	mmx_endesty,y
	sta	kx_mshipy
	a16
	brl	objdemo_next

	longa
	longi
dm_warpfinishtrig
	ldx	kx_MotherShipPlPtr
	ldy	kx_MotherShipEnPtr
	a8
	lda	kx_mshipx
	sta.w	mmx_planetcx,x
	sta.w	mmx_enposx+1,y

	lda	kx_mshipy
	sta.w	mmx_planetcy,x
	sta.w	mmx_enposy+1,y
	a16
	km_clrflag16.w	mmx_enflags,enfl_demo,y
	brl	objdemo_next


	longa
	longi
dm_mshipdisappeartrig
	ldy	kx_MotherShipEnPtr
	km_setval.w	mmx_enanmpatt,cd_objanime_mothership_dap,y
	ksound	mother_ship_warp
	bra	dm_mshipcommon

	longa
	longi
dm_mshipappeartrig
	ldy	kx_MotherShipEnPtr
	km_setval.w	mmx_enanmpatt,cd_objanime_mothership_app,y

	ksound	en_b_ship_appear
	bra	dm_mshipcommon

dm_mshipcommon
	km_setflag16.w	mmx_enflags,enfl_demo,y
	km_setval.w	mmx_enanmtm,0,y
	km_setval.w	mmx_enwaittm,24,y
	sta.w	mmx_enanmmax,y
	sty	kx_objdemolistptr
	brl	objdemo_next
;----------------------------------------------------------------------
	longa
	longi
dm_mshipwarptrig
	ldy	kx_MotherShipEnPtr
	km_setval.w	mmx_enanmpatt,-1,y
	jsl	calc_enangvelxy_l
	ksound	en_sos_appear
	brl	objdemo_next

	longa
	longi
dm_mshipwarpwait
	ldy	kx_MotherShipEnPtr
	jsl	Setenemypostion_l
	jsl	check_enemyarrive_l
	bcs	.finish
	rts
.finish
	a8
	lda.w	mmx_endestx,y
	sta.w	mmx_enposx+1,y
	lda.w	mmx_endesty,y
	sta.w	mmx_enposy+1,y
	a16
	km_setval.w	mmx_enanmpatt,0,y
	brl	objdemo_next
;----------------------------------------------------------------------
	longa
	longi
dm_setwolfwarpdestpos
	ldy	kx_MotherShipEnPtr
	a8
;*** X pos ***
	lda	mmx_arwingposx+1
	cmp	#$80
	bcs	.leftside
.rightside
	sec
	sbc	#$10
	bra	.setx
.leftside
	clc
	adc	#$10
.setx
	sta.w	mmx_endestx,y
	sta	kx_mshipx

;*** Ypos ***
	lda	mmx_arwingposy+1
	cmp	#$60
	bcs	.downside
.upside
	clc
	adc	#$10
	bra	.sety
.downside
	sec
	sbc	#$10
.sety
	sta.w	mmx_endesty,y
	sta	kx_mshipy
	a16
	brl	objdemo_next
;----------------------------------------------------------------------
	longa
	longi
ardemo_returnmaptrig
	km_clrmismapfzflag	playerfreeze
	km_setflag16	mmx_arwingflag,mmf_demo
	ksound	map_run_away
	km_setval	mmx_arwingdemoptr,ardm_returnmap
	km_setval	mmx_arwingdemotimer,30
	a16
	km_setflag16	mmx_arwingflag,(mmf_initmove!mmf_go)
	km_stxval	mmx_arwingsp,arwingreturnspeed

	brl	objdemo_next
;---------------------------------------------------------------
	longa
	longi
ardemo_returnmap
	dec	mmx_arwingdemotimer
	beq	.finish
	jsr	mm_demomoveplayer_sub
	rts

	longa
	longi
.finish
	km_clrflag16	mmx_arwingflag,(mmf_initmove!mmf_go)
	brl	objdemo_next
;---------------------------------------------------------------
ardemo_partnerwait
	km_bitcheckflag16	 mmx_partnerflag,mmf_go
	beq	.finish
	rts
.finish
	km_stxval	mmx_arwingsp,arwingspeed
	brl	objdemo_next
;---------------------------------------------------------------
	longa
	longi
dm_missilefelltrig
	ldy	kx_SOSEnemyPtr
	jsl	kmissilefell_sub_l
	km_stxval	kx_playerdemowait,1
	brl	objdemo_next
;---------------------------------------------------------------------
dm_missilefellwait
	lda	kx_playerdemowait
	beq	.finish
	rts
.finish
	brl	objdemo_next
;---------------------------------------------------------------------
	longa
	longi
dm_sosexpdemotrig
	km_styvar	kx_objdemolistptr,kx_SOSEnemyPtr  ;[For Anime Wait]
	jsr	mm_explode_zaco
	ksound	en_explode_demo
	brl	objdemo_next
;---------------------------------------------------------------------
	longa
	longi
dm_wolfexpdemotrig
	km_styvar	kx_objdemolistptr,kx_RannyuEnemyptr  ;[For Anime Wait]
	km_bitcheckflag16.w	mmx_enflags2,enfl2_wolffree,y
	beq	.skip
	km_clrmismapflag2	wolffreecurrent
	dec	kx_wolffreestock
	bne	.skip
	km_clrmismaptrflag	wolffree
.skip
	jsr	mm_explode_zaco
	ksound	en_explode_demo
	brl	objdemo_next
;---------------------------------------------------------------------
	longa
	longi
dm_sosdisappear
	jsl	mm_freeenemylistptr_l
	brl	objdemo_next
;---------------------------------------------------------------------
	longa
	longi
dm_engonedemotrig
	km_styvar	kx_objdemolistptr,kx_SOSEnemyPtr


	km_bitcheckflag16.w	mmx_enflags,enfl_attackcorneria,y
	bne	.attack_corneria
.normal_move
	km_setmismapstflag	speedup
	lda	#40
	bra	.next
.attack_corneria
	lda	#60
.next
	sta	kx_objdemowaittm

;* run away sound *
	ksound	map_run_away
	brl	objdemo_next
;---------------------------------------------------------------------
	longa
	longi
dm_engonedemowait
	dec	kx_objdemowaittm
	bne	.gone_enemy
	km_clrmismapstflag	speedup
	brl	objdemo_next

	longa
	longi
.gone_enemy
	jsl	mm_enemydemoseqmovecoll_l
	rts

	IFEQ	1
.gone_enemy
	km_bitcheckflag16.w	mmx_enflags,enfl_attackcorneria,y
	bne	.attack_corneria
	jsl	Setenemypostion_l

;;;	jsl	enmv_searchplanet_l
	rts

	longa
	longi
.attack_corneria
	jsl	enmv_aroundplanet_l
	rts
	ENDC

;---------------------------------------------------------------------
	longa
	longi
dm_batexpdemotrig
	km_styvar	kx_objdemolistptr,kx_SOSEnemyPtr
	jsr	mm_explode_bship
	ksound	en_explode_demo
	brl	objdemo_next
;---------------------------------------------------------------------
	longa
	longi
dm_planetexpdemotrig
	ldy	mmx_arwingdestptr	;Planet List Pointer
	km_setflag16.w	mmx_planetflag,mmpnf_dakkan,y
	km_setval.w	mmx_dokuroanm,cd_objanime_explode_planet,y
	km_setval.w	mmx_timer2,0,y

	km_setval	kx_objdemowaittm,(73-1)
	ksound	en_explode_demo
	brl	objdemo_next
;---------------------------------------------------------------------
	longa
	longi
dm_planetexpdemowait
	dec	kx_objdemowaittm	;kx_mismapdemotm
	beq	.finish
	rts
.finish
	ldy	mmx_arwingdestptr	;Planet List Pointer
	km_clrflag16.w	mmx_planetflag,mmpnf_dakkan,y
	brl	objdemo_next

;---------------------------------------------------------------------
;*			Move Player Sub Routine			*
;---------------------------------------------------------------------
	longa
	longi
ardemo_collcheck
	km_lobstavar	kz_x1,mmx_arwingposx+1
	km_lobstavar	kz_y1,mmx_arwingposy+1
	km_lobstavar	kz_x2,mmx_arwingdestposx
	km_lobstavar	kz_y2,mmx_arwingdestposy
	km_setval	kz_z1,10
	a8
	jsr		mm_checkcollision
	a16
	rts

;---------------------------------------------------------------------
;*			Move Player Sub Routine			*
;---------------------------------------------------------------------
	longa
	longi
mm_demomoveplayer_sub
	a16
	lda	mmx_arwingsp
	km_nega
	sta	kz_x1
	lda	mmx_arwingangy+1	;(HI byte ha nandemo yoi)
	sta	kz_y1
	jsr	calcarwingxyvelocity
	lda	kz_tpx+1
	sta	mmx_arwingspx
	lda	kz_textpt+1
	sta	mmx_arwingspy
;* calc arwing anm pattern *
	a8
	lda	mmx_arwingangy+1	;(HI byte ha nandemo yoi)
	clc
	adc	#8
	km_divu16
	sta	mmx_arwinganmptr
	jsr	mm_calcplayercgxptr	;[player cgx ptr]

;* set partner postion *
	a16
	lda	mmx_arwingposx
	clc
	adc	mmx_arwingspx
	cmp	#screen_leftedge<<8
	bcc	.notset_xpos
	cmp	#screen_rightedge<<8
	bcs	.notset_xpos
	sta	mmx_arwingposx
.notset_xpos
	lda	mmx_arwingposy
	clc
	adc	mmx_arwingspy
	cmp	#screen_topedge<<8
	bcc	.notset_ypos
	cmp	#screen_bottomedge<<8
	bcs	.notset_ypos
	sta	mmx_arwingposy
.notset_ypos
	rts
;---------------------------------------------------------------------

;---------------------------------------------------------------------
mm_explode_zaco
	longa
	longi
	km_setval.w	mmx_enanmpatt,cd_objanime_explode_zaco,y
	km_setval.w	mmx_enwaittm,(64-1),y
	sta.w	mmx_enanmmax,y
	bra	mm_explode_common
mm_explode_bship
	longa
	longi
	km_setval.w	mmx_enanmpatt,cd_objanime_explode_bship,y
	km_setval.w	mmx_enwaittm,(76-1-5),y
	sta.w	mmx_enanmmax,y
	bra	mm_explode_common
mm_explode_common
	km_setval.w	mmx_enanmtm,0,y
	km_setval.w	mmx_enstratptr,enstrat_nothing,y
	km_setflag16.w	mmx_enflags,(enfl_nocollision!enfl_demo),y
	km_setval.w	mmx_ensequence,enseq_explodedemo,y
	rts



	IFEQ	1
;---------------------------------------------------------------
ardemo_rushboss
	jsr	mm_demomoveplayer_sub
	jsr	ardemo_collcheck
	bcs	.finish
	rts
.finish
	km_stxval	mmx_arwingdemotimer,256/4
	brl	objdemo_next
;---------------------------------------------------------------
	longa
	longi
ardemo_loopmove
	lda	mmx_arwingdemotimer
	dec	a
	sta	mmx_arwingdemotimer
	beq	.finish
	lda	mmx_arwingangY
	clc
	adc	#$400
	sta	mmx_arwingangY
	jsr	mm_demomoveplayer_sub
	rts
.finish
	km_setvar	mmx_arwingdestposx,kx_mshipx
	km_setvar	mmx_arwingdestposy,kx_mshipy
	km_clrflag16	mmx_arwingflag,mmf_nocoll
	brl	objdemo_next
;---------------------------------------------------------------
	longa
	longi
ardemo_checkmother
	jsr	mm_demomoveplayer_sub
	jsr	ardemo_collcheck
	bcs	.finish
	rts
.finish
	brl	objdemo_next
;---------------------------------------------------------------
	ENDC
;*********************************************************************
;*								*
;* 		GAME FRAME Routine  [ROM Access Enable]		*
;*								*
;* Data bank 7e							*
;*********************************************************************
mm_GameFrameROMRoutine
	shorta
	longi
;******* Debug mode *******
;* force soft ware reset *
	km_Debug_reset
;-------------------------------------------------------------
;*		Key Enable Check			*
;-------------------------------------------------------------
	ldx	kw_wipetimer
	beq	.DoGameFrameSyori
	dex
	stx	kw_wipetimer
	bne	.end
.Enable
	a16
	km_clrgameflag		keydisable
	km_clrwindowflag	wipeopen
	a8
;-------------------------------------------------------------
;*		Mission Map Main Chart			*
;-------------------------------------------------------------
.DoGameFrameSyori
	ai16
	jsr	mm_playerdemochart
	jsr	mm_corneriafellchart
	jsr	mm_planetcannonchart
	jsr	mm_satellitebeemchart

	km_bitcheckmismapflag	corneriafell
	bne	.skip
	jsr	mm_finalbosschart
	jsr	mm_mismapchart
	jsr	mm_missileallchart
	jsr	mm_bstotugekichart
.skip
	jsr	mm_mothershipchart
;* Game Frame flag clear *
	km_clrflag16	mmx_arwingflag,mmf_arrive

;-------------------------------------------------------------
;*			END				*
;-------------------------------------------------------------
.end
	a8
	rts

;*********************************************************************
;*								*
;*			MotherShipChart		[Game Frame]	*
;* Data bank 7e							*
;* Ret :ai16								*
;*********************************************************************
	longa
	longi
mm_mothershipchart
	km_bitcheckmismapflag	battleplayer
	bne	.End

	ldx	kx_MotherShipSeq
	jsr	(.MotherShipTbl,x)
.End
	rts
.MotherShipTbl
	dw	mother_nothing&WM
	dw	mother_arrivetrig&WM
	dw	mother_partnerwait&WM
	dw	mother_messagewait&WM
	dw	mother_keycheck&WM
	dw	mother_planetseltrig&WM
	dw	mother_planetselect&WM
	dw	mother_warptrig&WM
	dw	mother_warpwait&WM
	dw	mother_nothing&WM
;-------------------------------------------------------------------------
	longa
	longi
mother_nothing
	rts
;-------------------------------------------------------------------------
	longa
	longi
mother_arrivetrig
	km_setmismapdemoflag	warpdemo
	km_setmismapfzflag	gamefreeze
	km_clrmismapfzflag	playerfreeze
	brl	mother_next

mother_partnerwait
	km_bitcheckflag16	 mmx_partnerflag,mmf_go
	beq	.trigger
	rts
.trigger
	km_setmismapfzflag	gamefreeze
	km_setflag16.w	mmx_arwingflag,mmf_notdisplay
	Mstart_demomapmessage	105
	km_setval	kx_mshipwaittm,4
	ksound	kettei
	brl	mother_next
;-------------------------------------------------------------------------
	longa
	longi
mother_messagewait
	dec	kx_mshipwaittm
	beq	.finish
	rts
.finish
	km_setval	mmx_warpselect,0
	km_setval	mmx_warpseltrig,1
	brl	mother_next
;-------------------------------------------------------------------------
	longa
	longi
mother_keycheck
	km_testgmjoypad	Kettei
	bne	.Bpush
	km_testgmjoypad	X
	bne	.Xpush
	km_testgmjoypad	UP
	bne	.UP
	km_testgmjoypad	Down
	bne	.Down
	rts
.UP
	lda	mmx_warpselect
	dec	a
	bra	.CommonLR
.Down
	lda	mmx_warpselect
	inc	a
.CommonLR
	and	#1
	sta	mmx_warpselect
	ksound	cursor
	rts

.Bpush	;(Warp Planet Select)
	lda	mmx_warpselect
	bne	.Xpush
	Mnext_demomapmessage	106
	ksound	kettei
	km_setval	mmx_warpseltrig,0
	brl	mother_next

.Xpush	;(Warp Cancell)
	km_setval	mmx_warpseltrig,0
	brl	mother_cancel
;-------------------------------------------------------------------------
	longa
	longi
mother_planetseltrig
	km_setflag16	mmx_cursorflag,curf_warpselect
	jsr	CheckWarpPlace
	jsr	SetWarpCursorParams

	km_setvar	kx_mshipcurrentnum,mmx_planetname
	km_setvar	kx_planetbufnum_bak,kx_planetbufnum
	brl	mother_next
;-------------------------------------------------------------------------
	longa
	longi
mother_planetselect
	km_bitcheckflag16	mmx_cursorflag,curf_warpselect
	beq	.finish	
	rts
.finish
	bit	#curf_warpcancel
	bne	mother_cancel
	km_setvar	kx_mshipcurrentnum,mmx_planetname
	brl	mother_next
;-------------------------------------------------------------------------
	longa
	longi
mother_warptrig
	km_setval	kx_objdemonumber,odm_normalwarp
	brl	mother_next
;-------------------------------------------------------------------------
	longa
	longi
mother_warpwait
	lda	kx_objdemonumber
	beq	.finish
	rts
.finish
	a8
	lda	kx_mshipx
	sta	mmx_arwingposx+1
	sta	mmx_partnerposx+1

	lda	kx_mshipy
	sta	mmx_arwingposy+1
	sta	mmx_partnerposy+1
	a16
	km_clrflag16.w	mmx_enflags,enfl_demo,y
	bra	mother_common

	longa
	longi
mother_cancel
	ksound	cancel

mother_common
	a8
	km_setvar	p1_hp,kx_p1_HPMax
	a16

	km_stxval	kx_MMPlayerSeq,plseq_cursortrig
	km_clrflag16	mmx_cursorflag,curf_warpcancel
	km_clrmismapdemoflag	warpdemo
	km_clrflag16.w	mmx_arwingflag,mmf_notdisplay
	stz	kx_MotherShipSeq
	Mend_demomapmessage
	rts




;-------------------------------------------------------------------------
	longa
	longi
mother_next
	inc	kx_MotherShipSeq
	inc	kx_MotherShipSeq
	rts
;*********************************************************************
;*								*
;*			PlayerChart				*
;* Data bank 7e							*
;* Ret :ai16								*
;*********************************************************************
	longa
	longi
mm_playerdemochart
	ldx	kx_MMPlayerSeq
	jsr	(.PlayerDemoTbl,x)
	rts
.PlayerDemoTbl
	dw	pldemo_nothing&WM

	dw	pldemo_enterplanet&WM
	dw	pldemo_escapebattle&WM
	dw	pldemo_planetclear&WM
	dw	pldemo_enemyclear&WM

	dw	pldemo_starttrig&WM
	dw	pldemo_startwait&WM
	dw	pldemo_startmothershiptrig&WM
	dw	pldemo_startmothershipwait&WM
	dw	pldemo_partnerwait&WM

	dw	pldemo_planetcleardemotrig&WM
	dw	pldemo_planetcleardemo&WM
	dw	pldemo_planetrtmaptrig&WM
	dw	pldemo_planetrtmapwait&WM

	dw	pldemo_battleshipcleardemotrig&WM
	dw	pldemo_battleshipcleardemo&WM
	dw	pldemo_battleshiprtmaptrig&WM
	dw	pldemo_battleshiprtmapwait&WM

	dw	pldemo_sosmiscleardemotrig&WM
	dw	pldemo_sosmiscleardemo&WM

	dw	pldemo_sosgonedemotrig&WM
	dw	pldemo_sosgonedemowait&WM

	dw	pldemo_sosreturnmaptrig&WM
	dw	pldemo_sosreturnmapwait&WM
	dw	pldemo_zacoexplodewait&WM

	dw	pldemo_missilefelltrig&WM
	dw	pldemo_missilefellwait&WM

	dw	pldemo_rannyuCheck&WM
	dw	pldemo_rannyuwait&WM

	dw	pldemo_messagetrig&WM
	dw	pldemo_messagewait&WM

	dw	pldemo_tmcharttrig&WM
	dw	pldemo_tmchartwait&WM

	dw	pldemo_tgdemotrig&WM
	dw	pldemo_tgdemowait&WM

	dw	pldemo_fbdemotrig&WM
	dw	pldemo_fbdemowait&WM

	dw	pldemo_pcdemotrig&WM
	dw	pldemo_pcdemowait&WM

	dw	pldemo_msdemotrig&WM
	dw	pldemo_msdemowait&WM

	dw	pldemo_sademotrig&WM
	dw	pldemo_sademowait&WM

	dw	pldemo_cursortrig&WM
	dw	pldemo_cursorwait&WM
	dw	pldemo_yjbeginwait&WM
	dw	pldemo_yjwait&WM
	dw	pldemo_ketteiwait&WM
	dw	pldemo_safetywait&WM
	dw	pldemo_wipeopen&WM
;---------------------------------------------------------------------
pldemo_nothing
pldemo_enterplanet
pldemo_escapebattle
pldemo_planetclear
pldemo_enemyclear
	longa
	rts

;=============================================
;*					*
;*	Arwing Start From mother	*
;*					*
;=============================================
pldemo_starttrig
	longa
;* arwing states (kanarazu mother ship wo set shita atoni oku !!)*
	km_stxval	mmx_arwingsp,arwingstartspeed
	km_stxval	kx_playerdemowait,3
	km_stxval	kx_MMPlayerSeq,plseq_startwait
	rts
;---------------------------------------------
pldemo_startwait
	longa
	lda	kx_playerdemowait
	dec	a
	sta	kx_playerdemowait
	bne	.skip
	km_stxval	kx_MMPlayerSeq,plseq_startmothershiptrig
.skip
	rts
;---------------------------------------------
pldemo_startmothershiptrig
	longa
	km_clrmismapfzflag	playerfreeze
	km_clrflag16	mmx_arwingflag,mmf_notdisplay
	km_setflag16	mmx_arwingflag,(mmf_initmove!mmf_go)
	km_stxval	kx_MMPlayerSeq,plseq_startmothershipwait
;* source *
	a8
	km_setvar	mmx_arwingposx+1,kx_mshipx
	sta	mmx_partnerposx+1
	km_setvar	mmx_arwingposy+1,kx_mshipy
	sta	mmx_partnerposy+1
;* dest *
	km_setval	mmx_curposx,init_cursorX
	km_setval	mmx_curposy,init_cursorY
;* angle *
	a16
	km_setval	mmx_arwingangY,$d800
	sta	mmx_partnerangY
	km_setval	mmx_arwinganmptr,13
	sta	mmx_partneranmptr
	rts
;---------------------------------------------
	longa
	longi
pldemo_startmothershipwait
	km_bitcheckflag16	mmx_arwingflag,mmf_arrive
	bne	.finish_wait
	rts
.finish_wait
	km_stxval	kx_MMPlayerSeq,plseq_partnerwait
;---------------------------------------------
	longa
	longi
pldemo_partnerwait
	km_bitcheckflag16	mmx_partnerflag,mmf_go
	beq	.finish_wait
	rts
.finish_wait
	jsr	mm_MissileBornEnable
	km_stxval	mmx_arwingsp,arwingspeed
	brl	pldemo_yjbegintrig
;---------------------------------------------
	longa
	longi
mm_MissileBornEnable
	ldx	kx_planetlistptr
.loop
	km_bitcheckflag16.w	mmx_planetflag,mmpnf_planet,x
	beq	.nextplanet
	km_clrflag16.w	mmx_planetflag,mmpnf_bornfreeze,x
.nextplanet
	lda.w	mmx_planetnext,x
	tax
	bne	.loop
	rts

;=============================================
;*					*
;*	Planet Mission Demo 		*
;*					*
;=============================================
	longa
	longi
pldemo_planetcleardemotrig
	km_clrmismapfzflag	playerfreeze
	km_setflag16	mmx_arwingflag,mmf_demo
	km_setval	kx_MMPlayerSeq,plseq_plamiscleardemo
	km_setval	kx_objdemonumber,odm_planetexplode
	rts
;---------------------------------------------
	longa
	longi
pldemo_planetcleardemo
	lda	kx_objdemonumber
	beq	pldemo_placommon
	rts
;---------------------------------------------
	longa
	longi
pldemo_planetrtmaptrig
	km_setval	kx_MMPlayerSeq,plseq_plareturnmapwait
	km_setval	kx_objdemonumber,odm_returnmap
	rts
;---------------------------------------------
	longa
	longi
pldemo_planetrtmapwait
	lda	kx_objdemonumber
	beq	pldemo_placommon
	rts
;---------------------------------------------------------------------
pldemo_placommon
	longa
	longi
	km_clrflag16	mmx_arwingflag,mmf_demo
	km_setmismapfzflag	playerfreeze
	km_stxval	kx_MMPlayerSeq,plseq_wipeopen
	km_stxval	kx_MMPlayerSeq_Next,plseq_messagetrig
	km_setval	kx_demoflag,demof_wipeopen	;(For Yajima)
	rts

;=============================================
;*					*
;*       Battle Ship Mission Clear Demo 	*
;*					*
;=============================================
	longa
	longi
pldemo_battleshipcleardemotrig
	km_clrmismapfzflag	playerfreeze
	km_setflag16	mmx_arwingflag,mmf_demo
	km_setval	kx_objdemonumber,odm_bshipexplode
	km_setval	kx_MMPlayerSeq,plseq_batmiscleardemo
	rts
;---------------------------------------------
	longa
	longi
pldemo_battleshipcleardemo
	lda	kx_objdemonumber
	beq	.finish
	rts
.finish
	ldy	kx_SOSEnemyptr		;enemy List pointer
	lda.w	mmx_enlinkptr,y
	tax
	jsr	clearbattleship
	km_clrmismapflag	battleplayer		;[player ga mission tyuu no flag]
	bra	pldemo_placommon
;---------------------------------------------
	longa
	longi
pldemo_battleshiprtmaptrig
	km_setval	kx_MMPlayerSeq,plseq_batreturnmapwait
	km_setval	kx_objdemonumber,odm_returnmap
	rts
;---------------------------------------------
	longa
	longi
pldemo_battleshiprtmapwait
	lda	kx_objdemonumber
	beq	.finish
	rts
.finish
	ldy	kx_SOSEnemyptr
	km_clrflag16.w	mmx_enflags,enfl_encountplayer,y
	brl	pldemo_placommon

;=============================================
;*					*
;*       SOS Enemy Mission Clear Demo 	*
;*					*
;=============================================
;-------------------------------------
;*	Clear Demo		*
;-------------------------------------
	longa
	longi
pldemo_sosmiscleardemotrig
	km_setval	kx_MMPlayerSeq,plseq_sosmiscleardemo

	ldy	kx_SOSEnemyptr
	km_bitcheckflag16.w	mmx_enflags,enfl_wolf,y
	bne	.wolf
.zaco
	km_setval	kx_objdemonumber,odm_zacoexplode
	rts
.wolf
	sty	kx_RannyuEnemyptr
	km_setval	kx_objdemonumber,odm_wolfexplode
	rts
;---------------------------------------
	longa
	longi
pldemo_sosmiscleardemo
	lda	kx_objdemonumber
	beq	.finish
	rts
.finish
	km_bitcheckflag16.w	kx_satelliteflag,safl_virusgekitui
	bne	.virusGekitui
	brl	pldemo_rannyuCheck

;(For Virus)
.virusGekitui
	km_setval	kx_satellitetype,0
	km_clrflag16	kx_satelliteflag,(safl_virustorituki!safl_virusgekitui)

	ldy	kx_satelliteenptr
	km_clrflag16.w	mmx_enflags2,enfl2_tyuuritu,y	;friend
	brl	pldemo_placommon

;-------------------------------------
;*	Gone Demo		*
;-------------------------------------
	longa
	longi
pldemo_sosgonedemotrig
	km_bitcheckmismapflag2	rannyutrig
	beq	.enemygone

	lda	RannyuModeSwitch	;2 byte
	bmi	.enemygone	;= -1 (zaco enemy gone) :wolf dead
	inc	a					:wolf arrive
	cmp	kenemynumber
	bne	.enemygone	;=2,3,4,.. (all enemy gone)
;				;=1 ... wolf arrive,zaco all dead
.enemydead	;(kenemynumber =1 & wolf arrive)
	km_setval	kx_objdemonumber,odm_zacoexplode
	bra	.gone_common
.enemygone	;(kenemynumber > 2 ,wolf dead)
	ldy	kx_SOSEnemyptr
	km_clrflag16.w	mmx_enflags,enfl_encountplayer,y
	km_setval	kx_objdemonumber,odm_enemygone
.gone_common
	km_setval	kx_MMPlayerSeq,plseq_sosgonedemowait
	rts

	longa
	longi
pldemo_sosgonedemowait
	lda	kx_objdemonumber
	beq	.finish
	rts
.finish
	brl	pldemo_rannyuCheck

;-------------------------------------
;*	Return Map Demo		*
;-------------------------------------
	longa
	longi
pldemo_sosreturnmaptrig
	km_setval	kx_objdemonumber,odm_returnmap
	km_setval	kx_MMPlayerSeq,plseq_sosreturnmapwait
	rts

	longa
	longi
pldemo_sosreturnmapwait
	lda	kx_objdemonumber
	beq	.finish
	rts
.finish
	ldy	kx_SOSEnemyptr
	km_clrflag16.w	mmx_enflags,enfl_encountplayer,y

	km_bitcheckmismapflag2	rannyutrig
	km_beq	pldemo_placommon

	lda	kenemynumber
	cmp	#2
	bpl	pldemo_rannyuCheck	;

	lda	RannyuModeSwitch
	bmi	pldemo_rannyuCheck	;wolf team dead

	km_setval	kx_objdemonumber,odm_zacoexplode
	km_setval	kx_MMPlayerSeq,plseq_zacoexplodewait

pldemo_zacoexplodewait
	lda	kx_objdemonumber
	beq	.finish
	rts
.finish
	brl	pldemo_rannyuCheck
;---------------------------------------------------------------------
	longa
	longi
pldemo_missilefelltrig
	km_setmismapdemoflag	missilefelldemo		;[mmtbl.asm declear] :reason :list ni nai enemy wo ugokashite shimau
	km_setval	kx_MisMapDemoNumber,kdemo_missilefelldemo
	km_setval	kx_objdemonumber,odm_missilefell
	km_setval	kx_MMPlayerSeq,plseq_missilefellwait
	rts
;---------------------------------------------------------------------
	longa
	longi
pldemo_missilefellwait
	lda	kx_objdemonumber
	beq	.finish
	rts
.finish
	km_clrmismapdemoflag	missilefelldemo
	brl	pldemo_rannyuCheck

;-------------------------------------
;*	Rannyu Mode Check	*
;-------------------------------------
	longa
	longi
pldemo_rannyuCheck
	km_bitcheckmismapflag2	rannyutrig
	km_beq	pldemo_placommon
	km_clrmismapflag2	rannyutrig

	lda	RannyuModeSwitch
	bmi	.wolfdead	;(= -1 )
.wolfarrive
	ldy	kx_RannyuEnemyptr
	lda	kx_RannyuStratptr
	sta.w	mmx_enstratptr,y
	lda	kx_RannyuSeqPtr
	sta.w	mmx_ensequence,y
	brl	pldemo_placommon

.wolfdead
	km_setval	kx_MMPlayerSeq,plseq_rannyuwait
	km_setval	kx_objdemonumber,odm_wolfexplode

	longa
	longi
pldemo_rannyuwait
	lda	kx_objdemonumber
	beq	.finish
	rts
.finish
	brl	pldemo_placommon
;---------------------------------------
;=============================================
;*					*
;*	Mission Chart Check		*
;*					*
;=============================================
	longa
	longi
pldemo_messagetrig
	km_bitcheckmismapstflag	nokori1
	bne	.Last1
	bit	#kmimpstf_wolfbossdead
	beq	pldemo_tmcharttrig
.WolfDead
	km_setflag16	mmx_trigmessage,ymes_wolfdead
	bra	.mes_common
.Last1
	km_setflag16	mmx_trigmessage,ymes_target_last1
.mes_common
	jsr	kcall_trigmessage	
	km_setval	kx_MMPlayerSeq,plseq_messagewait
	km_setval	kx_messagedemowait,1	;[yajima ga clear]

	longa
	longi
pldemo_messagewait
	lda	kx_messagedemowait	;[yajima ga clear]
	beq	pldemo_tmcharttrig
	rts
;---------------------------------------------------------------------
pldemo_tmcharttrig
	longa
	km_setmismapchflag	tmchartenable
	km_stxval	kx_MMPlayerSeq,plseq_tmchartwait
	rts

	longa
	longi
pldemo_tmchartwait
	km_bitcheckmismapchflag	tmchartwait
	beq	pldemo_eventdisable
	rts

pldemo_eventdisable
	km_setmismaptrflag	eventdisable	;[mission clear nomi enable !!]
;---------------------------------------------------------------------
	longa
pldemo_pcdemotrig
	km_clrmismapchflag	allenable
	km_setmismapchflag	pcchartenable
	km_stxval	kx_MMPlayerSeq,plseq_pcdemowait
	rts

	longa
	longi
pldemo_pcdemowait
	km_bitcheckmismapchflag	pcdemowait
	beq	pldemo_sademotrig
	rts
;---------------------------------------------------------------------
	longa
	longi
pldemo_sademotrig
	km_clrmismapchflag	allenable
	km_setmismapchflag	sachartenable
	km_stxval	kx_MMPlayerSeq,plseq_sademowait
	rts

	longa
	longi
pldemo_sademowait
	km_bitcheckmismapchflag	sademowait
	beq	pldemo_fbdemotrig	
	rts
;---------------------------------------------------------------------
	longa
	longi
pldemo_fbdemotrig
	km_clrmismapchflag	allenable
	km_setmismapchflag	fbchartenable
	km_stxval	kx_MMPlayerSeq,plseq_fbdemowait
	rts

	longa
	longi
pldemo_fbdemowait
	km_bitcheckmismapchflag	fbdemowait
	beq	pldemo_tgdemotrig
	rts
;---------------------------------------------------------------------
	longa
	longi
pldemo_tgdemotrig
	km_clrmismapchflag	allenable
	km_setmismapchflag	tgchartenable
	km_stxval	kx_MMPlayerSeq,plseq_tgdemowait

	km_bitcheckmismaptrflag	bstotugeki
	beq	.skip
	km_setmismapchflag	tgdemowait
.skip

;;;	jsr	check_bstotugeki

	longa
	longi
pldemo_tgdemowait
	km_bitcheckmismapchflag	tgdemowait
	beq	pldemo_msdemotrig
	rts
;---------------------------------------------------------------------
	longa
	longi
pldemo_msdemotrig
	km_clrmismapchflag	allenable
	km_setmismapchflag	mschartenable
	km_stxval	kx_MMPlayerSeq,plseq_msdemowait
	rts

	longa
	longi
pldemo_msdemowait
	km_bitcheckmismapchflag	msdemowait
	beq	pldemo_ChartOnceCheck
	rts
;---------------------------------------------------------------------
	longa
	longi
pldemo_ChartOnceCheck
	jsr	mm_WolfFreeChart
;---------------------------------------------------------------------
	longa
	longi
pldemo_cursortrig
	km_clrmismapchflag	allenable
	km_setmismapchflag	mainenable
	km_setflag16	mmx_cursorflag,curf_demo
	km_stxval	kx_MMPlayerSeq,plseq_cursorwait
	km_stxval	kx_playerdemowait,1
	km_stxval	mmx_curwaittm,cursor_shuttime
	jsr	initpos_cursordemo
	ksound	ship_cursor_set

pldemo_cursorwait
	longa
	lda	kx_playerdemowait
	beq	.finish
	rts
.finish
	km_clrmismapfzflag	gamefreeze
	km_setflag16	kw_mismapfreezeflag,(kfz_timefreeze!kfz_enemyfreeze!kfz_ketteifreeze!kfz_pausefreeze)
	km_clrflag16	mmx_cursorflag,curf_demo

	a8
	km_setvar	mmx_curposx,mmx_arwingposx+1
	km_setvar	mmx_curposy,mmx_arwingposy+1

	a16
	lda	kdifficulty
	km_bne	pldemo_ketteitrig	;(normal & hard)

	a8
	lda	kx_p1_HPMax
	lsr	a
	cmp	p1_hp
	a16
	bcc	.moreHP20
	beq	.moreHP20
.lessHP20
	km_setval	mapexp_pointer,mapexp_easyret_message	;(yajima)
	bra	pldemo_yjtrig
.moreHP20
	km_setval	mapexp_pointer,mapexp_easyret_normal	;(yajima)
	bra	pldemo_yjtrig
;---------------------------------------------------------------------
	longa
pldemo_yjbegintrig
	lda	kdifficulty
	km_bne	pldemo_cursortrig

	km_setval	mapexp_pointer,mapexp_easystart		;(yajima)
	km_stxval	kx_messagedemowait,1	;(yajima's set 0)
	km_stxval	kx_MMPlayerSeq,plseq_yjbeginwait
	rts
;---------------------------------------------------------------------
	longa
pldemo_yjbeginwait
	lda	kx_messagedemowait
	km_beq	pldemo_cursortrig
	rts
;---------------------------------------------------------------------
pldemo_yjtrig	;(easy)
	longa
.easy
	km_stxval	kx_MMPlayerSeq,plseq_yjwait
	km_stxval	kx_messagedemowait,1	;(yajima's set 0)
	rts
;---------------------------------------------------------------------
pldemo_yjwait
	longa
	lda	kx_messagedemowait
	beq	pldemo_ketteitrig
	rts
;---------------------------------------------------------------------
pldemo_ketteitrig
	longa
	longi
	km_clrflag16	kw_MisMapFreezeFlag,kfz_ketteifreeze
	km_stxval	kx_MMPlayerSeq,plseq_ketteiwait
	km_setflag16	mmx_cursorflag,curf_fzcancel
	km_stxval	kx_playerdemowait,1
	rts
;---------------------------------------------------------------------
pldemo_ketteiwait
	longa
	lda	kx_playerdemowait
	bne	.skip
	km_stxval	kx_MMPlayerSeq,plseq_safetywait
	km_stxval	kx_playerdemowait,safetywaittm	;(gamelist.inc)
	km_clrflag16	kw_MisMapFreezeFlag,(kfz_ketteifreeze!kfz_timefreeze!kfz_enemyfreeze)	;!kfz_sosbornfreeze
.skip
	rts
;---------------------------------------------------------------------
pldemo_safetywait
	longa
	dec	kx_playerdemowait
	bne	.skip
	km_stxval	kx_MMPlayerSeq,plseq_nothing
	km_clrflag16	kw_mismapfreezeflag,(kfz_pausefreeze)
	km_clrmismapflag	playernocoll	;[player ga collision nashi no flag]
	km_setmismapflag2	debugenable
.skip
	rts
;---------------------------------------------------------------------
pldemo_wipeopen
	longa
	lda	kx_demoflag	;kx_playerdemowait
	bit	#1
	bne	.skip
	km_setvar	kx_MMPlayerSeq,kx_MMPlayerSeq_next
.skip
	rts
;---------------------------------------------------------------------
;---------------------------------------------------------------------
;---------------------------------------------------------------------

;*********************************************************************
;*								*
;*		Mission Map Chart	[8fram ni 1 kai]	*
;* Data bank 7e							*
;* Ret :ai16								*
;*********************************************************************
	longa
	longi
mm_mismapchart
	km_bitcheckmismapchflag	tmchartenable
	beq	.end
	ldx	kx_MisMapSeq
	jsr	(KMisMapChartTbl,x)
.end
	rts
;---------------------------------------------------------------------
;*			Jump Table				*
;---------------------------------------------------------------------
KMisMapChartTbl
	dw	mmchart_nothing&WM

	dw	mmchart_TimeChartCheck&WM

	dw	mmchart_messagetrig&WM
	dw	mmchart_messagestartwait&WM
	dw	mmchart_messagestarttrig&WM
	dw	mmchart_messagewait&WM

	dw	mmchart_eventwait&WM
	dw	mmchart_clearwait&WM

	dw	mmchart_start&WM
	dw	mmchart_startdemowait&WM
	dw	mmchart_explaindo&WM
	dw	mmchart_explainfinish&WM

	dw	mmchart_Capture1_1&WM
	dw	mmchart_Capture1_2&WM

	dw	mmchart_Capture2_1&WM
	dw	mmchart_Capture2_2&WM
	dw	mmchart_Capture2_3&WM
	dw	mmchart_Capture2_4&WM
	dw	mmchart_Capture2_5&WM

	dw	mmchart_Capture3_1&WM
	dw	mmchart_Capture3_2&WM
	dw	mmchart_Capture3_3&WM
	dw	mmchart_Capture3_4&WM

	dw	mmchart_Capture4_1&WM
	dw	mmchart_Capture4_2&WM
	dw	mmchart_Capture4_3&WM
	dw	mmchart_Capture4_4&WM

	dw	mmchart_Capture5_1&WM
	dw	mmchart_Capture5_2&WM
	dw	mmchart_Capture5_3&WM
	dw	mmchart_Capture5_4&WM
	dw	mmchart_Capture5_5&WM
	dw	mmchart_Capture5_6&WM
	dw	mmchart_Capture5_7&WM
;=====================================================================
;*								*
;*			Time Chart				*
;*								*
;=====================================================================
	longa
	longi
mmchart_TimeChartCheck
	ldx	kx_mismaptmchart

	km_clrmismaptrflag	forceevent

;* time chart *
	lda.l	mmchart_timechart,x
	cmp	#-1
	beq	.end
	cmp	#-2
	beq	.chart_trigger
	cmp	kx_TotalTime
	beq	.chart_trigger
	bmi	.chart_trigger

;* kazu check *
	jsr	mm_checktotalenemy
	bcs	.chart_trigger
.end
	rts

.chart_trigger
	lda.l	mmchart_timechart+2,x
	dec	a
	pha	;[jump addr]

	inx
	inx
	inx
	inx
	stx	kx_mismaptmchart		;[next chart pointer]
	inc	kx_mismaptmchartNum
	rts
;---------------------------------------------------------------------
;*			Event Wait				*
;---------------------------------------------------------------------
	longa
	longi
mmchart_eventwait
	jsr	mm_checktotalenemy
	bcs	.force_start	;force jump
	km_bitcheckmismaptrflag	timechartstop	;[event stopper]
	beq	.start_event
	rts
.force_start
	km_setmismaptrflag	forceevent
.start_event
	km_setvar	kx_MisMapSeq,kx_MisMapNextSeq	;kono set wo nukuna !! event check ni jump shinaku naru !!
	ldx	kx_MisMapSeq
	jmp	(KMisMapChartTbl,x)

;---------------------------------------------------------------------
;*		Time Chart Force Step				*
;---------------------------------------------------------------------
	longa
	longi
mm_checktotalenemy
	lda	kx_senryoucurrent	;senryou sareteiru hoshi no kazu
	ora	kx_battleshipcurrent	;senkan nomkazu
	ora	kx_enemytotal		;zaco enemy
	beq	.sec
.clc
	clc
	rts
.sec
	sec
	rts
;---------------------------------------------------------------------
;*			Chart Do Nothing			*
;---------------------------------------------------------------------
	longa
	longi
mmchart_nothing
	rts

;---------------------------------------------------------------------
;*		Syori ga owareba mouichido Time Chart Check	*
;---------------------------------------------------------------------
	longa
	longi
mmchart_missilefreeze
	km_setmismapevflag	misbornfreeze
	brl	mmchart_TimeChartCheck
;---------------------------------------------------------------------
	longa
	longi
mmchart_virusbornenable
	km_clrmismapevflag	virusbornfreeze
	brl	mmchart_TimeChartCheck
;---------------------------------------------------------------------
	longa
	longi
mmchart_wolfteamfree
	km_setmismaptrflag	wolffree
	inc	kx_wolffreestock
	brl	mmchart_TimeChartCheck
;---------------------------------------------------------------------
	longa
	longi
mmchart_missileall
	lda	kx_senryoucurrent
	bne	.Hassya_enable
	brl	mmchart_TimeChartCheck

.Hassya_enable
	km_setmismaptrflag	missileall
	km_setval	kx_MisMapSeq,mmseq_nothing
	rts
;---------------------------------------------------------------------
	longa
	longi
mmchart_senkantotugeki
	lda	kx_battleshipcurrent
	bne	.totugeki_enable
	brl	mmchart_TimeChartCheck

.totugeki_enable
	km_setmismaptrflag	bstotugeki
	km_setval	kx_TotugekiSeq,tgseq_totugeki1
	km_setval	kx_MisMapSeq,mmseq_nothing
	rts
;---------------------------------------------------------------------
	longa
	longi
mmchart_timanappear
	km_bitcheckmismaptrflag	eventdisable
	bne	.disable_event
.enable_event
	km_setval	kx_MisMapSeq,mmseq_capture2_1
	brl	mmchart_Capture2_1

.disable_event
	km_setval	kx_MisMapNextSeq,mmseq_capture2_1
	bra	mmchart_eventwaitcommon
;---------------------------------------------------------------------
	longa
	longi
mmchart_senkanhojyuu
	km_bitcheckmismaptrflag	eventdisable
	bne	.disable_event
.enable_event
	km_setval	kx_MisMapSeq,mmseq_capture3_1
	brl	mmchart_Capture3_1
.disable_event
	km_setval	kx_MisMapNextSeq,mmseq_capture3_1
	bra	mmchart_eventwaitcommon
;---------------------------------------------------------------------
	longa
	longi
mmchart_planethojyuu
	km_bitcheckmismaptrflag	eventdisable
	bne	.disable_event
.enable_event
	km_setval	kx_MisMapSeq,mmseq_capture4_1
	brl	mmchart_Capture4_1

.disable_event
	km_setval	kx_MisMapNextSeq,mmseq_capture4_1
	bra	mmchart_eventwaitcommon
;---------------------------------------------------------------------
	longa
	longi
mmchart_wolfappear
	km_bitcheckmismaptrflag	eventdisable
	bne	.disable_event
.enable_event
	km_setval	kx_MisMapSeq,mmseq_capture5_1
	brl	mmchart_Capture5_1

.disable_event
	km_setval	kx_MisMapNextSeq,mmseq_capture5_1
	bra	mmchart_eventwaitcommon
;---------------------------------------------------------------------
	longa
	longi
mmchart_eventwaitcommon
	km_setmismaptrflag	timechartstop	;[event stopper]
	km_setval	kx_MisMapSeq,mmseq_eventwait
	rts
;---------------------------------------------------------------------
;*			Mission Map Start Demo			*
;---------------------------------------------------------------------
	longa
	longi
mmchart_start
	km_setval	kx_objdemonumber,odm_start_easy
	km_setval	kx_MisMapSeq,mmseq_startdemowait
;-------------------------------
	longa
	longi
mmchart_startdemowait
	lda	kx_objdemonumber
	beq	.finish
	rts
.finish
	km_bitcheckmistotalflag	retry
	bne	.retry
.Game_1st
	km_setflag16	kw_MisMapFreezeFlag,kfz_enemyfreeze
	km_clrflag16	kw_MisMapFreezeFlag,kfz_expcancelfreeze!kfz_pausefreeze
	km_setval	kx_MisMapSeq,mmseq_explaindo
	rts
.Retry 
	km_stxval	kx_MMPlayerSeq,plseq_starttrig
	km_clrflag16	kw_mismapfreezeflag,kfz_gamefreeze
	km_setflag16	kw_MisMapFreezeFlag,(kfz_enemyfreeze!kfz_cursorfreeze!kfz_timefreeze!kfz_pausefreeze!kfz_ketteifreeze) ;ketteifreeze ha arwing ga dash shinai tame !!
	km_setval	kx_MisMapSeq,mmseq_timechartcheck
	rts
;-------------------------------
mmchart_explaindo
	longa
	rts
;-------------------------------
mmchart_explainfinish
	longa
	km_setmismapflag	expcancel
	km_setmismapsyori	explainfinish
;* FREEZE SHITE OKNAITO MOUOICHIDO START BUTTON CHECK SHITE SHIMAU !! *
	km_setflag16	kw_MisMapFreezeFlag,(kfz_gamefreeze)	;!kfz_sosbornfreeze
	km_setval	kx_MisMapSeq,mmseq_timechartcheck
	rts

	longa
mmchart_nextsequence
	inc	kx_MisMapSeq
	inc	kx_MisMapSeq
	rts
;---------------------------------------------------------------------
;*
;---------------------------------------------------------------------
mmchart_Capture1_1
mmchart_Capture1_2

;---------------------------------------------------------------------
;*			Dragon Go !!				*
;---------------------------------------------------------------------
	longa
mmchart_Capture2_1
mmchart_Capture2_2
	km_setmismaptrflag	specialenemy
	km_setmismapchflag	tmchartwait
	km_setval	kx_MisMapNextSeq,mmseq_capture2_3
	km_setval	kx_expdemowait,5*8

	ldx	kdifficulty2
	lda.l	.taimanmes,x
	tsb	mmx_trigmessage
	brl	mmchart_messagetrig

.taimanmes
	dw	ymes_taimanE
	dw	ymes_taimanN
	dw	ymes_taimanH

mmchart_Capture2_3
	longa

	ldx	kdifficulty
	beq	.set_taiman1

	lda	kw_RandomPtr
	and	#3
	tax
.set_taiman1
	a8
	lda.l	.taimantbl,x
	sta	demotaiman

	lda	kdifficulty
	cmp	#2
	bne	.skip_taiman

	inx
	lda.l	.taimantbl,x
	sta	demotaiman2
.skip_taiman
	a16

	km_setvar	kw_MisMapFreezeFlag,kw_MisMapFreezeFlagBak
	km_setmismapsyori	specialenemy
	km_setval	kx_MisMapSeq,mmseq_capture2_4
	rts
.taimantbl
	db	dt_dragon	;0
	db	dt_stepup	;1
	db	dt_crusher	;2
	db	dt_ninja	;3
	db	dt_dragon	;0

mmchart_Capture2_4
	longa
	km_bitcheckmismapdemoflag	all
	beq	.OK
	rts
.OK
	km_setmismapchflag	tmchartwait
	km_setmismapdemoflag	specialenemydemo
	km_setval	kx_MisMapDemoNumber,kdemo_specialenemydemo

	km_setvar	kw_MisMapfreezeFlagBak,kw_MisMapFreezeFlag
	km_setmismapfzflag	gamefreeze	;allfreeze

	jsr	SetSpecialEnemy
	km_setval	kx_MisMapSeq,mmseq_capture2_5
	rts

mmchart_Capture2_5
	longa
	lda	mmx_specialapcocnt
	bne	.skip
	km_clrmismapchflag	tmchartwait
	km_clrmismapdemoflag	specialenemydemo
	km_setval	kx_MisMapDemoNumber,kdemo_nothingdemo
	km_setvar	kw_MisMapFreezeFlag,kw_MisMapfreezeFlagBak
	km_setval	kx_MisMapSeq,mmseq_timechartcheck
.skip
	rts

	IFEQ	1	;OLD Ver
mmchart_Capture2_1	;trigger check wo shiteita toki
	km_clrmismapchflag	tmchartwait
	km_setval	kx_clearcondition,2
	km_setval	kx_MisMapSeq,mmseq_clearwait
	km_setval	kx_MisMapNextSeq,mmseq_capture2_2
	brl	mmchart_cleartrig
	ENDC

;---------------------------------------------------------------------
;*		Senkan Hojyuu & Zaco Enemy Hassya 1st		*
;---------------------------------------------------------------------
	longa
	longi
mmchart_Capture3_1
	lda	kx_battleshipcurrent
	ora	kx_zacocurrent
	beq	.Next_Check	;zaco ga inaku narumade count !!
	rts
.Next_Check
	km_bitcheckmismapdemoflag	all
	beq	mmchart_Capture3_2
	rts

	longa
mmchart_Capture3_2
	km_setmismapchflag	tmchartwait
	km_setval	kx_expdemowait,5*8
	km_setval	kx_MisMapNextSeq,mmseq_capture3_3
	km_setmismapdemoflag	battleshiphojyuudemo

	lda	kdifficulty
	cmp	#2
	beq	.hard
.normal
	km_setflag16	mmx_trigmessage,ymes_battleshipaddN
	bra	.skip
.hard
	km_setflag16	mmx_trigmessage,ymes_battleshipaddH
.skip
	brl	mmchart_messagetrig
;---------------------------------------------------------------------
	longa
	longi
mmchart_Capture3_3
;	km_setvar	kw_MisMapfreezeFlagBak,kw_MisMapFreezeFlag
;	km_setmismapfzflag	gamefreeze	;allfreeze

	jsr	SetBattleShip	;sankan hojyuu !!
	km_stxval	mmx_expwaitcnt,zacokazu_2nd
	km_setmistotalflag	bshojyuu	;hojyuu shita
	km_setval	kx_MisMapDemoNumber,kdemo_battleshiphojyuudemo
	km_setval	kx_MisMapSeq,mmseq_capture3_4

;	km_clrmismapstflag	expdemostart
;;;	km_clrmistotalflag	bstotugeki	;totugeki flag clear
;;;	jsr	mm_planethojyuuchart
;---------------------------------------------------------------------
	longa
mmchart_Capture3_4
	lda	kx_battleshipcurrent
	beq	.waiting
	lda	mmx_expwaitcnt
	beq	.finish
.waiting
	rts
.finish
	km_clrmismapdemoflag	battleshiphojyuudemo
	km_clrmismapchflag	tmchartwait

	km_setval	kx_MisMapDemoNumber,kdemo_nothingdemo
	km_setval	kx_MisMapSeq,mmseq_timechartcheck

;;;	brl	mmchart_ForceEventCheck

	km_bitcheckmismaptrflag	forceevent
	bne	.force_event
	km_setvar	kw_MisMapFreezeFlag,kw_MisMapfreezeFlagBak
	rts
.force_event
	km_clrmismaptrflag	forceevent
	km_stxval	kx_MMPlayerSeq,plseq_cursortrig
	rts

;---------------------------------------------------------------------
;*			Planet Hojyuu				*
;---------------------------------------------------------------------
	longa
	longi
mmchart_Capture4_1
	lda	kx_missilecurrent
	beq	.check2
	rts
.check2
	km_bitcheckmismapdemoflag	all
	beq	.check3
	rts
.check3
	km_bitcheckmismaptrflag	eventdisable	;[mission clear nomi enable !!]
	beq	.start_planethojyuu	;event enable no toki
	lda	kx_enemytotal
	beq	.start_planethojyuu	;enemy ga inakereba
	rts

.start_planethojyuu
	km_setmismapdemoflag	planethojyuudemo
	km_setmismapchflag	tmchartwait
	km_setflag16	mmx_trigmessage,ymes_taimanN
	km_setval	kx_expdemowait,5*8
	km_setval	kx_MisMapNextSeq,mmseq_capture4_2
	brl	mmchart_messagetrig

mmchart_Capture4_2
;	km_setvar	kw_MisMapfreezeFlagBak,kw_MisMapFreezeFlag
;	km_setmismapfzflag	gamefreeze	;allfreeze
	jsr	mm_planethojyuuchart
	km_setval	kx_MisMapSeq,mmseq_capture4_3
	rts

mmchart_Capture4_3
;( missile isseihassya no tame comment )
;	km_setval	kx_MisMapSeq,mmseq_timechartcheck
;	km_setvar	kw_MisMapFreezeFlag,kw_MisMapfreezeFlagBak :satellite ga tubushita to ki comment !!

	km_clrmismapchflag	tmchartwait
	km_clrmismapdemoflag	planethojyuudemo
;* missile all params *
	km_setmismaptrflag	planethojyuu
	km_setmismapchflag	mschartenable	;satellite ga tubushita to ki comment !!
	km_setmismaptrflag	missileall
	rts

mmchart_Capture4_4
	rts


;=====================================================================
;*								*
;*		Wolf Boss Appear Chart				*
;*								*
;=====================================================================
	longa
mmchart_Capture5_1
	lda	kx_missiontotal
	ora	kx_specialclearcnt
	ora	kx_enemytotal
	beq	.Next_Check	;zaco ga inaku narumade count !!
	rts
.Next_Check
	km_bitcheckmismapdemoflag	all
	beq	.wolfappearTRIGGER
	rts

.wolfappearTRIGGER
	km_setmismapchflag	tmchartwait
	km_setmismapevflag	virusbornfreeze

;	km_setvar	kw_MisMapfreezeFlagBak,kw_MisMapFreezeFlag
;	km_setmismapfzflag	gamefreeze

	km_setflag16	mmx_trigmessage,ymes_attacklastboss	;pepper message
	km_setval	kx_expdemowait,10*8
	km_setval	kx_MisMapNextSeq,mmseq_capture5_2
	brl	mmchart_messagetrig

mmchart_Capture5_2
	km_setval	kx_objdemonumber,odm_wolfwarp
	brl	mmchart_nextsequence

mmchart_Capture5_3
	lda	kx_objdemonumber
	beq	.finish
	rts
.finish
	km_setvar	kw_MisMapFreezeFlag,kw_MisMapfreezeFlagBak
	km_setmismapdemoflag	wolfbossdemo
	km_setflag16	mmx_trigmessage,ymes_wolfappear
	km_setval	kx_expdemowait,5*8
	km_setval	kx_MisMapNextSeq,mmseq_capture5_4
	brl	mmchart_messagetrig

mmchart_Capture5_4
;	km_setvar	kw_MisMapfreezeFlagBak,kw_MisMapFreezeFlag
;	km_setmismapfzflag	gamefreeze	;allfreeze

	jsr	InitWolfTeam2
	km_setmismapflag2	wolfboss
	km_setval	kx_MisMapDemoNumber,kdemo_wolfbossdemo
	km_setval	mmx_specialapcocnt,1
	brl	mmchart_nextsequence

	longa
	longi
mmchart_Capture5_5
	lda	mmx_specialapcocnt
	beq	.finish
	rts
.finish
	km_clrmismapflag2	wolffreecurrent
	km_setmismaptrflag	wolffree

	jsr	mm_WolfFreeChart

	km_clrmismapdemoflag	wolfbossdemo
	km_clrmismapchflag	tmchartwait
	km_setval	kx_MisMapDemoNumber,kdemo_nothingdemo
	km_setval	kx_MisMapSeq,mmseq_capture5_6

	km_clrmismapflag	playernocoll	;[player ga collision nashi no flag]
	km_clrmismapfzflag	enemyfreeze
	km_stxval	kx_MMPlayerSeq,plseq_nothing
	rts

;;;	brl	mmchart_ForceEventCheck

mmchart_Capture5_6
	lda	kx_wolfcurrent
	beq	.finish
	rts
.finish
	km_setval	kx_MisMapSeq,mmseq_nothing
	km_setval	kx_FinalBossSeq,fbseq_finalbosstrig
	rts
mmchart_Capture5_7
;=====================================================================
;*								*
;*		Wolf Team Free Chart				*
;*								*
;=====================================================================

	longa
	longi
mm_WolfFreeChart
	km_bitcheckmismaptrflag	wolffree
	beq	.end
	km_bitcheckmismapflag2	wolffreecurrent
	bne	.end
	lda	kx_wolfcurrent
	bne	.Search_FreeEnemy
	km_clrmismaptrflag	wolffree
.end
	rts

	longa
	longi
.Search_FreeEnemy
	ldy	kx_enlistptr
.LOOP
	km_bitcheckflag16.w	mmx_enflags,enfl_wolf,y
	beq	.next
	km_bitcheckflag16.w	mmx_enflags2,enfl2_wolffree,y
	beq	.Found_WolfTeam
.next
	lda.w	mmx_ennext,y
	tay
	bne	.LOOP

	km_clrmismaptrflag	wolffree
	rts

	longa
	longi
.Found_WolfTeam
	km_clrflag16.w	mmx_enflags,enfl_nocollision,y
	km_setflag16.w	mmx_enflags2,(enfl2_wolffree!enfl2_searchenemy),y
	km_setmismapflag2	wolffreecurrent
	km_setval.w	mmx_ensequence,enseq_move,y
	km_setval.w	mmx_enstratptr,enstrat_nothing,y
	km_setval.w	mmx_encoll,sos_collision,y


	rts
;---------------------------------------------------------------------
;*			Message Display				*
;---------------------------------------------------------------------
	longa
	longi
mmchart_messagetrig
	km_setvar	kw_MisMapfreezeFlagBak,kw_MisMapFreezeFlag
	km_setmismapfzflag	gamefreeze	;messagefreeze

	IFEQ	1
	km_setval	kx_messtartwait,1
	km_setval	kx_MisMapSeq,mmseq_messagestartwait
	rts
	ENDC
mmchart_messagestartwait
	IFEQ	1
	dec	kx_messtartwait
	bne	.skip
	km_setval	kx_MisMapSeq,mmseq_messagestarttrig
.skip
	rts
	ENDC

	longa
mmchart_messagestarttrig
	jsr	kcall_trigmessage	
	km_setval	kx_MisMapSeq,mmseq_messagewait
	rts

	longa
	longi
kcall_trigmessage
	km_setvar	map_trigmessage,mmx_trigmessage
	stz	mmx_trigmessage
	stz	mapexp_pointer	;[for yaijma]
	rts

mmchart_messagewait
	longa
	dec	kx_expdemowait
	bne	.waiting
;	km_setvar	kw_MisMapFreezeFlag,kw_MisMapfreezeFlagBak
	km_setvar	kx_MisMapSeq,kx_MisMapNextSeq
.waiting
	rts
;---------------------------------------------------------------------
;*		Next Chart Wait					*
;---------------------------------------------------------------------
mmchart_cleartrig
	longa
	stz	kx_planetclearcnt
	stz	kx_battleshipclearcnt
	stz	kx_missileclearcnt
	stz	kx_zacoclearcnt
	rts
;---------------------------------------------------------------------
mmchart_clearwait
	longa
	longi
	lda	kx_planetclearcnt
	clc
	adc	kx_battleshipclearcnt
	adc	kx_missileclearcnt
	adc	kx_zacoclearcnt
	cmp	kx_clearcondition
	bmi	.waiting	;zaco ga inaku narumade count !!

	km_setmismapchflag	tmchartwait
	km_setvar	kx_MisMapSeq,kx_MisMapNextSeq
.waiting
	rts

;=====================================================================
;*								*
;*		Planet Hojyuu Chart				*
;* Data bank 7e							*
;* Ret :a8i16							*
;=====================================================================
mm_planethojyuuchart
	longa
	longi
	km_bitcheckmistotalflag		plhojyuu
	bne	.skip

	lda	kdifficulty
	cmp	#dif_hard
	bne	.skip

	km_setmistotalflag		plhojyuu
	km_setval	mmx_senryoucnt,planetkazu_hard_2nd
	jsr	SenryouPlanet
.skip
	rts

;=====================================================================
;*								*
;*			Message  Chart				*
;* Data bank 7e							*
;=====================================================================
mm_messagechart
	php
	ai16
	ldx	kx_MessageSeq
	jsr	(.messagecharttbl,x)
	plp
	rts
.messagecharttbl
	dw	meschart_nothing&WM
	dw	meschart_messagetrig&WM
	dw	meschart_messagestartwait&WM
	dw	meschart_messagestarttrig&WM
	dw	meschart_messagewait&WM	
;---------------------------------------------------------------------
;*			Message Display				*
;---------------------------------------------------------------------
meschart_nothing
	longa
	longi
	rts
meschart_messagetrig
	longa
	longi
;	km_setvar	kw_MisMapfreezeFlagBak,kw_MisMapFreezeFlag
;	km_setmismapfzflag	gamefreeze
;	km_setval	kx_messtartwait,1*8
;	km_setval	kx_MessageSeq,messeq_messagestartwait

meschart_messagestartwait
;	longa
;	dec	kx_messtartwait
;	beq	meschart_messagestarttrig
;	rts

meschart_messagestarttrig
	longa
	km_setvar	map_trigmessage,mmx_trigmessage
	stz	mmx_trigmessage
	stz	mapexp_pointer		;[for yaijma]
	km_setval	kx_MessageSeq,messeq_messagewait
meschart_messagewait
	longa
	dec	kx_messagewait
	bne	.waiting
;;;	km_setvar	kw_MisMapFreezeFlag,kw_MisMapfreezeFlagBak
	km_setval	kx_MessageSeq,messeq_nothing
.waiting
	rts

;*********************************************************************
;*								*
;*		Missile All Fire Chart				*
;* Data bank 7e							*
;* Ret :ai16								*
;*********************************************************************
	longa
	longi
mm_missileallchart
	km_bitcheckmismapchflag	mschartenable
	beq	.end
	km_bitcheckmismaptrflag	missileall
	beq	.end
	km_bitcheckmismapdemoflag	all
	beq	.do_chart
	km_bitcheckmismapdemoflag	missilealldemo
	beq	.end
.do_chart
	ldx	kx_MissileAllSeq
	jsr	(.missilealltbl,x)
.end
	rts
.missilealltbl
	dw	ms_missileall0&WM
	dw	ms_missileall1&WM
	dw	ms_missileall2&WM
	dw	ms_missileall3&WM
	dw	ms_missileall4&WM
	dw	ms_missileall5&WM
;----------------------------------------------------------------------
ms_missileall0
	longa
	jsr	check_missileall
	rts
ms_missileall1
	longa
	jsr	ms_GoAll
	bne	.missileall

;* planet nashi *
	km_clrmismapchflag	msdemowait
	km_clrmismaptrflag	missileall
	km_clrmismapevflag	misbornfreeze
	km_setval	kx_MissileAllSeq,msseq_missileall0
	rts

.missileall
	km_bitcheckmismaptrflag	planethojyuu
	bne	..planethojyuu
..normal
	km_setvar	kw_MisMapfreezeFlagBak,kw_MisMapFreezeFlag
	bra	..skip
..planethojyuu	;Freeze ha Planet Hojyuu de shitearu !!
	km_clrmismaptrflag	planethojyuu
..skip
	km_setmismapdemoflag	missilealldemo
	km_setmismapfzflag	gamefreeze

	km_setval	kx_messagewait,10*8
	km_setval	kx_MessageSeq,messeq_messagetrig
	km_setval	kx_MissileAllSeq,msseq_missileall2

	km_setflag16	mmx_trigmessage,ymes_missileallfire

;	km_bitcheckmistotalflag		bshojyuu
;	bne	.2times
;.1times
;
;	km_setflag16	mmx_trigmessage,ymes_missileallfire
;
;	bra	.skip
;.2times
;	km_setflag16	mmx_trigmessage,ymes_missileallfire2
;.skip

ms_missileall2
	longa
	jsr	mm_messagechart
	lda	kx_MessageSeq
	beq	ms_missileall3
	rts
ms_missileall3
	longa

	km_setval	kx_MisMapDemoNumber,kdemo_missilealldemo
	km_clrmismapevflag	misbornfreeze
	km_clrmismapevflag	misbornfreeze
	km_setval	kx_MissileAllSeq,msseq_missileall4
ms_missileall4
	lda	kx_missileappcnt
	beq	ms_missileall5
	rts
ms_missileall5
	km_clrmismapchflag	msdemowait
	km_clrmismaptrflag	missileall
	km_clrmismapdemoflag	missilealldemo
	km_clrmismapchflag	mschartenable	;satellite ga tubushita to ki comment !!

	km_setval	kx_MisMapDemoNumber,kdemo_nothingdemo

	km_setval	kx_MissileAllSeq,msseq_missileall0
	km_setval	mapexp_pointer,0	;[for yaijma]

	km_setval	kx_MisMapSeq,mmseq_timechartcheck

;	km_setvar	kw_MisMapFreezeFlag,kw_MisMapfreezeFlagBak
;	brl	mmchart_ForceEventCheck

	km_bitcheckmismaptrflag	forceevent
	bne	.force_event
	km_setvar	kw_MisMapFreezeFlag,kw_MisMapfreezeFlagBak
	km_clrmismapevflag	misbornfreeze	;Return Freeze Flag no atoni oke !!
.waiting
	rts

.force_event
	km_clrmismapevflag	misbornfreeze	;Return Freeze Flag no atoni oke !!
	km_clrmismaptrflag	forceevent
	km_stxval	kx_MMPlayerSeq,plseq_cursortrig
	rts

;=====================================================================
;*		Check Start Missle All Fire			*
;=====================================================================
	longa
	longi
check_missileall
	lda	kx_planetkazu
	beq	.stop_fire

	lda	kx_missilecurrent
	bne	.end
	km_bitcheckmismapflag	missionresult
	beq	.end

.all_fire
	km_setmismapchflag	msdemowait
	km_setval	kx_MissileAllSeq,msseq_missileall1
	rts
.stop_fire
	km_clrmismaptrflag	missileall
	km_clrmismapevflag	misbornfreeze
	km_setval	kx_MisMapSeq,mmseq_timechartcheck
.end
	rts

;-----------------------------------------------------
;*		Missile Issei Hassya !!		*
;*						*
;-----------------------------------------------------
ms_goall
	longa
	longi
	stz	kz_x1
	ldx	kx_planetlistptr
	beq	.noplanet
.loop
	km_bitcheckflag16.w	mmx_planetflag,mmpnf_planet,x
	beq	.next
	km_bitcheckflag16.w	mmx_planetflag,mmpnf_senryou,x
	beq	.next
	km_bitcheckflag16.w	mmx_planetflag,(mmpnf_complete!mmpnf_sosappear),x
	bne	.next

	km_clrflag16.w	mmx_planetflag,mmpnf_bornfreeze,x	;[missile hassya kaijyo]
	km_setval.w	mmx_psos,enbase_wait,x
	km_setval.w	mmx_soswaittm,1,x
	inc	kz_x1
.next
	lda.w	mmx_planetnext,x
	tax
	bne	.loop

	lda	kz_x1
	beq	.noplanet
.issei_hassya
	cmp	#mm_missilemax+1
	bmi	.skipaaa
	lda	#mm_missilemax
.skipaaa
	sta	kx_missileappcnt
.noplanet
	rts

;*********************************************************************
;*								*
;*		Battle Ship Totugeki Chart			*
;* Data bank 7e							*
;* Ret :ai16								*
;*********************************************************************
	longa
	longi
mm_bstotugekichart
	km_bitcheckmismapchflag	tgchartenable
	beq	.end
	km_bitcheckmismaptrflag	bstotugeki
	beq	.end
	km_bitcheckmismapdemoflag	all
	beq	.do_chart
	km_bitcheckmismapdemoflag	battleshiptotugekidemo
	beq	.end
.do_chart

	ldx	kx_TotugekiSeq
	jsr	(.totugekitbl,x)
.end
	rts
.totugekitbl
	dw	tg_totugeki0&WM
	dw	tg_totugeki1&WM
	dw	tg_totugeki2&WM
	dw	tg_totugeki3&WM
;----------------------------------------------------------------------
tg_totugeki0
	longa
	rts
tg_totugeki1
	longa
	lda	kx_battleshipcurrent	;ima deteiru battle ship no kazu
	beq	tg_totugekiend

	jsr	tg_enablecheck
	bcc	tg_totugekiend

	km_setmismapdemoflag	battleshiptotugekidemo
	km_setvar	kw_MisMapfreezeFlagBak,kw_MisMapFreezeFlag
	km_setmismapfzflag	gamefreeze	;allfreeze

	km_setflag16	mmx_trigmessage,ymes_battleshiptotugeki	;[for yajima's]
	km_setval	kx_messagewait,5*8
	km_setval	kx_MessageSeq,messeq_messagetrig

	km_setval	kx_TotugekiSeq,tgseq_totugeki2
tg_totugeki2
	longa
	jsr	mm_messagechart
	lda	kx_MessageSeq
	beq	tg_totugeki3
	rts
tg_totugeki3
	longa
	jsr	bs_totugeki

tg_totugekiend
	km_clrmismapchflag	tgdemowait
	km_clrmismaptrflag	bstotugeki
	km_clrmismapdemoflag	battleshiptotugekidemo

	km_setval	kx_TotugekiSeq,tgseq_totugeki0
	km_setval	mapexp_pointer,0	;[for yaijma]
	km_setvar	kw_MisMapFreezeFlag,kw_MisMapfreezeFlagBak
	km_setval	kx_MisMapSeq,mmseq_timechartcheck
	rts

;=====================================================================
;*								*
;*			Senkan totugeki !!			*
;*								*
;=====================================================================
check_bstotugeki
	longa
	longi

	IFEQ	1
;	km_bitcheckmismapdemoflag	battleshiptotugekidemo
;	bne	.end

	km_bitcheckmistotalflag	bstotugeki
	bne	.end
	lda	kx_battleshipcurrent	;ima deteiru battle ship no kazu
	beq	.stop_totugeki

.check_totugeki
	km_bitcheckmistotalflag	bshojyuu
	bne	.easy

	lda	kdifficulty
	beq	.easy
	dec	a
	beq	.normal
	dec	a
	beq	.hard
;------------------------------
.easy
	lda	kx_planetkazu
	bne	.end
	bra	.totugeki
;------------------------------
.normal
	lda	kx_planetkazu
	cmp	#1
	bne	.end
	bra	.totugeki
;------------------------------
.hard
	lda	kx_planetkazu
	cmp	#3
	bne	.end
	bra	.totugeki
;------------------------------
.totugeki
	km_setmismapchflag	tgdemowait
	km_setmistotalflag	bstotugeki
	km_setmismaptrflag	bstotugeki
	km_setval	kx_TotugekiSeq,tgseq_totugeki1
	rts

.stop_totugeki
	km_setmistotalflag	bstotugeki
.end
	rts
	ENDC
;-----------------------------------------------------
;*	Battle Ship Totugeki Enable Check	*
;* Xreg :Planet List					*
;* Yreg :Enemy List					*
;* temp work : kz_x1					*
;* Out Put :clc/sec ... totugeki disable / enable	*
;-----------------------------------------------------
	longa
	longi
tg_enablecheck
	stz	kz_x1
	ldx	kx_planetlistptr
	beq	.tg_disable
.loop
	km_bitcheckflag16.w	mmx_planetflag,mmpnf_battleship,x
	beq	.next
	km_bitcheckflag16.w	mmx_battleshipflag,mmbsf_cannonareain,x
	bne	.next
	inc	kz_x1
.next
	lda.w	mmx_planetnext,x
	tax
	bne	.loop

	lda	kz_x1
	bne	.tg_enable
.tg_disable
	clc
	rts
.tg_enable
	sec
	rts
;-----------------------------------------------------
;*		Battle Ship Totugeki		*
;* Xreg :Planet List					*
;* Yreg :Enemy List					*
;-----------------------------------------------------
	longa
	longi
bs_totugeki
	ldx	kx_planetlistptr
	beq	.end
.loop
	km_bitcheckflag16.w	mmx_planetflag,mmpnf_battleship,x
	beq	.next

	km_bitcheckflag16.w	mmx_battleshipflag,mmbsf_cannonareain,x
	bne	.next

	lda.w	mmx_bslinkptr,x
	tay
	km_clrflag16.w	mmx_enflags2,enfl2_nojet,y
	lda	#btship_speed*8
	jsl	calc_bsspeed_L
.next
	lda.w	mmx_planetnext,x
	tax
	bne	.loop
.end
	rts


;*********************************************************************
;*								*
;*		Planet cannon Chart				*
;* data bank :7e							*
;*********************************************************************
	longa
	longi
mm_planetcannonchart
	km_bitcheckmismapchflag	pcchartenable
	beq	.end

	ldy	kx_PlanetcannonListPtr
	beq	.end
	lda	kx_PlanetcannonPtr
	asl	a
	tax
	jsr	(.PlanetcannonSeq,x)
.end
	rts

.PlanetcannonSeq
	dw	pc_nothing&WM
	dw	pc_cannonCharge&WM
	dw	pc_FireMessageTrig&WM
	dw	pc_FireMessageWait&WM
	dw	pc_PolygonDemoTrig&WM
	dw	pc_PlanetcannonTrigger&WM
	dw	pc_PlanetcannonWait&WM
	dw	pc_MessageWait&WM

;=====================================================================
;*			Sub Routine				*
;=====================================================================
	longa
	longi
pc_nothing
	rts
;---------------------------------------------------------------------
	longa
	longi
pc_cannonCharge
	jsr	call_pcchargesound
	rts

;---------------------------------------------------------------------
	longa
	longi
pc_FireMessageTrig
	jsr	call_pcchargesound

	km_setmismapchflag	pcdemowait
	km_setvar	kw_MisMapfreezeFlagBak,kw_MisMapFreezeFlag
	km_setmismapfzflag	gamefreeze
	km_setflag16	map_trigmessage,ymes_planetcannonfire
	km_setval	kx_PlanetcannonTm,5*8
	inc	kx_PlanetcannonPtr
	rts
;---------------------------------------------------------------------
pc_FireMessageWait
	jsr	call_pcchargesound
	jsr	pc_waittimer
	bcc	.waiting
	inc	kx_PlanetcannonPtr
.waiting
	rts
;---------------------------------------------------------------------
pc_PolygonDemoTrig
	km_setmismapflag2	planetcannondemo
	km_setmismapsyori	planetcannon
	inc	kx_PlanetcannonPtr
	rts
;---------------------------------------------------------------------
pc_PlanetcannonTrigger
	longa
	longi
	km_setvar	kw_MisMapfreezeFlagBak,kw_MisMapFreezeFlag

	km_setval.w	mmx_planetcannonchart,pcspr_fire,y
	km_setval.w	mmx_pwork1,cd_objanime_cannonfire1,y
	km_setval.w	mmx_pwork2,0,y
	km_bitcheckflag16.w	mmx_battleshipflag,mmbsf_type,y
	beq	.typea
	km_setval.w	mmx_pwork1,cd_objanime_cannonfire2,y
.typea
	ksound	stop
	ksound	map_laser
	inc	kx_PlanetcannonPtr
	rts
;---------------------------------------------------------------------
pc_PlanetcannonWait
	longa
	longi
	lda.w	mmx_planetcannonchart,y
	cmp	#pcspr_finish
	bne	.skip

	km_setval.w	mmx_planetcannonchart,pcspr_nothing,y

	lda	kx_CorneriaHP
	beq	pc_CorneraiaHP0
	km_setval	kx_PlanetcannonTm,5*8
	km_setflag16	mmx_message_sos,mesosfl_planetcannonhit
	inc	kx_PlanetcannonPtr
.skip
	rts
;---------------------------------------------------------------------
	longa
	longi
pc_MessageWait
	jsr	pc_waittimer
	bcs	pc_cannonFireEnd
	rts
;---------------------------------------------------------------------
	longa
	longi
pc_cannonFireEnd
	km_clrmismapchflag	pcdemowait
	km_clrmismapflag	cannonstart
pc_CorneraiaHP0
	km_setvar	kw_MisMapFreezeFlag,kw_MisMapfreezeFlagBak
	km_setval.w	mmx_planetcannontm,planetcannonchargetm,y
	km_setval.w	mmx_planetcannonchart,pcspr_charge,y
	km_setval.w	mmx_pwork1,sprblockanm_cannonCharge,y
	km_setval.w	mmx_pwork2,0,y
	stz	kx_PlanetcannonPtr

;;;	stz	finalbeam_flag
	rts
;---------------------------------------------------------------------
pc_waittimer
	longa
	longi
	lda	kx_PlanetcannonTm
	beq	.waitend
	dec	a
	sta	kx_PlanetcannonTm
	clc
	rts
.waitend
	sec
	rts

;---------------------------------------------------------------------
;*		Planet cannon Charge Sound			*
;---------------------------------------------------------------------
	longa
	longi
call_pcchargesound
	km_bitcheckmismapfzflag	timefreeze
	bne	.nosound

	lda	kx_8GframeTm
	and	#1
	beq	.nosound

	ldx	#0
	lda	kx_PlanetcannonTmPri
	cmp	#chargestep1
	bpl	.setsound
	inx
	cmp	#chargestep2
	bpl	.setsound
	inx
.setsound
	lda.l	.soundtbl,x
	ksound_a
.nosound
	rts
.soundtbl
	db	sport3_map_laser_charge1
	db	sport3_map_laser_charge2
	db	sport3_map_laser_charge3


	IFEQ	1
;	lda	finalbeam_flag
;	bpl	.skip

	lda	#idx_wipebeam_open
	sta	wipestruct
;* source *
	lda.w	mmx_planetcx,y
	sta	finalbeam_sx
	lda.w	mmx_planetcy,y
	sta	finalbeam_sy
;* dest *
	lda.w	mmx_planetcannondx,y
	sta	finalbeam_dx
	lda.w	mmx_planetcannondy,y
	sta	finalbeam_dy
	ENDC

;=====================================================================
;*		Initial Cursor Demo Postion			*
;=====================================================================
initpos_cursordemo
	longa
	longi

	ldx	#0
	ldy	#0
.loop
	km_loblda	mmx_arwingposx+1
	clc
	adc.l	cursorpostblX,x
	sta.w	mmx_curdemox+1,y

	km_loblda	mmx_arwingposy+1
	clc
	adc.l	cursorpostblY,x
	sta.w	mmx_curdemoy+1,y

	lda.l	cursormovetblX,x
	sta.w	mmx_curdemovx,y
	a8
	lda.l	cursorsigntblX,x
	sta.w	mmx_curdemovx_h,y
	a16

	lda.l	cursormovetblY,x
	sta.w	mmx_curdemovy,y
	a8
	lda.l	cursorsigntblY,x
	sta.w	mmx_curdemovy_h,y
	a16

	lda.l	cursorchartbl,x
	sta.w	mmx_curdemochar,y

	tya
	clc
	adc	#curdemoworklen
	tay

	inx
	inx
	cpx	#(cursorpostblXEND-cursorpostblX)&WM
	bne	.loop
	rts
;=====================================================================
;*								*
;*			Data Table				*
;*								*
;=====================================================================
cursorpostblX
	dw	(-init_cursorwidth)
	dw	(init_cursorwidth)
	dw	(-init_cursorwidth)
	dw	(init_cursorwidth)
cursorpostblXEND

cursorpostblY
	dw	(-init_cursorwidth)
	dw	(-init_cursorwidth)
	dw	(init_cursorwidth)
	dw	(init_cursorwidth)

cursormovetblX
	dw	cursor_vel
	dw	-cursor_vel
	dw	cursor_vel
	dw	-cursor_vel

cursorsigntblX
	dw	(cursor_vel&$ffff0000)>>16
	dw	((-cursor_vel)&$ffff0000)>>16
	dw	(cursor_vel&$ffff0000)>>16
	dw	((-cursor_vel)&$ffff0000)>>16

cursormovetblY
	dw	cursor_vel
	dw	cursor_vel
	dw	-cursor_vel
	dw	-cursor_vel

cursorsigntblY
	dw	(cursor_vel&$ffff0000)>>16
	dw	(cursor_vel&$ffff0000)>>16
	dw	((-cursor_vel)&$ffff0000)>>16
	dw	((-cursor_vel)&$ffff0000)>>16

cursorchartbl
	SprChrDataW	$2c,colpal5,pri3,noflip,mm_obj_offset
	SprChrDataW	$2c,colpal5,pri3,xflip,mm_obj_offset
	SprChrDataW	$2c,colpal5,pri3,yflip,mm_obj_offset
	SprChrDataW	$2c,colpal5,pri3,xyflip,mm_obj_offset


;*********************************************************************
;*								*
;*		Final Boss Appear Demo Chart			*
;* Data bank 7e							*
;* Return :ai16							*
;* Break  :X,Y,Acc							*
;*********************************************************************
	longa
	longi
mm_finalbosschart
	km_bitcheckmismapchflag	fbchartenable
	beq	.end
;	jsr	check_finalbossappear
	ldx	kx_FinalBossSeq
	jsr	(.FianlBossTbl,x)
.end
	rts
;-----------------------------
;* 	Table 		*
;-----------------------------
.FianlBossTbl
	dw	fbdemo_nothing&WM
	dw	fbdemo_sosdesttrig&WM
	dw	fbdemo_finalbosstrig&WM
	dw	fbdemo_sosdestwait&WM
	dw	fbdemo_warpwait&WM
	dw	fbdemo_battlestart&WM

	IFEQ	1
	dw	fbdemo_wait1&WM
	dw	fbdemo_bossinittrig&WM
	dw	fbdemo_bossdisappeardemo&WM
	dw	fbdemo_bossmovedemo&WM
	dw	fbdemo_bossappeartrig&WM
	dw	fbdemo_bossappeardemo&WM
	dw	fbdemo_waitplayer&WM
	dw	fbdemo_battlestart&WM
                               	ENDC
;---------------------------------------------------------------------
;* nothing to do *
fbdemo_nothing
	longa
	rts
;---------------------------------------------------------------------
;* sos destruction trigger *
	longa
	longi
fbdemo_sosdesttrig

	lda	#kbgm_stgclr
	sta	kw_mmBGM
	KBGM_a
	jsr	mm_enemyallkill
;--------------------
.NoEnemy
	km_setval	kx_FinalBossSeq,fbseq_nothing
	rts

	longa
	longi
mm_enemyallkill
;* Planet All Clear *
	ldx	kx_planetlistptr
	beq	.end11
.loop11
	lda.w	mmx_planetnext,x
	sta	kwork

 	km_bitcheckflag16.w	mmx_planetflag,mmpnf_planet,x
	beq	.skip11
	km_bitcheckflag16.w	mmx_planetflag,mmpnf_complete,x
	bne	.skip11
	jsr	clearplanet
.skip11
	ldx	kwork		;Get Next Pointer
	bne	.loop11
.end11
;--------------------
;* Battle Ship All Clear *
	ldx	kx_planetlistptr
	beq	.end22
.loop22
	lda.w	mmx_planetnext,x
	sta	kwork
	km_bitcheckflag16.w	mmx_planetflag,mmpnf_battleship,x
	beq	.skip22
	lda.w	mmx_bslinkptr,x
	tay
	jsr	clearbattleship
.skip22
	ldx	kwork		;Get Next Pointer
	bne	.loop22
.end22
;--------------------
;*memo : SOS Enemy no jibaku Mode wo Set !! *
	ldy	kx_enlistptr
	beq	.end1
.loop1
	lda.w	mmx_ennext,y
	sta	kwork
	km_bitcheckflag16.w	mmx_enflags,(enfl_finalboss!enfl_satellite!enfl_mothership),y
	bne	.next1	
	jsl	self_destruction_l
.next1
	ldy	kwork
	bne	.loop1
	ksound	en_explode_demo
.end1
	rts

;---------------------------------------------------------------------
	longa
	longi
fbdemo_finalbosstrig
	km_setmismapchflag	fbdemowait
	km_clrflag16	mmx_arwingflag,mmf_go
	km_clrmismapfzflag	all
	km_setmistotalflag	finalbossbattle	;[missiontotal flag]
	km_setflag16	kw_MisMapFreezeFlag,(kfz_timefreeze!kfz_cursorfreeze)
	km_setmismapevflag	bossfreeze
	km_setval	kx_FinalBossSeq,fbseq_sosdestwait
	rts
;---------------------------------------------------------------------
;* sos enemy destruction wait *
	longa
	longi
fbdemo_sosdestwait
	lda	kx_enemytotal
	bne	.skip
	km_clrmismapfzflag	playerfreeze
	km_setval	kx_objdemonumber,odm_finalwarp
	km_setval	kx_FinalBossSeq,fbseq_warpwait
.skip
	rts
;---------------------------------------------------------------------
fbdemo_warpwait
	lda	kx_objdemonumber
	beq	.finish
	rts
.finish
	km_setval	mmx_wipeposX,enemybaseX
	km_setval	mmx_wipeposY,enemybaseY
	km_setval	kx_FinalBossSeq,fbseq_battlestart
	rts
;---------------------------------------------------------------------
fbdemo_battlestart
	longa
	a8
	km_setvar	p1_hp,kx_p1_HPMax
	a16
	km_setval	KGameMapPtr,stg_ext2
	km_setvar	currentlevel,kdifficulty
	km_setval	kx_missiontype,mistyp_finalboss
	km_setval	kw_MisMapSyori,mmsy_missionstart
	rts
;---------------------------------------------------------------------








	IFEQ	1
;---------------------------------------------------------------------
fbdemo_wait1
	longa
	dec	mmx_FinalBossTm
	bne	.skip
	km_setval	kx_FinalBossSeq,fbseq_bossinittrig
.skip
	rts
;---------------------------------------------------------------------
;* final boss start trig *
fbdemo_bossinittrig
	longa
	km_setmismapflag	finalboss
	km_setmismapstflag	finalbosstrig	;(For Yajima)
	km_setval	kx_FinalBossSeq,fbseq_bossdisappeardemo
	km_setval	mmx_FinalBossTm,72/8

	ldy	kx_FinalBossEnPtr
	lda	#cd_objanime_finalboss_dap
	sta.w	mmx_enanmpatt,y
	lda	#0
	sta.w	mmx_enanmtm,y

	rts
;---------------------------------------------------------------------
fbdemo_bossdisappeardemo
	longa
	dec	mmx_FinalBossTm
	bne	.skip
	ldy	kx_FinalBossEnPtr
	lda	#0
	sta.w	mmx_enanmtm,y
	sta.w	mmx_enanmpatt,y
	km_setval	kx_FinalBossSeq,fbseq_bossmovedemo
	km_setval	mmx_FinalBossTm,1
.skip
	rts
;---------------------------------------------------------------------
fbdemo_bossmovedemo
	longa
	dec	mmx_FinalBossTm
	bne	.skip
	km_setval	kx_FinalBossSeq,fbseq_bossappeartrig
.skip
	rts
;---------------------------------------------------------------------
fbdemo_bossappeartrig
	longa
	km_setval	kx_FinalBossSeq,fbseq_bossappeardemo
	km_setval	mmx_FinalBossTm,18+8
	km_setval	kx_hscrollp1,$120
	km_setval	kx_vscrollp1,0

	IFEQ	1
;* BG colour change *
	km_setscreenflag	bgcolpal4
	km_stxval	coladr_4,(kx_palette4+7*32)&WM	;address
	km_setval	coladr_4+2,kx_palette4>>16	;bank
	km_stxval	colptr_4,7*40
	km_setval	coltimer_4,6		;bg color flash timer
	km_setval	coltimermax_4,6		;bg color flash timer
	ENDC
	rts
;---------------------------------------------------------------------
fbdemo_bossappeardemo
	longa
	dec	mmx_FinalBossTm
	beq	.finish_appear

	IFEQ	1
	lda	mmx_FinalBossTm
	cmp	#8
	bne	.end
	km_setval	coltimer_4,1		;bg color flash timer
	km_setval	coltimermax_4,1		;bg color flash timer
	ENDC

	bra	.end
;---------------------------
.finish_appear
	km_clrscreenflag	bgcolpal4
	km_setval	kx_FinalBossSeq,fbseq_waitplayer
	km_setval	kx_MMPlayerSeq,plseq_finaldemotrig
	km_clrmismapfzflag	playerfreeze
	km_setval	mmx_FinalBossTm,1
.end
	rts

	ENDC
;---------------------------------------------------------------------
;---------------------------------------------------------------------
;---------------------------------------------------------------------

;*********************************************************************
;*		Final Boss Appear Check				*
;*********************************************************************
check_finalbossappear
	php
	a16
	longi
	km_bitcheckmistotalflag	finalbossbattle
	bne	.skip

	lda	kx_missiontotal
	ora	kx_enemytotal
	ora	kx_specialclearcnt
	bne	.skip
	km_setmistotalflag	finalbossbattle
	km_setval		kx_FinalBossSeq,fbseq_sosdesttrig
.skip
	plp
	rts
;*********************************************************************
;*								*
;*		Corneria Fell Demo Chart			*
;*								*
;*********************************************************************
	longa
	longi
mm_corneriafellchart
	ldx	kx_CorneriaFellSeq
	jsr	(.FellDemoTbl,x)
	rts
.FellDemoTbl
	dw	corneria_nothing&WM
	dw	corneria_felltrig&WM
	dw	corneria_felldemo&WM
;---------------------------------------------------------------------
corneria_nothing
	rts
;---------------------------------------------------------------------
corneria_felltrig
	longa
	km_setmismapfzflag	gamefreeze	;fellfreeze
	km_setflag16	kx_demoflag,demof_fell
	km_setflag16	mmx_message_sos,mesosfl_corneriafell
	km_setval	kx_CorneriaFellSeq,cfseq_felldemo
	rts
;---------------------------------------------------------------------
corneria_felldemo
	longa
	km_bitcheckflag16	kx_demoflag,demof_fell
	bne	.skip
	km_clrmismapflag	corneriafell
	km_setmismapsyori	missiongameover
	km_setval	kx_CorneriaFellSeq,cfseq_nothing
.skip
	rts
;---------------------------------------------------------------------
;---------------------------------------------------------------------
;---------------------------------------------------------------------
;---------------------------------------------------------------------

;*********************************************************************
;*								*
;*			SOS Demo Sequence			*
;* data bank :7e							*
;*********************************************************************
	longa
	longi
mm_sosdemosequence
	ldx	kx_MisMapDemoNumber
	jsr	(.seqtable,x)
	rts
.seqtable
	dw	mm_nothing&WM
	dw	mm_missilefell&WM
	dw	mm_missileall&WM
	dw	mm_battleshiphojyuudemo&WM
	dw	mm_satellitebeemdemo&WM
	dw	mm_specialenemy&WM
	dw	mm_wolfbossdemo&WM
;-------------------------------------------
mm_nothing
	rts
;-------------------------------------------
mm_specialenemy
	ldy	kx_enlistptr
.LOOP
	ldx.w	mmx_ennext,y
	PHX	;>>> PUSH Next Pointer

	km_bitcheckflag16.w	mmx_enflags,enfl_special,y
	beq	.next
	jsl	mm_enemydemoseqmove_l
.next
	PLY
	bne	.loop
	rts

;-------------------------------------------
	longa
	longi
mm_battleshiphojyuudemo
	jsl	mm_BattleShipSequence_l

	ldy	kx_enlistptr
.LOOP
	ldx.w	mmx_ennext,y
	PHX	;>>> PUSH Next Pointer

	km_bitcheckflag16.w	mmx_enflags,(enfl_zaco),y
	beq	.move

	jsl	mm_enemydemosequence_l

.move
	km_bitcheckflag16.w	mmx_enflags,(enfl_zaco!enfl_battleship),y
	beq	.next
	jsl	mm_enemydemomove_l
.next
	PLY
	bne	.loop

	rts
;-------------------------------------------
	longa
	longi
mm_missilefell
	ldy	kx_SOSEnemyptr	;enemy List pointer
	jsl	mm_enemydemoseqmove_l
	rts

;-------------------------------------------
	longa
	longi
mm_missileall
	jsl	mm_PlanetSequence_l

	ldy	kx_enlistptr
.LOOP
	ldx.w	mmx_ennext,y
	PHX	;>>> PUSH Next Pointer

	km_bitcheckflag16.w	mmx_enflags,enfl_missile,y
	beq	.next

	jsl	mm_enemydemoseqmove_l

.next
	PLY	;<<< PULL Next Pointer
	bne	.LOOP
	rts
;-------------------------------------------
mm_wolfbossdemo
	ldy	kx_enlistptr
.LOOP
	ldx.w	mmx_ennext,y
	PHX	;>>> PUSH Next Pointer

	km_bitcheckflag16.w	mmx_enflags,enfl_wolf,y
	beq	.next

	jsl	mm_enemydemoseqmove_l
.next
	PLY
	bne	.loop
	rts
;-------------------------------------------
	longa
	longi
mm_satellitebeemdemo
	ldy	kx_sabeemptr		;satellite beem pointer
	jsl	mm_enemydemoseqmove_l
	rts
;-------------------------------------------



;*********************************************************************
;*								*
;*			Satellite Chart				*
;* data bank :7e							*
;*********************************************************************
mm_satellitebeemchart
	php
	ai16
	km_bitcheckmismapchflag	sachartenable
	beq	.end

	km_bitcheckmismapdemoflag	all
	beq	.do_chart
	km_bitcheckmismapdemoflag	satellitebeemdemo
	beq	.end
.do_chart
	lda	kx_SatelliteBeemChart
	asl	a
	tax
	jsr	(.SatelliteSeq,x)
.end
	plp
	rts

.SatelliteSeq
	dw	sa_nothing&WM
	dw	sa_beeminit&WM
	dw	sa_beemfire&WM
	dw	sa_beemexplodewait&WM
	dw	sa_messagewait&WM
;---------------------------------------------------------------------------
	longa
	longi
sa_nothing
	rts
;---------------------------------------------------------------------------
	longa
	longi
sa_beeminit
.Initial
	km_setmismapchflag	sademowait

	km_setvar	kw_MisMapfreezeFlagBak,kw_MisMapFreezeFlag
	km_setmismapfzflag	gamefreeze
	km_setmismapdemoflag	satellitebeemdemo	;[mmtbl de clear]
	km_setval	kx_MisMapDemoNumber,kdemo_satellitebeemdemo

	jsl	mm_getenemylistptrX_l
	stx	kx_sabeemptr		;satellite beem pointer
	stz.w	mmx_ensequence,x
	stz.w	mmx_entype,x		;tama char !!
;* source *
	ldy	kx_satelliteenptr	;satellite pointer
	lda.w	mmx_enposx,y
	sta.w	mmx_enposx,x
	lda.w	mmx_enposy,y
	sta.w	mmx_enposy,x

	jsr	sa_beemdest

	lda	#$2800
	sta.w	mmx_envel,x

	km_setflag16.w	mmx_enflags,(enfl_nocollision),x
	km_setflag16.w	mmx_enflags2,(enfl2_nojet),x

	lda	#enstrat_posvel
	sta.w	mmx_enstratptr,x	;stratage pointter

	lda	#8
	sta.w	mmx_encoll,x		;collision
	km_clrflag16	kx_satelliteflag,safl_tamedama
;* satellite beem sound *
	ksound	system_shot
	inc	kx_SatelliteBeemChart
	rts
;---------------------------------------------------------------------------
	longa
	longi
sa_beemfire
	ldx	kx_sabeemptr
	jsr	sa_beemdest
	a8
	lda.w	mmx_enposx+1,x
	sta	kz_x1
	lda.w	mmx_enposy+1,x
	sta	kz_y1
	lda.w	mmx_endestx,x
	sta	kz_x2
	lda.w	mmx_endesty,x
	sta	kz_y2
	lda.w	mmx_encoll,x		;collision
	sta	kz_z1
	jsr	mm_checkcollision
	a16
	bcs	.finsh
	rts
.finsh
	km_setflag16	kx_satelliteflag,safl_explodewait
	inc	kx_SatelliteBeemChart
	ksound	en_explode_demo

	lda	kx_satellitetype
	beq	.attack_enemy
;* attack corneria *
.attackcorneria
	ldy	kx_satelliteenptr
	jsl	SetAttackPoint_l
	km_setval.w	mmx_ensequence,enseq_beemexplodeLtrig,x
	rts

;* attack enemy *
.attack_enemy
	km_setval.w	mmx_ensequence,enseq_beemexplodetrig,x
	ldy	kx_salockonptr
	jsl	mm_freeenemylistptr_l
	rts
;---------------------------------------------------------------------------
	longa
	longi
sa_beemexplodewait
	km_bitcheckflag16	kx_satelliteflag,safl_explodewait
	beq	.finish
	rts
.finish
	lda	kx_satellitetype
	beq	sa_beemfinish

	km_setflag16	map_trigmessage,ymes_sabeemfire
	km_setval	kx_SatelliteBeemChartTm,5*8
	inc	kx_SatelliteBeemChart
;---------------------------------------------------------------------------
	longa
	longi
sa_messagewait
	dec	kx_SatelliteBeemChartTm
	beq	sa_beemfinish
	rts
;---------------------------------------------------------------------------
	longa
	longi
sa_beemfinish
	km_clrmismapdemoflag	satellitebeemdemo
	km_clrmismapchflag	sademowait
	km_setvar	kw_MisMapFreezeFlag,kw_MisMapfreezeFlagBak
	stz	kx_SatelliteBeemChart
	rts


;-------------------------------------------------------------
;*		Set Beem destination Postion		*
;-------------------------------------------------------------
	longa
	longi
sa_beemdest
	a8
	lda	kx_satellitetype
	beq	.friend
.enemy
	ldy	kx_CorneriaPtr
	lda.w	mmx_planetcx,y
	sta.w	mmx_endestx,x
	lda.w	mmx_planetcy,y
	sta.w	mmx_endesty,x
	bra	.check_coll
.friend
	ldy	kx_salockonptr
	lda.w	mmx_enposx+1,y
	sta.w	mmx_endestx,x
	lda.w	mmx_enposy+1,y
	sta.w	mmx_endesty,x
.check_coll
	a16
	rts

;-----------------------------------------------------
;*		Satellite Mode Check		*
;-----------------------------------------------------
	IFEQ	1
	km_testkeydown	TLeft
	beq	.skip
	ldy	kx_satelliteptr
	km_clrflag16.w	mmx_enflags2,enfl2_fireenable,y
	km_setval.w	mmx_enwaittm,sa_tametime,y	;reset timer
	km_setval	kx_satelliteSeq,0
	km_clrflag16	kx_satelliteflag,safl_tamedama

	km_setval	kx_satellitetype,0
	km_eorflag16.w	mmx_enflags2,enfl2_tyuuritu,y
	km_bitcheckflag16.w	mmx_enflags2,enfl2_tyuuritu,y
	beq	.friend
	km_setval	kx_satellitetype,2
.friend
.skip
	ENDC
;------------------------------------------------

;*********************************************************************
;*								*
;*********************************************************************
;=====================================================================
;*								*
;*		Initial Mission Map Params			*
;*								*
;=====================================================================
;*********************************************************************
Init_MissionMapParams
;!!!! kono Routine wa itiban saisyo ni oku !!!!
	ifne	kdemosw
	km_setmismapflag	explain
	endc
;* Flag Clear * :kono ichi ni tyuui !!
	a16
	km_clrmismapstflag	all
	a8

;* Planet Enemy List Initial *
	jsl	Init_MMList_l
;* Copy RAM Program & Data to HEAP RAM *
	jsr	mm_heapcopy

;* flags *
	a8
 	km_setspritemode	mismap	   ;[SPRITE MODE]
	km_setscreenmode	mismap	   ;[SCREEN MODE]
	a16
	km_clrmistotalflag	mission	   ;[GAME FLAG]
	km_clrmissionflag	parallel   ;[MISSION FLAG]
	km_setmismapfzflag	gamefreeze ;[FREEZE FLAG]

	km_clrscreenflag	sprwbuf		;[SCREEN FLAG]
	km_setscreenflag	colpaltrans	;[SCREEN MODE]
	km_setscreenflag	bgcolpal 	;[SCREEN MODE]
	km_setscreenflag	bgcolpal3	;[SCREEN MODE]
	km_setscreenflag	objcolpal 	;[SCREEN MODE]
	km_setscreenflag	screenadd	;[SCREEN MODE]

	km_setwindowflag	normalwipe ;[SCREEN FLAG]
	km_setscrollflag	hdmascroll ;[SCREEN MODE]
	km_setmismapstflag	noirqsyori ;[MISSIONMAPSTATE FLAG]

;* Key Read State Clear *
	km_clrgmjoypad
	km_clrgmkeydown

;* Mario Chip Set Up *
	a8
	lda	#height_128!colours_16
	sta	mario_draw_mode		;V hight = 128dot (16 chr),colour = 16
	sta	mio_mode
	a16
	lda	#mm_bitmaphight*8
	sta.l	m_screenheight		;Screen Hight
	a8

;* Set VRAM double buffering *
	km_stxval	vmap1,mm_bg1_bitmap1	;VRAM bitmap base1 addr ($1000)
	km_stxval	vmap2,mm_bg1_bitmap2	;VRAM bitmap base2 addr ($3000)
	km_stxval	drawmap,bitmap1		;Mario Write Buffer	($4000)
	km_stxval	showmap,bitmap1_dbl	;Mario Transfer Buffer	($a000)

;* Parameter initial *
	phb
	db7e

	jsr	init_playerparams	

	km_setval	key_tatemaxptr1,6
	km_setval	mmw_wbuffercounter,(2*mm_planetnumber)	;double buffer swap counter
	km_setval	mmx_destmarktm,8			;dest mark flash timer

	km_stxval	kx_showmapsize,0
	km_stxval	mmw_vramadr,(($100*$20)+mm_bg1_cgx_2)/2	;VRAM(BG1) write start adderss

	km_stxval	mapexp_pointer,0	;[for yaijma]

	km_stxval	kx_sachargeanmtm,0
	km_stxval	kx_sachargeanmptr,sprblockanm_TamaCharge


;	km_setval	mmw_speedup,1		;normal speed
;	km_setval	kx_TotalSubTime,mapgftm
;	km_setval	mmx_stationtm,20
;	km_setval	mmw_planetdataptr,0	;planet data pointer ;(cx,cy,R,swsprite)
;	km_stxval	mmx_curanmpat,$0102	;cur sor anim pattern
;	km_stxval	mmx_curanmpat2,$0100
;	km_stxval	mmx_planetangx,$1000	;planet angle X
;	km_stxval	mmx_planetangz,$1000	;planet angle Z
;	km_stxval	mmw_planetanmptr,$800	;Radius

;* Colour Buffer Pointer *
;* sun no colour palette *
;	km_stxval	coladr_2,kx_palette2&WM		;address
;	km_setval	coladr_2+2,kx_palette2>>16	;bank
	km_setval	coltimer_2,10			;bg color flash timer
	km_setval	coltimermax_2,10		;bg color flash timer

;* corneria no colour palette *
;	km_stxval	coladr_3,kx_palette3&WM		;address
;	km_setval	coladr_3+2,kx_palette3>>16	;bank
	km_setval	coltimer_3,10			;bg color flash timer
	km_setval	coltimermax_3,10		;bg color flash timer

;* senryou planet *
;	km_stxval	coladr_4,(kx_palette4+15*32)&WM	;address
;	km_setval	coladr_4+2,kx_palette4>>16	;bank
	km_stxval	colptr_4,0
	km_setval	coltimer_4,4		;bg color flash timer
	km_setval	coltimermax_4,4		;bg color flash timer

	lda	kw_mmBGMPtr
	beq	..skip
	dec	a
	beq	..setflag
	km_setval	coltimer_3,4		;bg color so danger flash timer
	km_setval	coltimermax_3,4		;bg color so danger flash timer
..setflag
	km_setscreenflag	bgcolpal3	;colour change enable
..skip
	plb

;* wipe init & open *
;* kono check wa "mm_checkmiscomplete'" no syori no mae ni kanarazu oku !!! *
	km_setgameflag	keydisable

	km_bitcheckmismapflag	returnmap
	beq	.no_wipe
	km_initwipeopen	mismap
	bra	.skip_wipe
.no_wipe
	jsl	wipeinit_l	;[yajima]
	km_stxval	kw_wipetimer,allfreezetm	;[wipe timer = 0 ni narumade keydiable]
	km_setwindowflag	wipeopen
.skip_wipe

;* Screen Set *
	jsr	Init_MMScreen		;[SCREEN INITIAL]
	jsl	init_sprites_l		;[SPRITES]
	jsr	Init_MarioDrawRAM	;[Mario RAM Clear] :Init_MMscreen no atoni oku !!!

;* SOUND BGM SET *
	jsr	Init_MMSound

;********* Check Complete **********
;kanarazu flag set no ushiro oku !!
;kanarazu Init_MMSound no ushiro oku !!
;kanarazu yjmapinit_l no mae oku !!
	jsr	mm_checkmiscomplete

;* message initial *
	jsl	yjmapinit_l		;[yajima] :yjmap.asm

;* Set H-DMA Params *
	jsl	init_mmhvscroll_l
	jsr	init_hdmaparams
	jsl	init_windows_l

;* kuru kuru arwing CGX pointer Initial *
	phb
	db7e
	jsr	mm_calcplayercgxptr
	plb
	rts

;===============================================================================
;*			Player Params					*
;===============================================================================
init_playerparams
	php
	a8
	km_setval	mmx_arwingdestposx,corneriaX
	km_setval	mmx_arwingdestposy,corneriaY

	km_setvar	mmx_playerNo,p1_pilotNo			;[For Message]
	km_setvar	mmx_partnerposx+1,mmx_arwingposx+1	;[partner postion x]
	km_setvar	mmx_partnerposy+1,mmx_arwingposy+1	;[partner postion y]

	a16
	km_setflag16	mmx_arwingflag,mmf_initmove
	jsr	mm_calcplayerangle	;[player angle]
	km_clrflag16	mmx_arwingflag,mmf_initmove

	jsr	mm_calcplayercgxptr	;[player cgx ptr]
	jsr	mm_calcpartnercgxptr	;[partner cgx pointer]
	plp
	rts

;*****************************************************************************
;*									*
;*									*
;*		Initial Mission Map Params				*
;*									*
;* data bank :7e								*
;*****************************************************************************
Init_MMList_l
	shorta
	longi
	php
	phb
	db7e
	a16

;* Map Explain,Game Start,Retry,Partner Continue *
	km_bitcheckmistotalflag	initialmap
	km_bne	mmlist_end

	km_setmistotalflag	initialmap

;* flag & params clear *
	km_clrmismapflag	all
	km_clrmismapflag2	all
;;;;	km_clrmismapfzflag	all
	km_clrmissionflag	all
	km_setmismapsyori	normal

;* Game Type Check *
	lda	kw_MisTotalFlag
	bit	#kmtof_explain1
	km_bne	init_explain
	bit	#kmtof_partner1
	km_bne	init_partnercontinue
	bit	#kmtof_retry
	km_bne	init_retry
	brl	init_normal

;---------------------------------------------------------------------
;*		Initial Mission Map Game			*
;* hajimeno 1kai dake !!
;---------------------------------------------------------------------
init_retry
init_explain
	longa
;* event syori disable *
	km_setmismaptrflag	eventdisable
;======================================
;*   MISSION MAP Work RAM All Clear	 *
;======================================
	km_dmaWRAMClear	0,MISSIONXRAM,MISSIONXRAMLen

;======================================
;*   Enemy Stack Buffer Clear (Eguchi)*
;======================================
	ldy	#kstacklen-1
	lda	#0
	sta	kx_stackbaseptr
	A8
.loop_stackclear
	sta.w	kx_stackbuffer,y
	sta.w	eenemyNumber_0,y
	sta.w	SebangoSwitch_0,y
	sta.w	SebangoSwitch_0+kstacklen,y
	dey
	bpl	.loop_stackclear

	ldy	#planetkazu_max-1
	lda	#0
.loop_planetclear
	sta.w	EEnemyNumPlanet1,y
	dey
	bpl	.loop_planetclear

;=====================================
;*   	Set Random 		*
;=====================================
	a16
;* sos enemy stage random *
	lda	kw_RndPlanetPtr
	and	#127
	sta	sos_rnd_offset
;* missile radom *
	lda	kw_RndPlanetPtr
	and	#15
	sta	miss_rnd_offset
;* planet stage random *
	and	#127
	sta	pl_rnd_offset
;* stepup  enemy stage random *
	jsl	KGetRandomPtr_l
	and	#31
	sta	step_rnd_offset
	a8

;======================================
;*   MISSION MAP Params Set		 *
;======================================
	shorta
	longi
;* Corneria HP *
	km_setval	kx_CorneriaHP,corneriaHP

;* Clear Params *
	ldx	#0
	stx	kw_totalscore1
	stx	kw_totalscore1+2
	stx	kx_TOTALTIME
	stx	ecountmissile
	stx	ecountfighter

	a16
	ldx	kdifficulty
	km_loblda.l	mm_planetkazutbl,x
	sta	kx_planetkazu		;planet no kazu
	sta	kx_initplanetkazu

	km_loblda.l	bs_totalkazutbl,x
	sta	kx_initbattleshipkazu
	sta	kx_battleshipkazu
	sta	kx_battleshipzaico
	sta	kx_battleshipzaicoptr

	km_loblda.l	clrtotalkazutbl,x
	sta	kx_initmissiontotal
	sta	kx_missiontotal		;mission no tatal kazu
	a8

;=====================================================================
;*								*
;*		Planet & Enemy List Initial 			* 
;* data bank :7e							*
;=====================================================================
;battle ship base skill *
	ldx	kdifficulty
	lda.l	bsskillbasetbl,x
	sta	kx_battleshipskillptr
;---------------------------------------------------------------------
;* Planet Free List Format *
	jsr	FormatPlanetList
;* Enemy Free List Format *
	jsr	FormatEnemyList
;---------------------------------------------------------------------
;******** Planet List *********
;* Corneria Planet Set *
	jsr	SetCorneria

;* Random Planet Set *
	jsr	SetRandomPlanet

;* mother ship states*
	jsr	SetMotherShip

;* Set Battle Ship *
	jsr	Init_BattleShipPtr

;* Set Hankyuu Toshi *
	jsr	SetFinalBoss
;* Set satellite *
	jsr	SetSatellite
;---------------------------------------------------------------------
;* BGM Initial *
	km_stxval	kw_mmBGMPtr,0

;* mission map time chart initial pointer *
	a16
	ldx	kdifficulty2
	lda.l	.chartinitptr,x
	sta	kx_mismaptmchart

;* timan kazu initial *
	ldx	kdifficulty
	km_loblda.l	.taimankazutbl,x
	sta	kx_specialclearcnt

;* virus freeze *
	km_setmismapevflag	virusbornfreeze

;* moshi mission explain wo surunara !! *
	km_bitcheckmistotalflag	explain1
	beq	.RetryGame

;------------------
;* Mission Explain*
;------------------
	longa
.Explain
	km_setmismapchflag	tmchartenable
	km_stxval	kx_MisMapSeq,mmseq_TimeChartCheck
	brl	mmlist_common
;------------------------------------------------------------------------------
	longa
.RetryGame
	km_setmismapchflag	tmchartenable
	km_stxval	kx_MisMapSeq,mmseq_TimeChartCheck
;* BGM *
	a8
	km_setval	kw_mmBGM,1
	a16
	brl	mmlist_initHP
;------------------------------------------------------------------------------
.chartinitptr
	dw	(mmchart_easy-mmchart_timechart)&WM
	dw	(mmchart_normal-mmchart_timechart)&WM
	dw	(mmchart_hard-mmchart_timechart)&WM

.taimankazutbl
	db	sp_easykazu
	db	sp_normalkazu
	db	sp_hardkazu
;------------------------------------------------------------------------------

;=====================================================================
;*								*
;*			Start Mother Ship	[RETRY]		*
;*								*
;=====================================================================
;------------------
;* Normal Mission *
;------------------
init_normal
	longa
	km_setval	kx_MMPlayerSeq,plseq_starttrig
	brl	mmlist_initHP

;=====================================================================
;*								*
;*			Partner Continue			*			
;*								*
;=====================================================================
init_partnercontinue
	a8
	longi
;* flag *
	km_setmismapflag	returnmap		;[mission kara modotte kita flag]

;* player type *	;(gameover.asm)
;;;	km_setvar	p1_pilotNo,p2_pilotNo
;;;	km_setvar	karpltype1,karpltype2
;* player HP *	;(gameover.asm)
;;;	jsl	playerstatus_init_l	;(For Kawagoe)

;* arwing initial postion *
;	km_setvar	mmx_arwingposx+1,kx_mshipx
;	km_setvar	mmx_arwingposy+1,kx_mshipy
;* Player Sound *
	KSoundPlayerTrans
	bra	mmlist_end

;=====================================================================
;*			Hit Point Initialize			*
;=====================================================================
mmlist_initHP
;* player states  *
	jsl	playerstatus_init_l	;(For Kawagoe)

;=====================================================================
;*			Common Sequence				*
;=====================================================================
mmlist_common
	longa
	km_setflag16	mmx_arwingflag,mmf_notdisplay
;=====================================================================
;*			END of Sequence				*
;=====================================================================
mmlist_end
	plb
	plp
	rtl

;---------------------------------------------------------------------
;*		Planet no kazu Table				*
;---------------------------------------------------------------------
mm_planetkazutbl
	db	planetkazu_easy		;easy
	db	planetkazu_normal	;normal
	db	planetkazu_hard		;hard

bs_totalkazutbl
	db	bskazu_easy		;easy
	db	bskazu_normal		;normal
	db	bskazu_hard		;hard

clrtotalkazutbl
	db	clrtotal_easy		;easy
	db	clrtotal_normal		;normal
	db	clrtotal_hard		;hard

;=====================================================================
;*		Free Enemy List Pointer				*
;* Yreg :Enemy List Pointer						*
;=====================================================================
freeenemylistptr
	phx
	phy
	php

	a16
	longi
	tyx	;Xreg <<<< Enemy List Pointer
	jsl	FreeEnemyList_l
	dec	kx_enemytotal
	plp
	ply
	plx
	rts

;=====================================================================
;*		Free Enemy List Pointer				*
;* Xreg :Enemy List Pointer						*
;=====================================================================
freeplanetlistptr
	phx
	phy
	php

	a16
	longi
	km_clrflag16.w	mmx_planetflag,mmpnf_all,x
	km_clrflag16.w	mmx_battleshipflag,mmbsf_all,x

	l_rem.w	kx_planetlistptr,kx_planetfreeptr

	plp
	ply
	plx
	rts
;=====================================================================
;*		Format	Planet List				*
;* Data Bank 7e							*
;=====================================================================
FormatPlanetList
	shorta
	longi
	a16
	stz	kx_planetlistptr
	stz	kx_corneriaptr
	fmtfreelst.w	kx_planetfreeptr,kx_planetlist&WM,planetkazumax,planetlistlen
	a8
	rts

;=====================================================================
;*		Format	Enemy List				*
;* Data Bank 7e							*
;=====================================================================
FormatEnemyList
	shorta
	longi
	a16
	stz	kx_enemychartptr
	stz	kx_enemytotal

	stz	kx_enlistptr
	fmtfreelst.w	kx_enfreeptr,kx_enemylist&WM,_enemynum,mmx_enemylen
	a8
	rts

;=====================================================================
;*								*
;*		Set Corneria Params				*
;* data bank :7e							*
;* Yreg :Corneria List Pointer					*
;=====================================================================
mmz_rndposptr	=	kz_y1	;2 byte
mmz_rndstgptr	=	kz_z1	;2 byte
mmz_planetcnt	=	kz_tpx	;2 byte
mmz_planetskill	=	kz_tpy	;1 byte
mmz_rndstgbaseptr	=	kz_x2	;2 byte
mmz_tmpwork		=	kz_y2	;2 bute
mmz_difficultyptr	=	kz_z2	;2 byte
;--------------------------------------------------
	SHORTA
	LONGI
SetCorneria
	km_setval	mmx_RndPlanetSX,corneriaX	;Planet Center X
	km_setval	mmx_RndPlanetSY,corneriaY	;Planet Center Y
	km_setval	mmx_RndPlanetStage,stg_stg1
	km_setval	mmx_RndPlanetName,planet_corneria

	jsr	SetPlanetList
	km_setflag16.w	mmx_planetflag,(mmpnf_corneria!mmpnf_complete),y
	sty	kx_corneriaptr
	rts

;=====================================================================
;*								*
;*		Set Mother Ship Params				*
;* data bank :7e							*
;* Yreg :Corneria List Pointer					*
;=====================================================================
	shorta
	longi
SetMotherShip

;********************** Planet List **********************
	lda	#mshipx
	sta	kx_mshipx		;Mother Ship Center X
	lda	#mshipx
	sta	mmx_RndPlanetSX		;Mother Ship Center X

	lda	#mshipy
	sta	kx_mshipy		;Mother Ship Center Y
	lda	#mshipy
	sta	mmx_RndPlanetSY		;Mother Ship Center Y
	km_setval	mmx_RndPlanetStage,planet_mothership
	km_setval	mmx_RndPlanetName,planet_mothership
	jsr	SetPlanetList

	a16
	km_setflag16.w	mmx_planetflag,(mmpnf_mothership!mmpnf_senryou),y
	km_setvar	kx_warpplaceptr,kx_CorneriaPtr

	km_setval	kx_planetbufnum,planet_corneria
	sta	kx_mshipcurrentnum

	sty	kx_MotherShipPlPtr

;********************** Enemy List **********************
	jsl	mm_getenemylistptrX_l
	txy
	sty	kx_MotherShipEnPtr
;* source *
	a8
	km_setval.w	mmx_enposx+1,mshipx,y
	km_setval.w	mmx_enposy+1,mshipy,y

	a16
	km_setval.w	mmx_envel,mshipwarpsp,y
	km_setval.w	mmx_enstratptr,enstrat_nothing,y
	km_setflag16.w	mmx_enflags,(enfl_nocollision!enfl_mothership),y
	km_setval.w	mmx_entype,entyp_mothership,y
	km_setval.w	mmx_encoll,6,y		;collision

	a8
	rts

;=====================================================================
;*								*
;*		Set Random Planet Params			*
;* data bank :7e							*
;=====================================================================
;--------------------------------------------------
SetRandomPlanet
	php
	longi
;******* Planet 6 Planet Initial ***********
	ldx	#5*4
	ldy	#5
.Loop_Init
	PHX	;>>> Push Xreg
	PHY	;>>> Push Yreg

	a8
	lda.l	planetpostbl+0,x
	sta	mmx_RndPlanetSX		;Planet Center X
	lda.l	planetpostbl+1,x
	sta	mmx_RndPlanetSY		;Planet Center Y
	lda.l	planetpostbl+2,x
	sta	mmx_RndPlanetDX		;Planet Center X
	lda.l	planetpostbl+3,x
	sta	mmx_RndPlanetDY		;Planet Center Y

	tya
	sta	mmx_RndPlanetStage	;Planet Stage	    :(1 byte)
	sta	mmx_RndPlanetName	;Planet Name Number :(1 byte)

	jsr	SetPlanetList

;OutPut :Yreg (Planet List Pointer)
	a16
	km_setflag16.w	mmx_planetflag,(mmpnf_planet!mmpnf_bornfreeze!mmpnf_complete),y

	PLY	;<<< Pull Yreg
	PLX	;<<< Pull Xreg

	dey
	dex
	dex
	dex
	dex
	bpl	.Loop_Init	

;****** Senryou Sareru Planet no kouhochi Initial Pointer Get **** 
;----------------------------------------------------
;* Get Planet Pattern Pointer *
;easy   :0~5  :05 pattern
;normal :0~14 :20 pattern
;hard   :0~14 :15 pattern
;----------------------------------------------------
	longa
	longi
	lda	kdifficulty2	;Read Difficulty
	asl	a
	tax

	lda.l	randomtbl+2,x
	sta	kz_x1		;senryou planet base pointer

	lda.l	randomtbl+0,x	;pattern suu
	tax
	lda	kw_RndPlanetPtr	;ran suu
	jsl	kdivu16u8_sub_l
	tyx	;X reg (Pattern) <<< amari (Yreg)

	a8
	lda	kx_planetkazu
	km_cpumultu8u8	x
	a16
	clc
	adc	kz_x1
	sta	kx_senryoustgptr	;<<< Planet Stage Pattern Pointer
;-------------------------------------------------------------------------
	plp
	RTS





	IFEQ	1
mmz_rndposptr	=	kz_y1	;2 byte
mmz_rndstgptr	=	kz_z1	;2 byte
mmz_planetcnt	=	kz_tpx	;2 byte
mmz_planetskill	=	kz_tpy	;1 byte
mmz_rndstgbaseptr	=	kz_x2	;2 byte
mmz_tmpwork		=	kz_y2	;2 bute
mmz_tmpwork2		=	kz_z2	;2 bute
mmz_difficultyptr	=	kz_x3	;2 byte
;*** planet no kazu ***
	lda	kx_planetkazu
	sta	mmz_planetcnt

	km_lldm4x	kdifficulty	;Read Difficulty
	sta  	mmz_difficultyptr

;----------------------------------------------------
;* Planet Stage Base Pointer *
	lda.l	randomtbl+2,x
	sta	mmz_tmpwork
;----------------------------------------------------
;* Get Planet Pattern Pointer *
;easy   :0~5  :05 pattern
;normal :0~14 :20 pattern
;hard   :0~14 :15 pattern

	lda.l	randomtbl+0,x	;pattern suu
	tax
	beq	.no_pattern
	lda	kw_RndPlanetPtr
	jsl	kdivu16u8_sub_l
	tyx	;X reg (Pattern) <<< amari (Yreg)
.no_pattern
	ifne	randominfo
	ldx	#0
	endc

	a8
	lda	kx_planetkazu
	km_cpumultu8u8	x
	a16
	clc
	adc	mmz_tmpwork
	sta	mmz_rndstgptr	;<<< Planet Stage Pattern Pointer
;----------------------------------------------------
;* Initial Random Planet Order Number *
	longa
	km_setval	mmx_RndPlanetCnt,0
.LOOP
;* Random Postion Set
	ldx	mmz_rndstgptr		;stage number read pointer
	lda.l	randomtbl,x
	km_loba
	sta	mmx_RndPlanetStage	;Planet Stage
	sta	mmx_RndPlanetName	;Planet Name Number
	asl	a
	asl	a
	tax

	a8
	lda.l	planetpostbl+0,x
	sta	mmx_RndPlanetSX		;Planet Center X
	lda.l	planetpostbl+1,x
	sta	mmx_RndPlanetSY		;Planet Center Y
	lda.l	planetpostbl+2,x
	sta	mmx_RndPlanetDX		;Planet Center X
	lda.l	planetpostbl+3,x
	sta	mmx_RndPlanetDY		;Planet Center Y

	jsr	SetWarpStage
	jsr	SetPlanetList
;OutPut :Yreg (PLanet List Pointer)
	a16
	km_setflag16.w	mmx_planetflag,(mmpnf_planet!mmpnf_bornfreeze),y

	inc	mmz_rndstgptr
	inc	mmx_RndPlanetCnt
	dec	mmz_planetcnt
	km_BNE	.LOOP
.end
	plp
	rts

PlanetKazuTbl
	db	planetkazu_easy
	db	planetkazu_normal
	db	planetkazu_hard
	ENDC

;---------------------------------------------------------------------
;*			Set Warp Stage				*
;---------------------------------------------------------------------
	IFEQ	1
	shorta
	longi
SetWarpStage
;* Warp Select Postion *
	ldx	kx_planetmaxptr
	lda	mmx_RndPlanetName
	sta.w	kx_planetnamebuf,x
	lda	mmx_RndPlanetSX
	sta.w	kx_planetcxbuf,x
	lda	mmx_RndPlanetSY
	sta.w	kx_planetcybuf,x
	inc	kx_planetmaxptr
	rts
	ENDC

;=====================================================================
;*								*
;*	Appear Enemy in Enemy Base (Planet & BattleShip)	*
;* data bank :7e							*
;* Input:kz_tpx :loop counter					*
;* Yreg :planet List Pointer						*
;=====================================================================
SenryouPlanet
	php
	a16
	longi
.Next_Planet
	longa
	ldx	kx_senryoustgptr	;<<< Planet Stage Pattern Pointer
	km_loblda.l	randomtbl,x
	sta	kz_x1
;------------------------------------------
	ldy	kx_planetlistptr
.Planet_Search
	km_bitcheckflag16.w	mmx_planetflag,mmpnf_planet,y
	beq	.tugino_kouhochi
	lda.w	mmx_stage,y
	cmp	kz_x1
	beq	.Found
.tugino_kouhochi
	lda.w	mmx_planetnext,y
	tay
	bne	.Planet_Search
;------------------------------------------
;(Missile 1st Hassya)
.Found	;Yreg = Planet List Pointer
	km_bitcheckmistotalflag	missile_1st
	bne	.normal

	km_setmistotalflag	missile_1st
	lda	#1
	sta.w	mmx_soswaittm,y
	km_clrflag16.w	mmx_planetflag,mmpnf_bornfreeze,y
	bra	.set_tmpparams
;-------------------------------------------------------------------------
;(Normal Senryou)
.normal
	km_loblda.w	mmx_stage,y
	asl	a
	tax
	lda.l	.SOSappeartbl,x
	sta.w	mmx_soswaittm,y
;-------------------------------------------------------------------------
;* sos states *
.set_tmpparams
;(planet List)
	km_setflag16.w	mmx_planetflag,mmpnf_senryou,y
	km_clrflag16.w	mmx_planetflag,mmpnf_complete,y
	km_setval.w	mmx_psos,enbase_wait,y	;missile enable
	lda	#$8000
	sta.w	mmx_dokuroanm,y		;dokuro anime start
	inc	kx_senryoustgptr	;<<< Planet Stage Pattern Pointer

;* Check Init Wolf *

	lda	kdifficulty
	cmp	#dif_hard
	bne	.setwolfteam

	km_bitcheckmistotalflag		plhojyuu
	beq	.nosetwolfteam

	lda	kx_mshipcurrentnum
	cmp	#planet_corneria
	beq	.setwolfteam
	cmp.w	mmx_name,y
	bne	.setwolfteam
	km_setval	kx_planetbufnum,planet_corneria
	sta	kx_mshipcurrentnum
	km_setvar	kx_warpplaceptr,kx_corneriaptr
	km_setval	kx_objdemonumber,odm_normalwarp
.setwolfteam
	tyx
	jsr	InitWolfTeam
.nosetwolfteam
;-------------------------------------------------------------------------
;* Planet no Kazu Check *
	inc	kx_senryoucurrent
	dec	mmx_senryoucnt
	km_bne	.Next_Planet
;-------------------------------------------------------------------------
.set_finish
;* OBJ colour change *
	km_setscreenflag	objcolpal
;-------------------------------------------------------------------------
.end
	plp
	rts
;=====================================================
;*		Appear Table			*
;=====================================================
.SOSappeartbl
	dw	sos_intstg1tm	;1
	dw	sos_intstg2tm	;2
	dw	sos_intstg3tm	;3
	dw	sos_intstg4tm	;4
	dw	sos_intstg5tm	;5
	dw	sos_intstg6tm	;6
	dw	sos_intshiptm	;7



;=====================================================================
;*								*
;*			Wolf Team Initial			*
;* data bank :7e							*
;* 								*
;* Xreg :Planet List Pointer						*
;* Yreg :Enemy  List Pointer						*
;=====================================================================
	longa
	longi
InitWolfTeam
	inc	kx_wolfcurrent

	jsl	mm_getenemylistptr_l
;* dest *
	a8
	lda.w	mmx_planetcx,x
	clc
	adc	#4
	sta.w	mmx_enposx+1,y
	sta.w	mmx_endestx,y

	lda.w	mmx_planetcy,x
	sec
	sbc	#4
	sta.w	mmx_enposy+1,y
	sta.w	mmx_endesty,y

	a16
	lda	#0
	sta.w	mmx_enposx_l,y
	sta.w	mmx_enposy_l,y

	km_setval.w	mmx_ensequence,enseq_nothing,y
	km_setval.w	mmx_enstage,stg_sos2,y
	km_setflag16.w	mmx_enflags,enfl_wolf,y
	km_clrflag16.w	mmx_enflags,enfl_nocollision,y
	km_setval.w	mmx_entype,entyp_wolf,y
	km_setval.w	mmx_encoll,wolf_collision,y
	km_setval.w	mmx_enstratptr,enstrat_nothing,y

	lda	mmx_senryoucnt
	sta.w	mmx_enwolfnum,y

;* enemy skill *
	ldx	#WOLF_SKILL-EASY_MISS_RAND
	jsl	eg_sosskill_l
	rts

;=====================================================================
;*								*
;*			Wolf Team Initial			*
;* data bank :7e							*
;* 								*
;* Xreg :Planet List Pointer						*
;* Yreg :Enemy  List Pointer						*
;=====================================================================
	longa
	longi
	IFEQ	0
InitWolfTeam2
	jsl	mm_getenemylistptr_l
;* source *
	a16
	km_setval.w	mmx_enposx,enemybaseX<<8,y
	km_setval.w	mmx_enposy,enemybaseY<<8,y
;* dest *
	a8
	lda	mmx_arwingposx+1
	sta.w	mmx_endestx,y
	lda	mmx_arwingposy+1
	sta.w	mmx_endesty,y
	a16
;* Set Angle  *
	km_setval.w	mmx_envel,$2000,y
;;;	jsl	calc_enangvelxy_l

	km_setval.w	mmx_ensequence,enseq_spenappear1,y
	km_setval.w	mmx_enstage,stg_sos2,y
	km_setflag16.w	mmx_enflags,enfl_wolf,y
	km_setflag16.w	mmx_enflags,enfl_nocollision,y
	km_setval.w	mmx_entype,entyp_wolf,y
	km_setval.w	mmx_encoll,wolf_collision2,y
	km_setval.w	mmx_enstratptr,enstrat_posvel,y
	lda	#0
	sta.w	mmx_enwolfnum,y
	inc	kx_wolfcurrent
;* enemy skill *
	ldx	#WOLFBOSS_SKILL-EASY_MISS_RAND
	jsl	eg_sosskill_l
	rts
	ENDC






	IFEQ	1

	ldx	#0
	ldy	kx_planetlistptr
.LOOP
;* moshi mother ship nara SKIP !! *
	km_bitcheckflag16.w	mmx_planetflag,mmpnf_planet,y
	beq	.nextplanet
	km_bitcheckflag16.w	mmx_planetflag,mmpnf_senryou,y
	bne	.nextplanet
;-------------------------------------------------------------------------
	km_bitcheckmistotalflag	missile_1st
	bne	.normal

	km_setmistotalflag	missile_1st
	lda	#1
	sta.w	mmx_soswaittm,y
	km_clrflag16.w	mmx_planetflag,mmpnf_bornfreeze,y
	bra	.set_tmpparams
;-------------------------------------------------------------------------
.normal
	km_loblda.w	mmx_stage,y
	asl	a
	tax
	lda.l	.SOSappeartbl,x
	sta.w	mmx_soswaittm,y
;-------------------------------------------------------------------------
;* sos states *
.set_tmpparams
	km_setflag16.w	mmx_planetflag,mmpnf_senryou,y
	km_setval.w	mmx_psos,enbase_wait,y	;missile enable

	lda	#$8000
	sta.w	mmx_dokuroanm,y		;dokuro anime start

	dec	kz_tpx
	beq	.set_finish
;-------------------------------------------------------------------------
.nextplanet
	inx
	inx
	lda.w	mmx_planetnext,y
	tay
	km_bne	.LOOP
;-------------------------------------------------------------------------
.set_finish
;* OBJ colour change *
	km_setscreenflag	objcolpal
;-------------------------------------------------------------------------
.end
	plp
	rts
	ENDC

;=====================================================================
;*								*
;*			Planet List Initial			*
;* data bank :7e							*
;* OutPut 								*
;* Yreg :Planet List Pointer						*
;=====================================================================
	shorta
	longi
SetPlanetList
	phx
;* Get Planet List Buffer & Pointer *
	ldx	#0
	l_add.w	kx_planetlistptr,kx_planetfreeptr,mim_blink
	txy

;* Planet Params *
	lda	mmx_RndPlanetSX		;Planet Center X
	sta.w	mmx_planetcx,y
	km_divu8
	sta.w	mmx_scrcx,y

	lda	mmx_RndPlanetSY		;Planet Center Y
	sta.w	mmx_planetcy,y
	km_divu8
	sta.w	mmx_scrcy,y

	lda	mmx_RndPlanetDX
	sta.w	mmx_destx,y
	lda	mmx_RndPlanetDY
	sta.w	mmx_desty,y

	lda	kdifficulty
	asl	a
	sta.w	mmx_planetskill,y	Set Planet Skill

	a16
	km_loblda	mmx_RndPlanetStage
	sta.w	mmx_stage,y		;Planet Stage No
	km_loblda	mmx_RndPlanetName
	sta.w	mmx_name,y		;Planet Name
;* flag *
	a8
	plx
	rts

;=====================================================================
;*		Mission Battle Ship Initial			*
;=====================================================================
Init_BattleShipPtr
	shorta
	longi
	a16
	lda	kdifficulty
	asl	a
	tax
	lda.l	bs_basedata,x
	sta	kx_battleshipptr
	a8
	rts

;=====================================================================
;*								*
;*		Set Battle Ship States				*
;* data bank :7e							*
;* Yreg <<< Enemy List Pointer					*
;=====================================================================
SetBattleShip
	php

	a16
	ldx	kx_battleshipptr
	lda.l	bs_basedata,x
	km_beq	.end

	inx
	inx
	stx	kx_battleshipptr	;Next Data Pointer
	tax
	a8

	lda.l	bs_basedata,x
	sta	kx_battleshipcurrent	;Battle ship no kazu
	sta	mmx_battleshipcnt	;tmp loop counter set
	inx
.loop
	lda	kx_battleshipzaico
	km_beq	.end

;******** Planet List ni Set *********

	km_setval	mmx_RndPlanetName,planet_battleship
	km_setval	mmx_RndPlanetStage,stg_sos3

	lda.l	bs_basedata,x
	sta	mmx_BShipType	;Battle Ship Type
	inx

	a16
	lda.l	bs_basedata,x
	inx
	inx
	PHX	;>>>>>
	tax
	a8
	lda.l	bs_basedata,x
	sta	mmx_RndPlanetSX	;Battle Ship Appear Postion X
	lda.l	bs_basedata+1,x
	sta	mmx_RndPlanetSY	;Battle Ship Appear Postion Y
	lda.l	bs_basedata+2,x
	sta	mmx_RndPlanetDX	;SOS Enemy Dest Postion X
	lda.l	bs_basedata+3,x
	sta	mmx_RndPlanetDY	;SOS Enemy Dest Postion Y
	jsr	SetPlanetList

	lda.l	bs_basedata+4,x
	sta.w	mmx_planetcannonsx,y
	sta	mmx_cannonPointX		;Planet cannon Fire Enable Pos X
	lda.l	bs_basedata+5,x
	sta.w	mmx_planetcannonsy,y
	sta	mmx_cannonPointY		;Planet cannon Fire Enable Pos Y
	lda.l	bs_basedata+6,x
	sta.w	mmx_planetcannondx,y	;Planet cannon Fire Dest Pos X
	lda.l	bs_basedata+7,x
	sta.w	mmx_planetcannondy,y	;Planet cannon Fire Dest Pos Y

; Yreg = Planet List Pointer 
	sty	mmx_RndPlanetPtr
;* flag set *
	a16
	km_setflag16.w	mmx_planetflag,(mmpnf_battleship!mmpnf_senryou),y
	km_clrflag16.w	mmx_battleshipflag,mmbsf_type,y

;* battle ship type *
	lda	mmx_battleshipcnt	;tmp loop counter set
	and	#1
	beq	.skipaaa
	km_setflag16.w	mmx_battleshipflag,mmbsf_type,y
.skipaaa
;******** Enemy List ni SET ***********
	km_loblda	mmx_BShipType
	tax
	lda.l	mm_ZacoChartTable,x
	sta.w	mmx_zacochartptr,y
	km_setval.w	mmx_psos,enbase_inittime,y
	a8
	jsr	SetBSEnlist

;******** Child List wo SET ***********
;* Battle Ship Appear (Child List) *
;;;	jsr	Init_BSAppear

	inc	kx_battleshipskillptr
	inc	kx_battleshipskillptr
	a8
	PLX	;<<<<<
	dec	mmx_battleshipcnt
	km_bne	.loop
.end
	plp
	rts
;=====================================================================
;*								*
;*		Set Enemy List (Battle Ship)			*
;*								*
;=====================================================================
SetBSEnlist
	php

	ai16
;* List Get *
	jsl	mm_getenemylistptr_l
;* source * <<<<
	dec	kx_battleshipzaicoptr	;battle ship no nokori !!

	lda	kx_battleshipzaicoptr	;battle ship no nokori !!
	asl	a
	tax
	a8
	lda.l	BS_ZaicoData+0,x
	clc
	adc	#8
	sta.w	mmx_enposx+1,y	;Battle Ship Disappear Point X
	lda.l	BS_ZaicoData+1,x
	clc
	adc	#8
	sta.w	mmx_enposy+1,y	;Battle Ship Disappear Point Y

;* dest * <<<<
	lda	mmx_RndPlanetSX
	sta.w	mmx_endestx,y	;Battle Ship Appear Point X
	lda	mmx_RndPlanetSY
	sta.w	mmx_endesty,y	;Battle Ship Appear Point Y

;* velocity (x,y), AngY <---[source(x,y),dest(x,y)] *
	a16
	km_setval.w	mmx_envel,btship_apsp,y	;syutugen speed
	jsl	calc_enangvelxy_l
	a8

;* stage *
	lda	mmx_RndPlanetStage
	sta.w	mmx_enstage,y

;* flag *
	a16
	km_setflag16.w	mmx_enflags,(enfl_battleship!enfl_demo!enfl_nocollision),y
	km_setflag16.w	mmx_enflags2,enfl2_nojet,y

;* Enemy Stratage *
	lda	#enstrat_nothing
	sta.w	mmx_enstratptr,y	;stratage pointter

;* Sprite Animation *
	a16
	lda	#0
	sta.w	mmx_enanmpatt,y
	lda	#bsseq_appeardemowait
	sta.w	mmx_ensequence,y

	lda	#btship_aptm
	sta.w	mmx_enwaittm,y		;Battle Ship Appear Timing
	a8
;* collision *
	lda	#btship_collision
	sta.w	mmx_encoll,y		;collision

	a16
; Xreg = Planet List Pointer 
; Yreg = Enemy List Pointer 
	ldx	mmx_RndPlanetPtr
	tya
	sta.w	mmx_bslinkptr,x	;Enemy List ni Link
	txa
	sta.w	mmx_enlinkptr,y	;Planet List Link

	lda	#entyp_battleship
	sta.w	mmx_entype,y
;* skill *
	lda	kx_battleshipskillptr
	sta.w	mmx_planetskill,x
	sta.w	mmx_enskill,y
;* planet cannon attack point *
	lda	#PlanetcannonAp
	sta.w	mmx_enattackpo,y
	lda	#1
	sta.w	mmx_enkazu,y

	plp
	rts


;=====================================================================
;*								*
;*		Initila Battle Ship Appear Demo			*
;* Xreg   :Child  List Pointer (Break)				*
;* Yreg   :Enemy List Pointer  (Input,Keep)				*
;* kwork  :Link Pointer						*
;* kwork+2:Loop Counter						*
;=====================================================================
	IFEQ	1
Init_BSAppear
	php
	a16
	km_setval	kwork,0	;link end code
	km_setval	kwork+2,6
.LOOP
	jsr	GetChildList
	km_setflag16.w	mmx_enflags,(enfl_child!enfl_nocollision),x
	lda	kwork
	sta.w	mmx_enchildlinkptr,x
	lda.w	mmx_enposx,y
	sta.w	mmx_enposx,x
	lda.w	mmx_enposy,y
	sta.w	mmx_enposy,x
	lda.w	mmx_endestx,y
	sta.w	mmx_endestx,x
	lda.w	mmx_endesty,y
	sta.w	mmx_endesty,x
	lda.w	mmx_envelx,y
	sta.w	mmx_envelx,x
	lda.w	mmx_envely,y
	sta.w	mmx_envely,x
	lda	#5
	sta.w	mmx_encoll,x
	lda	kwork+2
	sta.w	mmx_enwaittm,x

	lda	#enstrat_nothing
	sta.w	mmx_enstratptr,x

	stx	kwork		;Link Pointer
	dec	kwork+2
	dec	kwork+2
	bne	.LOOP	

	txa
	sta.w	mmx_enchildlinkptr,y
	plp
	rts
;---------------------------------------------------------------------
;*			Get Child List				*
;* Out Put :Xreg = Child List Pointer				*
;* Yreg    :Keep							*
;---------------------------------------------------------------------
GetChildList
	phy
	php
	a16

;* Get Child List Buffer & Pointer *
	ldx	#0
	l_add.w	kx_enlistptr,kx_enfreeptr,mim_blink

	plp
	ply
	rts
	ENDC


;=====================================================================
;*			Data Tables				*
;=====================================================================
bs_basedata
	dw	bs_easy_ptr-bs_basedata
	dw	bs_normal_ptr-bs_basedata
	dw	bs_hard_ptr-bs_basedata
;-----------------------------------------------------
;* data pointer address *
bs_easy_ptr	dw	bs_easy-bs_basedata
	dw	0	;end code

bs_normal_ptr
	dw	bs_normal1-bs_basedata
	dw	bs_normal2-bs_basedata
	dw	0

bs_hard_ptr	dw	bs_hard1-bs_basedata
	dw	bs_hard2-bs_basedata
	dw	0
;-----------------------------------------------------
bs_easy
	db	2
	db	btship_zacotype1
	dw	btship_A-bs_basedata	;(source,dest)
	db	btship_zacotype2
	dw	btship_C-bs_basedata	;(source,dest)
bs_normal1
	db	2
	db	btship_zacotype3
	dw	btship_A-bs_basedata	;(source,dest)
	db	btship_zacotype4
	dw	btship_C-bs_basedata	;(source,dest)
bs_normal2
	db	2
	db	btship_zacotype5
	dw	btship_A-bs_basedata	;(source,dest)
	db	btship_zacotype6
	dw	btship_C-bs_basedata	;(source,dest)
bs_hard1
	db	2
	db	btship_zacotype7
	dw	btship_A-bs_basedata	;(source,dest)
	db	btship_zacotype8
	dw	btship_C-bs_basedata	;(source,dest)
bs_hard2
	db	2
	db	btship_zacotype9
	dw	btship_A-bs_basedata	;(source,dest)
	db	btship_zacotype10
	dw	btship_C-bs_basedata	;(source,dest)
;-----------------------------------------------------
btship_A
	db	btship_ASX,btship_ASY
	db	btship_AEX,btship_AEY
	db	cannon_ASX,cannon_ASY
	db	cannon_AEX,cannon_AEY

btship_C
	db	btship_CSX,btship_CSY
	db	btship_CEX,btship_CEY
	db	cannon_CSX,cannon_CSY
	db	cannon_CEX,cannon_CEY

;=====================================================================
;*								*
;*		Set Satellite Params				*
;* data bank :7e							*
;* Yreg :Enemy List Pointer						*
;=====================================================================
	shorta
	longi
SetSatellite
	php
;******************  Planet List Pointer *****************
	a8
	km_setval	mmx_RndPlanetSX,satellitecx
	km_setval	mmx_RndPlanetSY,satellitecy
	km_setval	mmx_RndPlanetName,planet_friendside
	jsr	SetPlanetList

	a16
	km_setflag16.w	mmx_planetflag,(mmpnf_satellite!mmpnf_senryou),y
	sty	kx_satelliteplptr

;******************  Enemy List Pointer *****************
;* List Get *
	jsl	mm_getenemylistptrX_l
	txy
	sty	kx_satelliteenptr

	lda	kx_satelliteplptr
	sta.w	mmx_enlinkptr,y
	tax
	tya
	sta.w	mmx_bslinkptr,x

;* clear states *
	lda	#0
	sta.w	mmx_ensequence,y
	sta.w	mmx_enstratptr,y

;* postion *
	a8
	lda	#satellitecx
	sta.w	mmx_enposx+1,y	;
	lda	#satellitecy
	sta.w	mmx_enposy+1,y	;
;* flag *
	a16
	km_setflag16.w	mmx_enflags,(enfl_satellite!enfl_nocollision),y
	km_setflag16	kx_satelliteflag,safl_charge

	km_setval.w	mmx_entype,entyp_satellite,y
;* angle *
	lda	#0
	sta.w	mmx_enangY,y	;

	km_setval.w	mmx_enmvwaittm,sa_angletm,y

;* Attack Point *
	km_setval.w	mmx_enattackpo,sa_atpo,y
	km_setval.w	mmx_enkazu,1,y

;* collision *
	lda	#8
	sta.w	mmx_encoll,y	;collision

;* init tame time *
	ldx	kdifficulty2
	lda.l	.tametimetbl,x
	sta.w	mmx_enwaittm,y

	plp
	rts

.tametimetbl
	dw	sa_tameinittmE
	dw	sa_tameinittmN
	dw	sa_tameinittmH
;=====================================================================
;*								*
;*		Set Special Enemy States			*
;* data bank :7e							*
;* Yreg <<< Enemy List Pointer					*
;=====================================================================
SetSpecialEnemy
	php
	ai16
	lda	kx_specialclearcnt
	sta	mmx_specialapcocnt	;appear suru special enemy no kazu !!
	dec	a
	sta	mmx_specialaploop
.LOOP
;* List Get *
	jsl	mm_getenemylistptr_l
;* flag *
	km_setflag16.w	mmx_enflags,(enfl_special!enfl_demo),y


;* stage *
	lda	#stg_sos4
	sta.w	mmx_enstage,y
	lda	#entyp_special
	sta.w	mmx_entype,y	;enemy type

	lda	#1
	sta.w	mmx_enkazu,y

	lda	#sos_taimanatpo
	sta.w	mmx_enattackpo,y

;* eguchi's states *
	a8
	ldx	mmx_specialaploop	;appear suru special enemy no kazu !!

	km_loblda.l	.mm_taimanposXtbl,x
	sta.w	mmx_endestx,y		;dest postion X

	lda	#$1c
	clc
	adc.w	demotaiman,x
	a16	
	and	#$ff
	sta.w	mmx_enskill,y
	tax
	lda.l	SOS1_target,x
	sta	kz_tpa
	lda.l	SOS1_target_shape_A,x
	sta	kz_tpx
	lda.l	SOS1_target_shape_B,x
	sta	kz_tpy
	jsl	eg_states_l	;(For Eguchi's States)

	lda	#enemybaseX<<8
	sta.w	mmx_enposx,y
	lda	#enemybaseY<<8
	sta.w	mmx_enposy,y

	km_setval.w	mmx_envel,$2000,y

	lda	#$60
	sta.w	mmx_endesty,y
	jsl	calc_enangvelxy_l

	lda	#enseq_spenappear1
	sta.w	mmx_ensequence,y
	lda	#enstrat_straight
	sta.w	mmx_enstratptr,y
	km_setval.w	mmx_enanmpatt,-1,y
	km_setval.w	mmx_enwaittm,1,y

;* collision *
	lda	#sos_collision
	sta.w	mmx_encoll,y		;collision

;* muteki Timer *
	lda	#3*8
	sta.w	mmx_eninvtm,y

	inc	kx_specialcurrent

	dec	mmx_specialaploop	;appear suru special enemy no kazu !!
	km_BPL	.LOOP
	km_setflag16	kw_mmsoundflag,mmsndf_specialappear
.end
	plp
	rts


.mm_taimanposXtbl
	db	$40
	db	$70
	db	$a0
	db	$d0

;=====================================================================
;*								*
;*		Set Final Boss Params				*
;* data bank :7e							*
;* Yreg :Enemy List Pointer						*
;=====================================================================
	shorta
	longi
SetFinalBoss
;************ Planet List *************
	km_setval	mmx_RndPlanetSX,enemybaseX
	km_setval	mmx_RndPlanetSY,enemybaseY
	km_setval	mmx_RndPlanetDX,satellitecx
	km_setval	mmx_RndPlanetDY,satellitecy
	km_setval	mmx_RndPlanetStage,stg_ext1
	km_setval	mmx_RndPlanetName,planet_nothing
	jsr	SetPlanetList
	km_setflag16.w	mmx_planetflag,mmpnf_finalboss,y
	sty	kx_FinalBossPlPtr

;************ Enemy List **************
	jsl	mm_getenemylistptrX_l
	txy
	sty	kx_FinalBossEnPtr
;* source *
	a8
	km_setval.w	mmx_enposx+1,enemybaseX,y
	km_setval.w	mmx_enposy+1,enemybaseY,y
;* dest * 
	a16
	km_setval.w	mmx_endestx,satellitecx,y
	km_setval.w	mmx_endesty,satellitecy,y
	km_setval.w	mmx_enstage,stg_ext2,y

	km_setval.w	mmx_enanmpatt,cd_objanime_bossappear,y
	km_setval.w	mmx_enanmtm,0,y
	km_setval.w	mmx_enanmmax,80,y
	km_setval.w	mmx_enstratptr,enstrat_nothing,y
	km_setval.w	mmx_encoll,6,y

	km_setflag16.w	mmx_enflags,(enfl_demo!enfl_nocollision!enfl_finalboss),y
	km_setval.w	mmx_entype,entyp_finalboss,y
	km_setflag16.w	mmx_enflags2,(enfl2_anmloop),y
	a8
	rts

;=====================================================================
;*								*
;*			Initial Mission Map Sound		*
;*								*
;=====================================================================
Init_MMSound
;memo :kanarazu mm_checkmiscomplete no atoni set !!!
	a16
	km_setsndmode
	km_bitcheckmistotalflag	explain1
	bne	.sound_explain
	km_bitcheckmistotalflag	finalbossbattle	;[missiontotal flag]
	bne	.sound_finalboss
;----------------------------------------------------------------------
.normal_sound
	a8
	km_ldxsoundtblptr
	KSoundBGMTrans
	lda	kw_mmBGM
	KBGM_a
	bra	.end_sound
;----------------------------------------------------------------------
.sound_finalboss
	longa
	km_setsndmode	selectmissionmapfinal
	bra	.skip_sound
;----------------------------------------------------------------------
.sound_explain
	longa
	km_setsndmode	selectmissionmapexp
;----------------------------------------------------------------------
.skip_sound
	a8
	km_ldxsoundtblptr
	KSoundBGMTrans
;----------------------------------------------------------------------
.end_sound
	rts

;=====================================================================
;*								*
;*			Initial Mario Params			*
;* data bank 7e							*
;=====================================================================
mm_setmarioparms
	shorta
	longi
;---------------------------------------------
;* 	Mario Program Initial		*
;---------------------------------------------
;--- Draw Map Set ----
	lda	drawmap+1
	lsr	a
	lsr	a
	sta.l	mscrbase
	a16
	lda	drawmap
	sta.l	m_drawmap

;* Base Address Set *
	longa
	lda	#bitmapbase&WM	;$700000
	clc
	adc	drawmap
	sta.l	m_x1		;top address

	km_setval.l	m_x2,mm_wbuflength	;16chr(yoko)*16chr(tate)*32
	km_setval.l	m_scale,(15*32768)/16
	sta.l	mspr_pal

;---------------------------------------------
;* Planet Data Copy ( Mario Data Copy)	*
;---------------------------------------------
	longa
;--- For Message ---
	km_stxvar	mmx_mapstates,mmx_cursorflag

;----- Message List Copy to Mario RAM ------
	km_bitcheckmismapflag	finalboss
	bne	.finalboss_skip
	jsl	yjmapmain_l
	lda.l	m_mapBG1scrollY
	sta.l	kx_vscrollp1
.finalboss_skip

	km_blocktrans	kx_messagelist,m_mapcursor,messagelistlen

	a8
	rts

;=====================================================================
;*			COPY to HEAP RAM			*
;* data bank :7e							*
;=====================================================================
mm_heapcopy
	shorta
	longi
	phb
	db7e
;**** Initialises free memory list ****
	jsl	initmem_l

;*************************
;*    RAM PROGRAM COPY   *
;*************************
	a16
	lda	#heap_proglen
	jsl	alloc_l
	sta	mmx_ramprogaddr
;* program copy *
	tay
	ldx	#0	
	a8
.nxt
	lda.l	heap_runmariostart_l,x
	sta.w	heap,y
	inx
	iny
	cpx	#heap_proglen
	bne	.nxt

	a16
	lda	mmx_ramprogaddr
	clc
	adc	#heap
	sec
	sbc	#heap_runmariostart_l&WM
	sta	mmx_ramprogptr
	a8
;*******************************************************
;*    OBJ CGX RAM KEEP (HEAP)  kurukuru Arwing no CGX  *
;*******************************************************
objcgxbuffer_len	equ	$1000

	a16
	lda	#objcgxbuffer_len&WM
	jsl	alloc_l
	sta	mmx_objcgxaddr

;* arwing cgx (OBJ CGX) wo heap RAM ni copy *
	decram	e7_ccr,0

	a8
	ldx	mmx_objcgxaddr
	km_dmaromXram	0,($700000+dec_base),heap,cgxbuffer_len

;*************************************************************
;* OAM Pattern Data (Arwing kuru kuru pattern Data) Copy 	*
;*************************************************************
	a16
	lda	#mm_sprarwinglen
	jsl	alloc_l
	sta	mmx_sprarwingaddr

;* sprite (arwing) no pattern datacopy *
	tay
	ldx	#0
	a8
.nxt_arwing
	lda.l	mm_sprarwing,x
	sta.w	heap,y
	inx
	iny
	cpx	#mm_sprarwinglen
	bne	.nxt_arwing

;-------------------------------------
	plb
	rts

;*********************************************************************
;*								*
;*		Initial Mission Map Select			*
;*								*
;*********************************************************************
Init_MMScreen
	shorta
	longi
	phb
	db0
	screen_off
	
	jsr	Initial_MissionMap_PPUreg
;--------------------------------------------------------------------
	jsl	VRAMClear_l

	jsr	Set_MMBG1CGX
	jsr	Set_MMBG1SCR

	jsr	Set_MMBG2CGX
	jsr	Set_MMBG2SCR

	jsr	Set_MMBG3CGX
	jsr	Set_MMBG3SCR

	jsr	Set_MMCOL

	plb
	rts

;=====================================================================
;*			Initial PPU Register			*
;=====================================================================
Initial_MissionMap_PPUreg
	shorta

	lda	#%00001001
	sta	bgmode		;BG mode1,bg3 pri

	lda	#(mm_bg1_scr>>8)&$fc!scrsizeyoko2 ;BG1 SCR screen yoko 2
	sta	bg1sc

	lda	#(mm_bg2_scr>>8)&$fc!scrsizeyoko2
	sta	bg2sc			;BG2 SCR screen 2
	sta	kw_bg2sc

	lda	#(mm_bg3_scr>>8)&$fc!scrsizeyoko2
	sta	bg3sc			;BG3 SCR ,screen 2

; set mario chip to point to the screen
	lda	vmap2+1
	sec
	sbc	#(mm_fixbg1cgxlength/2)>>8
	and	#$0f0
;;;;	sta	kz_x1
	lsr	a
	lsr	a
	lsr	a
	lsr	a
;;;	ora	kz_x1
;;;	and	#$0f0
;;;	ora	#(mm_bg1_cgx_1>>12)&$0f
	sta	bg12nba			;BG1 (0000) ,BG2 (0000)
	sta	kw_bg12nba

	lda	#(mm_bg3_cgx>>12)&$0f	;BG3 (32*k/2)
	sta	bg34nba

	lda	#(mm_obj_cgx>>13)
	sta	objsel			;OBJ

	lda	#%00010111
	sta	tm	 		;BG1,BG2,BG3,OBJ display
	sta	kw_tm
	sta	kw_tmbackup
	lda	#%00000000
	sta	ts
	rts
;=====================================================================
;*			Initial BG1 Character Data		*
;=====================================================================
Set_MMBG1CGX
;	decvramnotrans	0,mm_enbase_cgx_1,b10_ccr,($40*32)
;	decvramnotrans	0,mm_enbase_cgx_2,b10_ccr,($40*32)
	rts
;=====================================================================
;*			Initial BG1 Screen Data			*
;=====================================================================
Set_MMBG1SCR
	decvramnotrans	0,mm_bg1_scr,b7_pcr,$800*2
	rts
;=====================================================================
;*			Initial BG2 Character Data		*
;=====================================================================
Set_MMBG2CGX
	decvramnotrans	0,mm_bg2_cgx_1,b7_ccr,($c0*32)
	decvramnotrans	0,mm_bg2_cgx_2,b8_ccr,($c0*32)
	rts
;=====================================================================
;*			Initial BG2 Screen Data			*
;=====================================================================
Set_MMBG2SCR
	decvramnotrans	0,mm_bg2_scr,b8_pcr,$800*2
;----------------------------------------------------------------------
;* Screen kakikae Buffer *
	a16
	ldx	#mm_bitmapbg2start
	ldy	#mm_scrbufbg2start
	km_setval	kz_x1,mm_scrbg2len/2
	jsr	kcopyscreen_sub

	phb
	db7e
	km_setmismapstflag	corneriadamage
;;;	jsr	mm_dispdamage_sub
	jsr	mm_dispgametotaltm_sub
	plb

	a8
;----------------------------------------------------------------------
;* BGCheck Buffer *
;* mario RAM ni BG check data wo tenkai !! *
	km_decrunchscr	b11

	phb
	db7f
	ldx	#0
	ldy	#0
.nxt_scr
;400h byte copy
	lda.l	bitmapdecbase,x
	sta.w	BGcheckBuffer,y
	inx
	inx
	iny
	cpx	#$800
	bne	.nxt_scr
	plb

	IFEQ	1
;* senkan *
	km_setval	kz_x1,cannon_ASX/8
	km_setval	kz_y1,cannon_ASY/8
	km_convSCRCheckaddr_32X
	lda	#9
	sta.l	BGcheckBuffer+00,x
	sta.l	BGcheckBuffer-01,x

	km_setval	kz_x1,cannon_CSX/8
	km_setval	kz_y1,cannon_CSY/8
	km_convSCRCheckaddr_32X
	lda	#9
	sta.l	BGcheckBuffer+00,x
	sta.l	BGcheckBuffer-32,x
	sta.l	BGcheckBuffer+32,x
	ENDC

.end
	rts


;=====================================================================
;*			Initial BG3 Character Data		*
;=====================================================================
Set_MMBG3CGX
	decvramnotrans	0,mm_bg3_cgx,b4_ccr,($100*16)
	rts
;=====================================================================
;*			Initial BG3 Screen Data			*
;=====================================================================
Set_MMBG3SCR
	decvramnotrans	0,mm_bg3_scr,b10_pcr,$800*2
	rts
;=====================================================================
;*			Initial Color Data			*
;=====================================================================
Set_MMCOL
	decrunch_palettes
	km_IRQdmaRAMtoCGRAM	b7_pac,0,$200
	km_IRQdmaRAMtoColBuf	b7_pac,16
	km_IRQdmaRAMtoRAM	b8_pac,kx_palette2,256
	km_IRQdmaRAMtoRAM	b11_pac,kx_palette3,256
	km_IRQdmaRAMtoRAM	b9_pac,kx_palette4,256

	lda.l	kx_CorneriaDamage
	cmp	#corneriaAttentionDamage
	bcc	.NoChange
	ldx	#0
	cmp	#corneriaDangerDamage
	bcc	.set
	ldx	#6
.Set
	jsr	SetDamageColour
.NoChange
	rts

;*********************************************************************
;*								*
;*		Planet Screen Data Transfer			*
;*								*
;*********************************************************************
	IFEQ	1
;---------------------------------------------------------------------
kcx	= kz_X1	 ;planet CX zahyou
kcy	= kz_Y1	 ;planet CY zahyou
kwidthcnt	= kz_z1
kplanettype	= kz_X2	 ;planet colour type
kplanetNo	= kz_Y2	 ;Planet no jyunban
kscrbase	= kz_x3
kscraddr	= kz_y3
kchrbase	= kz_textpt
kchrorder	= kz_tpx
;---------------------------------------------------------------------
trans_planetscr
	php
	a16
	longi

	phb
	db7e
	ldy	kx_planetlistptr
.loop
	lda.w	mmx_scrcx,y
	km_loba
	sta	kcx
	lda.w	mmx_scrcy,y
	km_loba
	sta	kcy
	lda.w	mmx_planetcol,y
	sta	kplanettype

;* character Base Pointer *
	km_loblda.w	mmx_charabaseptr,y
	sta	kplanetNo
;-------------------------------------------------------------------------
	jsr	trans_planetscr_sub
;-------------------------------------------------------------------------
	lda.w	mmx_planetnext,y
	tay
	bne	.loop

	plb
	plp
	rts
;=====================================================================
;*								*
;*		Planet Screen Data Transfer	[SubRoutine]	*
;*								*
;=====================================================================
trans_planetscr_sub
	longa
	longi
	phx
	phy
	php
	phb
	db0
;* Screen Base Address Calc *
	km_substaval	kcx,2
	km_substaval	kcy,2
	a8
	km_setval	vmainc,%10000000
	a16
	km_convVRAMSCRaddr_32	kcx,kcy,mm_bg2_scr
	sta	kscrbase

;* charcter Base No Calc *
	km_lldx	kplanetNo
	lda.l	mm_planetbaseNOTbl,x
	ora	kplanettype
	sta	kchrbase

;* Screen Data Set *
	km_setval	kwidthcnt,4
.loop1
	ldy	#4
	ldx	kchrbase
	km_setvar	kscraddr,kscrbase
.loop2
	sta	vmaddl
	stx	vmdatal

	km_addstaval	kscraddr,$20
	inx
	dey
	bne	.loop2

	dec	kwidthcnt
	beq	.end

	inc	kscrbase
	km_addstaval	kchrbase,mm_bitmaphight
	bra	.loop1
.end
	plb
	plp
	ply
	plx
	rts
	ENDC

;*********************************************************************
;*								*
;*		Initial Mario Draw RAM				*
;*********************************************************************
Init_MarioDrawRAM
	shorta
	longi
	phb
	db0

;--- MARIO RAM Clear ----
	a16
	km_setval.l	m_x1,(bitmapbase+bitmap1)&WM
	km_setval.l	m_x2,mm_wbuflength	;data size :16chr(yoko)*16chr(tate)
	a8
	call_mario	MRAMClear

	a16
	km_setval.l	m_x1,(bitmapbase+bitmap1_dbl)&WM
	km_setval.l	m_x2,mm_wbuflength	;data size :16chr(yoko)*16chr(tate)
	a8
	call_mario	MRAMClear
	plb
	rts
;*****************************************************************************
;*									*
;*			MISSION MAP BG H,V Scroll			*
;*									*
;*****************************************************************************
;=============================================================================
;*			Initial H-DMA params				*
;=============================================================================
init_hdmaparams
	shorta
	longi
;=========================== BG1,2 H,V scroll ==================================
; set up the bg1hscroll hdma channel	(message screen)
	lda	#%01000011	;2 address 2write
	sta	ch2params	;(indirect mode)
	lda	#bg1hofs&BM
	sta	ch2addrb
	ldx	#xhdma_bg1hvscroll_mismap&WM
	stx	ch2addra1tl
	lda	#xhdma_bg1hvscroll_mismap>>16
	sta	ch2atbank
	sta	ch2databank

; set up the bg2hscroll hdma channel	(planet screen)
	lda	#%01000011	;2 address 2write
	sta	ch3params	;(indirect mode)
	lda	#bg2hofs&BM
	sta	ch3addrb
	ldx	#xhdma_bg2hvscroll_mismap&WM
	stx	ch3addra1tl
	lda	#xhdma_bg2hvscroll_mismap>>16
	sta	ch3atbank
	sta	ch3databank

	km_orastaval	hdmaen_gc,%00001100
	RTS

;=============================================================================
;*			Initial H,V scroll params			*
;=============================================================================
init_mmhvscroll_l
	php
	phb

	a8
	db0
	a16
	lda	#0
	sta.l	kx_hscrollp1
	sta.l	kx_hscrollp2
	sta.l	kx_vscrollp1
	sta.l	kx_vscrollp2
	sta	player1hscroll
	sta	player2hscroll
	sta	player1vscroll
	sta	player2vscroll

	sta.l	xh_hscrolltbl1
	sta.l	xh_hscrolltbl2
	sta.l	xh_vscrolltbl1
	sta.l	xh_vscrolltbl2
	sta	kw_bg1hofs
	sta	kw_bg1vofs
	sta	kw_bg2hofs
	sta	kw_bg2vofs
	sta	kw_bg3hofs
	sta	kw_bg3vofs
	a8
	sta	bg1hofs
	sta	bg1hofs
	sta	bg1vofs
	sta	bg1vofs
	sta	bg2hofs
	sta	bg2hofs
	sta	bg2vofs
	sta	bg2vofs
	sta	bg3hofs
	sta	bg3hofs
	sta	bg3vofs
	sta	bg3vofs

	plb
	plp
	rtl
;*****************************************************************************
;*									*
;*									*
;*			DataTables			[ROM DATA]	*
;*									*
;*									*
;*****************************************************************************
;---------------------------------------------------------------------
;*		Battle Ship Skill Tanble			*
;---------------------------------------------------------------------
bsskillbasetbl
	db	bsskill_easy
	db	bsskill_normal
	db	bsskill_hard

;---------------------------------------------------------------------
;*								*
;*		Mario RAM Set Postion (X,Y)			*
;*								*
;* Mario RAM ni Set surutameno Planet Center Postion (CX,CY) Data	*
;* kono (CX,CY) kara Mario RAM no Address wo Calc suru		*
;---------------------------------------------------------------------
planetdata
	db	$10,$10
planetdataSZ
	km_datasize	planetdata

	db	$10,$30
	db	$10,$50
	db	$30,$10
	db	$30,$30
	db	$30,$50
	db	$50,$10

;=====================================================================
;*		Planet Base Character No Table			*
;=====================================================================
;* BG Screen Data no Top Character Number 
;* No 192~ Start ,Max 12ko no Planet ga kakeru
mm_planetbaseNOTbl
	dw	mm_planetbaseNO+(mm_bitmaphight*0)+0	;0
	dw	mm_planetbaseNO+(mm_bitmaphight*0)+4	;1
	dw	mm_planetbaseNO+(mm_bitmaphight*0)+8	;2
	dw	mm_planetbaseNO+(mm_bitmaphight*4)+0	;3
	dw	mm_planetbaseNO+(mm_bitmaphight*4)+4	;4
	dw	mm_planetbaseNO+(mm_bitmaphight*4)+8	;5
	dw	mm_planetbaseNO+(mm_bitmaphight*8)+0	;6
	dw	mm_planetbaseNO+(mm_bitmaphight*8)+4	;7
	dw	mm_planetbaseNO+(mm_bitmaphight*8)+8	;8
	dw	mm_planetbaseNO+(mm_bitmaphight*12)+0	;9
	dw	mm_planetbaseNO+(mm_bitmaphight*12)+4	;10
	dw	mm_planetbaseNO+(mm_bitmaphight*12)+8	;11

;---------------------------------------------------------------------
;*								*
;*								*
;*		Random Planet Pos & Stage Data Table		*
;*								*
;---------------------------------------------------------------------
;* Random Table Base Address *
randomtbl
;easy
	dw	6	;6 pattern
	dw	rndstg_easy-randomtbl
;normal
	dw	20	;20 pattern
	dw	rndstg_normal-randomtbl
;hard
	dw	20	;20 pattern
	dw	rndstg_hard-randomtbl
;---------------------------------------------------------------------
;*		Random Planet Postion Pointer Table	[EASY]	*
;---------------------------------------------------------------------
rndpos_easy
;---------------------------------------------------------------------
;*		Random Planet Stage Table		[EASY]	*
;---------------------------------------------------------------------
rndstg_easy
	db	1,0	;0
	db	3,0	;1
	db	4,0	;2
	db	3,1	;3
	db	4,1	;4
	db	4,3	;5
;---------------------------------------------------------------------
;*		Random Planet Postion Pointer Table 	[NORMAL]*
;---------------------------------------------------------------------
rndpos_normal
;---------------------------------------------------------------------
;*		Random Planet Stage Table		[NORMAL]*
;---------------------------------------------------------------------
rndstg_normal
	db	0,1,2	;0
	db	0,1,3	;1
	db	0,1,4	;2
	db	5,1,0	;3
	db	0,2,3	;4
	db	0,2,4	;5
	db	0,2,5	;6
	db	0,3,4	;7
	db	5,3,0	;8
	db	0,4,5	;9

	db	1,2,3	;10
	db	4,2,1	;11
	db	1,2,5	;12
	db	1,3,4	;13
	db	5,3,1	;14
	db	1,4,5	;15

	db	4,3,2	;16
	db	5,3,2	;17
	db	2,4,5	;18

	db	3,4,5	;19

;---------------------------------------------------------------------
;*		Random Planet Postion Pointer Table 	[HARD]	*
;---------------------------------------------------------------------
rndpos_hard
;---------------------------------------------------------------------
;*		Random Planet Stage Table		[HARD]	*
;---------------------------------------------------------------------
rndstg_hard
	db	0,1,2,3,4,5	;0
	db	0,1,3,5,4,2	;1
	db	0,1,4,5,2,3	;2
	db	5,1,0,2,3,4	;3
	db	0,2,3,4,5,1	;4
	db	0,2,4,1,3,5	;5
	db	0,2,5,3,1,4	;6
	db	0,3,4,2,5,1	;7
	db	5,3,0,4,1,2	;8
	db	0,4,5,1,2,3	;9

	db	1,2,3,4,5,0	;10
	db	4,2,1,5,3,0	;11
	db	1,2,5,3,0,4	;12
	db	1,3,4,2,0,5	;13
	db	5,3,1,0,2,4	;14
	db	1,4,5,0,3,2	;15

	db	4,3,2,1,5,0	;16
	db	5,3,2,1,4,0	;17
	db	2,4,5,0,1,3	;18

	db	3,4,5,2,0,1	;19

;=====================================================================
;*		Planet Postion Tables 				*
;=====================================================================
planetpostbl
	db	venomCX,venomCY		;0	;venom
	db	venomDX,venomDY		;0	;venom
planetpostblSZ
	db	taitaniaCX,taitaniaCY	;1	;taitania
	db	taitaniaDX,taitaniaDY	;1	;taitania

	db	macbethCX,macbethCY	;2	;macbeth
	db	macbethDX,macbethDY	;2	;macbeth

	db	eladardCX,eladardCY	;3	;eladard
	db	eladardDX,eladardDY	;3	;eladard

	db	meteorCX,meteorCY	;4	;meteor
	db	meteorDX,meteorDY	;4	;meteor

	db	fortunaCX,fortunaCY	;5	;fortuna
	db	fortunaDX,fortunaDY	;5	;fortuna

	db	mshipx,mshipy		;6	;mother ship
	db	$08*8,$1b*8
	km_datasize	planetpostbl

;--------------------------------
;*  Arwing Angle Pattern Data   *
;--------------------------------
mm_sprarwing
;obj No
	db	$20,$e,$c,$a
	db	$8,$6,$4,$2
	db	$0,$2,$4,$6
	db	$8,$a,$c,$e

	db	$42,$40,$2e,$2c
	db	$2a,$28,$26,$24
	db	$22,$24,$26,$28
	db	$2a,$2c,$2e,$40

	db	$64,$62,$60,$4e
	db	$4c,$4a,$48,$46
	db	$44,$46,$48,$4a
	db	$4c,$4e,$60,$62
mm_sprarwingEND
	km_datalen	mm_sprarwing

;*****************************************************************************
;*			Debug Mode					*
;*****************************************************************************
mim_blink
	a8
	kbug2
	blink	3

;*****************************************************************************
;*****************************************************************************
;*			Not Using Area					*
;*****************************************************************************
;*****************************************************************************
	IFEQ	1
;* Planet Perfect Clear Count *
	ldy	kx_currentplanetptr
	lda.w	mmx_completecnt,y
	dec	a
	sta.w	mmx_completecnt,y
	bne	.set_neutral
.planet_perfectclear
	km_setflag16.w	mmx_planetflag,mmpnf_complete,y
	lda	#step_Clear
	sta.w	mmx_planetskill,y
	lda	kx_clearplanetkazu
	inc	a
	sta	kx_clearplanetkazu
	cmp	kx_missionplanetkazu
	bne	.notclear
	km_setmismapflag	missionallclear
.notclear	
	brl	.end
	ENDC

;------------------------------------------
;* Initial Battle Planet no kazu*
	a16
	ifeq	1
	ldx	kdifficulty
	km_loblda.l	PlanetKazuTbl,x
	sta	mmx_stepupsetcnt
	asl	a
	sta	kz_x1
;* table data wo set surutame no base pointer *
	ldx	#stup_easytmbase
	lda	kdifficulty
	beq	.skip	;easy
	ldx	#stup_normaltmbase
	dec	a
	beq	.skip	;normal
	ldx	#stup_hardtmbase
.skip
	txa
	clc
	adc	kz_x1
	sta	mmx_stepupsetptr
	endc

	ifeq	1
	ldx	kdifficulty
	dex
	beq	.random		;if normal
.fix	;(easy,hard)
	lda	#0
	bra	.set_pointer
.random	;(normal)
	lda	kw_RndPlanetPtr
	and	#7
.set_pointer
	sta	mmz_rndposptr	;Random Postion Pointer
	sta	mmz_rndstgptr	;Random Stage Pointer
	endc
	ifeq	1
	ldx  	mmz_difficultyptr
	lda.l	randomtbl+2,x
	sta	mmz_tmpwork		;stage tabel base pointer
	lda	kx_planetkazu
	ldx	mmz_rndstgptr
	a8
	km_cpumultu8u8	x
	a16
	clc
	adc	mmz_tmpwork
	sta	mmz_rndstgptr
	endc
;---------------------------------------
;;* initial states *
;	lda	#0
;	sta.w	mmx_stagecnt,y
;---------------------------------------
;* Planet Character Base No (For Planet Screen Data Pointer)*
;('95/2/3) :comment
;	ldx	mmw_bitmapptr
;	txa
;	sta.w	mmx_charabaseptr,y
;---------------------------------------
;* Planet Bitmap Base (X,Y) *
;('95/2/3) :comment
;	a16
;	lda.l	planetdata,x
;	km_loba
;	sta.w	mmx_bitmapcx,y
;	lda.l	planetdata+1,x
;	km_loba
;	sta.w	mmx_bitmapcy,y
;	a8
;---------------------------------------
;('95/2/3) :comment
;	cmp	#planet_stage5		;(gamelist.inc)
;	bne	.NotMeteor
;	sty	kx_MeteorPtr		;Meteor List Pointer Set
;.NotMeteor
;('95/2/3) :comment
;	a16
;	lda	kx_RndPlanetR		;Planet Center R
;	sta.w	mmx_planetR,y
;	lda	kx_RndPlanetSpr		;Maping Sprite
;	sta.w	mmx_planetsprite,y
;	lda	kx_RndPlanetCol		;Colour No
;	sta.w	mmx_planetcol,y
;-------------------------------------------------------------------------
;.end
;	a8
;	inx
;	inx
;	stx	mmw_bitmapptr	Next Bitmap Pointer (0,2,4,6,...)
;	rts

;---------------------------------------------------------------------
;*								*
;*			SOS Enemy Clear				*
;* Yrg = Enemy List Pointer						*
;---------------------------------------------------------------------
	IFEQ	1
clearsosenemy
	longa
	longi
;* kono test wa debug mode notame *
	lda	kx_enemytotal
	km_beq	mim_blink
;* Free SOS Alien *
	jsl	mm_freeenemylistptr_l	;(enemy flag mo clear)

;* Planet/SOS Flag Clear *
	km_clrmismapflag	enemylist
;;;	km_clrmismapstflag	complete
	rts
	ENDC

;---------------------------------------------------------------------
;*								*
;*			Player Mission Failed			*
;*								*
;---------------------------------------------------------------------
	IFEQ	1
playerfailed
	longa
	longi
	km_setval	kz_x1,$10
	km_setval	kz_y1,$10
	a8
	lda	mmx_arwingposx+1
	bpl	.less80H_X
	pha
	km_negstavar	kz_x1
	pla
.less80H_X
	clc
	adc	kz_x1
	sta	mmx_arwingposx+1
	sta	mmx_partnerposx+1

	lda	mmx_arwingposy+1
	bpl	.less80H_Y
	pha
	km_negstavar	kz_y1
	pla
.less80H_Y
	clc
	adc	kz_y1
	sta	mmx_arwingposy+1
	sta	mmx_partnerposy+1
	rts

	ENDC
;-------------------------------------------------
	ifeq	1
.enemy_gone
	a8
	lda.w	mmx_enposx+1,y
	bpl	.less80H_enX
	pha
	km_negstavar	kz_x1
	pla
.less80H_enX
	clc
	adc	kz_x1
	sta.w	mmx_enposx+1,y

	lda.w	mmx_enposy+1,y
	cmp	#$50
	bcc	.nochangeY
	sec
	sbc	kz_y1
	
sta.w	mmx_enposy+1,y
.nochangeY
	a16
	jsl	calc_enangvelxy_l
	a8
	endc

	ifeq	1
;* Stack Number Clear *
	phy
	lda.w	mmx_plstackptr,x
	tay
	lda	#0
	sta.w	kx_stackbuffer,y
	sta.w	eenemyNumber_0,y
	ply

;* Step Up Initial *
	km_setstepupmode	nothing,x	;inittime,x
	LONGA
	km_setflag16.w	mmx_planetflag,mmpnf_complete,x

	km_setval.w	mmx_dokuroanm,0,x	;dokuro animation off

;* moshi battle shiteita planet no sos ga born wait jyoutai dattara !! *
	lda.w	mmx_psos,x
	beq	.skip1
	cmp	#sos_born
	bpl	.skip1
	km_clrflag16.w	mmx_planetflag,mmpnf_sosappear,x
	km_setsosmode	inittime,x
.skip1
	A8
	lda	#step_Neutral
	sta.w	mmx_planetskill,x	;neutral
	dec	kx_clrenemytotal	;Enemy Clear Toal Dec
	bne	.skip2

	km_setmismapstflag	finalbosstrig	;(For Yajima)
	km_setval	kx_FinalBossSeq,fbseq_sosdesttrig
	km_setflag16	kw_MisMapFreezeFlag,(kfz_timefreeze!kfz_cursorfreeze!kfz_bossfreeze)
	brl	.end
.skip2
	ENDC

	ifeq	1
;* stepup or sos check *
	km_bitcheckflag.w	mmx_enflags,enfl_stepup,y
	beq	.sos
;----------------------------------------------------------------------
;*** Mission ga Step UP no baai !! ***
.stepup
;* Xreg = DESTINATION planet pointer
	longa
	lda.w	mmx_endestplanetptr,y
	tax
	km_setstepupmode	inittime,x
	dec	kx_clrenemytotal	;Enemy Clear Toal Dec
	bne	.skip5
	km_setmismapstflag	finalbosstrig	;(For Yajima)
	km_setval	kx_FinalBossSeq,fbseq_sosdesttrig
	km_setflag16	kw_MisMapFreezeFlag,(kfz_timefreeze!kfz_cursorfreeze!kfz_bossfreeze)
.skip5
	bra	.skip
	endc

;=====================================================================
;*			Set Replay Params			*
;=====================================================================
return_replayparams
	ifeq	1
	php
	a16
	longi
;********* Current Buffer Keep ************
;* Total Time & Total Enemy number *
	km_blocktrans	kx_replaytmplist,kx_replaycurlist,replaylistlen

;* Planet Buffer Keep *
	LONGA
	ldx	kx_planetlistptr
.loop_planet
	ldy	#planetreplaysize/2
	phx
.loop_states
;* Planet List*
	lda.w	mmx_planetflag,x
	sta.w	mmx_Curplanetflag,x
	inx
	inx
	dey
	bne	.loop_states

	plx
	lda.w	mmx_planetnext,x
	beq	.finish_planet
	tax
	bra	.loop_planet
.finish_planet
;* Enemy List *
	LONGA
	km_stxvar	kx_CURenlistptr,kx_enlistptr
	km_stxvar	kx_CURenfreeptr,kx_enfreeptr
	km_blocktrans	kx_enemylist,kx_CURenemylist,mmx_enemylen*_enemynum
;----------------------------------------------------------------------------
;* Replay Initial *
	km_blocktrans	kx_replaybaklist,kx_replaytmplist,replaylistlen

;* Replay Return *
	LONGA
	ldx	kx_planetlistptr
.loop_planet2
	ldy	#planetreplaysize/2
	phx
.loop_states2
	lda.w	mmx_Repplanetflag,x
	sta.w	mmx_planetflag,x
	inx
	inx
	dey
	bne	.loop_states2

	plx
	lda.w	mmx_planetnext,x
	beq	.finish_planet2
	tax
	bra	.loop_planet2
.finish_planet2
;* Enmey List Replay *
	LONGA
	km_stxvar	kx_enlistptr,kx_REPenlistptr
	km_stxvar	kx_enfreeptr,kx_REPenfreeptr
	km_blocktrans	kx_repenemylist,kx_enemylist,mmx_enemylen*_enemynum
	plp
	endc
	rts

;=====================================================================
;*
;=====================================================================
return_currentparams
	LONGA
	LONGI
	ifeq	1
;* Return Currnet Params *
	km_blocktrans	kx_replaycurlist,kx_replaytmplist,replaylistlen

;* Planet *
	ldx	kx_planetlistptr
.loop_planet
	ldy	#planetreplaysize/2
.loop_states
	lda.w	mmx_Curplanetflag,x
	sta.w	mmx_planetflag,x
	inx
	inx
	dey
	bne	.loop_states

	lda.w	mmx_planetnext,x
	beq	.finish_planet
	tax
	bra	.loop_planet
.finish_planet

;* Return Current Enemy List *
	km_stxvar	kx_enlistptr,kx_CURenlistptr
	km_stxvar	kx_enfreeptr,kx_CURenfreeptr
	km_blocktrans	kx_CURenemylist,kx_enemylist,mmx_enemylen*_enemynum
	endc
	RTS





;1995/1/31 :(comment)
	IFEQ	1
;--- Draw List size ---
	km_setval.l	m_planetlen,m_planetdrawlen	;planetdrawsize
;* shadow list *

;* planet List *
	ldx	#0
	ldy	kx_planetlistptr
	stz	mmx_DrawPlanetCnt
.LOOP
	cpy	kx_MeteorPtr
	beq	.Skip
	lda.w	mmx_bitmapcx,y
	sta.l	mmm_planetcx,x
	lda.w	mmx_bitmapcy,y
	sta.l	mmm_planetcy,x
	lda.w	mmx_planetR,y
	sta.l	mmm_planetR,x
	lda.w	mmx_planetsprite,y
	sta.l	mmm_planetsprite,x

	inc	mmx_DrawPlanetCnt		;planet no kazu
	txa
	clc
	adc	#m_planetdrawlen	;planetdrawsize
	tax
.Skip
	lda.w	mmx_planetnext,y
	tay				;NEXT Planet List Pointer
	bne	.LOOP
;--- planet no kazu ---
	lda	mmx_DrawPlanetCnt
	sta.l	m_planetcnt
;--- planet angle y ----
	km_addstaval	mmw_planetroty,$100
	sta.l	m_planetroty
	ENDC


	IFEQ	1
;---------------------------------------------------------
;******* Debug mode *******
;* force soft ware reset *
	km_Debug_reset
;* prev check *
	km_acmpjoypad	prev
	bne	.noprev
	km_settmpgamemode	selectmissionplayer	;[GAME MODE]
	ksound	cancel
	bra	.bgmfade
.noprev
	ENDC
;---------------------------------------------------------------------
;*			Now Not Using				*
;---------------------------------------------------------------------
;-------------------------------------------------------------
;*		Planet Making (CGX kakikae Ver)		*
;-------------------------------------------------------------
	IFEQ	1
	lda.l	KCGSCTransTimer
	beq	.changeADDR
	dec	a
	sta.l	KCGSCTransTimer
	bra	.skip
.changeADDR
	lda	#20
	sta.l	KCGSCTransTimer

	a16
	lda.l	KCGXSCRTransCPUAddr
	clc
	adc	#$800
	cmp	#$2000
	bne	.setadr
	lda	#0
.setadr
	sta.l	KCGXSCRTransCPUAddr
.skip
	a8
	ENDC


;*******************************
;* Collision (Size) List Copy *
;*******************************
	IFEQ	1
	a16
	lda	#$400
	jsl	alloc_l
	sta	kx_BGcolltbladdr
	ENDC
;*******************************
;* Sprite Sub (Size) List Copy *
;*******************************
	IFEQ	1
	a16
	lda	#mm_SpriteSizeLen
	jsl	alloc_l
	sta	mmx_sprsizeaddr

;* sprite size list copy *
	tay
	ldx	#0
	a8
.nxt_size
	lda.l	SpriteSizeFlag,x
	sta.w	heap,y
	inx
	iny
	cpx	#mm_SpriteSizeLen
	bne	.nxt_size
	ENDC
;******************************
;* OAM Data (Station) Copy *
;******************************
	IFEQ	1
	a16
	lda	#mm_sprstationlen
	jsl	alloc_l
	sta	mmx_sprstationaddr

;* sprite (station) copy *
	tay
	ldx	#0
	a8
.nxt_station
	lda.l	mm_sprstation,x
	sta.w	heap,y
	inx
	iny
	cpx	#mm_sprstationlen
	bne	.nxt_station
	ENDC
;*********************************************
;* Enemy Chart Data Copy 	*
;*********************************************
	IFEQ	1
	a16
	lda	#mm_enemychartlen
	jsl	alloc_l
	sta	mmx_enemychartddr

;* enemy chart data copy *
	tay
	ldx	#0
	a8
.nxt_chart
	lda.l	mm_enemychart,x
	sta.w	heap,y
	inx
	iny
	cpx	#mm_enemychartlen
	bne	.nxt_chart
	ENDC

;*********************************************
;* OAM Data (Gesso ANM pattern) Copy 	*
;*********************************************
	IFEQ	1
	a16
	lda	#mm_sprgessolen
	jsl	alloc_l
	sta	mmx_sprgessoaddr

;* sprite (gesso) copy *
	tay
	ldx	#0
	a8
.nxt_gesso
	lda.l	mm_sprgesso,x
	sta.w	heap,y
	inx
	iny
	cpx	#mm_sprgessolen
	bne	.nxt_gesso

	ENDC

;******************************
;* Sprite Data (ball) Copy    *
;******************************
	ifeq	1
	a16
	lda	#(mmx_balllen*3)
	jsl	alloc_l
	sta	mmx_sprballaddr
	a8
	endc
;*************************
;* Collision List Copy   *
;*************************
	IFEQ	1
	a16
	lda	#mm_col_listlen
	jsl	alloc_l
	sta	mmx_collisaddr
;* collision list copy *
	tay

	ldx	#0	
	a8
.nxt_col
	lda.l	mm_col_list,x
	sta.w	heap,y
	inx
	iny
	cpx	#mm_col_listlen
	bne	.nxt_col
	ENDC
;=====================================================================
;*			Keep Replay Params			*
;=====================================================================
	ifeq	1
keep_replayparams
	shorta
	longi
	phb
	db7e
;* Save Params *
	km_blocktrans	kx_replaytmplist,kx_replaybaklist,replaylistlen

;* Planet *
	a16
	ldx	kx_planetlistptr
.loop_planet
	ldy	#planetreplaysize/2
.loop_states
	lda.w	mmx_planetflag,x
	sta.w	mmx_Repplanetflag,x
	inx
	inx
	dey
	bne	.loop_states

	lda.w	mmx_planetnext,x
	beq	.finish_planet
	tax
	bra	.loop_planet
.finish_planet

;* Enemy List *
	km_setvar	kx_repenlistptr,kx_enlistptr
	km_setvar	kx_repenfreeptr,kx_enfreeptr
	km_blocktrans	kx_enemylist,kx_repenemylist,mmx_enemylen*_enemynum

	a8
	plb
	rts

	endc

	IFEQ	1
;---------------------------------------------------------------------
;*		Missile Issei Hassya				*
;---------------------------------------------------------------------
mmchart_Capture3_1
mmchart_Capture3_2
mmchart_Capture3_3
mmchart_Capture3_4
	longa
	km_setmismaptrflag	missileall
	brl	mmchart_Capture5_1

	IFEQ	1
mmchart_Capture3_2
	longa
	lda	kx_planetkazu
	km_beq	mmchart_capture5_1	;mm_noplanet
	lda	kx_missilecurrent
	beq	.missle_allhassya

.missle_allhassya
	longa
	km_clrmismapfzflag	misbornfreeze
	jsr	ms_GoAll
	km_beq	mmchart_capture5_1	;mm_noplanet

	km_setmismapchflag	demowait
	km_setval	kx_expdemowait,10*8
	km_setval	kx_MisMapNextSeq,mmseq_capture3_3

	km_bitcheckmistotalflag		bshojyuu
	bne	.2times
.1times
	km_setflag16	mmx_trigmessage,ymes_missileallfire1
	bra	.skip
.2times
	km_setflag16	mmx_trigmessage,ymes_missileallfire2
.skip
	brl	mmchart_messagetrig

mmchart_Capture3_3
	longa
	km_setmismapdemoflag	missilealldemo
	km_clrflag16.w	kw_MisMapFreezeFlag,kfz_misbornfreeze
	km_setval	kx_MisMapSeq,mmseq_capture3_4
	rts
mmchart_Capture3_4
	longa
	lda	kx_missileappcnt
	beq	.finish
	rts
.finish
	km_clrmismapdemoflag	missilealldemo
	brl	mmchart_Capture5_1
	ENDC
;---------------------------------------------------------------------

;---------------------------------------------------------------------
;*		Senkan Hojyuu & Zaco Enemy Hassya 1st		*
;---------------------------------------------------------------------
mmchart_Capture1_1
	longa
	lda	kx_zacocurrent
	ora	kx_missilecurrent
	ora	kx_battleshipcurrent
	beq	.trigger_on	;zaco ga inaku rarumade count !!
	rts
.trigger_on
	km_setmismapchflag	demowait	;demo start trigger
	km_setflag16	mmx_trigmessage,ymes_battleshipadd
	km_setval	kx_expdemowait,7*8
	km_setval	kx_MisMapNextSeq,mmseq_capture1_2
	brl	mmchart_messagetrig
;---------------------------------------------------------------------
mmchart_Capture1_2
	longa

	km_setvar	kw_MisMapfreezeFlagBak,kw_MisMapFreezeFlag
	km_setmismapfzflag	gamefreeze	;allfreeze

	jsr	SetBattleShip	;sankan hojyuu !!
	km_setmistotalflag	bshojyuu	;hojyuu shita
	km_clrmistotalflag	bstotugeki	;totugeki flag clear

	jsr	mm_planethojyuuchart

	km_clrmismapfzflag	btshipfreeze
	km_clrmismapfzflag	sosfreeze
	km_clrmismapstflag	expdemostart
	km_setmismapdemoflag	battleshiphojyuudemo
	km_setval	kx_MisMapSeq,mmseq_capture1_3
;---------------------------------------------------------------------
mmchart_Capture1_3
	longa
	lda	kx_battleshipcurrent
	beq	.waiting
	km_bitcheckmismapstflag	expdemostart
	beq	.waiting

	km_clrmismapdemoflag	battleshiphojyuudemo
	km_clrmismapstflag	expdemostart	;[moshi subeteno zaco ga syutugeki shitara no flag!!]
	km_clrmismapchflag	demowait
	km_setval	kx_MisMapSeq,mmseq_Capture2_1

	km_setvar	kw_MisMapFreezeFlag,kw_MisMapfreezeFlagBak
.waiting
	rts
;---------------------------------------------------------------------
;*		Zaco Enemy Hassya 2nd				*
;---------------------------------------------------------------------
mmchart_Capture2_1
	longa
	km_setmismapfzflag	misbornfreeze
	km_setval	kx_clearcondition,2
	km_setval	kx_MisMapSeq,mmseq_clearwait
	km_setval	kx_MisMapNextSeq,mmseq_capture3_1
	brl	mmchart_cleartrig
;---------------------------------------------------------------------
mmchart_Capture2_2

;---------------------------------------------------------------------
;*		Missile Issei Hassya				*
;---------------------------------------------------------------------
mmchart_Capture3_1
mmchart_Capture3_2
mmchart_Capture3_3
mmchart_Capture3_4
	longa
	km_setmismaptrflag	missileall
	brl	mmchart_Capture5_1

	IFEQ	1
mmchart_Capture3_2
	longa
	lda	kx_planetkazu
	km_beq	mmchart_capture5_1	;mm_noplanet
	lda	kx_missilecurrent
	beq	.missle_allhassya

.missle_allhassya
	longa
	km_clrmismapfzflag	misbornfreeze
	jsr	ms_GoAll
	km_beq	mmchart_capture5_1	;mm_noplanet

	km_setmismapchflag	demowait
	km_setval	kx_expdemowait,10*8
	km_setval	kx_MisMapNextSeq,mmseq_capture3_3

	km_bitcheckmistotalflag		bshojyuu
	bne	.2times
.1times
	km_setflag16	mmx_trigmessage,ymes_missileallfire1
	bra	.skip
.2times
	km_setflag16	mmx_trigmessage,ymes_missileallfire2
.skip
	brl	mmchart_messagetrig

mmchart_Capture3_3
	longa
	km_setmismapdemoflag	missilealldemo
	km_clrflag16.w	kw_MisMapFreezeFlag,kfz_misbornfreeze
	km_setval	kx_MisMapSeq,mmseq_capture3_4
	rts
mmchart_Capture3_4
	longa
	lda	kx_missileappcnt
	beq	.finish
	rts
.finish
	km_clrmismapdemoflag	missilealldemo
	brl	mmchart_Capture5_1
	ENDC
;---------------------------------------------------------------------
;*
;---------------------------------------------------------------------
mmchart_Capture4_1
mmchart_Capture4_2

;---------------------------------------------------------------------
;*			Dragon Go !!				*
;---------------------------------------------------------------------
mmchart_Capture5_1
	longa
	km_clrmismapchflag	demowait
	km_setval	kx_clearcondition,2
	km_setval	kx_MisMapSeq,mmseq_clearwait
	km_setval	kx_MisMapNextSeq,mmseq_capture5_3
	brl	mmchart_cleartrig

mmchart_Capture5_2
	longa

mmchart_Capture5_3
	longa
	km_setmismapchflag	demowait
	km_setval	kx_expdemowait,10*8
	km_setval	kx_MisMapNextSeq,mmseq_capture5_4

	km_bitcheckmistotalflag		bshojyuu
	bne	.2times
.1times
	km_setflag16	mmx_trigmessage,ymes_dragongo1
	bra	.skip
.2times
	km_setflag16	mmx_trigmessage,ymes_dragongo2
.skip
	brl	mmchart_messagetrig

mmchart_Capture5_4
	longa
	km_setmismapsyori	specialenemy
	km_setval	kx_MisMapSeq,mmseq_capture5_5
	rts

mmchart_Capture5_5
	longa
	km_setmismapchflag	demowait
	km_setmismapdemoflag	specialenemydemo
	jsr	SetSpecialEnemy
	km_setval	kx_MisMapSeq,mmseq_capture5_6
	rts

mmchart_Capture5_6
	longa
	lda	mmx_specialapcocnt
	bne	.skip
	km_clrmismapchflag	demowait
	km_clrmismapdemoflag	specialenemydemo
	km_setval	kx_MisMapSeq,mmseq_capture6_1

.skip
	rts

;---------------------------------------------------------------------
;*			Loop Chart				*
;---------------------------------------------------------------------
mmchart_Capture6_1
	longa
	lda	kx_battleshipcurrent
	beq	.check_hojyuu
	rts
.check_hojyuu
	lda	kx_battleshipzaico
	bne	.next_chart
.finish_chart
	km_setval	kx_MisMapSeq,mmseq_nothing
	rts
.next_chart
	brl	mmchart_capture1_1

	ENDC

