******************************************************************************* * Stalker. Written by Readysoft. * Copyright 1992,1993 RS. All rights reserved. 1992.05.25.-1994.07.25. * v0.782. * ******************************************************************************* INCDIR 'Work:System/Include/' INCLUDE 'ReadySystem_Work.I' INCLUDE 'RUN1200.I' INCDIR 'Work:Stalker/Include/' INCLUDE 'BGfxA.I' INCLUDE 'Tools.I' >EXTERN 'Work:Stalker/Data/System_Work',SystemCode >EXTERN 'Work:Stalker/Data/Infofield.back',Infofield.back >EXTERN 'Work:Stalker/Data/mod.Sfx0',SFX >EXTERN 'Work:Stalker/Data/Infofield.fnth',Infofield.fnth >EXTERN 'Work:Stalker/Data/Little1.fnth',Little1.fnth >EXTERN 'Work:Stalker/Data/LegStep.fnth',LegStep.fnth >EXTERN 'Work:Stalker/Data/LegTurn.fnth',LegTurn.fnth >EXTERN 'Work:Stalker/Data/LegCrouch.fnth',LegCrouch.fnth >EXTERN 'Work:Stalker/Data/Explode.fnth',Explode.fnth >EXTERN 'Work:Stalker/Data/Infofield.fntd',Infofield.fntd >EXTERN 'Work:Stalker/Data/Little1.fntd',Little1.fntd >EXTERN 'Work:Stalker/Data/LegStep.fntd',LegStep.fntd >EXTERN 'Work:Stalker/Data/LegTurn.fntd',LegTurn.fntd >EXTERN 'Work:Stalker/Data/LegCrouch.fntd',LegCrouch.fntd >EXTERN 'Work:Stalker/Data/Explode.fntd',Explode.fntd >EXTERN 'Work:Stalker/Data/BossE.fnth',BossW1.fnth >EXTERN 'Work:Stalker/Data/BossB.fnth',BossW2.fnth >EXTERN 'Work:Stalker/Data/BossE.fntd',BossW1.fntd >EXTERN 'Work:Stalker/Data/BossB.fntd',BossW2.fntd >EXTERN 'Work:Stalker/Data/BGfxA0.fnth',BGfx0.fnth >EXTERN 'Work:Stalker/Data/BGfxA1.fnth',BGfx1.fnth >EXTERN 'Work:Stalker/Data/BGfxA0.fntd',BGfx0.fntd >EXTERN 'Work:Stalker/Data/BGfxA1.fntd',BGfx1.fntd >EXTERN 'Work:Stalker/Data/RCtrlDroid.font',RCtrlDr.font >EXTERN 'Work:Stalker/Data/RadarDroid.font',RadarDr.font >EXTERN 'Work:Stalker/Data/MineADroid.font',MineADr.font >EXTERN 'Work:Stalker/Data/MineBDroid.font',MineBDr.font >EXTERN 'Work:Stalker/Data/WalkADroid.font',WalkADr.font >EXTERN 'Work:Stalker/Data/Selector.font',F.Selector.font >EXTERN 'Work:Stalker/Data/Dark.font',F.Dark.font >EXTERN 'Work:Stalker/Data/Bright.font',F.Bright.font >EXTERN 'Work:Stalker/Data/Tools.font',F.Tools.font >EXTERN 'Work:Stalker/Data/NumKey.font',F.NumKey.font >EXTERN 'Work:Stalker/Data/Pointer.sprs',F.Pointer.sprs ******************************************************************************* * Assemble Mode Definitions ******************************************************************************* WORK EQU 1 run from AsmOne CHIP EQU 2 run with Chip-Only FAST EQU 3 run with Chip-Fast ;------------------------------------------------------------------------------ ; Current Mode ;------------------------------------------------------------------------------ MODE EQU WORK ******************************************************************************* * Absolute addresses ******************************************************************************* IF MODE=WORK ChipMemA EQU $80000 ChipMemB EQU $c0000 FastMemA EQU $100000 FastMemB EQU $140000 ENDIF IF MODE=CHIP ChipMemA EQU $0 ChipMemB EQU $40000 FastMemA EQU $80000 FastMemB EQU $c0000 ENDIF IF MODE=FAST ChipMemA EQU $0 ChipMemB EQU $40000 FastMemA EQU $c00000 FastMemB EQU $c40000 ENDIF ChipMemASize EQU $40000 ChipMemBSize EQU $40000 FastMemASize EQU $40000 FastMemBSize EQU $40000 SwapMem1 EQU ChipMemB SwapMem2 EQU FastMemB SwapMemSize EQU $40000 256K MaxGameCodeSize EQU $20000 128K ******************************************************************************* * Memory ******************************************************************************* ;------------------------------------------------------------------------------ ; ChipMemA ;------------------------------------------------------------------------------ RSRESET RS.B ChipMemA SystemChip RS.B 8192 = System 8K (8192) PlayfieldMap1 RS.B 43560 = Screen 128K (130680) PlayfieldMap2 RS.B 43560 = PlayfieldMap3 RS.B 43560 = RS.B 392 Infofield.back RS.B 11200 = Const 75K (76984) Infofield.fntd RS.B 3040 = Little1.fntd RS.B 1000 = LegStep.fntd RS.B 9600 = LegTurn.fntd RS.B 6048 = LegCrouch.fntd RS.B 1296 = Explode.fntd RS.B 3840 = SFX RS.B 40960 ? BossW1.fntd RS.B 15360 = Boss 30K (30720) BossW2.fntd RS.B 15360 = ChipMemATop RS.B 0 Free 15K IF (ChipMemATop-ChipMemA)>ChipMemASize PRINTT '****************************************' PRINTT '* ChipMemA too long ! *' PRINTT '****************************************' ENDIF ;------------------------------------------------------------------------------ ; ChipMemB ;------------------------------------------------------------------------------ RSRESET RS.B ChipMemB RCtrlDr.font RS.B 4284 Else 96K RadarDr.font RS.B 12724 MineADr.font RS.B 7358 MineBDr.font RS.B 9074 WalkADr.font RS.B 27108 BGfx0.fntd RS.B 72000 = BGfx 160K (162000) BGfx1.fntd RS.B 90000 = ChipMemBTop RS.B 0 IF (ChipMemBTop-ChipMemB)>ChipMemBSize PRINTT '****************************************' PRINTT '* ChipMemB too long ! *' PRINTT '****************************************' ENDIF ;------------------------------------------------------------------------------ ; FastMemA ;------------------------------------------------------------------------------ RSRESET RS.B FastMemA SystemFast RS.B 8192 = System 8K (8192) SystemCode RS.B 29072 = SystemCode 29K (29072) GameCode RS.B MaxGameCodeSize = GameCode 128K (131072) Infofield.fnth RS.B 2052 = Const 9K (9016) Little1.fnth RS.B 2532 = LegStep.fnth RS.B 1348 = LegTurn.fnth RS.B 1124 = LegCrouch.fnth RS.B 964 = Explode.fnth RS.B 996 = BossW1.fnth RS.B 2048 = Boss 4K (4096) BossW2.fnth RS.B 2048 = BGfx0.fnth RS.B 16384 = BGfx 32K (32768) BGfx1.fnth RS.B 16384 = FastMemATop RS.B 0 Free 46K (Else) IF (FastMemATop-FastMemA)>FastMemASize PRINTT '****************************************' PRINTT '* FastMemA too long ! *' PRINTT '****************************************' ENDIF ;------------------------------------------------------------------------------ ; FastMemB swapped out ;------------------------------------------------------------------------------ RSRESET RS.B FastMemB F.Selector.font RS.B 67698 F.Dark.font RS.B 9860 F.Bright.font RS.B 9860 F.Tools.font RS.B 42100 F.NumKey.font RS.B 7376 F.Pointer.sprs RS.B 1128 FastMemBTop RS.B 0 IF (FastMemBTop-FastMemB)>FastMemBSize PRINTT '****************************************' PRINTT '* FastMemB too long ! *' PRINTT '****************************************' ENDIF ;------------------------------------------------------------------------------ ; FastMemB swapped in ;------------------------------------------------------------------------------ RSRESET RS.B ChipMemB Selector.font RS.B 67698 Dark.font RS.B 9860 Bright.font RS.B 9860 Tools.font RS.B 42100 NumKey.font RS.B 7376 Pointer.sprs RS.B 1128 ;------------------------------------------------------------------------------ ; Others ;------------------------------------------------------------------------------ MainMenuMap EQU PlayfieldMap3 SubMenuMap EQU PlayfieldMap2 MenuCtrlMap EQU PlayfieldMap3+26400 RSRESET RS.B PlayfieldMap3 MovyK RS.B 4620 MovyKMask RS.B 4620 MovyK1 RS.B 4620 MovyK2 RS.B 4620 MovyKRight RS.B 4620 MovySlice1 RS.B 1320 MovySliceMask1 RS.B 1320 MovySlice2 RS.B 1320 MovySliceMask2 RS.B 1320 RSRESET RS.B PlayfieldMap3 NumKeyBuffer RS.B 3360 IF MODE=WORK GameCodeAddr EQU GameCode ELSE GameCodeAddr EQU $80000 ENDIF ******************************************************************************* * Constants ******************************************************************************* FALSE EQU 0 TRUE EQU -1 ;------------------------------------------------------------------------------ ; Other Constants ;------------------------------------------------------------------------------ se_PtrCtrl SET inl_pc_Mouse se_PtrCtrl SET se_PtrCtrl+inl_pc_Joy1 se_PtrCtrl SET se_PtrCtrl+inl_pc_CrsrK se_PtrCtrl SET se_PtrCtrl+inl_pc_Attach se_PtrCtrl SET se_PtrCtrl+inl_pc_Enable of_I2FontCode SET fnt_ob_ObjItems+fnt_oi_SizeOf of_I2FontCode SET of_I2FontCode+fnt_oi_FontCode MaxToolShape EQU 64 MaxSameTools EQU 16 ToolsPerPage EQU 6 ;------------------------------------------------------------------------------ ; KGfx Numbers ;------------------------------------------------------------------------------ kn_Null EQU 0 kn_KeyK EQU 1 kn_Lift0 EQU 2 kn_Lift1 EQU 3 kn_Top EQU 4 ;------------------------------------------------------------------------------ ; Font Codes ;------------------------------------------------------------------------------ RSRESET fc_Null RS.B 1 fc_Infofield RS.B 1 fc_Little1 RS.B 1 fc_LegStep RS.B 1 fc_LegTurn RS.B 1 fc_LegCrouch RS.B 1 fc_Explode RS.B 1 fc_Boss RS.B 1 fc_BossA RS.B 1 fc_BossB RS.B 1 fc_BossC RS.B 1 fc_BossD RS.B 1 fc_BossE RS.B 1 fc_BossF RS.B 1 fc_BossG RS.B 1 fc_BossH RS.B 1 fc_BossI RS.B 1 fc_RCtrlDr RS.B 1 fc_RadarDr RS.B 1 fc_MineADr RS.B 1 fc_MineBDr RS.B 1 fc_WalkADr RS.B 1 fc_BGfx0 RS.B 1 fc_BGfx1 RS.B 1 fc_Selector RS.B 1 fc_NumKey RS.B 1 fc_Tools RS.B 1 fc_Dark RS.B 1 fc_Bright RS.B 1 ;------------------------------------------------------------------------------ ; SprS Codes ;------------------------------------------------------------------------------ RSRESET sc_Null RS.B 1 sc_Pointer RS.B 1 ;------------------------------------------------------------------------------ ; AudioChannel Codes ;------------------------------------------------------------------------------ ac_0 EQU 0 ac_1 EQU 1 ac_2 EQU 2 ac_3 EQU 3 ac_Background EQU 0 ac_Boss EQU 1 ac_Droid EQU 2 ac_Else EQU 3 ;------------------------------------------------------------------------------ ; Effect Codes ;------------------------------------------------------------------------------ ef_No EQU 0 ef_Noise EQU 1 ef_Screen EQU 12 ef_MovyStart EQU 12 ef_MovyStop EQU 13 ef_ChangeWeapon EQU 18 ef_Break EQU 21 ;------------------------------------------------------------------------------ ; Gadget Codes ;------------------------------------------------------------------------------ RSRESET gc_Null RS.B 1 gc_Icon1 RS.B 1 gc_Icon2 RS.B 1 gc_Icon3 RS.B 1 gc_Icon4 RS.B 1 gc_Icon5 RS.B 1 gc_Icon6 RS.B 1 gc_Line0 RS.B 1 gc_Line1 RS.B 1 gc_Line2 RS.B 1 gc_Line3 RS.B 1 gc_Line4 RS.B 1 gc_Line5 RS.B 1 gc_Line6 RS.B 1 gc_Left RS.B 1 gc_Right RS.B 1 gc_Exit RS.B 1 gc_Return RS.B 1 gc_F6 RS.B 1 gc_F7 RS.B 1 gc_F8 RS.B 1 gc_F9 RS.B 1 ;------------------------------------------------------------------------------ ; Gadget Types ;------------------------------------------------------------------------------ gt_NB SET inl_gf_Enable normal bool gadget gt_AB SET inl_gf_Auto+inl_gf_Enable auto bool gadget ;------------------------------------------------------------------------------ ; NewField Definitions ;------------------------------------------------------------------------------ nf_No EQU -1 nf_Init EQU 0 nf_ESC EQU 1 nf_Forward EQU 2 nf_Back EQU 3 nf_Left EQU 4 nf_Right EQU 5 nf_Up EQU 6 nf_Down EQU 7 nf_LifeLost EQU 8 ;------------------------------------------------------------------------------ ; Sector Structure ;------------------------------------------------------------------------------ RSRESET se_PlayFieldGfx RS.L 1 ptr to playfield vector se_FieldGfx RS.L 1 ptr to field vector se_KGfx RS.L 1 ptr to kgfx vector se_Droids RS.L 1 ptr to droids se_SizeOf RS.B 1 ;------------------------------------------------------------------------------ ; PlayField Structure ;------------------------------------------------------------------------------ RSRESET pf_ForegrField RS.B 1 foreground field pf_BackgrField RS.B 1 background field pf_Palette RS.B 1 palette pf_NU RS.B 1 not used pf_SizeOf RS.B 0 ;------------------------------------------------------------------------------ ; FieldGfx Structure ;------------------------------------------------------------------------------ RSRESET fg_KGfx0 RS.W 1 kgfx 0 fg_KGfx1 RS.W 1 fg_KGfx2 RS.W 1 fg_KGfx3 RS.W 1 fg_KGfx4 RS.W 1 fg_KGfx5 RS.W 1 fg_KGfx6 RS.W 1 fg_KGfx7 RS.W 1 fg_KGfx8 RS.W 1 fg_KGfx9 RS.W 1 fg_KGfx10 RS.W 1 fg_KGfx11 RS.W 1 fg_SizeOf RS.B 0 ;------------------------------------------------------------------------------ ; KGfx Structure (SpaceGfx is the same) ;------------------------------------------------------------------------------ RSRESET kg_Type RS.B 1 kg_Switch RS.B 1 kg_OnOff RS.W 1 kg_FontFlags RS.W 1 font flags kg_D0Image RS.B 1 decor 0 image kg_D0Pos RS.B 1 decor 0 position kg_D1Image RS.B 1 kg_D1Pos RS.B 1 kg_D2Image RS.B 1 kg_D2Pos RS.B 1 kg_D3Image RS.B 1 kg_D3Pos RS.B 1 kg_D4Image RS.B 1 kg_D4Pos RS.B 1 kg_D5Image RS.B 1 kg_D5Pos RS.B 1 kg_D6Image RS.B 1 kg_D6Pos RS.B 1 kg_D7Image RS.B 1 kg_D7Pos RS.B 1 kg_D8Image RS.B 1 kg_D8Pos RS.B 1 kg_D9Image RS.B 1 kg_D9Pos RS.B 1 kg_D10Image RS.B 1 kg_D10Pos RS.B 1 kg_D11Image RS.B 1 kg_D11Pos RS.B 1 kg_A0Image RS.B 1 anim 0 image kg_A0Pos RS.B 1 anim 0 position kg_A1Image RS.B 1 kg_A1Pos RS.B 1 kg_C0Image RS.B 1 covering 0 image kg_C0Pos RS.B 1 covering 0 position kg_C1Image RS.B 1 kg_C1Pos RS.B 1 kg_SizeOf RS.B 0 ;------------------------------------------------------------------------------ ; kg_Type Bit Definition ;------------------------------------------------------------------------------ kg_tyb_Left EQU 7 kg_tyb_Right EQU 6 kg_tyb_Up EQU 5 kg_tyb_Down EQU 4 kg_tyb_Forward EQU 3 kg_tyb_Back EQU 2 ;------------------------------------------------------------------------------ ; KType Bit Values ;------------------------------------------------------------------------------ kg_ty_Left EQU 1<<7 kg_ty_Right EQU 1<<6 kg_ty_Up EQU 1<<5 kg_ty_Down EQU 1<<4 kg_ty_Forward EQU 1<<3 kg_ty_Back EQU 1<<2 kg_ty_DirMask EQU $fc kg_ty_UDFBMask EQU $3c kg_ty_ShapeMask EQU $03 ;------------------------------------------------------------------------------ ; Switch Values ;------------------------------------------------------------------------------ kg_sw_Off EQU 0 kg_sw_On EQU 1 ;------------------------------------------------------------------------------ ; SpecSwitch Values ;------------------------------------------------------------------------------ kg_ss_Covering EQU 0 kg_ss_Anim EQU 1 ;------------------------------------------------------------------------------ ; Lift Structure ;------------------------------------------------------------------------------ RSRESET li_Shape RS.B 1 li_Status RS.B 1 li_XPos RS.W 1 li_YPos RS.W 1 li_Last1F RS.B 1 li_Last2F RS.B 1 li_Last1X RS.W 1 li_Last2X RS.W 1 li_Last1Y RS.W 1 li_Last2Y RS.W 1 li_Last1O RS.L 1 li_Last2O RS.L 1 li_SizeOf RS.B 0 ;------------------------------------------------------------------------------ ; li_Status Definitions ;------------------------------------------------------------------------------ li_st_No EQU 0 do not work li_st_Control EQU 1 ;------------------------------------------------------------------------------ ; Droid Structure ;------------------------------------------------------------------------------ RSRESET dr_Type RS.B 1 dr_Field RS.B 1 dr_K RS.B 1 dr_Energy RS.B 1 dr_SizeOf RS.B 0 ;------------------------------------------------------------------------------ ; dr_Type Definitions ;------------------------------------------------------------------------------ dr_ty_Nothing EQU 0 dr_ty_RCtrl EQU 1 dr_ty_Radar EQU 2 dr_ty_MineA EQU 3 dr_ty_MineB EQU 4 dr_ty_WalkA EQU 5 dr_ty_Fly EQU 6 dr_ty_HD3 EQU 7 dr_ty_Boss EQU 128 dr_ty_BossA EQU 129 dr_ty_BossB EQU 130 dr_ty_BossC EQU 131 dr_ty_BossD EQU 132 dr_ty_BossE EQU 133 dr_ty_BossF EQU 134 dr_ty_BossG EQU 135 dr_ty_BossH EQU 136 dr_ty_BossI EQU 137 dr_ty_EndOfList EQU 255 ;------------------------------------------------------------------------------ ; DroidInfo Structure ;------------------------------------------------------------------------------ RSRESET di_Droid RS.L 1 ptr to Droid structure di_Shape RS.L 1 di_XPos RS.W 1 di_YPos RS.W 1 di_Counter RS.W 1 di_Boss RS.B 1 di_Dir RS.B 1 direction of moving di_Status RS.B 1 what to do di_Phase RS.B 1 anim phase di_MaxPhase RS.B 1 max. anim phase di_PhTimer RS.B 1 anim phase timer di_MaxPhTimer RS.B 1 max. anim phase timer di_FirePhase RS.B 1 fire phase di_MaxFirePhase RS.B 1 max. fire phase di_FireTimer RS.B 1 fire phase timer di_MaxFireTimer RS.B 1 max. fire phase timer di_LiftPhase RS.B 1 di_WayCnt RS.B 1 di_K RS.B 1 di_XK RS.B 1 di_YK RS.B 1 di_XKPos RS.B 1 di_KType RS.B 1 di_Last1F RS.B 1 flag di_Last2F RS.B 1 flag di_Last1X RS.W 1 di_Last2X RS.W 1 di_Last1Y RS.W 1 di_Last2Y RS.W 1 di_Last1O RS.L 1 di_Last2O RS.L 1 di_SizeOf RS.B 0 ;------------------------------------------------------------------------------ ; di_Status Definitions ;------------------------------------------------------------------------------ di_st_No EQU 0 do not work di_st_Control EQU 1 check control di_st_Stand EQU 2 standing di_st_Move EQU 3 moving di_st_Turn EQU 4 turning di_st_Crouch EQU 5 crouching di_st_LiftUp EQU 6 lift up di_st_LiftDown EQU 7 lift down di_st_Rise EQU 8 rising di_st_Sink EQU 9 sinking di_st_Explode EQU 10 exploding ;------------------------------------------------------------------------------ ; BossShape Structure ;------------------------------------------------------------------------------ RSRESET bs_Ident RS.B 1 identifier bs_FontCode RS.B 1 font code bs_MaxFirePhase RS.B 1 bs_MaxFireTimer RS.B 1 bs_FireRdX RS.W 1 bs_FireRdY RS.W 1 bs_FireLdX RS.W 1 bs_FireLdY RS.W 1 bs_MissileShape RS.L 1 ptr to MissileShape bs_AmmoSize RS.W 1 bs_WeaponInfo RS.L 1 bs_SizeOf RS.B 0 ;------------------------------------------------------------------------------ ; WeaponInfo Structure ;------------------------------------------------------------------------------ RSRESET wi_Ammo RS.W 1 wi_SizeOf RS.B 0 ;------------------------------------------------------------------------------ ; Missile Structre ;------------------------------------------------------------------------------ RSRESET mi_Shape RS.L 1 ptr to MissileShape mi_XPos RS.W 1 x position mi_YPos RS.W 1 y position mi_Status RS.B 1 status mi_Phase RS.B 1 anim phase mi_Timer RS.B 1 anim phase timer mi_NU RS.B 1 mi_Last1F RS.B 1 mi_Last2F RS.B 1 mi_Last1X RS.W 1 mi_Last2X RS.W 1 mi_Last1Y RS.W 1 mi_Last2Y RS.W 1 mi_Last1I RS.B 1 mi_Last2I RS.B 1 mi_SizeOf RS.B 0 ;------------------------------------------------------------------------------ ; MissileShape Structre ;------------------------------------------------------------------------------ RSRESET ms_Ident RS.B 1 ms_FontCode RS.B 1 ms_RightdX RS.W 1 start pos. right dX ms_RightdY RS.W 1 start pos. right dY ms_LeftdX RS.W 1 start pos. left dX ms_LeftdY RS.W 1 start pos. left dY ms_dX RS.W 1 delta x for center ms_dY RS.W 1 delta y for center ms_MaxPhase RS.B 1 ms_MaxTimer RS.B 1 ms_MaxHitPhase RS.B 1 ms_MaxHitTimer RS.B 1 ms_FireEffect RS.B 1 fire effect ms_FireTune RS.B 1 fire tune ms_HitEffect RS.B 1 hit effect ms_HitTune RS.B 1 hit tune ms_Strength RS.B 1 strength ms_Speed RS.B 1 speed ms_SizeOf RS.B 0 ;------------------------------------------------------------------------------ ; BoxList Structure ;------------------------------------------------------------------------------ RSRESET bl_ItemNum RS.W 1 bl_Items RS.B 0 bl_SizeOf RS.B 0 ;------------------------------------------------------------------------------ ; Box Structure ;------------------------------------------------------------------------------ RSRESET bo_X1 RS.W 1 bo_Y1 RS.W 1 bo_X2 RS.W 1 bo_Y2 RS.W 1 bo_SizeOf RS.B 0 ******************************************************************************* * ?? ******************************************************************************* ;------------------------------------------------------------------------------ ; ToolShape Structure ;------------------------------------------------------------------------------ RSRESET ts.Object RS.L 1 ts.Object2 RS.L 1 ts.InfoText RS.L 1 ts.InfoObj1 RS.L 1 ts.InfoObj2 RS.L 1 ts.ScanText RS.L 1 ts.Name RS.L 1 ts.SizeOf RS.B 0 ;------------------------------------------------------------------------------ ; Tool Structure ;------------------------------------------------------------------------------ RSRESET to.ToolShape RS.L 1 to.Sector RS.B 1 -1 : in the store to.Field RS.B 1 to.K RS.B 1 to.Energy RS.B 1 to.Status RS.B 1 to.NU RS.B 1 to.SizeOf RS.B 0 ;------------------------------------------------------------------------------ ; SelectorInfo Structure ;------------------------------------------------------------------------------ RSRESET si.Count RS.L 1 # of tools si.ToolShape RS.L 1 ptr to toolshape si.SizeOf RS.B 0 ******************************************************************************* * Macro ******************************************************************************* W_BLIT MACRO btst #14,2(a6) bne.s *-6 ENDM C MACRO ; move.w \1,$180(a6) ENDM ******************************************************************************* * Program ******************************************************************************* ORG GameCode LOAD GameCodeAddr IF 1=2 move.l #Copper,$80(a6) Copper DC.W $180,0,$182,$ccc DC.W $8e,$2c81,$90,$2cc1 DC.W $92,$3c,$94,$d4 DC.W $108,0,$10a,0 DC.W $e0,8,$e2,0,$100,$9200 DC.W $ffff,$fffe FN DC.B 'Picture2',0 Label DC.B 'Stalker Disk 1',0 dos.Name DOS.NAM dos.Base DC.L 0 trd.Name TRD.NAM trd.Base DC.L 0 move.l #Copper,$dff080 lea dos.Name,a1 open dos.library CALL exe.Base,exe_OpenLib move.l d0,dos.Base lea trd.Name,a1 open trackdisk.device CALL exe.Base,exe_OpenDev move.l d0,trd.Base lea Label,a1 moveq #2,d1 moveq #1,d2 CALL dos.Base,dos_Format move.l #$2f060,a0 move.l #20480,d0 lea FN,a1 moveq #2,d1 CALL dos.Base,dos_Save moveq #0,d1 CALL trd.Base,trd_Motor lea $140000,a0 moveq #0,d0 moveq #12*10,d1 CALL trd.Base,trd_ReadSector moveq #-1,d1 CALL trd.Base,trd_Motor w btst #6,$bfe001 bne.s w RETURN ENDIF J IF MODE=WORK RUN Program,Quit,0 ENDIF Program lea inl.Name,a1 open intuition library CALL exe.Base,exe_OpenLib move.l d0,inl.Base lea fnt.Name,a1 open font library CALL exe.Base,exe_OpenLib move.l d0,fnt.Base lea spr.Name,a1 open sprite library CALL exe.Base,exe_OpenLib move.l d0,spr.Base lea snd.Name,a1 open sound library CALL exe.Base,exe_OpenLib move.l d0,snd.Base lea kbd.Name,a1 open keyboard device CALL exe.Base,exe_OpenDev move.l d0,kbd.Base lea gam.Name,a1 open gameport device CALL exe.Base,exe_OpenDev move.l d0,gam.Base lea PfBackgrNewScr,a0 open pfbackgr screen CALL inl.Base,inl_OpenScr move.l d0,PfBackgrScreen lea PfWorkNewScr,a0 open pfwork screen CALL inl.Base,inl_OpenScr move.l d0,PfWorkScreen move.l PfWorkScreen,a0 set background of move.l PfBackgrScreen,a1 pfworkscreen CALL inl.Base,inl_SetBackgr lea PfActiveNewScr,a0 open pfactive screen CALL inl.Base,inl_OpenScr move.l d0,PfActiveScreen move.l PfActiveScreen,a0 set background of move.l PfBackgrScreen,a1 pfactivescreen CALL inl.Base,inl_SetBackgr lea MainMenuNewScr,a0 open mainmenu screen CALL inl.Base,inl_OpenScr move.l d0,MainMenuScreen lea SubMenuNewScr,a0 open submenu screen CALL inl.Base,inl_OpenScr move.l d0,SubMenuScreen lea MenuCtrlNewScr,a0 open menuctrl screen CALL inl.Base,inl_OpenScr move.l d0,MenuCtrlScreen lea InfoNewScr,a0 open info screen CALL inl.Base,inl_OpenScr move.l d0,InfoScreen CALL inl.Base,inl_Remake make copperlist lea SFX,a0 CALL snd.Base,snd_InitMusic moveq #fc_LegStep,d1 init LegStep.font lea LegStep.fnth,a0 lea LegStep.fntd,a1 CALL fnt.Base,fnt_InitFont moveq #fc_LegTurn,d1 init LegTurn.font lea LegTurn.fnth,a0 lea LegTurn.fntd,a1 CALL fnt.Base,fnt_InitFont moveq #fc_LegCrouch,d1 init LegCrouch.font lea LegCrouch.fnth,a0 lea LegCrouch.fntd,a1 CALL fnt.Base,fnt_InitFont moveq #fc_Explode,d1 init Explode.font lea Explode.fnth,a0 lea Explode.fntd,a1 CALL fnt.Base,fnt_InitFont moveq #fc_Infofield,d1 init Infofield.font lea Infofield.fnth,a0 lea Infofield.fntd,a1 CALL fnt.Base,fnt_InitFont moveq #fc_Little1,d1 init Little1.font lea Little1.fnth,a0 lea Little1.fntd,a1 CALL fnt.Base,fnt_InitFont moveq #fc_BossE,d1 init BossW1.font lea BossW1.fnth,a0 lea BossW1.fntd,a1 CALL fnt.Base,fnt_InitFont moveq #fc_BossB,d1 init BossW2.font lea BossW2.fnth,a0 lea BossW2.fntd,a1 CALL fnt.Base,fnt_InitFont moveq #fc_RCtrlDr,d1 init RCtrlDroid.font lea RCtrlDr.font,a0 lea 0,a1 CALL fnt.Base,fnt_InitFont moveq #fc_RadarDr,d1 init RadarDroid.font lea RadarDr.font,a0 lea 0,a1 CALL fnt.Base,fnt_InitFont moveq #fc_MineADr,d1 init MineADroid.font lea MineADr.font,a0 lea 0,a1 CALL fnt.Base,fnt_InitFont moveq #fc_MineBDr,d1 init MineBDroid.font lea MineBDr.font,a0 lea 0,a1 CALL fnt.Base,fnt_InitFont moveq #fc_WalkADr,d1 init WalkADroid.font lea WalkADr.font,a0 lea 0,a1 CALL fnt.Base,fnt_InitFont moveq #fc_BGfx0,d1 init BGfx0.font lea BGfx0.fnth,a0 lea BGfx0.fntd,a1 CALL fnt.Base,fnt_InitFont moveq #fc_BGfx1,d1 init BGfx1.font lea BGfx1.fnth,a0 lea BGfx1.fntd,a1 CALL fnt.Base,fnt_InitFont bsr SwapIn moveq #fc_Selector,d1 init selector.font lea Selector.font,a0 lea $0,a1 CALL fnt.Base,fnt_InitFont moveq #fc_Dark,d1 init dark.font lea Dark.font,a0 lea $0,a1 CALL fnt.Base,fnt_InitFont moveq #fc_Bright,d1 init bright.font lea Bright.font,a0 lea $0,a1 CALL fnt.Base,fnt_InitFont moveq #sc_Pointer,d1 init Pointer.sprs lea Pointer.sprs,a0 CALL spr.Base,spr_InitSprS bsr SwapOut move.l inl.Base,a0 set Sprite border move.w inl_Left(a0),d0 move.w inl_Top(a0),d1 move.w d0,d2 move.w d1,d3 sub.w #32,d0 add.w #352,d2 add.w #198,d3 CALL spr.Base,spr_SetBorder ;------------------------------------------------------------------------------ ; Start Game ;------------------------------------------------------------------------------ SG move.w #0,va.ActSector set ActiveSector move.w #31,va.ActPlayField set ActivePlayField move.w #$100,va.Money set Money move.w #4,va.Lives set Lives lea va.Weapons,a0 set Weapons move.b #dr_ty_BossE,(a0) move.b #dr_ty_BossB,1(a0) lea Boss,a0 set Boss Energy move.b #255,dr_Energy(a0) lea va.WeaponInfoE,a0 move.w #36,wi_Ammo(a0) lea va.WeaponInfoB,a0 move.w #128,wi_Ammo(a0) lea va.BossInfo,a0 move.l #Boss,di_Droid(a0) move.b #TRUE,di_Boss(a0) move.w #80,di_XPos(a0) move.w #66,di_YPos(a0) move.b #di_st_Control,di_Status(a0) move.b #gam_di_Right,di_Dir(a0) st di_Phase(a0) clr.b di_Counter(a0) st di_FirePhase(a0) ;------------------------------------------------------------------------------ ; SetUpInfo ;------------------------------------------------------------------------------ bsr in.Init ; move.l InfoScreen,a2 ; moveq #fc_Infofield,d1 ; move.b #'b',d0 tool monitor ; move.w #249,d2 ; move.w #9,d3 ; CALL fnt.Base,fnt_WriteImage ; move.b #'0',d0 tool number H ; move.w #219,d2 ; move.w #24,d3 ; CALL fnt.Base,fnt_WriteImage ; move.b #'1',d0 tool number L ; move.w #231,d2 ; move.w #24,d3 ; CALL fnt.Base,fnt_WriteImage ; move.b #'p',d0 tool energy ; move.w #249,d2 ; move.w #44,d3 ; CALL fnt.Base,fnt_WriteImage ;------------------------------------------------------------------------------ ; NewSector ;------------------------------------------------------------------------------ move.l InfoScreen,a0 lea da.PaletteInfo,a1 bsr ColorUp bsr in.SectorNum move.b #nf_Init,va.NewField ;------------------------------------------------------------------------------ ; NewField NoOp ;------------------------------------------------------------------------------ NewField st va.ControlEna control disabled move.b va.NewField,d0 cmpi.b #nf_Init,d0 init ? beq FieldInit cmpi.b #nf_Forward,d0 passage forward ? beq FieldForward cmpi.b #nf_Back,d0 passage back ? beq FieldBack cmpi.b #nf_Left,d0 left ? beq FieldLeft cmpi.b #nf_Right,d0 right ? beq FieldRight cmpi.b #nf_Up,d0 up ? beq FieldUp cmpi.b #nf_Down,d0 down ? beq FieldDown cmpi.b #nf_LifeLost,d0 life lost ? beq FieldNextLife cmpi.b #nf_ESC,d0 ESC ? beq Quit bra Quit FieldInit lea va.BossInfo,a0 move.w di_XPos(a0),va.EnterXPos move.w di_YPos(a0),va.EnterYPos bsr SetUpField move.l PfActiveScreen,a0 lea va.ColorTable,a1 bsr ColorUp bra FieldStart FieldForward lea va.BossInfo,a0 move.w di_XPos(a0),va.EnterXPos move.w di_YPos(a0),va.EnterYPos bsr PassageEffect move.l PfActiveScreen,a0 bsr ColorDown addq.w #1,va.ActPlayField new field bsr SetUpField move.l PfActiveScreen,a0 lea va.ColorTable,a1 bsr ColorUp bra FieldStart FieldBack lea va.BossInfo,a0 move.w di_XPos(a0),va.EnterXPos move.w di_YPos(a0),va.EnterYPos bsr PassageEffect move.l PfActiveScreen,a0 bsr ColorDown subq.w #1,va.ActPlayField new field bsr SetUpField move.l PfActiveScreen,a0 lea va.ColorTable,a1 bsr ColorUp bra FieldStart FieldLeft lea va.BossInfo,a0 move.w #240,va.EnterXPos move.w di_YPos(a0),va.EnterYPos moveq #19,d7 .Loop1 bsr ActivatePf2 Pf2 active cmpi.w #7,d7 bgt.s .NoDark2 move.l PfActiveScreen,a0 CALL inl.Base,inl_Dark CALL inl.Base,inl_RefreshScr .NoDark2 bsr RefreshAll bsr ActivatePf1 Pf1 active cmpi.w #7,d7 bgt.s .NoDark1 move.l PfActiveScreen,a0 CALL inl.Base,inl_Dark CALL inl.Base,inl_RefreshScr .NoDark1 bsr RefreshAll dbf d7,.Loop1 sub.w #20,va.ActPlayField new field move.w #280,Boss_XPos clr.b Boss_Phase clr.b Boss_PhTimer move.b #di_st_Move,Boss_Status bsr SetUpField moveq #7,d7 .Loop2 bsr ActivatePf2 Pf2 active move.l PfActiveScreen,a0 lea va.ColorTable,a1 CALL inl.Base,inl_Bright CALL inl.Base,inl_RefreshScr bsr RefreshAll bsr ActivatePf1 Pf1 active move.l PfActiveScreen,a0 lea va.ColorTable,a1 CALL inl.Base,inl_Bright CALL inl.Base,inl_RefreshScr bsr RefreshAll dbf d7,.Loop2 bra FieldStart FieldRight lea va.BossInfo,a0 move.w #0,va.EnterXPos move.w di_YPos(a0),va.EnterYPos moveq #19,d7 .Loop1 bsr ActivatePf2 Pf2 active cmpi.w #7,d7 bgt.s .NoDark2 move.l PfActiveScreen,a0 CALL inl.Base,inl_Dark CALL inl.Base,inl_RefreshScr .NoDark2 bsr RefreshAll bsr ActivatePf1 Pf1 active cmpi.w #7,d7 bgt.s .NoDark1 move.l PfActiveScreen,a0 CALL inl.Base,inl_Dark CALL inl.Base,inl_RefreshScr .NoDark1 bsr RefreshAll dbf d7,.Loop1 add.w #20,va.ActPlayField new filed move.w #-40,Boss_XPos clr.b Boss_Phase clr.b Boss_PhTimer move.b #di_st_Move,Boss_Status bsr SetUpField moveq #7,d7 .Loop2 bsr ActivatePf2 Pf2 active move.l PfActiveScreen,a0 lea va.ColorTable,a1 CALL inl.Base,inl_Bright CALL inl.Base,inl_RefreshScr bsr RefreshAll bsr ActivatePf1 Pf1 active move.l PfActiveScreen,a0 lea va.ColorTable,a1 CALL inl.Base,inl_Bright CALL inl.Base,inl_RefreshScr bsr RefreshAll dbf d7,.Loop2 bra FieldStart FieldUp lea va.BossInfo,a0 move.w di_XPos(a0),va.EnterXPos move.w #132,va.EnterYPos moveq #15,d7 .Loop1 bsr ActivatePf2 Pf2 active cmpi.w #7,d7 bgt.s .NoDark2 move.l PfActiveScreen,a0 CALL inl.Base,inl_Dark CALL inl.Base,inl_RefreshScr .NoDark2 bsr RefreshAll bsr ActivatePf1 Pf1 active cmpi.w #7,d7 bgt.s .NoDark1 move.l PfActiveScreen,a0 CALL inl.Base,inl_Dark CALL inl.Base,inl_RefreshScr .NoDark1 bsr RefreshAll dbf d7,.Loop1 add.w #5,va.ActPlayField new field add.w #198,Boss_YPos bsr SetUpField lea va.LiftInfo0,a0 move.w Boss_XPos,d0 cmp.w li_XPos(a0),d0 beq.s .LiftFound lea va.LiftInfo1,a0 .LiftFound move.b #li_st_Control,li_Status(a0) move.w Boss_YPos,li_YPos(a0) moveq #7,d7 .Loop2 bsr ActivatePf2 Pf2 active move.l PfActiveScreen,a0 lea va.ColorTable,a1 CALL inl.Base,inl_Bright CALL inl.Base,inl_RefreshScr bsr RefreshAll bsr ActivatePf1 Pf1 active move.l PfActiveScreen,a0 lea va.ColorTable,a1 CALL inl.Base,inl_Bright CALL inl.Base,inl_RefreshScr bsr RefreshAll dbf d7,.Loop2 bra FieldStart FieldDown lea va.BossInfo,a0 move.w di_XPos(a0),va.EnterXPos move.w #0,va.EnterYPos moveq #15,d7 .Loop1 bsr ActivatePf2 Pf2 active cmpi.w #7,d7 bgt.s .NoDark2 move.l PfActiveScreen,a0 CALL inl.Base,inl_Dark CALL inl.Base,inl_RefreshScr .NoDark2 bsr RefreshAll bsr ActivatePf1 Pf1 active cmpi.w #7,d7 bgt.s .NoDark1 move.l PfActiveScreen,a0 CALL inl.Base,inl_Dark CALL inl.Base,inl_RefreshScr .NoDark1 bsr RefreshAll dbf d7,.Loop1 sub.w #5,va.ActPlayField new field sub.w #198,Boss_YPos bsr SetUpField lea va.LiftInfo0,a0 move.w Boss_XPos,d0 cmp.w li_XPos(a0),d0 beq.s .LiftFound lea va.LiftInfo1,a0 .LiftFound move.b #li_st_Control,li_Status(a0) move.w Boss_YPos,li_YPos(a0) moveq #7,d7 .Loop2 bsr ActivatePf2 Pf2 active move.l PfActiveScreen,a0 lea va.ColorTable,a1 CALL inl.Base,inl_Bright CALL inl.Base,inl_RefreshScr bsr RefreshAll bsr ActivatePf1 Pf1 active move.l PfActiveScreen,a0 lea va.ColorTable,a1 CALL inl.Base,inl_Bright CALL inl.Base,inl_RefreshScr bsr RefreshAll dbf d7,.Loop2 bra FieldStart FieldNextLife moveq #15,d7 wait 16 times .Loop1 bsr ActivatePf2 bsr RefreshAll bsr ActivatePf1 bsr RefreshAll dbf d7,.Loop1 .Loop2 bsr ActivatePf2 wait for Infofield bsr RefreshAll energy bsr ActivatePf1 bsr RefreshAll tst.b va.in.Energy bne.s .Loop2 move.l PfActiveScreen,a0 bsr ColorDown subq.w #1,va.Lives one less lives beq GameOver lea Boss,a0 move.b #255,dr_Energy(a0) lea va.BossInfo,a0 move.w va.EnterXPos,di_XPos(a0) move.w va.EnterYPos,di_YPos(a0) move.b #di_st_Control,di_Status(a0) st di_Phase(a0) clr.b di_Counter(a0) st di_FirePhase(a0) bsr SetUpField move.l PfActiveScreen,a0 lea va.ColorTable,a1 bsr ColorUp FieldStart clr.b va.ControlEna control enabled ******************************************************************************* * Main ******************************************************************************* ;------------------------------------------------------------------------------ ; Even Cycle ;------------------------------------------------------------------------------ Main bsr ActivatePf2 Pf2 active bsr RefreshAll ;------------------------------------------------------------------------------ ; Odd Cycle ;------------------------------------------------------------------------------ bsr ActivatePf1 Pf1 active bsr RefreshAll bsr ReadKey bsr ESCKeyTest bsr MenuKeyTest bsr WeaponKeyTest bsr ToolKeyTest cmpi.b #nf_No,va.NewField exit from this field ? bne NewField bra Main ;------------------------------------------------------------------------------ ; PassageEffect NoOp ;------------------------------------------------------------------------------ PassageEffect movem.l d0-d2,-(a7) moveq #$f,d0 effect moveq #ac_Else,d1 moveq #0,d2 CALL snd.Base,snd_PlaySample movem.l (a7)+,d0-d2 rts ;------------------------------------------------------------------------------ ; ESCKeyTest NoOp ;------------------------------------------------------------------------------ ESCKeyTest cmpi.b #27,va.LastKey ESC pressed ? bne.s .Exit move.b #nf_ESC,va.NewField .Exit rts ;------------------------------------------------------------------------------ ; MenuKeyTest NoOp ;------------------------------------------------------------------------------ MenuKeyTest cmpi.b #' ',va.LastKey Movy ? bne.s .NoMovy clr.b va.LastKey bsr Movy bra.s .Exit .NoMovy cmpi.b #$89,va.LastKey ToolMenu ? bne.s .NoToolSel clr.b va.LastKey bsr ToolMenu bra.s .Exit .NoToolSel cmpi.b #$84,va.LastKey WeaponMenu ? bne.s .Exit clr.b va.LastKey bsr WeaponMenu .Exit cmpi.b #'1',va.LastKey for test only !! bne.s .No1 clr.b va.LastKey eor.b #1,va.Switch+1 .No1 cmpi.b #'q',va.LastKey for test only !! bne.s .Noq clr.b va.LastKey moveq #64,d0 lea Boss,a0 bsr SubDrEnergy .Noq cmpi.b #'w',va.LastKey for test only !! bne.s .Now clr.b va.LastKey moveq #64,d0 lea Boss,a0 bsr AddDrEnergy .Now cmpi.b #'a',va.LastKey for test only !! bne.s .Noa clr.b va.LastKey addq.w #1,va.WeaponInfoE .Noa cmpi.b #'s',va.LastKey for test only !! bne.s .Nos clr.b va.LastKey subq.w #1,va.WeaponInfoE .Nos rts ;------------------------------------------------------------------------------ ; WeaponKeyTest NoOp ;------------------------------------------------------------------------------ WeaponKeyTest movem.l d0-d2/a0,-(a7) tst.b va.LastKey key pressed ? beq.s .Exit move.b va.LastKey,d0 cmpi.b #$80,d0 F1 ? bne.s .NoF1 moveq #0,d0 bra.s .OK .NoF1 cmpi.b #$81,d0 F2 ? bne.s .Exit moveq #1,d0 .OK clr.b va.LastKey lea va.Weapons,a0 move.b 0(a0,d0.w),d0 get dr_Type lea Boss,a0 cmp.b dr_Type(a0),d0 beq.s .Exit move.b d0,dr_Type(a0) new dr_Type lea va.BossInfo,a0 st di_FirePhase(a0) fire stop moveq #ef_ChangeWeapon,d0 effect moveq #ac_Else,d1 moveq #0,d2 CALL snd.Base,snd_PlaySample .Exit movem.l (a7)+,d0-d2/a0 rts ;------------------------------------------------------------------------------ ; ToolKeyTest NoOp ;------------------------------------------------------------------------------ ToolKeyTest movem.l d0-d2/a0,-(a7) tst.b va.LastKey key pressed ? beq.s .Exit move.b va.LastKey,d0 cmpi.b #$85,d0 F6 ? bne.s .NoF6 moveq #0,d0 bra.s .OK .NoF6 cmpi.b #$86,d0 F7 ? bne.s .NoF7 moveq #1,d0 bra.s .OK .NoF7 cmpi.b #$87,d0 F8 ? bne.s .NoF8 moveq #2,d0 bra.s .OK .NoF8 cmpi.b #$88,d0 F9 ? bne.s .Exit moveq #3,d0 .OK clr.b va.LastKey cmp.w va.se.ActBox,d0 beq.s .Exit move.w d0,va.se.ActBox set active box moveq #ef_ChangeWeapon,d0 effect moveq #ac_Else,d1 moveq #0,d2 CALL snd.Base,snd_PlaySample .Exit movem.l (a7)+,d0-d2/a0 rts ******************************************************************************* * GameOver ******************************************************************************* GameOver bra Quit ;------------------------------------------------------------------------------ ; Quit NoOp ;------------------------------------------------------------------------------ Quit IF MODE=WORK RETURN ELSE .Loop bra .Loop ENDIF ******************************************************************************* * Break ******************************************************************************* Break st va.ControlEna driving disabled .Loop bsr ActivatePf2 bsr RefreshAll bsr ActivatePf1 bsr RefreshAll tst.b va.Moving break enabled ? bne.s .Loop st va.AnimEna anim stop bsr ActivatePf2 bsr RefreshAll bsr ActivatePf1 bsr RefreshAll rts ******************************************************************************* * Continue ******************************************************************************* Continue clr.b va.ControlEna clr.b va.AnimEna bsr WaitBlank rts ******************************************************************************* * DrawAll ******************************************************************************* DrawAll bsr DrawLifts bsr Animate bsr ShowTools bsr DrawDroids bsr DrawMissiles bsr Coverings bsr Infofield rts ******************************************************************************* * MoveAll ******************************************************************************* MoveAll bsr MoveLifts bsr Animate bsr ShowTools bsr MoveDroids bsr MoveMissiles bsr Coverings bsr Infofield rts ******************************************************************************* * RefreshAll ******************************************************************************* RefreshAll clr.b va.Moving -1 if there is moving bsr ReadControl C #$00f bsr ClearLifts bsr ClearDroids bsr ClearMissiles C #$f0f bsr MoveLifts bsr Animate bsr ShowTools C #$0f0 bsr MoveDroids bsr MoveMissiles bsr Coverings bsr Infofield bsr AnimStep bsr Specials C #$000 rts ******************************************************************************* * Movy ******************************************************************************* Movy tst.b va.mo.KeyK KeyK exists here ? bmi mo.Exit bsr Dark moveq #ef_Break,d0 effect moveq #ac_Background,d1 moveq #0,d2 CALL snd.Base,snd_PlaySample bsr Break mo.MainLoop CALL gam.Base,gam_AskJoy1 Joy1 ? moveq #0,d0 move.b d2,d0 cmpi.b #gam_di_No,d0 bne.s mo.Action CALL kbd.Base,kbd_AskCrsrKeys CursorKeys ? moveq #0,d0 move.b d2,d0 cmpi.b #gam_di_No,d0 bne.s mo.Action CALL kbd.Base,kbd_ReadKey cmpi.b #' ',d0 exit from movy ? bne.s mo.MainLoop bsr sf.InitKTypes bsr sf.InitDrKTypes bsr sf.DrawField draw WorkField bsr sf.FieldToBack draw Background bsr InitAnim bsr DrawAll bsr Bright moveq #ef_Noise,d0 noise on moveq #ac_Background,d1 moveq #0,d2 CALL snd.Base,snd_PlaySample bsr Continue mo.Exit rts ;------------------------------------------------------------------------------ ; Action Dir(d0) ;------------------------------------------------------------------------------ mo.Action move.b d0,va.mo.Dir store direction cmpi.b #gam_di_Up,d0 beq.s .Up cmpi.b #gam_di_Down,d0 beq.s .Down cmpi.b #gam_di_Right,d0 beq.s .Right cmpi.b #gam_di_Left,d0 beq.s .Left bra mo.MainLoop invalid move ! .Up lea da.mo.NewKeyKU(pc),a1 bra.s .GetNewK .Down lea da.mo.NewKeyKD(pc),a1 bra.s .GetNewK .Right lea da.mo.NewKeyKR(pc),a1 bra.s .GetNewK .Left lea da.mo.NewKeyKL(pc),a1 .GetNewK moveq #0,d0 moveq #0,d1 move.b va.mo.KeyK,d1 Key K number move.b 0(a1,d1.w),d0 New Key K number bmi mo.MainLoop invalid move ! move.b d0,va.mo.NewKeyK bsr GetKStatus stopped K ? cmpi.b #TRUE,d0 beq mo.MainLoop move.b va.mo.Dir,d0 cmpi.b #gam_di_Up,d0 up ? beq mo.Up cmpi.b #gam_di_Down,d0 down ? beq mo.Down cmpi.b #gam_di_Right,d0 right ? beq mo.Right cmpi.b #gam_di_Left,d0 left ? beq mo.Left mo.EndAction moveq #ef_MovyStop,d0 end effect moveq #ac_Background,d1 moveq #12,d2 CALL snd.Base,snd_PlaySample bsr mo.ChangeK bsr InitAnim .Wait CALL gam.Base,gam_AskJoy1 Joy1 ? cmpi.b #gam_di_No,d2 bne.s .Wait CALL kbd.Base,kbd_AskCrsrKeys CursorKeys ? cmpi.b #gam_di_No,d2 bne.s .Wait bra mo.MainLoop ;------------------------------------------------------------------------------ ; Up NoOp ;------------------------------------------------------------------------------ mo.Up move.b va.mo.KeyK,va.mo.LeftUpK bsr mo.SaveSliceV bsr mo.SaveMovyK save K bsr mo.SaveBack move.l #116160,d0 move.b #16,va.mo.Counter bsr mo.LoadBack .Loop sub.l #3520,d0 bsr ActivatePf2 bsr mo.LoadBack sub.l #3520,d0 bsr ActivatePf1 bsr mo.LoadBack subq.b #1,va.mo.Counter bne .Loop sub.l #3520,d0 bsr ActivatePf2 bsr mo.LoadBack bsr ActivatePf1 bsr mo.LoadBack move.b va.mo.NewKeyK,d1 cmp.b Boss_K,d1 is Boss here ? bne mo.EndAction subq.b #4,Boss_K subq.b #1,Boss_YK sub.w #66,Boss_YPos sub.w #66,Boss_Last1Y sub.w #66,Boss_Last2Y bra mo.EndAction ;------------------------------------------------------------------------------ ; Down NoOp ;------------------------------------------------------------------------------ mo.Down move.b va.mo.NewKeyK,va.mo.LeftUpK bsr mo.SaveSliceV bsr mo.SaveMovyK save K bsr mo.SaveBack moveq #0,d0 move.b #16,va.mo.Counter bsr mo.LoadBack .Loop add.l #3520,d0 bsr ActivatePf2 bsr mo.LoadBack add.l #3520,d0 bsr ActivatePf1 bsr mo.LoadBack subq.b #1,va.mo.Counter bne .Loop add.l #3520,d0 bsr ActivatePf2 bsr mo.LoadBack bsr ActivatePf1 bsr mo.LoadBack move.b va.mo.NewKeyK,d1 cmp.b Boss_K,d1 is Boss here ? bne mo.EndAction addq.b #4,Boss_K addq.b #1,Boss_YK add.w #66,Boss_YPos add.w #66,Boss_Last1Y add.w #66,Boss_Last2Y bra mo.EndAction ;------------------------------------------------------------------------------ ; Right NoOp ;------------------------------------------------------------------------------ mo.Right move.b va.mo.NewKeyK,va.mo.LeftUpK bsr mo.SaveSliceH bsr mo.SaveMovyK save K bsr mo.SaveBack moveq #0,d0 move.b #20,va.mo.Counter bsr mo.LoadBack .Loop addq.l #2,d0 bsr mo.BossRight bsr ActivatePf2 bsr mo.LoadBack addq.l #2,d0 bsr mo.BossRight bsr ActivatePf1 bsr mo.LoadBack subq.b #1,va.mo.Counter bne .Loop bsr ActivatePf2 bsr mo.LoadBack bsr ActivatePf1 bsr mo.LoadBack move.b va.mo.NewKeyK,d1 cmp.b Boss_K,d1 is Boss here ? bne mo.EndAction addq.b #1,Boss_K addq.b #1,Boss_XK add.w #80,Boss_Last1X add.w #80,Boss_Last2X bra mo.EndAction ;------------------------------------------------------------------------------ ; Left NoOp ;------------------------------------------------------------------------------ mo.Left move.b va.mo.KeyK,va.mo.LeftUpK bsr mo.SaveSliceH bsr mo.SaveMovyK save K bsr mo.SaveBack moveq #80,d0 move.b #20,va.mo.Counter bsr mo.LoadBack .Loop subq.l #2,d0 bsr mo.BossLeft bsr ActivatePf2 bsr mo.LoadBack subq.l #2,d0 bsr mo.BossLeft bsr ActivatePf1 bsr mo.LoadBack subq.b #1,va.mo.Counter bne .Loop bsr ActivatePf2 bsr mo.LoadBack bsr ActivatePf1 bsr mo.LoadBack move.b va.mo.NewKeyK,d1 cmp.b Boss_K,d1 is Boss here ? bne mo.EndAction subq.b #1,Boss_K subq.b #1,Boss_XK sub.w #80,Boss_Last1X sub.w #80,Boss_Last2X bra mo.EndAction ;------------------------------------------------------------------------------ ; SaveSliceV NoOp ;------------------------------------------------------------------------------ mo.SaveSliceV move.l d0,-(a7) st va.mo.SliceK1 st va.mo.SliceK2 move.b va.mo.LeftUpK,d0 move.b d0,va.mo.SliceK1 addq.b #4,d0 move.b d0,va.mo.SliceK2 bsr mo.SaveSlice1 bsr mo.MakeSliceM1 bsr mo.SaveSlice2 bsr mo.MakeSliceM2 .Exit move.l (a7)+,d0 rts ;------------------------------------------------------------------------------ ; SaveSliceH NoOp ;------------------------------------------------------------------------------ mo.SaveSliceH move.l d0,-(a7) st va.mo.SliceK1 st va.mo.SliceK2 move.b va.mo.LeftUpK,d0 addq.b #1,d0 move.b d0,va.mo.SliceK1 bsr mo.SaveSlice1 bsr mo.MakeSliceM1 .Exit move.l (a7)+,d0 rts ;------------------------------------------------------------------------------ ; SaveSlice1 NoOp ;------------------------------------------------------------------------------ mo.SaveSlice1 movem.l d7/a1,-(a7) moveq #0,d7 move.b va.mo.SliceK1,d7 move.l #MovySlice1,a1 bsr mo.SaveSlice movem.l (a7)+,d7/a1 rts ;------------------------------------------------------------------------------ ; SaveSlice2 NoOp ;------------------------------------------------------------------------------ mo.SaveSlice2 movem.l d7/a1,-(a7) moveq #0,d7 move.b va.mo.SliceK2,d7 move.l #MovySlice2,a1 bsr mo.SaveSlice movem.l (a7)+,d7/a1 rts ;------------------------------------------------------------------------------ ; SaveSlice KNum,Buffer(d7,a1) ;------------------------------------------------------------------------------ mo.SaveSlice movem.l d0/a0,-(a7) move.b d7,d0 and.b #3,d0 cmpi.b #3,d0 beq .Right addq.b #1,d7 move.l #MovyKRight,a0 save K bsr mo.SaveK bsr mo.ClearK bsr sf.DrawForegrK draw K bsr mo.DrawDroids bsr mo.DrawBoss move.l a1,a0 save slice moveq #0,d0 bsr mo.DoSaveSlice move.l #MovyKRight,a0 load K bsr mo.LoadK bra .Exit .Right move.l #MovyKRight,a0 save K bsr mo.SaveK bsr mo.ClearK bsr sf.DrawRightK draw K bsr mo.DrawDroids bsr mo.DrawBoss move.l a1,a0 save slice moveq #10,d0 bsr mo.DoSaveSlice move.l #MovyKRight,a0 load K bsr mo.LoadK .Exit movem.l (a7)+,d0/a0 rts ;------------------------------------------------------------------------------ ; DoSaveSlice KNum,Offset,Buffer(d7,d0,a0) ;----------------------------------------------------------------------------- mo.DoSaveSlice movem.l d1/a1/a6,-(a7) moveq #0,d1 move.b d7,d1 lsl.w #2,d1 KNum*4 lea KScrOffs,a1 move.l 0(a1,d1.w),d1 KScrOffs add.l d0,d1 move.l PfWorkScreen,a1 move.l inl_sc_BitPlane(a1),a1 adda.l d1,a1 KScrAddr Backgr lea $dff000,a6 W_BLIT move.l #$09f00000,$40(a6) move.l #$ffffffff,$44(a6) move.l a1,$50(a6) A : Backgr move.l a0,$54(a6) D : Buffer move.l #$00280000,$64(a6) AMOD,DMOD move.w #$5282,$58(a6) Size : 32*66*5 movem.l (a7)+,d1/a1/a6 rts ;------------------------------------------------------------------------------ ; MakeSliceM1 NoOp ;------------------------------------------------------------------------------ mo.MakeSliceM1 movem.l a0-a1,-(a7) lea MovySlice1,a0 lea MovySliceMask1,a1 bsr mo.MakeSliceM movem.l (a7)+,a0-a1 rts ;------------------------------------------------------------------------------ ; MakeSliceM2 NoOp ;------------------------------------------------------------------------------ mo.MakeSliceM2 movem.l a0-a1,-(a7) lea MovySlice2,a0 lea MovySliceMask2,a1 bsr mo.MakeSliceM movem.l (a7)+,a0-a1 rts ;------------------------------------------------------------------------------ ; MakeSliceM GfxBuffer,MaskBuffer(a0,a1) ;------------------------------------------------------------------------------ mo.MakeSliceM movem.l d0/d6-d7/a0-a1,-(a7) moveq #65,d7 66 row .RLoop moveq #1,d6 2 word / row .WLoop move.w (a0),d0 or.w 4(a0),d0 or.w 8(a0),d0 or.w 12(a0),d0 or.w 16(a0),d0 mask word move.w d0,(a1) move.w d0,4(a1) move.w d0,8(a1) move.w d0,12(a1) move.w d0,16(a1) addq.l #2,a0 next word addq.l #2,a1 dbf d6,.WLoop lea 16(a0),a0 next row 20-4 lea 16(a1),a1 dbf d7,.RLoop movem.l (a7)+,d0/d6-d7/a0-a1 rts ;------------------------------------------------------------------------------ ; SaveMovyK NoOp ;------------------------------------------------------------------------------ mo.SaveMovyK movem.l d7/a0,-(a7) moveq #0,d7 move.b va.mo.NewKeyK,d7 clear moving K bsr mo.ClearK moveq #0,d7 move.b va.mo.NewKeyK,d7 draw without space bsr sf.DrawForegrK move.b va.mo.NewKeyK,d7 cmp.b Boss_K,d7 is Boss here ? bne.s .NoBoss bsr mo.DrawBoss .NoBoss moveq #0,d7 move.b va.mo.NewKeyK,d7 move.l #MovyK,a0 bsr mo.SaveK bsr mo.MakeKMask make mask movem.l (a7)+,d7/a0 rts ;------------------------------------------------------------------------------ ; MakeKMask NoOp ;------------------------------------------------------------------------------ mo.MakeKMask movem.l d0/d6-d7/a0-a1,-(a7) lea MovyK,a0 lea MovyKMask,a1 moveq #65,d7 66 row .RLoop moveq #6,d6 7 word / row .WLoop move.w (a0),d0 or.w 14(a0),d0 or.w 28(a0),d0 or.w 42(a0),d0 or.w 56(a0),d0 mask word move.w d0,(a1) move.w d0,14(a1) move.w d0,28(a1) move.w d0,42(a1) move.w d0,56(a1) addq.l #2,a0 next word addq.l #2,a1 dbf d6,.WLoop lea 56(a0),a0 next row 70-14 lea 56(a1),a1 dbf d7,.RLoop movem.l (a7)+,d0/d6-d7/a0-a1 rts ;------------------------------------------------------------------------------ ; SaveBack NoOp ;------------------------------------------------------------------------------ mo.SaveBack movem.l d0-d2/d6-d7,-(a7) moveq #0,d7 move.b va.mo.NewKeyK,d7 draw background bsr sf.DrawBackgrK space move.b va.mo.NewKeyK,d7 move.b d7,d6 and.b #3,d6 beq.s .NoLeftK subq.b #1,d7 bsr sf.DrawForegrK left K .NoLeftK bsr mo.DrawDroids bsr mo.SaveK1 bsr mo.SaveK2 bsr WaitBlank moveq #ef_MovyStart,d0 start effect moveq #ac_Background,d1 moveq #12,d2 CALL snd.Base,snd_PlaySample movem.l (a7)+,d0-d2/d6-d7 rts ;------------------------------------------------------------------------------ ; SaveK1 NoOp ;------------------------------------------------------------------------------ mo.SaveK1 movem.l d7/a0,-(a7) moveq #0,d7 move.b va.mo.KeyK,d7 move.l #MovyK1,a0 bsr mo.SaveK movem.l (a7)+,d7/a0 rts ;------------------------------------------------------------------------------ ; SaveK2 NoOp ;------------------------------------------------------------------------------ mo.SaveK2 movem.l d7/a0,-(a7) moveq #0,d7 move.b va.mo.NewKeyK,d7 move.l #MovyK2,a0 bsr mo.SaveK movem.l (a7)+,d7/a0 rts ;------------------------------------------------------------------------------ ; SaveK KNum,Buffer(d7,a0) ;------------------------------------------------------------------------------ mo.SaveK movem.l d1/a1/a6,-(a7) moveq #0,d1 move.b d7,d1 lsl.w #2,d1 KNum*4 lea KScrOffs,a1 move.l 0(a1,d1.w),d1 KScrOffs move.l PfWorkScreen,a1 move.l inl_sc_BitPlane(a1),a1 adda.l d1,a1 KScrAddr Backgr lea $dff000,a6 W_BLIT move.l #$09f00000,$40(a6) move.l #$ffffffff,$44(a6) move.l a1,$50(a6) A : Backgr move.l a0,$54(a6) D : Buffer move.l #$001e0000,$64(a6) AMOD,DMOD move.w #$5287,$58(a6) Size : 112*66*5 movem.l (a7)+,d1/a1/a6 rts ;------------------------------------------------------------------------------ ; DrawDroids ;------------------------------------------------------------------------------ mo.DrawDroids movem.l d7/a4,-(a7) lea va.DroidInfo0,a4 bsr DrawDroid lea va.DroidInfo1,a4 bsr DrawDroid lea va.DroidInfo2,a4 bsr DrawDroid move.b va.mo.NewKeyK,d7 cmp.b Boss_K,d7 is Boss here ? beq.s .NoBoss bsr mo.DrawBoss .NoBoss movem.l (a7)+,d7/a4 rts ;------------------------------------------------------------------------------ ; DrawBoss ;------------------------------------------------------------------------------ mo.DrawBoss move.l a4,-(a7) lea va.BossInfo,a4 bsr DrawDroid move.l (a7)+,a4 rts ;------------------------------------------------------------------------------ ; LoadBack NoOp ;------------------------------------------------------------------------------ mo.LoadBack bsr mo.LoadK1 bsr mo.LoadK2 bsr mo.DrawK bsr mo.LoadSlice1 bsr mo.LoadSlice2 rts ;------------------------------------------------------------------------------ ; LoadK1 NoOp ;------------------------------------------------------------------------------ mo.LoadK1 movem.l d7/a0,-(a7) moveq #0,d7 move.b va.mo.KeyK,d7 move.l #MovyK1,a0 bsr mo.LoadK movem.l (a7)+,d7/a0 rts ;------------------------------------------------------------------------------ ; LoadK2 NoOp ;------------------------------------------------------------------------------ mo.LoadK2 movem.l d7/a0,-(a7) moveq #0,d7 move.b va.mo.NewKeyK,d7 move.l #MovyK2,a0 bsr mo.LoadK movem.l (a7)+,d7/a0 rts ;------------------------------------------------------------------------------ ; LoadK KNum,Buffer(d7,a0) ;------------------------------------------------------------------------------ mo.LoadK movem.l d1/a1/a6,-(a7) moveq #0,d1 move.b d7,d1 lsl.w #2,d1 KNum*4 lea KScrOffs,a1 move.l 0(a1,d1.w),d1 KScrOffs move.l PfWorkScreen,a1 move.l inl_sc_BitPlane(a1),a1 adda.l d1,a1 KScrAddr Backgr lea $dff000,a6 W_BLIT move.l #$09f00000,$40(a6) move.l #$ffffffff,$44(a6) move.l a0,$50(a6) A : Buffer move.l a1,$54(a6) D : Backgr move.l #$0000001e,$64(a6) AMOD,DMOD move.w #$5287,$58(a6) Size : 112*66*5 movem.l (a7)+,d1/a1/a6 rts ;------------------------------------------------------------------------------ ; DrawK Offs(d0) ;------------------------------------------------------------------------------ mo.DrawK movem.l d0-d7/a0-a2/a6,-(a7) move.l d0,d1 move.l d0,d4 asr.l #3,d0 offs/8 bclr #0,d0 and.l #$f,d1 lea KScrOffs(pc),a1 offset table moveq #0,d2 move.b va.mo.LeftUpK,d2 lsl.w #2,d2 KNum*4 move.l 0(a1,d2.w),a1 Pf offs move.l PfWorkScreen,a2 add.l inl_sc_BitPlane(a2),a1 add.l d0,a1 + offset lea $dff000,a6 W_BLIT move.l #MovyKMask,$50(a6) A : mask move.l #MovyK,$4c(a6) B : K data move.l a1,$48(a6) C : screen move.l a1,$54(a6) D : screen move.l #$0fca0000,d0 BLTCON ror.l #4,d1 shift or.l d1,d0 swap d1 or.w d1,d0 move.l d0,$40(a6) move.l #$ffff0000,d0 lsr.l d1,d0 move.l d0,$44(a6) AFWM,ALWM move.l #$001cfffe,$60(a6) CMOD,BMOD move.l #$fffe001c,$64(a6) AMOD,DMOD move.w #$5288,$58(a6) moveq #0,d0 craw top move.b va.mo.TopImage,d0 moveq #0,d1 move.b va.mo.TopFCode,d1 moveq #0,d6 moveq #0,d7 move.b va.mo.LeftUpK,d7 bsr sf.CalcDCoord divu #1760,d4 beq.s .NoTop lea va.mo.ImageBuff,a0 CALL fnt.Base,fnt_GetImage move.w fnt_im_Height(a0),d5 cmp.w d4,d5 ble.s .HeightOK move.w d4,fnt_im_Height(a0) sub.w d4,d5 add.w d5,fnt_im_YPos(a0) add.w d5,d3 .HeightOK add.w va.mo.TopdX,d2 add.w va.mo.TopdY,d3 add.w d4,d3 sub.w #66,d3 CALL fnt.Base,fnt_CutImage .NoTop movem.l (a7)+,d0-d7/a0-a2/a6 rts ;------------------------------------------------------------------------------ ; ClearK KNum(d7) ;------------------------------------------------------------------------------ mo.ClearK movem.l d1/a1/a6,-(a7) moveq #0,d1 move.b d7,d1 lsl.w #2,d1 KNum*4 lea KScrOffs,a1 move.l 0(a1,d1.w),d1 KScrOffs move.l PfWorkScreen,a1 move.l inl_sc_BitPlane(a1),a1 adda.l d1,a1 KScrAddr lea $dff000,a6 W_BLIT move.l #$01000000,$40(a6) move.l a1,$54(a6) D : MovyK move.w #$001e,$66(a6) DMOD move.w #$5287,$58(a6) Size : 112*66*5 movem.l (a7)+,d1/a1/a6 rts ;------------------------------------------------------------------------------ ; LoadSlice1 NoOp ;------------------------------------------------------------------------------ mo.LoadSlice1 movem.l d7/a0-a1,-(a7) moveq #0,d7 move.b va.mo.SliceK1,d7 bmi.s .Exit move.l #MovySlice1,a0 move.l #MovySliceMask1,a1 bsr mo.LoadSlice .Exit movem.l (a7)+,d7/a0-a1 rts ;------------------------------------------------------------------------------ ; LoadSlice2 NoOp ;------------------------------------------------------------------------------ mo.LoadSlice2 movem.l d7/a0-a1,-(a7) moveq #0,d7 move.b va.mo.SliceK2,d7 bmi.s .Exit move.l #MovySlice2,a0 move.l #MovySliceMask2,a1 bsr mo.LoadSlice .Exit movem.l (a7)+,d7/a0-a1 rts ;------------------------------------------------------------------------------ ; LoadSlice KNum,Buffer,Mask(d7,a0,a1) ;------------------------------------------------------------------------------ mo.LoadSlice movem.l d2/a2/a6,-(a7) moveq #0,d2 move.b d7,d2 lsl.w #2,d2 KNum*4 lea KScrOffs,a2 move.l 0(a2,d2.w),d2 KScrOffs add.l #10,d2 move.l PfWorkScreen,a2 move.l inl_sc_BitPlane(a2),a2 adda.l d2,a2 KScrAddr Backgr lea $dff000,a6 W_BLIT move.l #$0fca0000,$40(a6) move.l #$ffffffff,$44(a6) move.l a1,$50(a6) A : Mask move.l a0,$4c(a6) B : Buffer move.l a2,$48(a6) C : Backgr move.l a2,$54(a6) D : Backgr move.l #$00000028,$64(a6) AMOD,DMOD move.l #$00280000,$60(a6) CMOD,BMOD move.w #$5282,$58(a6) Size : 32*66*5 movem.l (a7)+,d2/a2/a6 rts ;------------------------------------------------------------------------------ ; BossRight ;------------------------------------------------------------------------------ mo.BossRight move.l d1,-(a7) move.b va.mo.NewKeyK,d1 cmp.b Boss_K,d1 is Boss here ? bne.s .Exit addq.w #2,Boss_XPos .Exit move.l (a7)+,d1 rts ;------------------------------------------------------------------------------ ; BossLeft ;------------------------------------------------------------------------------ mo.BossLeft move.l d1,-(a7) move.b va.mo.NewKeyK,d1 cmp.b Boss_K,d1 is Boss here ? bne.s .Exit subq.w #2,Boss_XPos .Exit move.l (a7)+,d1 rts ;------------------------------------------------------------------------------ ; ChangeK NoOp ;------------------------------------------------------------------------------ mo.ChangeK movem.l d0-d2/a0,-(a7) lea va.KQueue,a0 Queue moveq #0,d0 KeyK <--> NewKeyK moveq #0,d1 move.b va.mo.KeyK,d0 move.b va.mo.NewKeyK,d1 move.b 0(a0,d0.w),d2 change move.b 0(a0,d1.w),0(a0,d0.w) move.b d2,0(a0,d1.w) move.b va.mo.NewKeyK,va.mo.KeyK movem.l (a7)+,d0-d2/a0 rts ******************************************************************************* * Selector Routines ******************************************************************************* ;------------------------------------------------------------------------------ ; DrawMain MainObj,CtrlObj(a0,a1) ;------------------------------------------------------------------------------ se.DrawMain movem.l d0-d3/a0-a2,-(a7) moveq #0,d2 draw ctrl panel moveq #0,d3 move.l MenuCtrlScreen,a2 CALL fnt.Base,fnt_WriteObject move.l a0,a1 draw main panel moveq #0,d2 moveq #0,d3 move.l MainMenuScreen,a2 CALL fnt.Base,fnt_WriteObject movem.l (a7)+,d0-d3/a0-a2 rts ;------------------------------------------------------------------------------ ; InitMGads MGads,MCGads(a1,a2) ;------------------------------------------------------------------------------ se.InitMGads movem.l d0/a0-a2,-(a7) init mainmenu gadgets move.l MainMenuScreen,a0 set gadget lists CALL inl.Base,inl_SetGList main gads move.l MenuCtrlScreen,a0 move.l a2,a1 CALL inl.Base,inl_SetGList main ctrl gads bsr se.InitGads movem.l (a7)+,d0/a0-a2 rts ;------------------------------------------------------------------------------ ; InitSGads NoOp ;------------------------------------------------------------------------------ se.InitSGads movem.l d0/a0-a1,-(a7) init submenu gadgets move.l MainMenuScreen,a0 set gadget lists lea da.se.SGads,a1 sub gads CALL inl.Base,inl_SetGList move.l MenuCtrlScreen,a0 lea da.se.SCGads,a1 sub ctrl gads CALL inl.Base,inl_SetGList bsr se.InitGads movem.l (a7)+,d0/a0-a1 rts ;------------------------------------------------------------------------------ ; InitGads ;------------------------------------------------------------------------------ se.InitGads movem.l d0/a0,-(a7) init gadgets move.l MainMenuScreen,a0 care for gadgets moveq #inl_ic_Gadget,d0 CALL inl.Base,inl_ModifyIDCMP move.l MenuCtrlScreen,a0 moveq #inl_ic_Gadget,d0 CALL inl.Base,inl_ModifyIDCMP bsr WaitBlank move.l MainMenuScreen,a0 refresh gadgets CALL inl.Base,inl_RefreshGads move.l MenuCtrlScreen,a0 CALL inl.Base,inl_RefreshGads movem.l (a7)+,d0/a0 rts ;------------------------------------------------------------------------------ ; RemoveGads NoOp ;------------------------------------------------------------------------------ se.RemoveGads movem.l d0/a0,-(a7) remove gadgets move.l MainMenuScreen,a0 reset gadget list CALL inl.Base,inl_ResetGList move.l MenuCtrlScreen,a0 CALL inl.Base,inl_ResetGList move.l MainMenuScreen,a0 do not care anything moveq #0,d0 CALL inl.Base,inl_ModifyIDCMP move.l MenuCtrlScreen,a0 moveq #0,d0 CALL inl.Base,inl_ModifyIDCMP movem.l (a7)+,d0/a0 rts ;------------------------------------------------------------------------------ ; MainUp NoOp ;------------------------------------------------------------------------------ se.MainUp bsr se.MovieLOn mainmenu up move.w #66,d7 .Loop CALL inl.Base,inl_WaitBlank move.l MainMenuScreen,a0 moveq #0,d0 moveq #-3,d1 CALL inl.Base,inl_MoveScr move.l SubMenuScreen,a0 moveq #0,d0 moveq #-1,d1 CALL inl.Base,inl_MoveScr move.l MenuCtrlScreen,a0 moveq #0,d0 moveq #-1,d1 CALL inl.Base,inl_MoveScr CALL inl.Base,inl_Remake dbf d7,.Loop bsr se.MovieLOff CALL inl.Base,inl_WaitBlank rts ;------------------------------------------------------------------------------ ; MainDown NoOp ;------------------------------------------------------------------------------ se.MainDown bsr se.MovieLOn mainmenu down move.w #66,d7 .Loop CALL inl.Base,inl_WaitBlank move.l MainMenuScreen,a0 moveq #0,d0 moveq #3,d1 CALL inl.Base,inl_MoveScr move.l SubMenuScreen,a0 moveq #0,d0 moveq #1,d1 CALL inl.Base,inl_MoveScr move.l MenuCtrlScreen,a0 moveq #0,d0 moveq #1,d1 CALL inl.Base,inl_MoveScr CALL inl.Base,inl_Remake dbf d7,.Loop bsr se.MovieLOff CALL inl.Base,inl_WaitBlank rts ;------------------------------------------------------------------------------ ; SubMenuUp NoOp ;------------------------------------------------------------------------------ se.SubMenuUp movem.l d0-d3/a0/a2,-(a7) submenu up CALL inl.Base,inl_WaitBlank bsr se.MovieLOn move.w #43,d7 .Loop CALL inl.Base,inl_WaitBlank move.l SubMenuScreen,a0 moveq #0,d0 moveq #-3,d1 CALL inl.Base,inl_MoveScr CALL inl.Base,inl_Remake dbf d7,.Loop CALL inl.Base,inl_WaitBlank move.l SubMenuScreen,a0 moveq #0,d0 moveq #-2,d1 CALL inl.Base,inl_MoveScr CALL inl.Base,inl_Remake bsr se.MovieLOff CALL inl.Base,inl_WaitBlank movem.l (a7)+,d0-d3/a0/a2 rts ;------------------------------------------------------------------------------ ; SubMenuDn NoOp ;------------------------------------------------------------------------------ se.SubMenuDn movem.l d0-d3/a0/a2,-(a7) submenu down CALL inl.Base,inl_WaitBlank bsr se.MovieLOn move.w #43,d7 .Loop CALL inl.Base,inl_WaitBlank move.l SubMenuScreen,a0 moveq #0,d0 moveq #3,d1 CALL inl.Base,inl_MoveScr CALL inl.Base,inl_Remake dbf d7,.Loop CALL inl.Base,inl_WaitBlank move.l SubMenuScreen,a0 moveq #0,d0 moveq #2,d1 CALL inl.Base,inl_MoveScr CALL inl.Base,inl_Remake bsr se.MovieLOff CALL inl.Base,inl_WaitBlank movem.l (a7)+,d0-d3/a0/a2 rts ;------------------------------------------------------------------------------ ; SubMenuTop NoOp ;------------------------------------------------------------------------------ se.SubMenuTop CALL inl.Base,inl_WaitBlank submenu to top move.l SubMenuScreen,a0 move.l #0,d0 move.l #-134,d1 CALL inl.Base,inl_MoveScr CALL inl.Base,inl_Remake CALL inl.Base,inl_WaitBlank rts ;------------------------------------------------------------------------------ ; SubMenuBot NoOp ;------------------------------------------------------------------------------ se.SubMenuBot CALL inl.Base,inl_WaitBlank submenu to bottom move.l SubMenuScreen,a0 move.l #0,d0 move.l #134,d1 CALL inl.Base,inl_MoveScr CALL inl.Base,inl_Remake CALL inl.Base,inl_WaitBlank rts ;------------------------------------------------------------------------------ ; SelectLOn NoOp ;------------------------------------------------------------------------------ se.SelectLOn movem.l d0-d3/a0/a2,-(a7) select lamp on move.l #$9c,d0 moveq #fc_Selector,d1 move.w #270,d2 move.w #4,d3 move.l MenuCtrlScreen,a2 CALL fnt.Base,fnt_WriteImage movem.l (a7)+,d0-d3/a0/a2 rts ;------------------------------------------------------------------------------ ; SelectLOff NoOp ;------------------------------------------------------------------------------ se.SelectLOff movem.l d0-d3/a0/a2,-(a7) select lamp off move.l #$a0,d0 moveq #fc_Selector,d1 move.w #270,d2 move.w #4,d3 move.l MenuCtrlScreen,a2 CALL fnt.Base,fnt_WriteImage movem.l (a7)+,d0-d3/a0/a2 rts ;------------------------------------------------------------------------------ ; MovieLOn NoOp ;------------------------------------------------------------------------------ se.MovieLOn movem.l d0-d3/a0/a2,-(a7) movie lamp on move.l #$9e,d0 moveq #fc_Selector,d1 move.w #270,d2 move.w #34,d3 move.l MenuCtrlScreen,a2 CALL fnt.Base,fnt_WriteImage moveq #ef_Screen,d0 effect moveq #ac_Background,d1 moveq #12,d2 CALL snd.Base,snd_PlaySample movem.l (a7)+,d0-d3/a0/a2 rts ;------------------------------------------------------------------------------ ; MovieLOff NoOp ;------------------------------------------------------------------------------ se.MovieLOff movem.l d0-d3/a0/a2,-(a7) movie lamp off move.l #$a2,d0 moveq #fc_Selector,d1 move.w #270,d2 move.w #34,d3 move.l MenuCtrlScreen,a2 CALL fnt.Base,fnt_WriteImage moveq #0,d0 effect moveq #ac_Background,d1 moveq #0,d2 CALL snd.Base,snd_PlaySample movem.l (a7)+,d0-d3/a0/a2 rts ;------------------------------------------------------------------------------ ; SetSBorder NoOp ;------------------------------------------------------------------------------ se.SetSBorder movem.l d0-d4,-(a7) set sprite border move.l inl.Base,a0 move.w inl_Left(a0),d0 move.w inl_Top(a0),d1 move.w d0,d2 move.w d1,d3 addq.w #3,d1 add.w #302,d2 add.w #181,d3 CALL spr.Base,spr_SetBorder movem.l (a7)+,d0-d4 rts ;------------------------------------------------------------------------------ ; ResetSBorder NoOp ;------------------------------------------------------------------------------ se.ResetSBorder movem.l d0-d4,-(a7) reset sprite border move.l inl.Base,a0 move.w inl_Left(a0),d0 move.w inl_Top(a0),d1 move.w d0,d2 move.w d1,d3 sub.w #32,d0 add.w #352,d2 add.w #198,d3 CALL spr.Base,spr_SetBorder movem.l (a7)+,d0-d4 rts ;------------------------------------------------------------------------------ ; SetPointer NoOp ;------------------------------------------------------------------------------ se.SetPointer movem.l d0-d4,-(a7) set system pointer move.l inl.Base,a0 move.w inl_Left(a0),d2 move.w inl_Top(a0),d3 moveq #$20,d0 Sprite moveq #sc_Pointer,d1 SprS add.w #$74,d2 X add.w #$4e,d3 Y moveq #7,d4 dX moveq #7,d5 dY move.w #se_PtrCtrl,d6 PointerControl CALL inl.Base,inl_SetPointer movem.l (a7)+,d0-d4 rts ;------------------------------------------------------------------------------ ; FreePointer NoOp ;------------------------------------------------------------------------------ se.FreePointer move.l d0,-(a7) free system pointer CALL inl.Base,inl_FreePointer move.l (a7)+,d0 rts ;------------------------------------------------------------------------------ ; CopyFromSub NoOp ;------------------------------------------------------------------------------ se.CopyFromSub W_BLIT copy sub to mainmenu move.l #$09f00000,$40(a6) move.l #$ffffffff,$44(a6) move.l #SubMenuMap,$50(a6) A : SubMenuMap move.l #MainMenuMap,$54(a6) D : MainMenuMap clr.l $64(a6) move.w #$a514,$58(a6) copy W_BLIT CALL inl.Base,inl_WaitBlank rts ;------------------------------------------------------------------------------ ; CopyToSub NoOp ;------------------------------------------------------------------------------ se.CopyToSub W_BLIT copy main to submenu move.l #$09f00000,$40(a6) move.l #$ffffffff,$44(a6) move.l #MainMenuMap,$50(a6) A : MainMenuMap move.l #SubMenuMap,$54(a6) D : SubMenuMap clr.l $64(a6) move.w #$a514,$58(a6) copy W_BLIT CALL inl.Base,inl_WaitBlank rts ;------------------------------------------------------------------------------ ; InitTable ToolList(a0) ;------------------------------------------------------------------------------ se.InitTable movem.l d0/a1,-(a7) init tooltable lea va.se.Table,a1 clear table move.w #MaxToolShape*si.SizeOf-1,d1 table size .Clear clr.b (a1)+ dbf d1,.Clear moveq #0,d0 # of toolshapes .NextTool tst.l (a0) list end ? beq.s .EndOfList move.l (a0)+,a1 address of tool cmpi.b #-1,to.Sector(a1) is it in the store ? bne.s .NextTool move.l to.ToolShape(a1),d1 lea va.se.Table,a1 insert into table move.w #MaxToolShape-1,d2 .InsertLoop cmp.l si.ToolShape(a1),d1 beq.s .Same tst.l si.ToolShape(a1) beq.s .FreeEntry lea si.SizeOf(a1),a1 next entry dbf d2,.InsertLoop bra.s .NextTool .Same addq.l #1,si.Count(a1) one more tool bra.s .NextTool .FreeEntry move.l d1,si.ToolShape(a1) new toolshape move.l #1,si.Count(a1) addq.l #1,d0 one more toolshape bra.s .NextTool next tool .EndOfList addq.w #ToolsPerPage-1,d0 divu #ToolsPerPage,d0 move.w d0,va.se.Pages # of pages move.w #0,va.se.ActPage 0. is the activepage movem.l (a7)+,d0/a1 rts ;------------------------------------------------------------------------------ ; DrawPage Screen(a2) ;------------------------------------------------------------------------------ se.DrawPage movem.l d0-d3/d7/a0-a3,-(a7) draw a page of table moveq #0,d2 draw background moveq #0,d3 lea da.se.PageObj,a1 CALL fnt.Base,fnt_WriteObject moveq #fc_Dark,d1 moveq #ToolsPerPage-1,d0 draw lines .WrLines bsr se.WrLineName bsr se.WrLineCount dbf d0,.WrLines movem.l (a7)+,d0-d3/d7/a0-a3 rts ;------------------------------------------------------------------------------ ; LineAddr LineNum(d0) --> LineAddr(a0) ;------------------------------------------------------------------------------ se.LineAddr move.l d0,-(a7) get line address lea va.se.Table,a0 table address mulu #si.SizeOf,d0 adda.l d0,a0 add line offset moveq #0,d0 move.w va.se.ActPage,d0 mulu #ToolsPerPage*si.SizeOf,d0 adda.l d0,a0 add page offset move.l (a7)+,d0 rts ;------------------------------------------------------------------------------ ; WrLineName LineNum,FontCode,Screen(d0,d1,a2) ;------------------------------------------------------------------------------ se.WrLineName movem.l d0-d3/a0,-(a7) write name into line bsr se.LineAddr line addr in a0 tst.l si.ToolShape(a0) is there toolshape ? beq.s .Exit move.l si.ToolShape(a0),a0 write toolname move.l ts.Name(a0),a0 move.l #116,d2 move.l #20,d3 mulu #17,d0 add.w d0,d3 CALL fnt.Base,fnt_WriteString .Exit movem.l (a7)+,d0-d3/a0 rts ;------------------------------------------------------------------------------ ; WrLineCount LineNum,FontCode,Screen(d0,d1,a2) ;------------------------------------------------------------------------------ se.WrLineCount movem.l d0-d3/a0,-(a7) write count into line bsr se.LineAddr line addr in a0 tst.l si.ToolShape(a0) is there toolshape ? beq.s .Exit mulu #17,d0 move.l #46,d2 move.l #20,d3 add.l d0,d3 move.l si.Count(a0),d0 write count divu #10,d0 and.b #$ff,d0 beq.s .NoHigh add.b #$30,d0 CALL fnt.Base,fnt_WriteImage count H .NoHigh move.l #56,d2 move.l si.Count(a0),d0 write count divu #10,d0 swap d0 and.b #$ff,d0 add.b #$30,d0 CALL fnt.Base,fnt_WriteImage count L .Exit movem.l (a7)+,d0-d3/a0 rts ******************************************************************************* * ToolMenu ******************************************************************************* ;------------------------------------------------------------------------------ ; ToolMenu NoOp ;------------------------------------------------------------------------------ ToolMenu movem.l d0-a6,-(a7) lea va.BossInfo,a0 boss stands ? cmpi.b #di_st_Control,di_Status(a0) bne .Quit moveq #ef_No,d0 noise off moveq #ac_Background,d1 moveq #0,d2 CALL snd.Base,snd_PlaySample bsr SwapIn lea da.tm.MainObj,a0 lea da.tm.CtrlObj,a1 bsr se.DrawMain bsr se.MainUp bsr se.SetSBorder bsr se.SetPointer .Restart lea da.se.MGads,a1 lea da.se.MCGads,a2 bsr se.InitMGads init main gads bsr se.SelectLOn .Loop bsr WaitBlank CALL inl.Base,inl_IDCMPTest IDCMP Test cmpi.l #inl_ic_Gadget,d0 gadget ? bne.s .Loop cmpi.w #gc_Exit,d1 exit ? beq.s .Exit cmpi.w #gc_Icon1,d1 icon 1 ? bne.s .NoIcon1 bsr ToolSelect tool select cmpi.w #gc_Exit,d0 check return code beq .Exit bra.s .Restart .NoIcon1 bra.s .Loop .Exit bsr se.SelectLOff bsr se.RemoveGads bsr se.FreePointer bsr se.ResetSBorder bsr se.MainDown bsr SwapOut bsr WaitBlank bsr sf.DrawField draw WorkField bsr sf.FieldToBack draw Background bsr WaitBlank bsr MoveAll moveq #ef_Noise,d0 noise on moveq #ac_Background,d1 moveq #0,d2 CALL snd.Base,snd_PlaySample .Quit movem.l (a7)+,d0-a6 rts ******************************************************************************* * ToolSelect ******************************************************************************* ;------------------------------------------------------------------------------ ; ToolSelect NoOp --> ReturnCode(d0) ;------------------------------------------------------------------------------ ToolSelect movem.l d1-a6,-(a7) bsr se.SelectLOff lea Tools,a0 init selector table bsr se.InitTable move.l SubMenuScreen,a2 draw page bsr se.DrawPage bsr se.SubMenuUp bsr se.CopyFromSub bsr se.SubMenuBot .Restart bsr se.InitSGads init sub gads bsr se.SelectLOn move.w #-1,va.se.ActLine no active line move.w #-1,va.se.LastLine no last active line .Loop bsr WaitBlank CALL inl.Base,inl_IDCMPTest IDCMP Test bsr xx_WrMouseCoord cmpi.l #inl_ic_Gadget,d0 gadget ? bne.s .NoGadget cmpi.w #gc_Left,d1 left ? beq .LeftButt cmpi.w #gc_Right,d1 right ? beq .RightButt cmpi.w #gc_Return,d1 return ? beq .ReturnButt cmpi.w #gc_Exit,d1 exit ? beq .ExitButt moveq #0,d0 cmpi.w #gc_Line0,d1 box0 ? beq .Line moveq #1,d0 cmpi.w #gc_Line1,d1 box1 ? beq .Line moveq #2,d0 cmpi.w #gc_Line2,d1 box2 ? beq .Line moveq #3,d0 cmpi.w #gc_Line3,d1 box3 ? beq .Line moveq #4,d0 cmpi.w #gc_Line4,d1 box4 ? beq .Line moveq #5,d0 cmpi.w #gc_Line5,d1 box5 ? beq .Line .NoGadget moveq #-1,d0 .Line move.w d0,va.se.ActLine cmp.w va.se.LastLine,d0 same as the last line ? beq .LineOK moveq #0,d0 clear last line move.w va.se.LastLine,d0 bmi.s .NoLastLine moveq #fc_Dark,d1 move.l MainMenuScreen,a2 bsr se.WrLineName .NoLastLine moveq #0,d0 set active line move.w va.se.ActLine,d0 tst.w d0 bmi.s .LineOK moveq #fc_Bright,d1 move.l MainMenuScreen,a2 bsr se.WrLineName .LineOK move.w va.se.ActLine,va.se.LastLine bra .Loop .LeftButt subq.w #1,va.se.ActPage bsr se.SelectLOff bsr se.CopyToSub bsr se.SubMenuTop move.l MainMenuScreen,a2 draw page bsr se.DrawPage bsr se.SubMenuDn bra .Restart .RightButt addq.w #1,va.se.ActPage bsr se.SelectLOff move.l SubMenuScreen,a2 draw page bsr se.DrawPage bsr se.SubMenuUp bsr se.CopyFromSub bsr se.SubMenuBot bra .Restart .ReturnButt bsr se.SelectLOff bsr se.RemoveGads bsr se.CopyToSub bsr se.SubMenuTop lea da.tm.MainObj,a0 lea da.tm.CtrlObj,a1 bsr se.DrawMain bsr se.SubMenuDn move.w #gc_Return,d0 return code bra.s .Exit .ExitButt bsr se.SelectLOff bsr se.RemoveGads move.w #gc_Exit,d0 return code .Exit movem.l (a7)+,d1-a6 rts ******************************************************************************* * WeaponMenu ******************************************************************************* ;------------------------------------------------------------------------------ ; WeaponMenu NoOp ;------------------------------------------------------------------------------ WeaponMenu movem.l d0-a6,-(a7) lea va.BossInfo,a0 boss stands ? cmpi.b #di_st_Control,di_Status(a0) bne .Quit moveq #ef_No,d0 noise off moveq #ac_Background,d1 moveq #0,d2 CALL snd.Base,snd_PlaySample bsr SwapIn lea da.wm.MainObj,a0 lea da.wm.CtrlObj,a1 bsr se.DrawMain bsr se.MainUp bsr se.SetSBorder bsr se.SetPointer .Restart lea da.se.MGads,a1 lea da.se.MCGads,a2 bsr se.InitMGads init main gads bsr se.SelectLOn .Loop bsr WaitBlank CALL inl.Base,inl_IDCMPTest IDCMP Test cmpi.l #inl_ic_Gadget,d0 gadget ? bne.s .Loop cmpi.w #gc_Exit,d1 exit ? beq.s .Exit cmpi.w #gc_Icon1,d1 icon 1 ? bne.s .NoIcon1 ; bsr WeaponSelect weapon select ; cmpi.w #gc_Exit,d0 check return code ; beq .Exit bra.s .Restart .NoIcon1 bra.s .Loop .Exit bsr se.SelectLOff bsr se.RemoveGads bsr se.FreePointer bsr se.ResetSBorder bsr se.MainDown bsr SwapOut bsr WaitBlank bsr sf.DrawField draw WorkField bsr sf.FieldToBack draw Background bsr WaitBlank bsr MoveAll moveq #ef_Noise,d0 noise on moveq #ac_Background,d1 moveq #0,d2 CALL snd.Base,snd_PlaySample .Quit movem.l (a7)+,d0-a6 rts ******************************************************************************* * ShowTools ******************************************************************************* ShowTools rts IF 1=2 movem.l d0-a6,-(a7) moveq #0,d0 move.b Boss_K,d0 bsr AskKType a0 : KData tst.b to_TakeCount felvenni kell ? bpl to_TakeTool tst.b to_PlaceCount letenni kell ? bpl to_PlaceTool move.b to_LastButton,d1 moveq #$44,d0 CALL kbd.Base,kbd_TestKey Tool billentyü ? move.b d0,to_LastButton tst.b d0 bmi to_Exit tst.b d1 bpl to_Exit move.b kd.Tool(a0),d2 mi van itt ? bmi to_NoToolDown st kd.Tool(a0) ; ; Beteszi a raktárba ; lea st_Store_Type+10(pc),a1 lea st_Store_Num+10(pc),a2 moveq #0,d1 to_SearchStore move.b 0(a1,d1.w),d0 tst.b d0 üres ? bmi.s to_FoundStore cmp.b d0,d2 ilyen tárgy van itt ? beq.s to_FoundStore addq.b #1,d1 cmpi.b #39,d1 az utolsó biztosan bne.s to_SearchStore üres to_FoundStore move.b d2,0(a1,d1.w) addq.b #1,0(a2,d1.w) ; ; Beteszi egyik Box-ba is, ha van üres ; lea st_Store_Type(pc),a1 lea st_Store_Num(pc),a2 moveq #0,d1 to_SearchBox move.b 0(a1,d1.w),d0 tst.b d0 üres ? bmi.s to_FoundBox cmp.b d0,d2 ilyen tárgy van itt ? beq.s to_FoundBox addq.b #1,d1 cmpi.b #4,d1 bne.s to_SearchBox bra.s to_NoFreeBox to_FoundBox move.b d2,0(a1,d1.w) addq.b #1,0(a2,d1.w) move.b d1,st_ActiveBox aktiválja ezt a Box-ot to_NoFreeBox moveq #2,d0 moveq #2,d1 moveq #0,d2 CALL snd.Base,snd_PlaySample Effekt move.b #1,to_TakeCount mindkét Pf-röl felveszi ; ; Tárgy letörlése a képröl ; to_TakeTool subq.b #1,to_TakeCount moveq #0,d1 move.b Boss_K,d1 lsl.w #2,d1 kocka száma *4 lea Scr_Offs(pc),a1 move.l 0(a1,d1.w),a1 kocka címe adda.l #7564,a1 offs 36*210+4 move.l a1,a2 adda.l WorkPfMap,a1 tárgy cím adda.l #PlayfieldMap3,a2 screen cím moveq #0,d1 move.b Boss_XK,d1 oszlop száma mulu #720,d1 * bufferméret lea MovyBufferK,a0 adda.l d1,a0 W_BLIT move.l #$09f00000,$40(a6) move.l #$ffffffff,$44(a6) move.l #$00000024,$64(a6) AMOD,DMOD move.l a0,$50(a6) move.l a1,$54(a6) WorkPfMap move.w #$1e03,$58(a6) 48*24*5 W_BLIT move.l #$09f00000,$40(a6) move.l #$ffffffff,$44(a6) move.l #$00000024,$64(a6) AMOD,DMOD move.l a0,$50(a6) move.l a2,$54(a6) PlayfieldMap3 move.w #$1e03,$58(a6) 48*24*5 bra to_Exit ; ; Ha nincs lent tárgy, letesz egyet, ha tud ; to_NoToolDown moveq #0,d2 move.b st_ActiveBox,d2 aktív box száma lea st_Store_Type(pc),a1 lea st_Store_Num(pc),a2 tst.b 0(a1,d2.w) van itt tárgy ? bmi.w to_Exit nincs tst.b 0(a2,d2.w) van még belöle ? beq.w to_Exit már elfogyott subq.b #1,0(a2,d2.w) kiveszi a Box-ból move.b 0(a1,d2.w),d2 tárgy száma move.b d2,kd.Tool(a0) ; ; Kiveszi a raktárból ; lea st_Store_Type+10(pc),a1 lea st_Store_Num+10(pc),a2 moveq #0,d1 to_SearchTool cmp.b 0(a1,d1.w),d2 ilyen tárgy van itt ? beq.s to_FoundTool addq.b #1,d1 cmpi.b #39,d1 az utolsó biztosan bne.s to_SearchTool olyan ha eddíg nem volt to_FoundTool subq.b #1,0(a2,d1.w) egyel kevesebb moveq #2,d0 moveq #2,d1 moveq #0,d2 CALL snd.Base,snd_PlaySample Effekt move.b #1,to_PlaceCount mindkét Pf-re leteszi ; ; Tárgy felrajzolása ; to_PlaceTool subq.b #1,to_PlaceCount moveq #0,d2 move.b kd.Tool(a0),d2 tárgy száma lea to_KPos(pc),a0 moveq #0,d0 move.b Boss_K,d0 kocka száma lsl.w #2,d0 * 4 adda.l d0,a0 moveq #0,d0 moveq #0,d1 movem.w (a0),d0-d1 add.w #24,d0 add.w #20,d1 lsl.w #2,d2 tárgy száma * 4 lea to_ToolObj(pc),a0 move.l 0(a0,d2.w),a0 bsr DrawObject --> WorkPfMap move.l WorkPfMap,a1 move.l #PlayfieldMap3,WorkPfMap bsr DrawObject --> PlayieldMap3 move.l a1,WorkPfMap to_Exit movem.l (a7)+,d0-a6 rts ******************************************************************************* * Tools Data ******************************************************************************* to_TakeCount DC.B -1 to_PlaceCount DC.B -1 to_LastButton DC.B -1 DC.B -1 to_ToolObj DC.L O_TO00,O_TO01,O_TO02,O_TO03,O_TO04 to_KPos DC.W 0,0,80,0,160,0,240,0 DC.W 0,66,80,66,160,66,240,66 DC.W 0,132,80,132,160,132,240,132 ENDIF ******************************************************************************* * Infofield ******************************************************************************* Infofield tst.b va.in.TWReady bne .WriterOK st va.in.TWReady move.l #da.in.InfoText,va.in.TWPtr .WriterOK bsr in.TextWriter bsr in.Money bsr in.Energy bsr in.Lives bsr in.Weapon bsr in.Ammo bsr in.FKey rts ;------------------------------------------------------------------------------ ; Init ;------------------------------------------------------------------------------ in.Init bsr in.ClrMonitor rts ;------------------------------------------------------------------------------ ; TextWriter NoOp ;------------------------------------------------------------------------------ in.TextWriter movem.l d0-a6,-(a7) C #$f0f tst.b va.in.TWReady ready ? beq .Exit tst.b va.in.TWTimer time to work ? beq.s .NextChar subq.b #1,va.in.TWTimer bra .Exit .NextChar move.b va.in.TWSpeed,va.in.TWTimer move.l va.in.TWPtr,a0 moveq #0,d0 move.b (a0)+,d0 tst.b d0 end ? 0 beq.s .EndText cmpi.b #1,d0 clear ? 1 beq.s .Clear cmpi.b #2,d0 wait ? 2,n beq.s .Wait cmpi.b #3,d0 set speed ? 3 beq.s .SetSpeed cmpi.b #10,d0 return ? 10 beq.s .Return bra .WriteChar .EndText clr.b va.in.TWReady bra .OK .Clear bsr in.ClrMonitor clr.w va.in.TWXPos clr.w va.in.TWYPos bra .OK .Wait move.b (a0)+,va.in.TWTimer bra .OK .SetSpeed move.b (a0)+,va.in.TWSpeed bra .OK .Return clr.w va.in.TWXPos addq.w #7,va.in.TWYPos bra .OK .WriteChar moveq #fc_Little1,d1 move.l InfoScreen,a2 move.w va.in.TWXPos,d2 move.w va.in.TWYPos,d3 addq.w #7,d2 addq.w #8,d3 CALL fnt.Base,fnt_WriteImage subq.w #7,d2 move.w d2,va.in.TWXPos .OK move.l a0,va.in.TWPtr .Exit movem.l (a7)+,d0-a6 rts ;------------------------------------------------------------------------------ ; Money NoOp ;------------------------------------------------------------------------------ in.Money movem.l d0-d5/a2,-(a7) move.w va.Money,d4 cmp.w va.in.Money,d4 beq .Exit move.w d4,va.in.Money move.l InfoScreen,a2 moveq #fc_Infofield,d1 move.w #199,d2 xpos move.w #19,d3 ypos moveq #3,d5 4 numbers .Loop move.w d4,d0 lsr.w #4,d4 and.w #$f,d0 add.w #'0',d0 CALL fnt.Base,fnt_WriteImage sub.w #21,d2 xpos := xpos-21 dbf d5,.Loop .Exit movem.l (a7)+,d0-d5/a2 rts ;------------------------------------------------------------------------------ ; Energy NoOp ;------------------------------------------------------------------------------ in.Energy movem.l d0-d5/a0/a2,-(a7) move.l InfoScreen,a2 moveq #fc_Infofield,d1 moveq #1,d5 check two times .Loop moveq #89,d2 moveq #50,d3 moveq #0,d4 move.b va.in.Energy,d4 lsr.w #1,d4 energy/2 lea Boss,a0 move.b dr_Energy(a0),d0 boss energy cmp.b va.in.Energy,d0 beq.s .Exit blo.s .Dec addq.b #1,va.in.Energy inc moveq #'o',d0 lea va.in.ImageBuff,a0 CALL fnt.Base,fnt_GetImage move.w d4,fnt_im_Width(a0) CALL fnt.Base,fnt_CutImage bra.s .OK .Dec moveq #'q',d0 dec add.w d4,d2 subq.w #1,d2 CALL fnt.Base,fnt_WriteImage subq.b #1,va.in.Energy .OK dbf d5,.Loop .Exit movem.l (a7)+,d0-d5/a0/a2 rts ;------------------------------------------------------------------------------ ; Lives NoOp ;------------------------------------------------------------------------------ in.Lives movem.l d0-d5/a2,-(a7) move.l InfoScreen,a2 moveq #fc_Infofield,d1 move.w #155,d2 move.w #35,d3 move.w va.Lives,d4 cmp.w va.in.Lives,d4 beq .OK move.w d4,va.in.Lives moveq #3,d5 max. 4 hearts .Loop subq.w #1,d4 bmi.s .NoMore moveq #'j',d0 heart on bra.s .Draw .NoMore moveq #'l',d0 heart off .Draw CALL fnt.Base,fnt_WriteImage addq.w #3,d2 dbf d5,.Loop clr.b va.in.HeartTi clear timer clr.b va.in.HeartSt clear status bra.s .Exit .OK subq.b #1,va.in.HeartTi bpl.s .Exit not.b va.in.HeartSt tst.b va.in.HeartSt beq.s .On move.b #10,va.in.HeartTi moveq #'k',d0 heart little bra.s .Change .On move.b #30,va.in.HeartTi moveq #'j',d0 heart big .Change subq.w #1,d4 mulu #15,d4 (Lives-1)*15 add.w d4,d2 CALL fnt.Base,fnt_WriteImage .Exit movem.l (a7)+,d0-d5/a2 rts ;------------------------------------------------------------------------------ ; Weapon NoOp ;------------------------------------------------------------------------------ in.Weapon movem.l d0-d3/a0/a2,-(a7) lea va.BossInfo,a0 move.l di_Shape(a0),a0 moveq #0,d1 move.b bs_FontCode(a0),d1 cmp.b va.in.Weapon,d1 weapon image beq.s .Exit move.b d1,va.in.Weapon moveq #$1f,d0 infofield weapon moveq #92,d2 moveq #3,d3 move.l InfoScreen,a2 CALL fnt.Base,fnt_WriteImage .Exit movem.l (a7)+,d0-d3/a0/a2 rts ;------------------------------------------------------------------------------ ; Ammo NoOp ;------------------------------------------------------------------------------ in.Ammo movem.l d0-d5/a0-a2,-(a7) moveq #fc_Infofield,d1 move.l InfoScreen,a2 lea va.BossInfo,a0 move.l di_Shape(a0),a0 move.l bs_WeaponInfo(a0),a1 ammo number move.w wi_Ammo(a1),d4 move.w bs_AmmoSize(a0),d0 divu d0,d4 move.l d4,d5 swap d5 and.l #$ff,d4 num and.l #$ff,d5 energy lsl.w #6,d5 AmmoSize*64 divu d0,d5 tst.w d4 beq.s .OK tst.w d5 bne.s .OK subq.w #1,d4 moveq #63,d5 .OK cmp.w va.in.Ammo1,d4 beq.s .NumOK move.w d4,va.in.Ammo1 moveq #'0',d0 add.w d4,d0 move.w #141,d2 move.w #9,d3 CALL fnt.Base,fnt_WriteImage .NumOK move.w #89,d2 move.w #25,d3 cmp.w va.in.Ammo2,d5 beq.s .Exit blo.s .Dec addq.w #1,va.in.Ammo2 inc moveq #'p',d0 lea va.in.ImageBuff,a0 CALL fnt.Base,fnt_GetImage move.w va.in.Ammo2,d5 move.w d5,fnt_im_Width(a0) CALL fnt.Base,fnt_CutImage bra.s .Exit .Dec moveq #'q',d0 dec move.w va.in.Ammo2,d5 add.w d5,d2 subq.w #1,d2 CALL fnt.Base,fnt_WriteImage subq.w #1,va.in.Ammo2 .Exit movem.l (a7)+,d0-d5/a0-a2 rts ;------------------------------------------------------------------------------ ; FKey NoOp ;------------------------------------------------------------------------------ in.FKey movem.l d0-d3/a2,-(a7) move.w va.se.ActBox,d0 active box cmp.w va.in.ActBox,d0 beq.s .Exit move.w d0,va.in.ActBox move.l InfoScreen,a2 moveq #fc_Infofield,d1 moveq #'d',d0 add.w va.in.ActBox,d0 code move.l #228,d2 move.l #8,d3 CALL fnt.Base,fnt_WriteImage .Exit movem.l (a7)+,d0-d3/a2 rts ;------------------------------------------------------------------------------ ; SectorNum NoOp ;------------------------------------------------------------------------------ in.SectorNum movem.l d0-d3/a0/a2,-(a7) move.l InfoScreen,a2 moveq #fc_Infofield,d1 moveq #'A',d0 add.w va.ActSector,d0 code A..L moveq #95,d2 xpos moveq #36,d3 ypos CALL fnt.Base,fnt_WriteImage movem.l (a7)+,d0-d3/a0/a2 rts ;------------------------------------------------------------------------------ ; FieldNum NoOp ;------------------------------------------------------------------------------ in.FieldNum movem.l d0-d4/a0/a2,-(a7) move.l InfoScreen,a2 moveq #fc_Infofield,d1 moveq #0,d4 moveq #0,d2 moveq #0,d3 move.w va.ActPlayField,d4 divu #20,d4 move.l d4,d0 add.w #'0',d0 move.w #111,d2 move.w #40,d3 CALL fnt.Base,fnt_WriteImage clr.w d4 swap d4 divu #5,d4 move.l d4,d0 add.w #'0',d0 move.w #125,d2 move.w #40,d3 CALL fnt.Base,fnt_WriteImage clr.w d4 swap d4 move.l d4,d0 add.w #'0',d0 move.w #139,d2 move.w #40,d3 CALL fnt.Base,fnt_WriteImage movem.l (a7)+,d0-d4/a0/a2 rts ;------------------------------------------------------------------------------ ; ClrMonitor NoOp ;------------------------------------------------------------------------------ in.ClrMonitor movem.l a0/a6,-(a7) lea $dff000,a6 W_BLIT move.l #$030a0000,$40(a6) move.l #$07fffffe,$44(a6) FWM,LWM move.w #$ffff,$74(a6) ADAT move.w #$001f,$60(a6) CMOD move.w #$001f,$66(a6) DMOD lea Infofield.back,a0 lea 1400(a0),a0 move.l a0,$48(a6) CPTR move.l a0,$54(a6) DPTR move.w #$3485,$58(a6) 80*42*5 movem.l (a7)+,a0/a6 rts ******************************************************************************* * ClearLifts ******************************************************************************* ClearLifts move.l a4,-(a7) lea va.LiftInfo0,a4 bsr ClearLift lea va.LiftInfo1,a4 bsr ClearLift move.l (a7)+,a4 rts ;------------------------------------------------------------------------------ ; ClearLift LiftInfo(a4) ;------------------------------------------------------------------------------ ClearLift movem.l d0-d3/a1-a2,-(a7) cmpi.b #li_st_No,li_Status(a4) active ? beq.s .Exit tst.b li_Last1F(a4) need to clear ? beq.s .Exit move.w li_Last1X(a4),d2 move.w li_Last1Y(a4),d3 move.l li_Last1O(a4),a1 move.l PfWorkScreen,a2 CALL fnt.Base,fnt_TBClrObject .Exit movem.l (a7)+,d0-d3/a1-a2 rts ******************************************************************************* * DrawLifts ******************************************************************************* DrawLifts move.l a4,-(a7) lea va.LiftInfo0,a4 bsr DrawLift lea va.LiftInfo1,a4 bsr DrawLift move.l (a7)+,a4 rts ;------------------------------------------------------------------------------ ; DrawLift DroidInfo(a4) ;------------------------------------------------------------------------------ DrawLift movem.l d0-d3/a1-a2,-(a7) cmpi.b #li_st_No,li_Status(a4) active ? beq.s .Exit tst.b li_Last2F(a4) need to draw ? beq.s .Exit move.w li_Last2X(a4),d2 move.w li_Last2Y(a4),d3 move.l li_Last2O(a4),a1 move.l PfWorkScreen,a2 CALL fnt.Base,fnt_TBWrtObject .Exit movem.l (a7)+,d0-d3/a1-a2 rts ******************************************************************************* * MoveLifts ******************************************************************************* MoveLifts move.l a4,-(a7) lea va.SpecSwitch,a3 lift switch to anim move.b #kg_ss_Anim,$f(a3) lea va.LiftInfo0,a4 bsr MoveLift lea va.LiftInfo1,a4 bsr MoveLift move.l (a7)+,a4 rts ;------------------------------------------------------------------------------ ; MoveLift LiftInfo(a4) ;------------------------------------------------------------------------------ MoveLift movem.l d0-a6,-(a7) cmpi.b #li_st_No,li_Status(a4) active ? beq .Exit move.b li_Last2F(a4),li_Last1F(a4) data for ClearLift move.w li_Last2X(a4),li_Last1X(a4) move.w li_Last2Y(a4),li_Last1Y(a4) move.l li_Last2O(a4),li_Last1O(a4) clr.b li_Last2F(a4) move.w Boss_XPos,d0 is Boss here ? cmp.w li_XPos(a4),d0 bne.s .Draw move.w Boss_YPos,d0 cmp.w li_YPos(a4),d0 bne.s .Draw cmpi.b #di_st_LiftUp,Boss_Status lift up ? beq.s .Up cmpi.b #di_st_LiftDown,Boss_Status lift down ? beq.s .Down bra.s .Draw .Up subq.w #1,li_YPos(a4) bra.s .Move .Down addq.w #1,li_YPos(a4) .Move lea va.SpecSwitch,a3 lift switch to covering move.b #kg_ss_Covering,$f(a3) .Draw tst.b li_Shape(a4) beq.s .Shape0 lea va.LiftObj1,a1 lift object1 bra.s .ShapeOK .Shape0 lea va.LiftObj0,a1 lift object0 .ShapeOK move.w li_XPos(a4),d2 move.w li_YPos(a4),d3 st li_Last2F(a4) move.w d2,li_Last2X(a4) move.w d3,li_Last2Y(a4) move.l a1,li_Last2O(a4) move.l PfWorkScreen,a2 CALL fnt.Base,fnt_TBWrtObject write lift-object .Exit movem.l (a7)+,d0-a6 rts ******************************************************************************* * ClearDroids ******************************************************************************* ClearDroids move.l a4,-(a7) lea va.BossInfo,a4 bsr ClearDroid lea va.DroidInfo0,a4 bsr ClearDroid lea va.DroidInfo1,a4 bsr ClearDroid lea va.DroidInfo2,a4 bsr ClearDroid move.l (a7)+,a4 rts ;------------------------------------------------------------------------------ ; ClearDroid DroidInfo(a4) ;------------------------------------------------------------------------------ ClearDroid movem.l d0-d3/a1-a2,-(a7) cmpi.b #di_st_No,di_Status(a4) active ? beq.s .Exit tst.b di_Last1F(a4) need to clear ? beq.s .Exit move.w di_Last1X(a4),d2 move.w di_Last1Y(a4),d3 move.l di_Last1O(a4),a1 move.l PfWorkScreen,a2 CALL fnt.Base,fnt_TBClrObject .Exit movem.l (a7)+,d0-d3/a1-a2 rts ******************************************************************************* * DrawDroids ******************************************************************************* DrawDroids move.l a4,-(a7) lea va.BossInfo,a4 bsr DrawDroid lea va.DroidInfo0,a4 bsr DrawDroid lea va.DroidInfo1,a4 bsr DrawDroid lea va.DroidInfo2,a4 bsr DrawDroid move.l (a7)+,a4 rts ;------------------------------------------------------------------------------ ; DrawDroid DroidInfo(a4) ;------------------------------------------------------------------------------ DrawDroid movem.l d0-d3/a1-a2,-(a7) cmpi.b #di_st_No,di_Status(a4) active ? beq.s .Exit tst.b di_Last2F(a4) need to draw ? beq.s .Exit move.w di_Last2X(a4),d2 move.w di_Last2Y(a4),d3 move.l di_Last2O(a4),a1 move.l PfWorkScreen,a2 CALL fnt.Base,fnt_TBWrtObject .Exit movem.l (a7)+,d0-d3/a1-a2 rts ******************************************************************************* * MoveDroids ******************************************************************************* MoveDroids move.l a4,-(a7) lea va.BossInfo,a4 bsr MoveDroid lea va.DroidInfo0,a4 bsr MoveDroid lea va.DroidInfo1,a4 bsr MoveDroid lea va.DroidInfo2,a4 bsr MoveDroid move.l (a7)+,a4 rts ;------------------------------------------------------------------------------ ; MoveDroid DroidInfo(a4) ;------------------------------------------------------------------------------ MoveDroid movem.l d0-a6,-(a7) cmpi.b #di_st_No,di_Status(a4) active ? beq .Exit bsr RefrDroidInfo refresh droid info move.l di_Droid(a4),a5 droid structure move.b dr_Type(a5),d0 cmpi.b #dr_ty_BossA,d0 BossA ? beq.s .BossA cmpi.b #dr_ty_BossB,d0 BossB ? beq.s .BossB cmpi.b #dr_ty_BossC,d0 BossC ? beq.s .BossC cmpi.b #dr_ty_BossD,d0 BossD ? beq.s .BossD cmpi.b #dr_ty_BossE,d0 BossE ? beq.s .BossE cmpi.b #dr_ty_BossF,d0 BossF ? beq.s .BossF cmpi.b #dr_ty_BossG,d0 BossG ? beq.s .BossG cmpi.b #dr_ty_BossH,d0 BossH ? beq.s .BossH cmpi.b #dr_ty_BossI,d0 BossI ? beq.s .BossI cmpi.b #dr_ty_RCtrl,d0 RCtrl ? beq.s .RCtrl cmpi.b #dr_ty_Radar,d0 Radar ? beq.s .Radar cmpi.b #dr_ty_MineA,d0 MineA ? beq.s .MineA cmpi.b #dr_ty_MineB,d0 MineB ? beq.s .MineB cmpi.b #dr_ty_WalkA,d0 WalkA ? beq.s .WalkA bra.s .Exit .BossA lea da.ds.BossA,a3 bra.s .Boss .BossB lea da.ds.BossB,a3 bra.s .Boss .BossC lea da.ds.BossC,a3 bra.s .Boss .BossD lea da.ds.BossD,a3 bra.s .Boss .BossE lea da.ds.BossE,a3 bra.s .Boss .BossF lea da.ds.BossF,a3 bra.s .Boss .BossG lea da.ds.BossG,a3 bra.s .Boss .BossH lea da.ds.BossH,a3 bra.s .Boss .BossI lea da.ds.BossI,a3 .Boss bsr MoveBoss bra.s .Exit .RCtrl bsr MoveRCtrl bra.s .Exit .Radar bsr MoveRadar bra.s .Exit .MineA bsr MoveMineA bra.s .Exit .MineB bsr MoveMineB bra.s .Exit .WalkA bsr MoveWalkA .Exit movem.l (a7)+,d0-a6 rts ;------------------------------------------------------------------------------ ; RefrDroidInfo DroidInfo(a4) ;------------------------------------------------------------------------------ RefrDroidInfo movem.l d0-d3/d7,-(a7) move.b di_Last2F(a4),di_Last1F(a4) data for ClearDroid move.w di_Last2X(a4),di_Last1X(a4) move.w di_Last2Y(a4),di_Last1Y(a4) move.l di_Last2O(a4),di_Last1O(a4) clr.b di_Last2F(a4) moveq #0,d0 calc K pos of droid moveq #0,d1 move.w di_XPos(a4),d0 move.w di_YPos(a4),d1 add.w #40,d0 add.w #33,d1 bsr CalcKPos move.b d0,di_XK(a4) column move.b d1,di_YK(a4) row move.b d2,di_K(a4) KNum move.b d3,di_XKPos(a4) XPos in K move.b #kg_ty_Left+kg_ty_Right,d0 KType on the border tst.b di_XKPos(a4) on K border ? beq .KTypeOK moveq #0,d7 get KType move.b di_K(a4),d7 cmpi.b #TRUE,di_Boss(a4) is it Boss ? beq.s .Boss bsr AskDrKType bra.s .KTypeOK .Boss bsr AskKType .KTypeOK move.b d0,di_KType(a4) movem.l (a7)+,d0-d3/d7 rts ;------------------------------------------------------------------------------ ; MoveBoss Shape,DroidInfo,Droid(a3,a4,a5) ;------------------------------------------------------------------------------ MoveBoss tst.b dr_Energy(a5) energy OK ? beq .Explode move.l a3,di_Shape(a4) set shape move.b di_Status(a4),d0 what to do ? cmpi.b #di_st_Control,d0 control ? beq .Control cmpi.b #di_st_Move,d0 moving ? beq .Moving cmpi.b #di_st_Turn,d0 turning ? beq .Turning cmpi.b #di_st_Crouch,d0 crouching ? beq .Crouching cmpi.b #di_st_LiftUp,d0 lifting up ? beq .LiftingUp cmpi.b #di_st_LiftDown,d0 lifting down ? beq .LiftingDown cmpi.b #di_st_Explode,d0 exploding ? beq .Exploding bra .Exit .Control tst.b va.ControlEna control enabled ? beq .ControlEna cmpi.b #40,di_XKPos(a4) in the K ? bne .Move bra .Stand .ControlEna move.b va.ControlDir,d0 check control direction cmpi.b #gam_di_Left,d0 left ? beq .Left cmpi.b #gam_di_Right,d0 right ? beq .Right cmpi.b #gam_di_Up,d0 up ? beq .Up cmpi.b #gam_di_Down,d0 down ? beq .Down bra .Stand .Left cmpi.b #gam_di_Left,di_Dir(a4) dir left ? bne .TurnLeft turn, if no btst #kg_tyb_Left,di_KType(a4) can I go left ? beq .Stand cmpi.w #0,di_XPos(a4) left border ? beq .FieldLeft bra .Move .Right cmpi.b #gam_di_Right,di_Dir(a4) dir right ? bne .TurnRight turn, if no btst #kg_tyb_Right,di_KType(a4) can I go right ? beq .Stand cmpi.w #240,di_XPos(a4) right border ? beq .FieldRight bra .Move .Up btst #kg_tyb_Forward,di_KType(a4) can I go forward ? bne .FieldForward btst #kg_tyb_Up,di_KType(a4) can I go up ? bne .LiftUp bra .Stand .Down btst #kg_tyb_Back,di_KType(a4) can I go back ? bne .FieldBack btst #kg_tyb_Down,di_KType(a4) can I go down ? bne .LiftDown bra .Crouch .LiftUp move.b #di_st_LiftUp,di_Status(a4) tst.w di_YPos(a4) top border ? bne.s .Lift move.b #nf_Up,va.NewField field up bra.s .Lift .LiftDown move.b #di_st_LiftDown,di_Status(a4) cmpi.w #132,di_YPos(a4) bottom border ? bne.s .Lift move.b #nf_Down,va.NewField field down .Lift clr.b di_LiftPhase(a4) moveq #8,d0 start effect moveq #ac_Boss,d1 moveq #12,d2 CALL snd.Base,snd_PlaySample bra .Lifting .LiftingUp subq.w #1,di_YPos(a4) st va.Moving moving ! addq.b #1,di_LiftPhase(a4) cmpi.b #66,di_LiftPhase(a4) bne .Lifting cmpi.b #gam_di_Up,va.ControlDir control up ? bne .LiftingStop btst #kg_tyb_Up,di_KType(a4) can I go up ? beq .LiftingStop tst.w di_YPos(a4) top border ? bne.s .NoTop move.b #nf_Up,va.NewField field up .NoTop clr.b di_LiftPhase(a4) bra .Lifting .LiftingDown addq.w #1,di_YPos(a4) st va.Moving moving ! addq.b #1,di_LiftPhase(a4) cmpi.b #66,di_LiftPhase(a4) bne .Lifting cmpi.b #gam_di_Down,va.ControlDir control down ? bne .LiftingStop btst #kg_tyb_Down,di_KType(a4) can I go down ? beq .LiftingStop cmpi.w #132,di_YPos(a4) bottom border ? bne.s .NoBottom move.b #nf_Down,va.NewField field down .NoBottom clr.b di_LiftPhase(a4) bra .Lifting .LiftingStop move.b #di_st_Control,di_Status(a4) moveq #0,d0 moveq #2,d0 moveq #ac_Boss,d1 moveq #12,d2 CALL snd.Base,snd_PlaySample stop effect .Lifting clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #1,di_MaxPhase(a4) 1 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 cmpi.b #gam_di_Right,di_Dir(a4) dir right ? bne.s .LiftingStandL lea da.ds.BossSRO,a1 bra .Draw .LiftingStandL lea da.ds.BossSLO,a1 bra .Draw .FieldForward move.b #nf_Forward,va.NewField bra.s .Stand .FieldBack move.b #nf_Back,va.NewField bra.s .Stand .FieldLeft move.b #nf_Left,va.NewField bra.w .Move .FieldRight move.b #nf_Right,va.NewField bra.w .Move .Stand clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #1,di_MaxPhase(a4) 1 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b #di_st_Control,di_Status(a4) cmpi.b #gam_di_Right,di_Dir(a4) dir right ? bne.s .StandLeft lea da.ds.BossSRO,a1 bra .Draw .StandLeft lea da.ds.BossSLO,a1 bra .Draw .Crouch clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #4,di_MaxPhase(a4) 4 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b #di_st_Crouch,di_Status(a4) .Crouching cmpi.b #gam_di_Down,va.ControlDir down ? bne .CrouchingOK cmpi.b #1,di_Phase(a4) bne .CrouchingOK clr.b di_PhTimer(a4) .CrouchingOK cmpi.b #gam_di_Right,di_Dir(a4) dir right ? bne.s .CrouchLeft lea da.ds.BossCRO,a1 bra.s .CrouchDirOK .CrouchLeft lea da.ds.BossCLO,a1 .CrouchDirOK moveq #0,d0 move.b di_Phase(a4),d0 current phase mulu #BOSSOB_SIZE,d0 lea 0(a1,d0.w),a1 bra .Draw .Move clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #8,di_MaxPhase(a4) 8 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b #di_st_Move,di_Status(a4) .Moving st va.Moving moving ! tst.b di_PhTimer(a4) bne.s .NoMoEff tst.b di_Phase(a4) beq.s .MoveEff cmpi.b #4,di_Phase(a4) beq.s .MoveEff bra.s .NoMoEff .MoveEff moveq #6,d0 start effect moveq #ac_Boss,d1 moveq #0,d2 CALL snd.Base,snd_PlaySample .NoMoEff cmpi.b #gam_di_Right,di_Dir(a4) dir right ? bne.s .MovingL lea da.ds.BossMRO,a1 addq.w #1,di_XPos(a4) bra.s .MovingDirOK .MovingL lea da.ds.BossMLO,a1 subq.w #1,di_XPos(a4) .MovingDirOK moveq #0,d0 move.b di_Phase(a4),d0 current phase mulu #BOSSOB_SIZE,d0 lea 0(a1,d0.w),a1 bra .Draw .TurnRight move.b #gam_di_Right,di_Dir(a4) bra .Turn .TurnLeft move.b #gam_di_Left,di_Dir(a4) bra .Turn .Turn clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #9,di_MaxPhase(a4) 9 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b #di_st_Turn,di_Status(a4) st di_FirePhase(a4) fire stop .Turning st va.Moving moving ! cmpi.b #gam_di_Right,di_Dir(a4) dir right ? bne.s .TurningL lea da.ds.BossTRO,a1 bra.s .TurningDirOK .TurningL lea da.ds.BossTLO,a1 .TurningDirOK moveq #0,d0 move.b di_Phase(a4),d0 current phase mulu #BOSSOB_SIZE,d0 lea 0(a1,d0.w),a1 bra.s .Draw .Explode cmpi.b #di_st_Explode,di_Status(a4) exploding ? beq .Exploding clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #5,di_MaxPhase(a4) 5 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b #di_st_Explode,di_Status(a4) st di_FirePhase(a4) fire stop moveq #$13,d0 exploding effect moveq #ac_Boss,d1 moveq #0,d2 CALL snd.Base,snd_PlaySample .Exploding st va.Moving moving ! lea da.ds.BossEXO,a1 moveq #0,d0 move.b di_Phase(a4),d0 current phase mulu #BOSSEXO_SIZE,d0 lea 0(a1,d0.w),a1 bra .Draw2 .Draw move.b bs_FontCode(a3),d0 set FontCode of Image2 move.b d0,of_I2FontCode(a1) .Draw2 moveq #0,d2 moveq #0,d3 move.w di_XPos(a4),d2 move.w di_YPos(a4),d3 st di_Last2F(a4) move.w d2,di_Last2X(a4) move.w d3,di_Last2Y(a4) move.l a1,di_Last2O(a4) move.l PfWorkScreen,a2 CALL fnt.Base,fnt_TBWrtObject write droid object addq.b #1,di_PhTimer(a4) inc timer move.b di_PhTimer(a4),d0 cmp.b di_MaxPhTimer(a4),d0 max. timer value ? bne.s .PhaseOK clr.b di_PhTimer(a4) addq.b #1,di_Phase(a4) move.b di_Phase(a4),d0 cmp.b di_MaxPhase(a4),d0 max. phase ? bne.s .PhaseOK cmpi.b #di_st_Explode,di_Status(a4) exploded ? bne.s .Continue move.b #nf_LifeLost,va.NewField life lost bra .Exit .Continue move.b #di_st_Control,di_Status(a4) no next phase, control .PhaseOK move.l di_Last2O(a4),a1 last drawn object lea fnt_ob_ObjItems(a1),a1 1st objitem lea fnt_oi_SizeOf(a1),a1 2nd objitem move.w fnt_oi_dXPos(a1),d2 dXPos move.w fnt_oi_dYPos(a1),d3 dYPos add.w di_XPos(a4),d2 head position add.w di_YPos(a4),d3 tst.l bs_WeaponInfo(a3) weapon exists ? beq .NoNewFire cmpi.b #gam_st_Pressed,va.ControlFire fire button ? bne .NoNewFire tst.b va.ControlEna control enabled ? bne .NoNewFire tst.b dr_Energy(a5) lives ? beq .NoNewFire tst.b di_FirePhase(a4) last fire finished ? bpl .NoNewFire cmpi.b #di_st_Turn,di_Status(a4) turning ? beq .NoNewFire cmpi.b #di_st_LiftUp,di_Status(a4) lift up ? beq .NoNewFire cmpi.b #di_st_LiftDown,di_Status(a4) lift down ? beq .NoNewFire lea va.BossMissile0,a0 is there free Missile ? cmpi.b #gam_di_No,mi_Status(a0) beq.s .NewFire lea va.BossMissile1,a0 cmpi.b #gam_di_No,mi_Status(a0) beq.s .NewFire lea va.BossMissile2,a0 cmpi.b #gam_di_No,mi_Status(a0) beq.s .NewFire bra.s .NoNewFire .NewFire move.l bs_WeaponInfo(a3),a1 ammo exists ? tst.w wi_Ammo(a1) beq .NoNewFire subq.w #1,wi_Ammo(a1) moveq #0,d4 move.b di_Dir(a4),d4 move.l bs_MissileShape(a3),a1 bsr StartMissile clr.b di_FirePhase(a4) begin fire move.b bs_MaxFirePhase(a3),d0 move.b d0,di_MaxFirePhase(a4) clr.b di_FireTimer(a4) move.b bs_MaxFireTimer(a3),d0 move.b d0,di_MaxFireTimer(a4) .NoNewFire moveq #0,d1 move.b di_FirePhase(a4),d1 fire ? bmi .NoFire st va.Moving moving ! cmpi.b #gam_di_Left,di_Dir(a4) left ? beq.s .FireLeft moveq #$40,d0 add.w bs_FireRdX(a3),d2 add.w bs_FireRdY(a3),d3 bra.s .DrawFire .FireLeft moveq #$48,d0 add.w bs_FireLdX(a3),d2 add.w bs_FireLdY(a3),d3 .DrawFire add.b d1,d0 image code moveq #0,d1 move.b bs_FontCode(a3),d1 move.l PfWorkScreen,a2 CALL fnt.Base,fnt_TBWrtImage write fire image addq.b #1,di_FireTimer(a4) next phase ? move.b di_FireTimer(a4),d0 cmp.b di_MaxFireTimer(a4),d0 bne.s .NoNextFirePh clr.b di_FireTimer(a4) addq.b #1,di_FirePhase(a4) .NoNextFirePh move.b di_FirePhase(a4),d0 cmp.b di_MaxFirePhase(a4),d0 end fire ? bne.s .NoEndFire st di_FirePhase(a4) .NoEndFire .NoFire .Exit rts ;------------------------------------------------------------------------------ ; MoveRCtrl DroidInfo,Droid(a4,a5) ;------------------------------------------------------------------------------ MoveRCtrl tst.b dr_Energy(a5) energy OK ? beq .NoEnergy move.b di_Status(a4),d0 what to do ? cmpi.b #di_st_Control,d0 control ? beq .Control cmpi.b #di_st_Stand,d0 standing ? beq .Standing cmpi.b #di_st_Move,d0 moving ? beq .Moving bra .Exit .Control bsr md.CtrlDebil move.b d2,va.DroidDir store Dir status cmpi.b #gam_di_Left,va.DroidDir left ? beq.s .Left cmpi.b #gam_di_Right,va.DroidDir right ? beq.s .Right bra .Stand .Left cmpi.b #gam_di_Left,di_Dir(a4) direction left ? bne .TurnLeft btst #kg_tyb_Left,di_KType(a4) can I go left ? beq .Stand cmpi.w #0,di_XPos(a4) left border ? beq .Stand bra .Move .Right cmpi.b #gam_di_Right,di_Dir(a4) direction right ? bne .TurnRight btst #kg_tyb_Right,di_KType(a4) can I go right ? beq .Stand cmpi.w #240,di_XPos(a4) right border ? beq .Stand bra .Move .TurnLeft move.b #gam_di_Left,di_Dir(a4) direction left bra.s .Stand .TurnRight move.b #gam_di_Right,di_Dir(a4) direction right .Stand clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #di_st_Stand,di_Status(a4) .Standing bra .Draw .Move move.b va.DroidDir,di_Dir(a4) clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #di_st_Move,di_Status(a4) .Moving st va.Moving moving ! cmpi.b #gam_di_Left,di_Dir(a4) dir ? beq.s .Moving.L addq.w #1,di_XPos(a4) bra .Draw .Moving.L subq.w #1,di_XPos(a4) bra .Draw .NoEnergy cmpi.b #di_st_No,di_Status(a4) end ? bra .Exit .Draw lea da.ds.RCtrlObj,a1 moveq #0,d2 moveq #0,d3 move.w di_XPos(a4),d2 move.w di_YPos(a4),d3 st di_Last2F(a4) move.w d2,di_Last2X(a4) move.w d3,di_Last2Y(a4) move.l a1,di_Last2O(a4) move.l PfWorkScreen,a2 CALL fnt.Base,fnt_WriteObject write droid-object addq.b #1,di_PhTimer(a4) inc timer cmpi.b #5,di_PhTimer(a4) next phase ? bne.s .PhaseOK clr.b di_PhTimer(a4) addq.b #1,di_Phase(a4) cmpi.b #16,di_Phase(a4) bne.s .PhaseOK move.b #di_st_Control,di_Status(a4) no next phase, control .PhaseOK lea da.ds.RCtrlBox,a0 bsr MissileTest .Exit rts ;------------------------------------------------------------------------------ ; MoveRadar DroidInfo,Droid(a4,a5) ;------------------------------------------------------------------------------ MoveRadar tst.b dr_Energy(a5) energy OK ? beq .NoEnergy move.b di_Status(a4),d0 what to do ? cmpi.b #di_st_Control,d0 control ? beq .Control cmpi.b #di_st_Stand,d0 standing ? beq .Standing cmpi.b #di_st_Move,d0 moving ? beq .Moving cmpi.b #di_st_Turn,d0 turning ? beq .Turning bra .Exit .Control bsr md.CtrlAce move.b d2,va.DroidDir store Dir status cmpi.b #gam_di_Right,va.DroidDir right ? beq.s .Right cmpi.b #gam_di_Left,va.DroidDir left ? beq.s .Left bra .Stand .Left cmpi.b #gam_di_Left,di_Dir(a4) direction left ? bne .TurnLeft btst #kg_tyb_Left,di_KType(a4) can I go left ? beq .Stand cmpi.w #0,di_XPos(a4) left border ? beq .Stand bra .Move .Right cmpi.b #gam_di_Right,di_Dir(a4) direction right ? bne .TurnRight btst #kg_tyb_Right,di_KType(a4) can I go right ? beq .Stand cmpi.w #240,di_XPos(a4) right border ? beq .Stand bra .Move .TurnLeft move.b #gam_di_Left,di_Dir(a4) direction left bra.s .Turn .TurnRight move.b #gam_di_Right,di_Dir(a4) direction right .Turn clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #9,di_MaxPhase(a4) 9 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b #di_st_Turn,di_Status(a4) st di_FirePhase(a4) fire stop .Turning st va.Moving moving ! cmpi.b #gam_di_Right,di_Dir(a4) dir right ? bne.s .Turning.L moveq #$18,d0 stand right image code sub.b di_Phase(a4),d0 bra .Draw .Turning.L moveq #$10,d0 stand left image code add.b di_Phase(a4),d0 bra .Draw .Stand clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #8,di_MaxPhase(a4) 8 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b #di_st_Stand,di_Status(a4) .Standing cmpi.b #gam_di_Right,di_Dir(a4) dir right ? bne.s .Standing.L moveq #$10,d0 stand right image code bra .Draw .Standing.L moveq #$18,d0 stand left image code bra .Draw .Move clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #16,di_MaxPhase(a4) 16 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b #di_st_Move,di_Status(a4) .Moving st va.Moving moving ! cmpi.b #gam_di_Right,di_Dir(a4) dir right ? bne.s .Moving.L addq.w #1,di_XPos(a4) moveq #$10,d0 move right image code bra .Draw .Moving.L subq.w #1,di_XPos(a4) moveq #$18,d0 move left image code bra .Draw .NoEnergy cmpi.b #di_st_No,di_Status(a4) end ? bra .Exit .Draw lea da.ds.RadarObj,a1 droid object lea fnt_ob_ObjItems(a1),a0 first item move.b d0,fnt_oi_Image(a0) set image code moveq #0,d2 moveq #0,d3 move.w di_XPos(a4),d2 move.w di_YPos(a4),d3 st di_Last2F(a4) move.w d2,di_Last2X(a4) move.w d3,di_Last2Y(a4) move.l a1,di_Last2O(a4) move.l PfWorkScreen,a2 CALL fnt.Base,fnt_WriteObject write droid-object addq.b #1,di_PhTimer(a4) inc timer move.b di_PhTimer(a4),d0 cmp.b di_MaxPhTimer(a4),d0 max. timer value ? bne.s .PhaseOK clr.b di_PhTimer(a4) addq.b #1,di_Phase(a4) move.b di_Phase(a4),d0 cmp.b di_MaxPhase(a4),d0 max. phase ? bne.s .PhaseOK move.b #di_st_Control,di_Status(a4) no next phase, control .PhaseOK lea da.ds.RadarBox,a0 bsr MissileTest .Exit rts ;------------------------------------------------------------------------------ ; MoveMineA DroidInfo,Droid(a4,a5) ;------------------------------------------------------------------------------ MoveMineA tst.b dr_Energy(a5) energy OK ? beq .Explode move.b di_Status(a4),d0 what to do ? cmpi.b #di_st_Control,d0 control ? beq .Control cmpi.b #di_st_Stand,d0 standing ? beq .Standing cmpi.b #di_st_Move,d0 moving ? beq .Moving bra .Exit .Control bsr md.CtrlMine move.b d2,va.DroidDir store Dir status cmpi.b #gam_di_Right,va.DroidDir right ? beq.s .Right cmpi.b #gam_di_Left,va.DroidDir left ? beq.s .Left bra .Stand .Left btst #kg_tyb_Left,di_KType(a4) can I go left ? beq .Stand cmpi.w #0,di_XPos(a4) left border ? beq .Stand cmpi.b #gam_di_Left,di_Dir(a4) dir left ? bne .Stand bra .Move .Right btst #kg_tyb_Right,di_KType(a4) can I go right ? beq .Stand cmpi.w #240,di_XPos(a4) right border ? beq .Stand cmpi.b #gam_di_Right,di_Dir(a4) dir right ? bne .Stand bra .Move .Stand clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #8,di_MaxPhase(a4) 8 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b va.DroidDir,di_Dir(a4) set direction move.b #di_st_Stand,di_Status(a4) .Standing lea da.ds.MineASTO,a1 bra .Draw .Move clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #16,di_MaxPhase(a4) 16 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b va.DroidDir,di_Dir(a4) set direction move.b #di_st_Move,di_Status(a4) .Moving st va.Moving moving ! cmpi.b #gam_di_Right,di_Dir(a4) dir right ? bne.s .MovingLeft addq.w #1,di_XPos(a4) lea da.ds.MineASTO,a1 bra .Draw .MovingLeft subq.w #1,di_XPos(a4) lea da.ds.MineASTO,a1 bra .Draw .Explode cmpi.b #di_st_Explode,di_Status(a4) exploding ? beq .Exploding clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #6,di_MaxPhase(a4) 6 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b #di_st_Explode,di_Status(a4) moveq #$13,d0 exploding effect moveq #ac_Droid,d1 moveq #0,d2 CALL snd.Base,snd_PlaySample moveq #$20,d0 add money bsr AddMoney .Exploding st va.Moving exploding ! lea da.ds.MineAEXO,a1 moveq #0,d0 move.b di_Phase(a4),d0 mulu #MINEAEO_SIZE,d0 lea 0(a1,d0.w),a1 moveq #0,d2 moveq #0,d3 move.w di_XPos(a4),d2 XPos OK move.w di_Counter(a4),d0 lea da.ds.MineADat,a0 move.w 0(a0,d0.w),d3 ext.w d3 add.w di_YPos(a4),d3 YPos OK bra .Draw2 .Draw moveq #0,d2 moveq #0,d3 move.w di_XPos(a4),d2 XPos OK move.w di_Counter(a4),d0 lea da.ds.MineADat,a0 move.w 0(a0,d0.w),d3 addq.w #2,d0 and.w #$7f,d0 move.w d0,di_Counter(a4) move.w d3,d4 ext.w d3 add.w di_YPos(a4),d3 YPos OK lsr.w #8,d4 lea da.ds.MineASTO,a1 moveq #0,d0 move.b d4,d0 mulu #MINEASO_SIZE,d0 lea 0(a1,d0.w),a1 .Draw2 st di_Last2F(a4) move.w d2,di_Last2X(a4) move.w d3,di_Last2Y(a4) move.l a1,di_Last2O(a4) move.l PfWorkScreen,a2 CALL fnt.Base,fnt_TBWrtObject write droid-object addq.b #1,di_PhTimer(a4) inc timer move.b di_PhTimer(a4),d0 cmp.b di_MaxPhTimer(a4),d0 max. timer value ? bne.s .PhaseOK clr.b di_PhTimer(a4) addq.b #1,di_Phase(a4) move.b di_Phase(a4),d0 cmp.b di_MaxPhase(a4),d0 max. phase ? bne.s .PhaseOK cmpi.b #di_st_Explode,di_Status(a4) exploded ? bne.s .Continue move.b #dr_ty_Nothing,dr_Type(a5) bra .Exit .Continue move.b #di_st_Control,di_Status(a4) no next phase, control .PhaseOK lea da.ds.MineABox,a0 bsr MissileTest cmpi.b #di_st_Explode,di_Status(a4) exploding ? beq .NoTouch move.b Boss_YK,d2 is Boss here ? cmp.b di_YK(a4),d2 bne.s .NoTouch move.w Boss_XPos,d2 sub.w di_XPos(a4),d2 distance bpl.s .DistOK neg.w d2 abs distance .DistOK cmpi.w #16,d2 bgt.s .NoTouch clr.b dr_Energy(a5) moveq #30,d0 dec boss energy lea Boss,a0 bsr SubDrEnergy .NoTouch .Exit rts ;------------------------------------------------------------------------------ ; MoveMineB DroidInfo,Droid(a4,a5) ;------------------------------------------------------------------------------ MoveMineB tst.b dr_Energy(a5) energy OK ? beq .Explode move.b di_Status(a4),d0 what to do ? cmpi.b #di_st_Control,d0 control ? beq .Control cmpi.b #di_st_Stand,d0 standing ? beq .Standing cmpi.b #di_st_Move,d0 moving ? beq .Moving cmpi.b #di_st_Rise,d0 rising ? beq .Rising cmpi.b #di_st_Sink,d0 sinking ? beq .Sinking bra .Exit .Control bsr md.CtrlMine move.b d2,va.DroidDir store Dir status cmpi.b #gam_di_Right,va.DroidDir right ? beq.s .Right cmpi.b #gam_di_Left,va.DroidDir left ? beq.s .Left bra .Stand .Left btst #kg_tyb_Left,di_KType(a4) can I go left ? beq .Stand cmpi.w #0,di_XPos(a4) left border ? beq .Stand cmpi.b #gam_di_Left,di_Dir(a4) dir left ? bne .Stand bra .Move .Right btst #kg_tyb_Right,di_KType(a4) can I go right ? beq .Stand cmpi.w #240,di_XPos(a4) right border ? beq .Stand cmpi.b #gam_di_Right,di_Dir(a4) dir right ? bne .Stand bra .Move .Stand tst.w di_Counter(a4) height OK ? bne .Sink clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #8,di_MaxPhase(a4) 8 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b va.DroidDir,di_Dir(a4) set direction move.b #di_st_Stand,di_Status(a4) .Standing lea da.ds.MineBObj,a1 droid object bra .Draw .Move tst.w di_Counter(a4) height OK ? beq .Rise clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #8,di_MaxPhase(a4) 8 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b va.DroidDir,di_Dir(a4) set direction move.b #di_st_Move,di_Status(a4) .Moving st va.Moving moving ! cmpi.b #gam_di_Right,di_Dir(a4) dir right ? bne.s .MovingLeft addq.w #2,di_XPos(a4) lea da.ds.MineBObj,a1 droid object bra .Draw .MovingLeft subq.w #2,di_XPos(a4) lea da.ds.MineBObj,a1 droid object bra .Draw .Rise clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #3,di_MaxPhase(a4) 3 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b #di_st_Rise,di_Status(a4) .Rising addq.w #1,di_Counter(a4) lea da.ds.MineBObj,a1 droid object bra .Draw .Sink clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #3,di_MaxPhase(a4) 3 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b #di_st_Sink,di_Status(a4) .Sinking subq.w #1,di_Counter(a4) lea da.ds.MineBObj,a1 droid object bra .Draw .Explode cmpi.b #di_st_Explode,di_Status(a4) exploding ? beq .Exploding clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #7,di_MaxPhase(a4) 7 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b #di_st_Explode,di_Status(a4) moveq #$13,d0 exploding effect moveq #ac_Droid,d1 moveq #0,d2 CALL snd.Base,snd_PlaySample moveq #$30,d0 add money bsr AddMoney .Exploding st va.Moving exploding ! lea da.ds.MineBEXO,a1 moveq #0,d0 move.b di_Phase(a4),d0 mulu #MINEBEO_SIZE,d0 lea 0(a1,d0.w),a1 .Draw moveq #0,d2 moveq #0,d3 move.w di_XPos(a4),d2 move.w di_YPos(a4),d3 sub.w di_Counter(a4),d3 st di_Last2F(a4) move.w d2,di_Last2X(a4) move.w d3,di_Last2Y(a4) move.l a1,di_Last2O(a4) move.l PfWorkScreen,a2 CALL fnt.Base,fnt_TBWrtObject write droid-object addq.b #1,di_PhTimer(a4) inc timer move.b di_PhTimer(a4),d0 cmp.b di_MaxPhTimer(a4),d0 max. timer value ? bne.s .PhaseOK clr.b di_PhTimer(a4) addq.b #1,di_Phase(a4) move.b di_Phase(a4),d0 cmp.b di_MaxPhase(a4),d0 max. phase ? bne.s .PhaseOK cmpi.b #di_st_Explode,di_Status(a4) exploded ? bne.s .Continue move.b #dr_ty_Nothing,dr_Type(a5) bra .Exit .Continue move.b #di_st_Control,di_Status(a4) no next phase, control .PhaseOK lea da.ds.MineBBox,a0 bsr MissileTest cmpi.b #di_st_Explode,di_Status(a4) exploding ? beq .NoTouch move.b Boss_YK,d2 is Boss here ? cmp.b di_YK(a4),d2 bne.s .NoTouch move.w Boss_XPos,d2 sub.w di_XPos(a4),d2 distance bpl.s .DistOK neg.w d2 abs distance .DistOK cmpi.w #16,d2 bgt.s .NoTouch clr.b dr_Energy(a5) moveq #100,d0 dec boss energy lea Boss,a0 bsr SubDrEnergy .NoTouch .Exit rts ;------------------------------------------------------------------------------ ; MoveWalkA DroidInfo,Droid(a4,a5) ;------------------------------------------------------------------------------ MoveWalkA tst.b dr_Energy(a5) energy OK ? beq .NoEnergy move.b di_Status(a4),d0 what to do ? cmpi.b #di_st_Control,d0 control ? beq .Control cmpi.b #di_st_Stand,d0 standing ? beq .Standing cmpi.b #di_st_Move,d0 moving ? beq .Moving cmpi.b #di_st_Turn,d0 turning ? beq .Turning bra .Exit .Control bsr md.CtrlAce move.b d2,va.DroidDir store Dir status cmpi.b #gam_di_Right,va.DroidDir right ? beq.s .Right cmpi.b #gam_di_Left,va.DroidDir left ? beq.s .Left bra .Stand .Left cmpi.b #gam_di_Left,di_Dir(a4) direction left ? bne .TurnLeft btst #kg_tyb_Left,di_KType(a4) can I go left ? beq .Stand cmpi.w #0,di_XPos(a4) left border ? beq .Stand bra .Move .Right cmpi.b #gam_di_Right,di_Dir(a4) direction right ? bne .TurnRight btst #kg_tyb_Right,di_KType(a4) can I go right ? beq .Stand cmpi.w #240,di_XPos(a4) right border ? beq .Stand bra .Move .TurnLeft move.b #gam_di_Left,di_Dir(a4) direction left bra.s .Turn .TurnRight move.b #gam_di_Right,di_Dir(a4) direction right .Turn clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #9,di_MaxPhase(a4) 9 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b #di_st_Turn,di_Status(a4) st di_FirePhase(a4) fire stop .Turning st va.Moving moving ! cmpi.b #gam_di_Right,di_Dir(a4) dir right ? bne.s .TurningLeft lea da.ds.WalkATRO,a1 bra .TurningDirOk .TurningLeft lea da.ds.WalkATLO,a1 .TurningDirOk moveq #0,d0 move.b di_Phase(a4),d0 mulu #WALKAOB_SIZE,d0 lea 0(a1,d0.w),a1 bra .Draw .Stand clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #8,di_MaxPhase(a4) 8 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b #di_st_Stand,di_Status(a4) .Standing cmpi.b #gam_di_Right,di_Dir(a4) dir right ? bne.s .StandingLeft lea da.ds.WalkASRO,a1 bra .Draw .StandingLeft lea da.ds.WalkASLO,a1 bra .Draw .Move clr.b di_Phase(a4) clr.b di_PhTimer(a4) move.b #16,di_MaxPhase(a4) 16 phases move.b #5,di_MaxPhTimer(a4) with timer value 5 move.b #di_st_Move,di_Status(a4) .Moving st va.Moving moving ! cmpi.b #gam_di_Right,di_Dir(a4) dir right ? bne.s .MovingLeft addq.w #1,di_XPos(a4) lea da.ds.WalkAMRO,a1 bra .MovingDirOK .MovingLeft subq.w #1,di_XPos(a4) lea da.ds.WalkAMLO,a1 .MovingDirOK moveq #0,d0 move.b di_Phase(a4),d0 mulu #WALKAOB_SIZE,d0 lea 0(a1,d0.w),a1 bra .Draw .NoEnergy cmpi.b #di_st_No,di_Status(a4) end ? bra .Exit .Draw moveq #0,d2 moveq #0,d3 move.w di_XPos(a4),d2 move.w di_YPos(a4),d3 st di_Last2F(a4) move.w d2,di_Last2X(a4) move.w d3,di_Last2Y(a4) move.l a1,di_Last2O(a4) move.l PfWorkScreen,a2 CALL fnt.Base,fnt_WriteObject write droid-object addq.b #1,di_PhTimer(a4) inc timer move.b di_PhTimer(a4),d0 cmp.b di_MaxPhTimer(a4),d0 max. timer value ? bne.s .PhaseOK clr.b di_PhTimer(a4) addq.b #1,di_Phase(a4) move.b di_Phase(a4),d0 cmp.b di_MaxPhase(a4),d0 max. phase ? bne.s .PhaseOK move.b #di_st_Control,di_Status(a4) no next phase, control .PhaseOK lea da.ds.WalkABox,a0 bsr MissileTest .Exit rts ;------------------------------------------------------------------------------ ; CtrlDebil DroidInfo(a4) --> Dir(d2) ;------------------------------------------------------------------------------ md.CtrlDebil move.l a0,-(a7) tst.b va.ControlEna control enabled ? beq.s .OK moveq #gam_di_No,d2 bra.s .Exit .OK lea DroidWay.Debil,a0 moveq #0,d2 move.b di_WayCnt(a4),d2 addq.b #1,di_WayCnt(a4) move.b 0(a0,d2.w),d2 direction cmpi.b #gam_di_Ext,d2 end of queue ? bne.s .Exit move.b #1,di_WayCnt(a4) move.b (a0),d2 .Exit move.l (a7)+,a0 rts ;------------------------------------------------------------------------------ ; CtrlAce DroidInfo,Droid(a4,a5) --> Dir(d2) ;------------------------------------------------------------------------------ md.CtrlAce move.l a0,-(a7) tst.b va.ControlEna control enabled ? beq.s .OK .Stand moveq #gam_di_No,d2 Nothing bra.s .Exit .OK lea DroidWay.Ace,a0 move.b Boss_YK,d2 is Boss here ? cmp.b di_YK(a4),d2 bne.s .Debil move.b Boss_XK,d2 sub.b di_XK(a4),d2 distance blt.s .BossLeft bgt.s .BossRight move.b di_Dir(a4),d2 go ahead bra.s .Exit .Debil moveq #0,d2 move.b di_WayCnt(a4),d2 addq.b #1,di_WayCnt(a4) move.b 0(a0,d2.w),d2 direction cmpi.b #gam_di_Ext,d2 end of queue ? bne.s .Exit move.b #1,di_WayCnt(a4) move.b (a0),d2 bra.s .Exit .BossLeft cmpi.b #gam_di_Left,di_Dir(a4) dir left ? bne.s .Left turn, if no cmpi.b #-1,d2 distance -1 ? beq.s .Stand .Left moveq #gam_di_Left,d2 bra.s .Exit .BossRight cmpi.b #gam_di_Right,di_Dir(a4) dir right ? bne.s .Right turn, if no cmpi.b #1,d2 distance 1 ? beq.s .Stand .Right moveq #gam_di_Right,d2 .Exit move.l (a7)+,a0 rts ;------------------------------------------------------------------------------ ; CtrlMine DroidInfo,Droid(a4,a5) --> Dir(d2) ;------------------------------------------------------------------------------ md.CtrlMine tst.b va.ControlEna control enabled ? beq.s .OK .Stand moveq #gam_di_No,d2 Nothing bra.s .Exit .OK move.b Boss_YK,d2 is Boss here ? cmp.b di_YK(a4),d2 bne.s .Stand move.w Boss_XPos,d2 sub.w di_XPos(a4),d2 distance blt.s .BossLeft bgt.s .BossRight bra.s .Stand .BossLeft moveq #gam_di_Left,d2 bra.s .Exit .BossRight moveq #gam_di_Right,d2 .Exit rts ;------------------------------------------------------------------------------ ; ControlFire DroidInfo,Droid(a4,a5) --> Fire(d3) ;------------------------------------------------------------------------------ md_ControlFire movem.l d0-d2/a0,-(a7) tst.b va.ControlEna control enabled ? bne md_cf_NoFire md_cf_Others move.b Boss_YK,d0 is Boss here ? cmpi.b di_YK(a4),d0 bne.s md_cf_NoFire move.w Boss_XPos,d0 move.w di_XPos(a4),d1 cmp.w d1,d0 looks at Boss ? blt.s md_cf_DrLeft bgt.s md_cf_DrRight bra.s md_cf_NoFire md_cf_DrLeft cmpi.b #gam_di_Left,di_Dir(a4) bne.s md_cf_NoFire sub.w d0,d1 cmpi.w #72,d1 distance OK ? blt.s md_cf_NoFire bra.s md_cf_Fire md_cf_DrRight cmpi.b #gam_di_Right,di_Dir(a4) bne.s md_cf_NoFire sub.w d1,d0 cmpi.w #72,d0 distance OK ? blt.s md_cf_NoFire md_cf_Fire move.b #gam_st_Pressed,d3 bra.s md_cf_Exit md_cf_NoFire move.b #gam_st_Released,d3 md_cf_Exit movem.l (a7)+,d0-d2/a0 rts ;------------------------------------------------------------------------------ ; StopK DroidInfo,Droid(a4,a5) ;------------------------------------------------------------------------------ md_StopK move.l d0,-(a7) ; cmpi.b #dr_ty_Boss,dr_Type(a5) boss ? ; beq md_sk_OK moveq #0,d0 move.b di_K(a4),d0 cmpi.b #39,di_XKPos(a4) beq.s md_sk_Stop cmpi.b #40,di_XKPos(a4) beq.s md_sk_Stop cmpi.b #41,di_XKPos(a4) beq.s md_sk_Stop cmpi.b #gam_di_Right,di_Dir(a4) go right ? beq.s md_sk_Right cmpi.b #gam_di_Left,di_Dir(a4) go left ? beq.s md_sk_Left bra.s md_sk_OK md_sk_Right cmpi.b #78,di_XKPos(a4) beq.s md_sk_Movie cmpi.b #79,di_XKPos(a4) beq.s md_sk_Movie cmpi.b #0,di_XKPos(a4) beq.s md_sk_Stop cmpi.b #1,di_XKPos(a4) beq.s md_sk_Stop bra.s md_sk_OK md_sk_Left cmpi.b #78,di_XKPos(a4) beq.s md_sk_Stop cmpi.b #79,di_XKPos(a4) beq.s md_sk_Stop cmpi.b #0,di_XKPos(a4) beq.s md_sk_Movie cmpi.b #1,di_XKPos(a4) beq.s md_sk_Movie bra.s md_sk_OK md_sk_Stop bsr TempStopK bra.s md_sk_OK md_sk_Movie bsr TempMovieK md_sk_OK move.l (a7)+,d0 rts ;------------------------------------------------------------------------------ ; TempStopK KNum(d0) ;------------------------------------------------------------------------------ TempStopK movem.l d0/d6-d7/a0,-(a7) tst.b va.mo.KeyK movy field ? bmi.s tp_Exit lea va.KFlags,a0 ; btst #kf.b.Stop,0(a0,d0.w) no change if stop ; bne.s tp_Exit ; bset #kf.b.TStop,0(a0,d0.w) move.b #$70,d0 move.w #142,d6 ; bsr sf_DrawDecor tp_Exit movem.l (a7)+,d0/d6-d7/a0 rts ;------------------------------------------------------------------------------ ; TempMovieK KNum(d0) ;------------------------------------------------------------------------------ TempMovieK movem.l d0/d6-d7/a0,-(a7) tst.b va.mo.KeyK movy field ? bmi.s te_Exit lea va.KFlags,a0 ; btst #kf.b.Stop,0(a0,d0.w) no change if stop ; bne.s te_Exit ; bclr #kf.b.TStop,0(a0,d0.w) move.b #$71,d0 move.w #142,d6 ; bsr sf_DrawDecor te_Exit movem.l (a7)+,d0/d6-d7/a0 rts ******************************************************************************* * ClearMissiles ******************************************************************************* ClearMissiles move.l a4,-(a7) lea va.BossMissile0,a4 bsr ClearMissile lea va.BossMissile1,a4 bsr ClearMissile lea va.BossMissile2,a4 bsr ClearMissile move.l (a7)+,a4 rts ;------------------------------------------------------------------------------ ; ClearMissile Missile(a4) ;------------------------------------------------------------------------------ ClearMissile movem.l d0-d3/a1-a3,-(a7) cmpi.b #gam_di_No,mi_Status(a4) active ? beq.s .Exit tst.b mi_Last1F(a4) need to clear ? beq.s .Exit move.l mi_Shape(a4),a3 move.w mi_Last1X(a4),d2 move.w mi_Last1Y(a4),d3 move.b mi_Last1I(a4),d0 move.b ms_FontCode(a3),d1 move.l PfWorkScreen,a2 CALL fnt.Base,fnt_TBClrImage .Exit movem.l (a7)+,d0-d3/a1-a3 rts ******************************************************************************* * DrawMissiles ******************************************************************************* DrawMissiles move.l a4,-(a7) lea va.BossMissile0,a4 bsr DrawMissile lea va.BossMissile1,a4 bsr DrawMissile lea va.BossMissile2,a4 bsr DrawMissile move.l (a7)+,a4 rts ;------------------------------------------------------------------------------ ; DrawMissile Missile(a4) ;------------------------------------------------------------------------------ DrawMissile movem.l d0-d3/a1-a3,-(a7) cmpi.b #gam_di_No,mi_Status(a4) active ? beq.s .Exit tst.b mi_Last2F(a4) need to draw ? beq.s .Exit move.l mi_Shape(a4),a3 move.w mi_Last2X(a4),d2 move.w mi_Last2Y(a4),d3 move.b mi_Last2I(a4),d0 move.b ms_FontCode(a3),d1 move.l PfWorkScreen,a2 CALL fnt.Base,fnt_TBWrtImage .Exit movem.l (a7)+,d0-d3/a1-a3 rts ******************************************************************************* * MoveMissiles ******************************************************************************* MoveMissiles move.l a4,-(a7) lea va.BossMissile0,a4 bsr MoveMissile lea va.BossMissile1,a4 bsr MoveMissile lea va.BossMissile2,a4 bsr MoveMissile move.l (a7)+,a4 rts ;------------------------------------------------------------------------------ ; MoveMissile Missile(a4) ;------------------------------------------------------------------------------ MoveMissile movem.l d0-a6,-(a7) cmpi.b #gam_di_No,mi_Status(a4) active ? beq .Exit st va.Moving move.b mi_Last2F(a4),mi_Last1F(a4) data for ClearMissile move.w mi_Last2X(a4),mi_Last1X(a4) move.w mi_Last2Y(a4),mi_Last1Y(a4) move.b mi_Last2I(a4),mi_Last1I(a4) clr.b mi_Last2F(a4) move.l mi_Shape(a4),a3 ptr to MissileShape moveq #0,d0 move.b ms_Speed(a3),d0 cmpi.b #gam_di_Left,mi_Status(a4) move left ? beq.s .Left cmpi.b #gam_di_Right,mi_Status(a4) move right ? beq.s .Right cmpi.b #gam_di_Up,mi_Status(a4) hit ? beq .Hit bra .Exit .Left sub.w d0,mi_XPos(a4) moveq #$58,d0 left images bra.s .MoveOK .Right add.w d0,mi_XPos(a4) moveq #$50,d0 right images .MoveOK move.w mi_XPos(a4),d2 XPos move.w mi_YPos(a4),d3 YPos cmpi.w #-32,d2 out left ? blt .Off cmpi.w #368,d2 out right ? bgt .Off tst.b ms_MaxPhase(a3) image exists ? beq .Exit moveq #0,d1 move.b mi_Phase(a4),d1 bra .Draw .Hit moveq #$60,d0 hit images moveq #0,d1 move.b mi_Phase(a4),d1 move.w mi_XPos(a4),d2 XPos move.w mi_YPos(a4),d3 YPos add.b d1,d0 move.b ms_FontCode(a3),d1 st mi_Last2F(a4) move.w d2,mi_Last2X(a4) move.w d3,mi_Last2Y(a4) move.b d0,mi_Last2I(a4) move.l PfWorkScreen,a2 CALL fnt.Base,fnt_TBWrtImage write missile image addq.b #1,mi_Timer(a4) move.b mi_Timer(a4),d0 cmp.b ms_MaxHitTimer(a3),d0 next phase ? bne.s .Exit clr.b mi_Timer(a4) addq.b #1,mi_Phase(a4) move.b mi_Phase(a4),d0 cmp.b ms_MaxHitPhase(a3),d0 beq.s .Off bra .Exit .Draw add.b d1,d0 move.b ms_FontCode(a3),d1 st mi_Last2F(a4) move.w d2,mi_Last2X(a4) move.w d3,mi_Last2Y(a4) move.b d0,mi_Last2I(a4) move.l PfWorkScreen,a2 CALL fnt.Base,fnt_TBWrtImage write missile image addq.b #1,mi_Timer(a4) move.b mi_Timer(a4),d0 cmp.b ms_MaxTimer(a3),d0 next phase ? bne.s .Exit clr.b mi_Timer(a4) addq.b #1,mi_Phase(a4) move.b mi_Phase(a4),d0 cmp.b ms_MaxPhase(a3),d0 bne.s .Exit clr.b mi_Phase(a4) restart bra.s .Exit .Off move.b #gam_di_No,mi_Status(a4) missile off clr.b mi_Last1F(a4) clr.b mi_Last2F(a4) .Exit movem.l (a7)+,d0-a6 rts ;------------------------------------------------------------------------------ ; StartMissile Missile,Shape,XPos,YPos,Dir(a0,a1,d2,d3,d4) ;------------------------------------------------------------------------------ StartMissile movem.l d0-d3,-(a7) move.l a1,mi_Shape(a0) move.b d4,mi_Status(a0) clr.b mi_Phase(a0) cmpi.b #gam_di_Right,d4 dir right ? beq.s .MissileRight add.w ms_LeftdX(a1),d2 add.w ms_LeftdY(a1),d3 bra.s .MissileDirOK .MissileRight add.w ms_RightdX(a1),d2 add.w ms_RightdY(a1),d3 .MissileDirOK move.w d2,mi_XPos(a0) move.w d3,mi_YPos(a0) moveq #0,d0 start effect move.b ms_FireEffect(a1),d0 moveq #ac_Else,d1 moveq #0,d2 move.b ms_FireTune(a1),d2 CALL snd.Base,snd_PlaySample movem.l (a7)+,d0-d3 rts ;------------------------------------------------------------------------------ ; MissileTest BoxList,DriodInfo,Droid(a0,a4,a5) ;------------------------------------------------------------------------------ MissileTest movem.l d0/a0-a2,-(a7) lea va.BossMissile0,a1 bsr BoxTest cmpi.w #TRUE,d0 beq.s .Hit lea va.BossMissile1,a1 bsr BoxTest cmpi.w #TRUE,d0 beq.s .Hit lea va.BossMissile2,a1 bsr BoxTest cmpi.w #TRUE,d0 beq.s .Hit bra.w .Exit .Hit move.b #gam_di_Up,mi_Status(a1) hit clr.b mi_Phase(a1) clr.b mi_Timer(a1) move.l mi_Shape(a1),a2 ptr to MissileShape moveq #0,d0 dec droid energy move.b ms_Strength(a2),d0 move.l a5,a0 bsr SubDrEnergy moveq #0,d0 start effect move.b ms_HitEffect(a2),d0 moveq #ac_Droid,d1 moveq #0,d2 move.b ms_HitTune(a2),d2 CALL snd.Base,snd_PlaySample .Exit movem.l (a7)+,d0/a0-a2 rts ;------------------------------------------------------------------------------ ; BoxTest BoxList,Missile,DroidInfo(a0,a1,a4) --> In(d0) ;------------------------------------------------------------------------------ BoxTest movem.l d1-d4/a0/a2,-(a7) cmpi.b #gam_di_No,mi_Status(a1) active ? beq .No cmpi.b #gam_di_Up,mi_Status(a1) hit ? beq .No move.l mi_Shape(a1),a2 ptr to MissileShape move.w mi_XPos(a1),d2 move.w mi_YPos(a1),d3 add.w ms_dX(a2),d2 add.w ms_dY(a2),d3 move.w bl_ItemNum(a0),d4 subq.w #1,d4 # of boxes - 1 lea bl_Items(a0),a0 1st box .Loop move.w bo_X1(a0),d1 add.w di_XPos(a4),d1 cmp.w d1,d2 blt.s .Next move.w bo_X2(a0),d1 add.w di_XPos(a4),d1 cmp.w d1,d2 bgt.s .Next move.w bo_Y1(a0),d1 add.w di_YPos(a4),d1 cmp.w d1,d3 blt.s .Next move.w bo_Y2(a0),d1 add.w di_YPos(a4),d1 cmp.w d1,d3 bgt.s .Next bra.s .In .Next lea bo_SizeOf(a0),a0 next box dbf d4,.Loop .No moveq #FALSE,d0 bra.s .Exit .In moveq #TRUE,d0 .Exit movem.l (a7)+,d1-d4/a0/a2 rts ******************************************************************************* * Routines ******************************************************************************* ;------------------------------------------------------------------------------ ; SwapIn ;------------------------------------------------------------------------------ SwapIn movem.l d0/d7/a0-a3,-(a7) lea SwapMem1,a0 source 1 lea SwapMem1,a1 destination 1 lea SwapMem2,a2 source 2 lea SwapMem2,a3 destination 2 move.l (a0)+,d0 move.l (a2)+,(a1)+ move.l #$fffe,d7 .Loop move.l (a0)+,(a3)+ move.l (a2)+,(a1)+ dbf d7,.Loop move.l d0,(a3)+ movem.l (a7)+,d0/d7/a0-a3 rts ;------------------------------------------------------------------------------ ; SwapOut ;------------------------------------------------------------------------------ SwapOut movem.l d0/d7/a0-a3,-(a7) lea SwapMem1+SwapMemSize,a0 source 1 lea SwapMem1+SwapMemSize,a1 destination 1 lea SwapMem2+SwapMemSize,a2 source 2 lea SwapMem2+SwapMemSize,a3 destination 2 move.l -(a2),d0 move.l -(a0),-(a3) move.l #$fffe,d7 .Loop move.l -(a2),-(a1) move.l -(a0),-(a3) dbf d7,.Loop move.l d0,-(a1) movem.l (a7)+,d0/d7/a0-a3 rts ;------------------------------------------------------------------------------ ; SetSprite Sprite,SprS,XPos,YPos,SprN(d0,d1,d2,d3,d5) ;------------------------------------------------------------------------------ SetSprite movem.l d2-d6/a0,-(a7) move.l d0,d6 store Sprite move.l PfActiveScreen,a0 calc. coordinates add.w inl_sc_Left(a0),d2 sub.w inl_sc_HOffs(a0),d2 add.w inl_sc_Top(a0),d3 move.w #0,d4 flags CALL spr.Base,spr_SetSprite sprite A move.w #spr_fl_Attach,d4 flags addq.b #1,d5 addq.b #1,d6 move.l d6,d0 restore Sprite CALL spr.Base,spr_SetSprite sprite B movem.l (a7)+,d2-d6/a0 rts ;------------------------------------------------------------------------------ ; FreeSprite SprN(d5) ;------------------------------------------------------------------------------ FreeSprite movem.l d0/d5,-(a7) CALL spr.Base,spr_FreeSprite sprite A addq.b #1,d5 CALL spr.Base,spr_FreeSprite sprite B movem.l (a7)+,d0/d5 rts ;------------------------------------------------------------------------------ ; Bright NoOp ;------------------------------------------------------------------------------ Bright movem.l a0-a1,-(a7) move.l PfActiveScreen,a0 lea va.ColorTable,a1 CALL inl.Base,inl_Bright CALL inl.Base,inl_Bright CALL inl.Base,inl_RefreshScr movem.l (a7)+,a0-a1 rts ;------------------------------------------------------------------------------ ; Dark NoOp ;------------------------------------------------------------------------------ Dark move.l a0,-(a7) move.l PfActiveScreen,a0 CALL inl.Base,inl_Dark CALL inl.Base,inl_Dark CALL inl.Base,inl_RefreshScr move.l (a7)+,a0 rts ;------------------------------------------------------------------------------ ; ColorUp Screen,Palette(a0,a1) ;------------------------------------------------------------------------------ ColorUp move.l d7,-(a7) move.l a1,-(a7) lea da.PaletteBlack,a1 CALL inl.Base,inl_SetPalette move.l (a7)+,a1 moveq #15,d7 cu_c_16 CALL inl.Base,inl_Bright CALL inl.Base,inl_RefreshScr CALL inl.Base,inl_WaitBlank dbf d7,cu_c_16 move.l (a7)+,d7 rts ;------------------------------------------------------------------------------ ; ColorDown Screen(a0) ;------------------------------------------------------------------------------ ColorDown move.l d7,-(a7) moveq #15,d7 cd_c_16 CALL inl.Base,inl_Dark CALL inl.Base,inl_RefreshScr CALL inl.Base,inl_WaitBlank dbf d7,cd_c_16 move.l (a7)+,d7 rts ;------------------------------------------------------------------------------ ; WaitBlank NoOp ;------------------------------------------------------------------------------ WaitBlank movem.l d0/a6,-(a7) wb_Loop lea cus_BASE,a6 move.l cus_VPOSR(a6),d0 and.l #$0001ff00,d0 cmpi.l #$00010000,d0 ble.s wb_Loop ; CALL inl.Base,inl_WaitBlank movem.l (a7)+,d0/a6 rts ;------------------------------------------------------------------------------ ; WaitBlankN Time(d0) ;------------------------------------------------------------------------------ WaitBlankN move.l d0,-(a7) wn_Cycle bsr WaitBlank ; CALL inl.Base,inl_WaitBlank dbf d0,wn_Cycle move.l (a7)+,d0 rts ;------------------------------------------------------------------------------ ; ReadControl NoOp ;------------------------------------------------------------------------------ ReadControl movem.l d4-d5,-(a7) CALL kbd.Base,kbd_AskCrsrKeys CursorKeys ? move.l d2,d4 move.l d3,d5 CALL gam.Base,gam_AskJoy1 Joy1 ? cmpi.b #gam_di_No,d2 bne.s .DirOK move.l d4,d2 .DirOK cmpi.b #gam_st_Released,d3 bne.s .FireOK move.l d5,d3 .FireOK move.b d2,va.ControlDir move.b d3,va.ControlFire movem.l (a7)+,d4-d5 rts ;------------------------------------------------------------------------------ ; ReadKey NoOp ;------------------------------------------------------------------------------ ReadKey move.l d0,-(a7) CALL kbd.Base,kbd_ReadKey move.b d0,va.LastKey move.l (a7)+,d0 rts ;------------------------------------------------------------------------------ ; ActivatePf1 NoOp ;------------------------------------------------------------------------------ ActivatePf1 movem.l d0/a0,-(a7) bsr WaitBlank move.l PfActiveScreen,a0 move.l #PlayfieldMap1,d0 move.l d0,inl_sc_BitPlane(a0) move.l PfWorkScreen,a0 move.l #PlayfieldMap2,d0 move.l d0,inl_sc_BitPlane(a0) bsr SetScrOffs movem.l (a7)+,d0/a0 rts ;------------------------------------------------------------------------------ ; ActivatePf2 NoOp ;------------------------------------------------------------------------------ ActivatePf2 movem.l d0/a0,-(a7) bsr WaitBlank move.l PfActiveScreen,a0 move.l #PlayfieldMap2,d0 move.l d0,inl_sc_BitPlane(a0) move.l PfWorkScreen,a0 move.l #PlayfieldMap1,d0 move.l d0,inl_sc_BitPlane(a0) bsr SetScrOffs movem.l (a7)+,d0/a0 rts ;------------------------------------------------------------------------------ ; SetScrOffs NoOp ;------------------------------------------------------------------------------ SetScrOffs movem.l d0/a0,-(a7) move.l PfActiveScreen,a0 moveq #0,d0 move.w Boss_XPos,d0 sub.w #104,d0 bpl.s so_XOffsNoNull moveq #0,d0 so_XOffsNoNull cmpi.w #32,d0 ble.s so_XOffsOK moveq #32,d0 so_XOffsOK moveq #0,d1 CALL inl.Base,inl_SetScrOffs CALL inl.Base,inl_RefreshScr movem.l (a7)+,d0/a0 rts ;------------------------------------------------------------------------------ ; AskKType KNum(d7) --> KType(d0) ;------------------------------------------------------------------------------ AskKType move.l a0,-(a7) lea va.KTypes,a0 moveq #0,d0 move.b 0(a0,d7.w),d0 move.l (a7)+,a0 rts ;------------------------------------------------------------------------------ ; AskDrKType KNum(d7) --> DrKType(d0) ;------------------------------------------------------------------------------ AskDrKType move.l a0,-(a7) lea va.DrKTypes,a0 moveq #0,d0 move.b 0(a0,d7.w),d0 move.l (a7)+,a0 rts ;------------------------------------------------------------------------------ ; CalcKPos XPos,YPos(d0,d1) --> XK,YK,K,XKPos(d0,d1,d2,d3) ;------------------------------------------------------------------------------ CalcKPos divu #80,d0 move.l d0,d3 clr.w d3 swap d3 XKPos and.l #3,d0 XK divu #66,d1 and.l #3,d1 YK move.l d1,d2 lsl.w #2,d2 add.w d0,d2 K rts ;------------------------------------------------------------------------------ ; AddMoney MoneyBCD(d0) ;------------------------------------------------------------------------------ AddMoney movem.l a0-a1,-(a7) move.w d0,va.AddMoneyBuff lea va.AddMoneyBuff+2(pc),a0 lea va.Money+2(pc),a1 abcd -(a0),-(a1) abcd -(a0),-(a1) movem.l (a7)+,a0-a1 rts ;------------------------------------------------------------------------------ ; SubDrEnergy Droid,Energy(a0,d0) ;------------------------------------------------------------------------------ SubDrEnergy sub.b d0,dr_Energy(a0) sub energy bcc.s .Exit clr.b dr_Energy(a0) .Exit rts ;------------------------------------------------------------------------------ ; AddDrEnergy Droid,Energy(a0,d0) ;------------------------------------------------------------------------------ AddDrEnergy add.b d0,dr_Energy(a0) add energy bcc.s .Exit st dr_Energy(a0) .Exit rts ;------------------------------------------------------------------------------ ; GetKStatus KNum(d0) --> Stopped(d0) ;------------------------------------------------------------------------------ GetKStatus moveq #FALSE,d0 not stopped rts ******************************************************************************* * SetUpField ******************************************************************************* SetUpField bsr sf.Addresses get structure addresses bsr sf.InitSwitch init switch bsr sf.InitKQueue init kqueue bsr sf.InitKTypes init ktypes bsr sf.InitDrKTypes init drktypes bsr sf.InitMovy init movy data bsr sf.DrawField draw WorkField bsr sf.FieldToBack draw Background bsr sf.FieldToAct draw ActivePlayField bsr in.FieldNum bsr InitLifts bsr InitDroids bsr InitMissiles bsr InitAnim bsr ActivatePf2 bsr MoveAll bsr ActivatePf1 bsr MoveAll move.b #nf_No,va.NewField bsr sf.Noise start noise rts ;------------------------------------------------------------------------------ ; Addresses NoOp ;------------------------------------------------------------------------------ sf.Addresses movem.l d0-d2/a0-a2,-(a7) lea SectorPointers,a0 move.w va.ActSector,d0 lsl.w #2,d0 move.l 0(a0,d0.w),a0 active sector addr move.l a0,SectorAddr move.l se_PlayFieldGfx(a0),a1 move.w va.ActPlayField,d1 mulu #pf_SizeOf,d1 lea 0(a1,d1.w),a1 active playfield addr move.l a1,PlayFieldAddr move.l se_FieldGfx(a0),a2 moveq #0,d2 move.b pf_ForegrField(a1),d2 mulu #fg_SizeOf,d2 lea 0(a2,d2.w),a2 foreground field addr move.l a2,ForegrFieldAddr move.l se_FieldGfx(a0),a2 moveq #0,d2 move.b pf_BackgrField(a1),d2 mulu #fg_SizeOf,d2 lea 0(a2,d2.w),a2 background field addr move.l a2,BackgrFieldAddr movem.l (a7)+,d0-d2/a0-a2 rts ;------------------------------------------------------------------------------ ; InitSwitch NoOp ;------------------------------------------------------------------------------ sf.InitSwitch movem.l d7/a0,-(a7) lea va.Switch,a0 move.b #kg_sw_On,(a0)+ Switch 0 on, moveq #14,d7 others off .SwLoop move.b #kg_sw_Off,(a0)+ dbf d7,.SwLoop lea va.SpecSwitch,a0 move.b #kg_ss_Covering,(a0)+ SpecSwitch 0 covering, moveq #14,d7 others anim .SSLoop move.b #kg_ss_Anim,(a0)+ dbf d7,.SSLoop movem.l (a7)+,d7/a0 rts ;------------------------------------------------------------------------------ ; InitKQueue NoOp ;------------------------------------------------------------------------------ sf.InitKQueue movem.l d0/a0,-(a7) lea va.KQueue,a0 moveq #11,d0 12 K .Loop move.b d0,0(a0,d0.w) setup KQueue dbf d0,.Loop st va.mo.KeyK search for KeyK move.l ForegrFieldAddr,a0 lea fg_KGfx0(a0),a0 moveq #0,d0 .Loop2 cmpi.w #kn_KeyK,(a0)+ beq.s .Found addq.w #1,d0 cmpi.w #12,d0 bne.s .Loop2 bra.s .Exit .Found move.b d0,va.mo.KeyK .Exit movem.l (a7)+,d0/a0 rts ;------------------------------------------------------------------------------ ; InitKTypes NoOp ;------------------------------------------------------------------------------ sf.InitKTypes movem.l d0-d1/d7/a0,-(a7) lea va.KTypes,a0 moveq #11,d7 .Loop bsr sf.GetKType move.b d0,0(a0,d7.w) dbf d7,.Loop moveq #0,d7 move.b va.mo.KeyK,d7 KeyK exists ? bmi.s .Exit move.b d7,d0 and.b #3,d0 cmpi.b #0,d0 beq.s .NoLeft move.b -1(a0,d7.w),d1 bclr #kg_tyb_Right,d1 can't go right move.b d1,-1(a0,d7.w) .NoLeft cmpi.b #3,d0 beq.s .Exit move.b 1(a0,d7.w),d1 bclr #kg_tyb_Left,d1 can't go left move.b d1,1(a0,d7.w) .Exit movem.l (a7)+,d0-d1/d7/a0 rts ;------------------------------------------------------------------------------ ; InitDrKTypes NoOp ;------------------------------------------------------------------------------ sf.InitDrKTypes movem.l d0-d1/d7/a0,-(a7) lea va.DrKTypes,a0 moveq #11,d7 .Loop bsr sf.GetKType move.b d0,0(a0,d7.w) dbf d7,.Loop moveq #11,d7 .Loop2 move.b 0(a0,d7.w),d0 andi.b #kg_ty_UDFBMask,d0 normal ? beq.s .Next move.b d7,d0 and.b #3,d0 cmpi.b #0,d0 beq.s .NoLeft move.b -1(a0,d7.w),d1 bclr #kg_tyb_Right,d1 can't go right move.b d1,-1(a0,d7.w) .NoLeft cmpi.b #3,d0 beq.s .Next move.b 1(a0,d7.w),d1 bclr #kg_tyb_Left,d1 can't go left move.b d1,1(a0,d7.w) .Next dbf d7,.Loop2 movem.l (a7)+,d0-d1/d7/a0 rts ;------------------------------------------------------------------------------ ; GetKType KNum(d7) --> KType(d0) ;------------------------------------------------------------------------------ sf.GetKType movem.l d1/d6-d7/a0,-(a7) lea va.KQueue,a0 moveq #0,d6 move.b 0(a0,d7.w),d6 # of K here ? 0-11 lsl.w #1,d6 lsl.w #1,d7 move.l ForegrFieldAddr,a0 move.w 0(a0,d6.w),d6 # of Foregr KGfx move.l BackgrFieldAddr,a0 move.w 0(a0,d7.w),d7 # of Backgr KGfx move.l SectorAddr,a0 move.l se_KGfx(a0),a0 mulu #kg_SizeOf,d6 mulu #kg_SizeOf,d7 moveq #0,d0 move.b kg_Type(a0,d6.w),d0 Foregr KType moveq #0,d1 move.b kg_Type(a0,d7.w),d1 Backgr KType andi.b #kg_ty_DirMask,d1 not.b d1 and.b d1,d0 movem.l (a7)+,d1/d6-d7/a0 rts ;------------------------------------------------------------------------------ ; InitMovy NoOp ;------------------------------------------------------------------------------ sf.InitMovy movem.l d0-d3/d7,-(a7) moveq #kn_Top,d7 top moveq #0,d0 bsr sf.GetImage get image 0 of K 4 move.b d0,va.mo.TopImage move.b d1,va.mo.TopFCode move.w d2,va.mo.TopdX move.w d3,va.mo.TopdY movem.l (a7)+,d0-d3/d7 rts ;------------------------------------------------------------------------------ ; DrawField NoOp ;------------------------------------------------------------------------------ sf.DrawField movem.l d0/d6-d7/a0-a3/a6,-(a7) W_BLIT clear WorkPf lea $dff000,a6 move.l #$01000000,$40(a6) move.l PfWorkScreen,a0 move.l inl_sc_BitPlane(a0),$54(a6) clr.w $66(a6) move.w #$f796,$58(a6) 198*5 row * 44 byte W_BLIT moveq #0,d7 moveq #11,d6 12 K .BackgrKLoop bsr sf.DrawBackgrK draw K addq.w #1,d7 dbf d6,.BackgrKLoop moveq #0,d7 moveq #11,d6 12 K .ForegrKLoop bsr sf.DrawForegrK draw K addq.w #1,d7 dbf d6,.ForegrKLoop moveq #0,d7 moveq #11,d6 12 K .RightKLoop bsr sf.DrawRightK draw K addq.w #1,d7 dbf d6,.RightKLoop move.l PlayFieldAddr,a1 lea da.Palettes,a2 lea va.ColorTable,a3 moveq #0,d0 move.b pf_Palette(a1),d0 lsl.w #2,d0 move.l 0(a2,d0.w),a2 moveq #31,d0 setup palette .PaletteLoop move.w (a2)+,(a3)+ dbf d0,.PaletteLoop movem.l (a7)+,d0/d6-d7/a0-a3/a6 rts ;------------------------------------------------------------------------------ ; DrawRightK KNum(d7) ;------------------------------------------------------------------------------ sf.DrawRightK movem.l d0-d6/a2/a4,-(a7) move.l PfWorkScreen,a2 lea va.Switch,a4 moveq #12,d6 images 12-15 .DecorLoop move.l d6,d0 bsr sf.BackgrKImage cmpi.b #kg_sw_Off,0(a4,d4.w) switch off ? beq.s .SwitchOff CALL fnt.Base,fnt_WriteImage .SwitchOff addq.w #1,d6 cmpi.w #16,d6 bne.s .DecorLoop movem.l (a7)+,d0-d6/a2/a4 rts ;------------------------------------------------------------------------------ ; DrawBackgrK KNum(d7) ;------------------------------------------------------------------------------ sf.DrawBackgrK movem.l d0-d6/a2/a4,-(a7) move.l PfWorkScreen,a2 lea va.Switch,a4 moveq #0,d6 16 images .DecorLoop move.l d6,d0 bsr sf.BackgrKImage cmpi.b #kg_sw_Off,0(a4,d4.w) switch off ? beq.s .SwitchOff CALL fnt.Base,fnt_WriteImage .SwitchOff addq.w #1,d6 cmpi.w #16,d6 bne.s .DecorLoop movem.l (a7)+,d0-d6/a2/a4 rts ;------------------------------------------------------------------------------ ; BackgrKImage KNum,INum(d7,d0) --> Image,FCode,X,Y,Sw,SS(d0,d1,d2,d3,d4,d5) ;------------------------------------------------------------------------------ sf.BackgrKImage movem.l a0-a1,-(a7) bsr sf.KGfxAddr get KGfx address move.l a1,a0 bsr sf.ImageData get ImageData movem.l (a7)+,a0-a1 rts ;------------------------------------------------------------------------------ ; DrawForegrK KNum(d7) ;------------------------------------------------------------------------------ sf.DrawForegrK movem.l d0-d6/a2/a4,-(a7) move.l PfWorkScreen,a2 lea va.Switch,a4 moveq #0,d6 16 images .DecorLoop move.l d6,d0 bsr sf.ForegrKImage cmpi.b #kg_sw_Off,0(a4,d4.w) switch off ? beq.s .SwitchOff CALL fnt.Base,fnt_WriteImage .SwitchOff addq.w #1,d6 cmpi.w #16,d6 bne.s .DecorLoop movem.l (a7)+,d0-d6/a2/a4 rts ;------------------------------------------------------------------------------ ; ForegrKImage KNum,INum(d7,d0) --> Image,FCode,X,Y,Sw,SS(d0,d1,d2,d3,d4,d5) ;------------------------------------------------------------------------------ sf.ForegrKImage movem.l a0-a1,-(a7) bsr sf.KGfxAddr get KGfx address bsr sf.ImageData get ImageData movem.l (a7)+,a0-a1 rts ;------------------------------------------------------------------------------ ; KGfxAddr KNum(d7) --> ForegrKGfxAddr,BackgrKGfxAddr(a0,a1) ;------------------------------------------------------------------------------ sf.KGfxAddr movem.l d0-d1/d6-d7,-(a7) lea va.KQueue,a0 moveq #0,d6 move.b 0(a0,d7.w),d6 # of K here ? 0-11 lsl.w #1,d6 lsl.w #1,d7 move.l ForegrFieldAddr,a0 move.l BackgrFieldAddr,a1 moveq #0,d0 moveq #0,d1 move.w 0(a0,d6.w),d0 move.w 0(a1,d7.w),d1 mulu #kg_SizeOf,d0 mulu #kg_SizeOf,d1 move.l SectorAddr,a0 move.l se_KGfx(a0),a0 move.l a0,a1 add.l d0,a0 add.l d1,a1 movem.l (a7)+,d0-d1/d6-d7 rts ;------------------------------------------------------------------------------ ; ImageData KGfx,INum(a0,d0) --> Image,FCode,X,Y,Sw,SS(d0,d1,d2,d3,d4,d5) ;------------------------------------------------------------------------------ sf.ImageData movem.l d6/a0,-(a7) moveq #0,d4 move.w kg_OnOff(a0),d6 btst d0,d6 care for switch ? beq.s .SwitchOK move.b kg_Switch(a0),d4 .SwitchOK moveq #0,d5 cmpi.b #14,d0 beq.s .SpecSw cmpi.b #15,d0 beq.s .SpecSw bra.s .SpecSwOK .SpecSw move.b kg_Switch(a0),d5 lsr.b #4,d5 .SpecSwOK move.w kg_FontFlags(a0),d1 btst d0,d1 beq.s .Font0 moveq #fc_BGfx1,d1 font1 bra.s .FontOK .Font0 moveq #fc_BGfx0,d1 font0 .FontOK lea kg_D0Image(a0),a0 add.l d0,a0 add.l d0,a0 image address moveq #0,d0 move.b (a0),d0 image moveq #0,d6 move.b 1(a0),d6 pos bsr sf.CalcDCoord XPos,YPos in d2,d3 movem.l (a7)+,d6/a0 rts ;------------------------------------------------------------------------------ ; CalcDCoord KNum,Pos(d7,d6) --> XPos,YPos(d2,d3) ;------------------------------------------------------------------------------ sf.CalcDCoord movem.l d6-d7/a0,-(a7) moveq #0,d2 moveq #0,d3 lea KCoord(pc),a0 and.w #$ff,d7 lsl.w #2,d7 move.w 0(a0,d7.w),d2 KX move.w 2(a0,d7.w),d3 KY lea PosCoord,a0 and.w #$ff,d6 lsl.w #2,d6 add.w 0(a0,d6.w),d2 KX+PosX add.w 2(a0,d6.w),d3 KY+PosY movem.l (a7)+,d6-d7/a0 rts ;------------------------------------------------------------------------------ ; GetImage KGfxNum,ImageNum(d7,d0) --> Image,FontCode,KX,KY(d0,d1,d2,d3) ;------------------------------------------------------------------------------ sf.GetImage movem.l d6-d7/a0,-(a7) move.l SectorAddr,a0 move.l se_KGfx(a0),a0 mulu #kg_SizeOf,d7 lea 0(a0,d7.w),a0 KGfx address move.w kg_FontFlags(a0),d1 btst d0,d1 beq.s .Font0 moveq #fc_BGfx1,d1 font1 bra.s .FontOK .Font0 moveq #fc_BGfx0,d1 font0 .FontOK lea kg_D0Image(a0),a0 add.l d0,a0 add.l d0,a0 image address moveq #0,d0 move.b (a0),d0 image moveq #0,d6 move.b 1(a0),d6 pos moveq #0,d2 moveq #0,d3 lea PosCoord,a0 lsl.w #2,d6 move.w 0(a0,d6.w),d2 dX move.w 2(a0,d6.w),d3 dY movem.l (a7)+,d6-d7/a0 rts ;------------------------------------------------------------------------------ ; FieldToBack NoOp ;------------------------------------------------------------------------------ sf.FieldToBack movem.l a0/a6,-(a7) lea $dff000,a6 W_BLIT Pf2 --> Pf1 move.l #$09f00000,$40(a6) move.l #$ffffffff,$44(a6) move.l PfWorkScreen,a0 move.l inl_sc_BitPlane(a0),$50(a6) A : WorkField move.l PfBackgrScreen,a0 move.l inl_sc_BitPlane(a0),$54(a6) D : Background move.l #0,$64(a6) AMOD,DMOD move.w #$f796,$58(a6) 198*5 row * 44 byte W_BLIT movem.l (a7)+,a0/a6 rts ;------------------------------------------------------------------------------ ; FieldToAct NoOp ;------------------------------------------------------------------------------ sf.FieldToAct movem.l a0/a6,-(a7) lea $dff000,a6 W_BLIT Pf2 --> Pf3 move.l #$09f00000,$40(a6) move.l #$ffffffff,$44(a6) move.l PfWorkScreen,a0 move.l inl_sc_BitPlane(a0),$50(a6) A : WorkField move.l PfActiveScreen,a0 move.l inl_sc_BitPlane(a0),$54(a6) D : ActiveField move.l #0,$64(a6) AMOD,DMOD move.w #$f796,$58(a6) 198*5 row * 44 byte W_BLIT movem.l (a7)+,a0/a6 rts ;------------------------------------------------------------------------------ ; Noise NoOp ;------------------------------------------------------------------------------ sf.Noise movem.l d0-d2,-(a7) moveq #1,d0 sample moveq #ac_Background,d1 channel moveq #0,d2 C1 CALL snd.Base,snd_PlaySample movem.l (a7)+,d0-d2 rts ******************************************************************************* * InitLifts ******************************************************************************* InitLifts movem.l d0/d2/a0,-(a7) bsr LiftObjects bsr FreeLifts moveq #3,d2 .Loop bsr GetLiftBord is there lift ? tst.b d0 bne.s .NoLift bsr AllocLift allocate lift .NoLift dbf d2,.Loop movem.l (a7)+,d0/d2/a0 rts ;------------------------------------------------------------------------------ ; LiftObjects NoOp ;------------------------------------------------------------------------------ LiftObjects movem.l d0-d3/d7/a0,-(a7) moveq #kn_Lift0,d7 lift 0 moveq #12,d0 bsr sf.GetImage get image 12 of K 2 lea va.LiftObj0,a0 lea fnt_ob_ObjItems(a0),a0 1st item move.b d0,fnt_oi_Image(a0) move.b d1,fnt_oi_FontCode(a0) move.w d2,fnt_oi_dXPos(a0) move.w d3,fnt_oi_dYPos(a0) moveq #kn_Lift1,d7 lift 1 moveq #12,d0 bsr sf.GetImage get image 12 of K 3 lea va.LiftObj1,a0 lea fnt_ob_ObjItems(a0),a0 1st item move.b d0,fnt_oi_Image(a0) move.b d1,fnt_oi_FontCode(a0) move.w d2,fnt_oi_dXPos(a0) move.w d3,fnt_oi_dYPos(a0) movem.l (a7)+,d0-d3/d7/a0 rts ;------------------------------------------------------------------------------ ; FreeLifts NoOp ;------------------------------------------------------------------------------ FreeLifts move.l a0,-(a7) lea va.LiftInfo0,a0 move.b #li_st_No,li_Status(a0) lea va.LiftInfo1,a0 move.b #li_st_No,li_Status(a0) move.l (a7)+,a0 rts ;------------------------------------------------------------------------------ ; GetLiftBord XK(d2) --> YKHigh,YKLow,Shape,Success(d3,d4,d5,d0) ;------------------------------------------------------------------------------ GetLiftBord movem.l d1-d2/d6-d7,-(a7) st d1 no lift yet moveq #0,d5 moveq #0,d6 level 0 .Loop move.l d2,d7 bsr AskKType btst #kg_tyb_Up,d0 up ? bne.s .Lift btst #kg_tyb_Down,d0 down ? bne.s .Lift bra.s .Next .Lift move.b d6,d4 lowest tst.b d1 highest ? beq.s .Next moveq #0,d1 lift found move.b d6,d3 move.b d0,d5 shape and.b #kg_ty_ShapeMask,d5 .Next addq.b #4,d2 next level addq.b #1,d6 cmpi.w #3,d6 bne.s .Loop move.l d1,d0 movem.l (a7)+,d1-d2/d6-d7 rts ;------------------------------------------------------------------------------ ; AllocLift XK,YKHigh,YKLow,Shape(d2,d3,d4,d5) --> Success(d0) ;------------------------------------------------------------------------------ AllocLift movem.l d2-d4/a0,-(a7) lea va.LiftInfo0,a0 cmpi.b #li_st_No,li_Status(a0) beq.s .Found lea va.LiftInfo1,a0 cmpi.b #li_st_No,li_Status(a0) beq.s .Found st d0 not found bra.s .Exit .Found move.b d5,li_Shape(a0) move.b #li_st_Control,li_Status(a0) clr.b li_Last1F(a0) clr.b li_Last2F(a0) mulu #80,d2 XK * 80 mulu #66,d3 YKHigh * 66 mulu #66,d4 YKLow * 66 move.w d2,li_XPos(a0) moveq #0,d2 move.w va.EnterYPos,d2 cmp.w d2,d3 bgt.s .Ok cmp.w d2,d4 blt.s .Ok move.w d2,d4 .Ok move.w d4,li_YPos(a0) moveq #0,d0 found .Exit movem.l (a7)+,d2-d4/a0 rts ******************************************************************************* * InitDroids ******************************************************************************* InitDroids movem.l d0-d7/a0-a3,-(a7) moveq #2,d7 clear DroidInfo lea va.DroidInfo0,a2 structures .Clear move.b #di_st_No,di_Status(a2) driod off lea di_SizeOf(a2),a2 dbf d7,.Clear move.l SectorAddr,a1 move.l se_Droids(a1),a1 lea va.DroidInfo0,a2 move.w va.ActPlayField,d6 moveq #3,d7 max. 3 droids .Loop tst.l d7 out of space ? beq .Exit cmpi.b #dr_ty_EndOfList,dr_Type(a1) end of list ? beq .Exit move.l a1,a3 Droid structure cmp.b dr_Field(a3),d6 is it here ? bne .Next cmpi.b #dr_ty_Nothing,dr_Type(a3) real droid ? beq .Next tst.b dr_Energy(a3) energy OK ? beq .Next subq.l #1,d7 one less free DroidInfo move.l a3,di_Droid(a2) move.b #FALSE,di_Boss(a2) moveq #0,d0 move.b dr_K(a3),d0 move.b d0,di_K(a2) move.l d0,d1 and.b #3,d0 XK lsr.b #2,d1 YK move.b d0,di_XK(a2) move.b d1,di_YK(a2) mulu #80,d0 mulu #66,d1 move.w d0,di_XPos(a2) move.w d1,di_YPos(a2) clr.b di_XKPos(a2) clr.w di_Counter(a2) move.b #gam_di_Right,di_Dir(a2) move.b #di_st_Control,di_Status(a2) clr.b di_Phase(a2) clr.b di_PhTimer(a2) st di_FirePhase(a2) clr.b di_WayCnt(a2) clr.b di_Last1F(a2) do not clear 1st time clr.b di_Last2F(a2) do not clear 2nd time moveq #0,d0 moveq #0,d1 move.w di_XPos(a2),d0 move.w di_YPos(a2),d1 add.w #40,d0 bsr CalcKPos moveq #0,d0 move.b d2,d0 droid is here bsr TempStopK lea di_SizeOf(a2),a2 next DroidInfo .Next lea dr_SizeOf(a1),a1 next Droid bra .Loop .Exit movem.l (a7)+,d0-d7/a0-a3 rts ******************************************************************************* * InitMissiles ******************************************************************************* InitMissiles move.l a4,-(a7) lea va.BossMissile0,a4 move.b #gam_di_No,mi_Status(a4) missile off clr.b mi_Last1F(a4) clr.b mi_Last2F(a4) lea va.BossMissile1,a4 move.b #gam_di_No,mi_Status(a4) missile off clr.b mi_Last1F(a4) clr.b mi_Last2F(a4) lea va.BossMissile2,a4 move.b #gam_di_No,mi_Status(a4) missile off clr.b mi_Last1F(a4) clr.b mi_Last2F(a4) move.l (a7)+,a4 rts ******************************************************************************* * InitAnim ******************************************************************************* InitAnim move.l d7,-(a7) clr.w va.AnimNumber move.l #va.AnimBuffer,va.AnimPointer clr.w va.CoverNumber move.l #va.CoverBuffer,va.CoverPointer moveq #11,d7 12 K .KLoop bsr ia.InitAnimK dbf d7,.KLoop move.l (a7)+,d7 rts ;------------------------------------------------------------------------------ ; InitAnimK KNum(d7) ;------------------------------------------------------------------------------ ia.InitAnimK movem.l d0-d5,-(a7) moveq #12,d0 bsr sf.ForegrKImage bsr ia.AddAnim anim 0 moveq #13,d0 bsr sf.ForegrKImage bsr ia.AddAnim anim 1 moveq #14,d0 bsr sf.ForegrKImage bsr ia.AddCover covering 0 moveq #15,d0 bsr sf.ForegrKImage bsr ia.AddCover covering 1 movem.l (a7)+,d0-d5 rts ;------------------------------------------------------------------------------ ; AddAnim Image,FCode,X,Y,Switch(d0,d1,d2,d3,d4) ;------------------------------------------------------------------------------ ia.AddAnim move.l a0,-(a7) tst.b d0 beq.s .Exit move.l va.AnimPointer,a0 move.b d0,(a0)+ --> Image move.b d1,(a0)+ --> FCode move.w d2,(a0)+ --> X move.w d3,(a0)+ --> Y move.b d4,(a0)+ --> Switch move.b d5,(a0)+ --> SpecSw move.l a0,va.AnimPointer addq.w #1,va.AnimNumber .Exit move.l (a7)+,a0 rts ;------------------------------------------------------------------------------ ; AddCover Image,FontCode,XPos,YPos(d0,d1,d2,d3) ;------------------------------------------------------------------------------ ia.AddCover move.l a0,-(a7) tst.b d0 beq.s .Exit move.l va.CoverPointer,a0 move.b d0,(a0)+ --> Image move.b d1,(a0)+ --> FCode move.w d2,(a0)+ --> X move.w d3,(a0)+ --> Y move.b d4,(a0)+ --> Switch move.b d5,(a0)+ --> SpecSw move.l a0,va.CoverPointer addq.w #1,va.CoverNumber .Exit move.l (a7)+,a0 rts ******************************************************************************* * Animate ******************************************************************************* Animate movem.l d0-a6,-(a7) moveq #0,d0 moveq #0,d1 moveq #0,d2 moveq #0,d3 moveq #0,d4 moveq #0,d5 move.l PfWorkScreen,a2 screen lea va.Switch,a4 lea va.SpecSwitch,a5 lea va.AnimBuffer,a6 move.w va.AnimNumber,d7 .Loop subq.w #1,d7 bmi.s .OK move.b (a6)+,d0 <-- Image move.b (a6)+,d1 <-- FCode move.w (a6)+,d2 <-- X move.w (a6)+,d3 <-- Y move.b (a6)+,d4 <-- Switch move.b (a6)+,d5 <-- SpecSw cmpi.b #kg_sw_Off,0(a4,d4.w) switch off ? beq.s .SwitchOff CALL fnt.Base,fnt_WriteImage .SwitchOff bra.s .Loop .OK lea va.CoverBuffer,a6 move.w va.CoverNumber,d7 .Loop2 subq.w #1,d7 bmi.s .OK2 move.b (a6)+,d0 <-- Image move.b (a6)+,d1 <-- FCode move.w (a6)+,d2 <-- X move.w (a6)+,d3 <-- Y move.b (a6)+,d4 <-- Switch move.b (a6)+,d5 <-- SpecSw cmpi.b #kg_sw_Off,0(a4,d4.w) switch off ? beq.s .SwitchOff2 cmpi.b #kg_ss_Covering,0(a5,d5.w) switched to covering ? beq.s .SwitchOff2 CALL fnt.Base,fnt_WriteImage .SwitchOff2 bra.s .Loop2 .OK2 movem.l (a7)+,d0-a6 rts ******************************************************************************* * Coverings ******************************************************************************* Coverings movem.l d0-a6,-(a7) moveq #0,d0 moveq #0,d1 moveq #0,d2 moveq #0,d3 moveq #0,d4 moveq #0,d5 move.l PfWorkScreen,a2 screen lea va.Switch,a4 lea va.SpecSwitch,a5 lea va.CoverBuffer,a6 move.w va.CoverNumber,d7 .Loop subq.w #1,d7 bmi.s .OK move.b (a6)+,d0 <-- Image move.b (a6)+,d1 <-- FCode move.w (a6)+,d2 <-- X move.w (a6)+,d3 <-- Y move.b (a6)+,d4 <-- Switch move.b (a6)+,d5 <-- SpecSw cmpi.b #kg_sw_Off,0(a4,d4.w) switch off ? beq.s .SwitchOff cmpi.b #kg_ss_Anim,0(a5,d5.w) switched to anim ? beq.s .SwitchOff CALL fnt.Base,fnt_WriteImage .SwitchOff bra.s .Loop .OK movem.l (a7)+,d0-a6 rts ******************************************************************************* * AnimStep ******************************************************************************* AnimStep movem.l d0-a6,-(a7) tst.b va.AnimEna anim enabled ? bne.s .Stop moveq #fc_BGfx0,d1 CALL fnt.Base,fnt_AnimStep next anim phase moveq #fc_BGfx1,d1 CALL fnt.Base,fnt_AnimStep .Stop movem.l (a7)+,d0-a6 rts ******************************************************************************* * Specials ******************************************************************************* Specials cmpi.b #'c',va.LastKey test only !! bne.s .NoNumKey move.w #$f00,$dff180 bsr NumKey .NoNumKey cmpi.w #0,va.ActSector beq.s .SectorA cmpi.w #1,va.ActSector beq.s .SectorB cmpi.w #2,va.ActSector beq.s .SectorC cmpi.w #3,va.ActSector beq.s .SectorD cmpi.w #4,va.ActSector beq.s .SectorE bra.s .Exit .SectorA bsr SpecSectorA bra.s .Exit .SectorB bsr SpecSectorB bra.s .Exit .SectorC bsr SpecSectorC bra.s .Exit .SectorD bsr SpecSectorD bra.s .Exit .SectorE bsr SpecSectorE .Exit rts ;------------------------------------------------------------------------------ ; SpecSectorA NoOp ;------------------------------------------------------------------------------ SpecSectorA moveq #fc_RCtrlDr,d1 RCtrl Droid anim step CALL fnt.Base,fnt_AnimStep moveq #fc_MineADr,d1 MineA Droid anim step CALL fnt.Base,fnt_AnimStep moveq #fc_MineBDr,d1 MineB Droid anim step CALL fnt.Base,fnt_AnimStep rts ;------------------------------------------------------------------------------ ; SpecSectorB NoOp ;------------------------------------------------------------------------------ SpecSectorB rts ;------------------------------------------------------------------------------ ; SpecSectorC NoOp ;------------------------------------------------------------------------------ SpecSectorC rts ;------------------------------------------------------------------------------ ; SpecSectorD NoOp ;------------------------------------------------------------------------------ SpecSectorD rts ;------------------------------------------------------------------------------ ; SpecSectorE NoOp ;------------------------------------------------------------------------------ SpecSectorE rts ******************************************************************************* * NumKey ******************************************************************************* ;------------------------------------------------------------------------------ ; NumKey Code1,Code2,Code3,Code4(d0,d1,d2,d3) --> Success(d4) ;------------------------------------------------------------------------------ NumKey movem.l d1-d3/d6-d7/a1-a4,-(a7) bsr nk.Init moveq #0,d6 # of digits moveq #0,d7 Number in d7 .Loop bsr nk.WaitBlank bsr nk.Background bsr nk.Digits bsr ReadKey test keyboard move.b va.LastKey,d0 cmpi.b #27,d0 beq.s .Esc cmpi.b #10,d0 beq.w .Exit cmpi.b #8,d0 beq.s .BackSpace cmpi.b #'.',d0 beq.s .BackSpace cmpi.b #'0',d0 blt.s .Buttons cmpi.b #'9',d0 bgt.s .Buttons cmpi.b #4,d6 no more than 4 digits beq.s .Buttons addq.b #1,d6 sub.b #'0',d0 lsl.w #4,d7 one more digits or.w d0,d7 bsr nk.Digits bra.s .Buttons .BackSpace tst.b d6 one less digits beq.s .Buttons subq.b #1,d6 lsr.w #4,d7 bra.s .Buttons .Esc moveq #0,d7 bra.s .Exit .Buttons moveq #0,d2 draw buttons moveq #0,d3 move.l InfoScreen,a2 lea da.NumKeyCodes,a3 lea da.NumKeyObjs,a4 .Next move.b (a3)+,d0 move.l (a4)+,a1 cmpi.b #$ff,d0 beq.s .Loop CALL kbd.Base,kbd_TestKey cmpi.b #kbd_st_Pressed,d0 bne.s .Next CALL fnt.Base,fnt_WriteObject bra.s .Next .Exit move.l d7,d0 bsr nk.End movem.l (a7)+,d1-d3/d6-d7/a1-a4 rts ;------------------------------------------------------------------------------ ; Init NoOp ;------------------------------------------------------------------------------ nk.Init movem.l d1/a0-a1/a6,-(a7) moveq #fc_NumKey,d1 init NumKey.font lea NumKey.font,a0 lea 0,a1 CALL fnt.Base,fnt_InitFont lea cus_BASE,a6 store infofield W_BLIT move.l #$09f00000,$40(a6) move.l #$ffffffff,$44(a6) move.l InfoScreen,a0 move.l inl_sc_BitPlane(a0),$50(a6) A : InfoScreen move.l #NumKeyBuffer,$54(a6) D : NumKeyBuffer move.l #$001c0000,$64(a6) AMOD,DMOD move.w #$4606,$58(a6) 56*5 row * 12 byte W_BLIT bsr nk.WaitBlank bsr nk.Background movem.l (a7)+,d1/a0-a1/a6 rts ;------------------------------------------------------------------------------ ; WaitBlank NoOp ;------------------------------------------------------------------------------ nk.WaitBlank movem.l d0/a6,-(a7) lea cus_BASE,a6 .Loop1 move.l cus_VPOSR(a6),d0 and.l #$0001ff00,d0 cmpi.l #$00002000,d0 bne.s .Loop1 .Loop2 move.l cus_VPOSR(a6),d0 and.l #$0001ff00,d0 cmpi.l #$00002000,d0 beq.s .Loop2 movem.l (a7)+,d0/a6 rts ;------------------------------------------------------------------------------ ; Background NoOp ;------------------------------------------------------------------------------ nk.Background movem.l d0-d3/a2,-(a7) move.l InfoScreen,a2 draw onto infofield moveq #$10,d0 moveq #fc_NumKey,d1 moveq #0,d2 moveq #0,d3 CALL fnt.Base,fnt_WriteImage movem.l (a7)+,d0-d3/a2 rts ;------------------------------------------------------------------------------ ; Digits Number(d7) ;------------------------------------------------------------------------------ nk.Digits movem.l d0-d3/d5-d7/a2,-(a7) move.l InfoScreen,a2 draw onto infofield moveq #fc_NumKey,d1 moveq #56,d2 moveq #5,d3 moveq #0,d5 moveq #3,d6 4 numbers .Loop rol.w #4,d7 move.w d7,d0 and.w #$000f,d0 beq.s .Null st d5 .Null add.w #$0030,d0 tst.l d5 bne.s .NoSpace tst.l d6 beq.s .NoSpace moveq #$20,d0 .NoSpace CALL fnt.Base,fnt_WriteImage addq.w #1,d2 dbf d6,.Loop movem.l (a7)+,d0-d3/d5-d7/a2 rts ;------------------------------------------------------------------------------ ; End NoOp ;------------------------------------------------------------------------------ nk.End move.l a6,-(a7) lea cus_BASE,a6 restore infofield W_BLIT move.l #$09f00000,$40(a6) move.l #$ffffffff,$44(a6) move.l #NumKeyBuffer,$50(a6) A : NumKeyBuffer move.l InfoScreen,a0 move.l inl_sc_BitPlane(a0),$54(a6) D : InfoScreen move.l #$0000001c,$64(a6) AMOD,DMOD move.w #$4606,$58(a6) 56*5 row * 12 byte W_BLIT bsr sf.DrawField draw WorkField bsr sf.FieldToBack draw Background bsr InitAnim bsr Animate bsr DrawDroids move.l (a7)+,a6 rts ******************************************************************************* * Test Routines ******************************************************************************* ;------------------------------------------------------------------------------ ; WrMouseCoord XPos,YPos(d4,d5) ;------------------------------------------------------------------------------ xx_WrMouseCoord movem.l d0-d3/a2,-(a7) move.l InfoScreen,a2 move.l d4,d0 moveq #16,d2 moveq #16,d3 bsr xx_WrNum move.l d5,d0 moveq #40,d2 moveq #16,d3 bsr xx_WrNum movem.l (a7)+,d0-d3/a2 rts ;------------------------------------------------------------------------------ ; WrNum Num,XPos,YPos,Screen(d0,d2,d3,a2) ;------------------------------------------------------------------------------ xx_WrNum movem.l d0-d4/a0,-(a7) write d0.b in hexa lea xx_da_HexNum,a0 moveq #fc_Little1,d1 move.b d0,d4 and.w #$f0,d0 lsr.b #4,d0 move.b 0(a0,d0.w),d0 CALL fnt.Base,fnt_WriteImage move.b d4,d0 and.w #$0f,d0 move.b 0(a0,d0.w),d0 CALL fnt.Base,fnt_WriteImage movem.l (a7)+,d0-d4/a0 rts xx_da_HexNum DC.B '0123456789ABCDEF' ******************************************************************************* * Variables ******************************************************************************* ;------------------------------------------------------------------------------ ; Global Variables ;------------------------------------------------------------------------------ inl.Base DC.L 0 intuition.library fnt.Base DC.L 0 font.library spr.Base DC.L 0 sprite.library snd.Base DC.L 0 sound.library kbd.Base DC.L 0 keyboard.device gam.Base DC.L 0 gameport.device va.AddMoneyBuff DC.W 0 va.Money DC.W 0 boss's money va.Lives DC.W 0 # of lives va.EnterXPos DC.W 0 va.EnterYPos DC.W 0 va.LastKey DC.B 0 last pressed key va.ControlDir DC.B 0 controller direction va.ControlFire DC.B 0 controller fire va.NewField DC.B 0 NewField mode va.ActSector DC.W 0 active sector number va.ActPlayField DC.W 0 active playfield number SectorAddr DC.L 0 sector struct addr PlayFieldAddr DC.L 0 playfield struct addr ForegrFieldAddr DC.L 0 foreground field addr BackgrFieldAddr DC.L 0 background field addr PfBackgrScreen DC.L 0 PfWorkScreen DC.L 0 PfActiveScreen DC.L 0 MainMenuScreen DC.L 0 SubMenuScreen DC.L 0 MenuCtrlScreen DC.L 0 InfoScreen DC.L 0 va.ColorTable BLK.W 32,0 va.ControlEna DC.B 0 zero if enabled va.Moving DC.B 0 zero if no moving va.AnimEna DC.B 0 zero if enabled EVEN va.AnimNumber DC.W 0 # of anims on field va.AnimPointer DC.L 0 va.AnimBuffer BLK.W 12*4*4,0 12 K * 4 Anim * 4 Word va.CoverNumber DC.W 0 # of covers on field va.CoverPointer DC.L 0 va.CoverBuffer BLK.W 12*2*4,0 12 K * 2 Cover * 4 Word va.Switch BLK.B 16,0 va.SpecSwitch BLK.B 16,0 va.KQueue BLK.B 12,0 KQueue of field va.KTypes BLK.B 12,0 KTypes of field va.DrKTypes BLK.B 12,0 DrKTypes of field va.KFlags BLK.B 12,0 KFlags of field va.Weapons DC.B 0,0 Weapon1,Weapon2 va.WeaponInfoB BLK.B wi_SizeOf,0 va.WeaponInfoC BLK.B wi_SizeOf,0 va.WeaponInfoD BLK.B wi_SizeOf,0 va.WeaponInfoE BLK.B wi_SizeOf,0 va.WeaponInfoF BLK.B wi_SizeOf,0 va.WeaponInfoG BLK.B wi_SizeOf,0 va.WeaponInfoH BLK.B wi_SizeOf,0 va.WeaponInfoI BLK.B wi_SizeOf,0 ;------------------------------------------------------------------------------ ; Movy Variables ;------------------------------------------------------------------------------ va.mo.Dir DC.B 0 direction of K moving va.mo.Counter DC.B 0 step counter va.mo.KeyK DC.B 0 Key K number va.mo.NewKeyK DC.B 0 New Key K number va.mo.LeftUpK DC.B 0 left-upper K va.mo.SliceK1 DC.B 0 va.mo.SliceK2 DC.B 0 DC.B 0 va.mo.TopImage DC.B 0 va.mo.TopFCode DC.B 0 va.mo.TopdX DC.W 0 va.mo.TopdY DC.W 0 va.mo.ImageBuff BLK.B fnt_im_SizeOf,0 ;------------------------------------------------------------------------------ ; Infofield Variables ;------------------------------------------------------------------------------ va.in.Money DC.W -1 va.in.Lives DC.W -1 va.in.HeartTi DC.B 0 heart timer va.in.HeartSt DC.B 0 heart status va.in.Energy DC.B 0 boss energy va.in.Weapon DC.B 0 va.in.Ammo1 DC.W 0 va.in.Ammo2 DC.W 0 va.in.ActBox DC.W 0 active tool box va.in.ImageBuff BLK.B fnt_im_SizeOf,0 va.in.TWPtr DC.L da.in.InfoText text pointer va.in.TWXPos DC.W 0 va.in.TWYPos DC.W 0 va.in.TWSpeed DC.B 18 va.in.TWReady DC.B -1 0 : ready va.in.TWTimer DC.B 0 DC.B 0 ;------------------------------------------------------------------------------ ; Selector Variables ;------------------------------------------------------------------------------ va.se.Table BLK.B MaxToolShape*si.SizeOf,0 tool table va.se.Pages DC.W 0 # of pages va.se.ActPage DC.W 0 active page va.se.ActLine DC.W 0 active line va.se.LastLine DC.W 0 last active line va.se.ActBox DC.W 0 ;------------------------------------------------------------------------------ ; MoveLift Variables ;------------------------------------------------------------------------------ va.LiftInfo0 BLK.B li_SizeOf,0 va.LiftInfo1 BLK.B li_SizeOf,0 va.LiftObj0 FNT.OBJ 1 FNT.OI 0,0,0,0 va.LiftObj1 FNT.OBJ 1 FNT.OI 0,0,0,0 ;------------------------------------------------------------------------------ ; MoveDroid Variables ;------------------------------------------------------------------------------ va.DroidDir DC.B -1 va.DroidFire DC.B -1 va.BossInfo BLK.B di_SizeOf,0 DroidInfo Boss va.DroidInfo0 BLK.B di_SizeOf,0 DroidInfo Droid 0 va.DroidInfo1 BLK.B di_SizeOf,0 DroidInfo Droid 1 va.DroidInfo2 BLK.B di_SizeOf,0 DroidInfo Droid 2 Boss_XPos EQU va.BossInfo+di_XPos Boss_YPos EQU va.BossInfo+di_YPos Boss_Dir EQU va.BossInfo+di_Dir Boss_Status EQU va.BossInfo+di_Status Boss_Phase EQU va.BossInfo+di_Phase Boss_PhTimer EQU va.BossInfo+di_PhTimer Boss_Counter EQU va.BossInfo+di_PhTimer Boss_K EQU va.BossInfo+di_K Boss_XK EQU va.BossInfo+di_XK Boss_YK EQU va.BossInfo+di_YK Boss_XKPos EQU va.BossInfo+di_XKPos Boss_Last1X EQU va.BossInfo+di_Last1X Boss_Last1Y EQU va.BossInfo+di_Last1Y Boss_Last2X EQU va.BossInfo+di_Last2X Boss_Last2Y EQU va.BossInfo+di_Last2Y ;------------------------------------------------------------------------------ ; Missiles Variables ;------------------------------------------------------------------------------ va.BossMissile0 BLK.B mi_SizeOf,0 va.BossMissile1 BLK.B mi_SizeOf,0 va.BossMissile2 BLK.B mi_SizeOf,0 ******************************************************************************* * Data ******************************************************************************* ;------------------------------------------------------------------------------ ; Global Data ;------------------------------------------------------------------------------ inl.Name INL.NAM fnt.Name FNT.NAM spr.Name SPR.NAM snd.Name SND.NAM kbd.Name KBD.NAM gam.Name GAM.NAM EVEN PfBackgrNewScr DC.W 0,0,320,198,352,198,5 DC.W $0200 DC.L 0,PlayfieldMap3,da.PaletteBlack PfWorkNewScr DC.W 0,0,320,198,352,198,5 DC.W $0200 DC.L 0,PlayfieldMap2,da.PaletteBlack PfActiveNewScr DC.W 0,0,320,198,352,198,5 DC.W $0200 DC.L 0,PlayfieldMap1,da.PaletteBlack MainMenuNewScr DC.W 0,201,320,132,320,132,5 DC.W $0200 DC.L 0,MainMenuMap,da.PaletteMainM SubMenuNewScr DC.W 0,201,320,132,320,132,5 DC.W $0200 DC.L 0,SubMenuMap,da.PaletteSubM MenuCtrlNewScr DC.W 0,201,320,64,320,64,5 DC.W $0200 DC.L 0,MenuCtrlMap,da.PaletteMCtrl InfoNewScr DC.W 0,202,320,56,320,56,5 DC.W $0200 DC.L 0,Infofield.back,da.PaletteBlack da.Palettes DC.L da.Palette1,da.Palette2 DC.L da.Palette3,da.Palette4 DC.L da.Palette5,da.Palette6 DC.L da.Palette7,da.Palette8 DC.L da.Palette9,da.PaletteA DC.L da.PaletteB,da.PaletteC da.Palette1 DC.W $000,$323,$434,$545,$656,$878,$a9a,$cbc DC.W $111,$222,$444,$666,$999,$bbb,$caf,$87d DC.W $54a,$327,$214,$102,$000,$410,$631,$852 DC.W $b74,$da6,$fd9,$eee,$600,$a40,$e80,$ec2 da.Palette2 DC.W $000,$321,$532,$643,$853,$a75,$ca7,$eda DC.W $111,$222,$444,$666,$999,$bbb,$caf,$87d DC.W $54a,$327,$214,$102,$000,$410,$631,$852 DC.W $b74,$da6,$fd9,$eee,$600,$a40,$e80,$ec2 da.Palette3 DC.W $000,$321,$432,$543,$765,$976,$ba8,$ddb DC.W $111,$222,$444,$666,$999,$bbb,$caf,$87d DC.W $54a,$327,$214,$102,$000,$410,$631,$852 DC.W $b74,$da6,$fd9,$eee,$600,$a40,$e80,$ec2 da.Palette4 DC.W $000,$220,$330,$440,$554,$676,$898,$aba DC.W $111,$222,$444,$666,$999,$bbb,$caf,$87d DC.W $54a,$327,$214,$102,$000,$410,$631,$852 DC.W $b74,$da6,$fd9,$eee,$600,$a40,$e80,$ec2 da.Palette5 DC.W $000,$121,$232,$343,$454,$565,$787,$9a9 DC.W $111,$222,$444,$666,$999,$bbb,$caf,$87d DC.W $54a,$327,$214,$102,$000,$410,$631,$852 DC.W $b74,$da6,$fd9,$eee,$600,$a40,$e80,$ec2 da.Palette6 DC.W $000,$210,$421,$532,$742,$964,$b96,$cd9 DC.W $111,$222,$444,$666,$999,$bbb,$caf,$87d DC.W $54a,$327,$214,$102,$000,$410,$631,$852 DC.W $b74,$da6,$fd9,$eee,$600,$a40,$e80,$ec2 da.Palette7 DC.W $434,$242,$353,$464,$686,$8a8,$9b9,$bdb DC.W $131,$242,$464,$686,$9b9,$bdb,$9b9,$8a8 DC.W $686,$464,$353,$131,$000,$353,$464,$686 DC.W $797,$8a8,$9b9,$bdb,$353,$686,$8a8,$aca da.Palette8 DC.W $000,$000,$000,$000,$000,$000,$000,$000 DC.W $311,$422,$644,$866,$b99,$dbb,$b99,$a88 DC.W $866,$644,$533,$311,$000,$533,$644,$866 DC.W $977,$a88,$b99,$dbb,$533,$866,$a88,$caa da.Palette9 DC.W $000,$422,$533,$644,$866,$a88,$b99,$dbb DC.W $311,$422,$644,$866,$b99,$dbb,$b99,$a88 DC.W $866,$644,$533,$311,$000,$533,$644,$866 DC.W $977,$a88,$b99,$dbb,$533,$866,$a88,$caa da.PaletteA DC.W $000,$444,$555,$666,$888,$aaa,$bbb,$ddd DC.W $333,$444,$666,$888,$bbb,$ddd,$bbb,$aaa DC.W $888,$666,$555,$333,$000,$555,$666,$888 DC.W $999,$aaa,$bbb,$ddd,$555,$888,$aaa,$ccc da.PaletteB DC.W $000,$110,$330,$451,$662,$884,$9a6,$bc8 DC.W $110,$220,$341,$663,$995,$bc8,$895,$783 DC.W $562,$341,$120,$010,$000,$330,$440,$661 DC.W $772,$894,$9a6,$bc8,$330,$661,$894,$bc8 da.PaletteC DC.W $000,$222,$333,$444,$666,$888,$999,$bbb DC.W $111,$222,$444,$666,$999,$bbb,$999,$888 DC.W $666,$444,$333,$111,$000,$333,$444,$666 DC.W $777,$888,$999,$bbb,$333,$666,$888,$aaa da.PaletteMainM DC.W $000,$210,$321,$432,$654,$976,$ba8,$deb DC.W $110,$220,$341,$663,$995,$bc8,$caf,$87d DC.W $54a,$327,$214,$102,$000,$410,$631,$852 DC.W $b74,$da6,$fd9,$eee,$600,$a40,$e80,$ec2 da.PaletteSubM DC.W $000,$210,$321,$432,$654,$976,$ba8,$deb DC.W $110,$220,$341,$663,$995,$bc8,$caf,$87d DC.W $54a,$327,$214,$102,$000,$410,$631,$852 DC.W $b74,$da6,$fd9,$eee,$600,$a40,$e80,$ec2 da.PaletteMCtrl DC.W $000,$213,$324,$435,$657,$979,$bab,$dee DC.W $110,$220,$341,$663,$995,$bc8,$caf,$87d DC.W $54a,$327,$214,$102,$000,$410,$631,$852 DC.W $b74,$da6,$fd9,$eee,$600,$a40,$e80,$ec2 da.PaletteInfo DC.W $000,$212,$323,$434,$545,$767,$989,$bab DC.W $110,$220,$341,$663,$995,$bc8,$caf,$87d DC.W $54a,$327,$214,$102,$000,$410,$631,$852 DC.W $b74,$da6,$fd9,$eee,$600,$a40,$e80,$ec2 da.PaletteBlack DC.W $000,$000,$000,$000,$000,$000,$000,$000 DC.W $000,$000,$000,$000,$000,$000,$000,$000 DC.W $000,$000,$000,$000,$000,$000,$000,$000 DC.W $000,$000,$000,$000,$000,$000,$000,$000 KScrOffs DC.L 0,10,20,30 DC.L 14520,14530,14540,14550 DC.L 29040,29050,29060,29070 DC.L 43560,43570,43580,43590 KCoord DC.W 0,0,80,0,160,0,240,0 DC.W 0,66,80,66,160,66,240,66 DC.W 0,132,80,132,160,132,240,132 PCX SET 0 PCY SET 0 PosCoordItem MACRO DC.W PCX,PCY PCX SET PCX+8 IF PCX=112 PCX SET 0 PCY SET PCY+6 ENDIF ENDM PosCoordItem7 MACRO PosCoordItem PosCoordItem PosCoordItem PosCoordItem PosCoordItem PosCoordItem PosCoordItem ENDM PosCoordItem14 MACRO PosCoordItem7 PosCoordItem7 ENDM PosCoord PosCoordItem14 PosCoordItem14 PosCoordItem14 PosCoordItem14 PosCoordItem14 PosCoordItem14 PosCoordItem14 PosCoordItem14 PosCoordItem14 PosCoordItem14 PosCoordItem14 ;------------------------------------------------------------------------------ ; Movy Data ;------------------------------------------------------------------------------ da.mo.NewKeyKU DC.B 4,5,6,7,8,9,10,11,-1,-1,-1,-1 da.mo.NewKeyKD DC.B -1,-1,-1,-1,0,1,2,3,4,5,6,7 da.mo.NewKeyKR DC.B -1,0,1,2,-1,4,5,6,-1,8,9,10 da.mo.NewKeyKL DC.B 1,2,3,-1,5,6,7,-1,9,10,11,-1 ;------------------------------------------------------------------------------ ; Infofield Data ;------------------------------------------------------------------------------ da.in.InfoText DC.B 3,4 DC.B 'COMPUTER ON.',10 DC.B 'RAM-TEST... ',10,2,100,'OK' DC.B 10,'180 GB',10,'FREE MEMORY' DC.B 10,'ALL RIGHT.' DC.B 2,200,2,200,1 DC.B 10,'STALKER',10,10 DC.B ' DEMOVERSION',10,' V0.782.' DC.B 2,150,1,3,6 DC.B 10,'CODE BY',10 DC.B 10,' JOZSEF',10,' PUNK' DC.B 2,150,1 DC.B 10,'GRAPHICS BY',10 DC.B 10,' FERENC',10,' BARDOS' DC.B 2,150,1 DC.B 10,'MUSIC BY',10 DC.B 10,' VIKTOR',10,' DARA' DC.B 2,150,1 DC.B 0 EVEN ;------------------------------------------------------------------------------ ; Selector Data ;------------------------------------------------------------------------------ da.se.MGads INL.GAL 6 INL.GG gc_Icon1,gt_NB,151,18,41,43,0,0 INL.GG gc_Icon2,gt_NB,203,18,41,43,0,0 INL.GG gc_Icon3,gt_NB,255,18,41,43,0,0 INL.GG gc_Icon4,gt_NB,151,71,41,43,0,0 INL.GG gc_Icon5,gt_NB,203,71,41,43,0,0 INL.GG gc_Icon6,gt_NB,255,71,41,43,0,0 da.se.MCGads INL.GAL 1 INL.GG gc_Exit,gt_NB,168,29,37,18,da.se.GNExit,da.se.GSExit da.se.SGads INL.GAL 6 INL.GG gc_Line0,gt_AB,38,17,268,16,0,0 INL.GG gc_Line1,gt_AB,38,34,268,16,0,0 INL.GG gc_Line2,gt_AB,38,51,268,16,0,0 INL.GG gc_Line3,gt_AB,38,68,268,16,0,0 INL.GG gc_Line4,gt_AB,38,85,268,16,0,0 INL.GG gc_Line5,gt_AB,38,102,268,16,0,0 da.se.SCGads INL.GAL 8 INL.GG gc_Exit,gt_NB,168,29,37,18,da.se.GNExit,da.se.GSExit INL.GG gc_Return,gt_NB,168,11,37,18,da.se.GNRet,da.se.GSRet INL.GG gc_Left,gt_NB,95,7,28,14,da.se.GNLe,da.se.GSLe INL.GG gc_Right,gt_NB,123,7,28,14,da.se.GNRi,da.se.GSRi INL.GG gc_F6,gt_NB,95,21,28,14,da.se.GNF6,da.se.GSF6 INL.GG gc_F7,gt_NB,124,21,28,14,da.se.GNF7,da.se.GSF7 INL.GG gc_F8,gt_NB,95,35,28,14,da.se.GNF8,da.se.GSF8 INL.GG gc_F9,gt_NB,124,35,28,14,da.se.GNF9,da.se.GSF9 da.se.GNRet FNT.OBJ 1 FNT.OI 0,0,fc_Selector,$b6 da.se.GSRet FNT.OBJ 1 FNT.OI 0,0,fc_Selector,$b7 da.se.GNExit FNT.OBJ 1 FNT.OI 0,0,fc_Selector,$b4 da.se.GSExit FNT.OBJ 1 FNT.OI 0,0,fc_Selector,$b5 da.se.GNLe FNT.OBJ 1 FNT.OI 0,0,fc_Selector,$ae da.se.GSLe FNT.OBJ 1 FNT.OI 0,0,fc_Selector,$af da.se.GNRi FNT.OBJ 1 FNT.OI 0,0,fc_Selector,$b2 da.se.GSRi FNT.OBJ 1 FNT.OI 0,0,fc_Selector,$b3 da.se.GNF6 FNT.OBJ 1 FNT.OI 0,0,fc_Selector,$a4 da.se.GSF6 FNT.OBJ 1 FNT.OI 0,0,fc_Selector,$a8 da.se.GNF7 FNT.OBJ 1 FNT.OI 0,0,fc_Selector,$a5 da.se.GSF7 FNT.OBJ 1 FNT.OI 0,0,fc_Selector,$a9 da.se.GNF8 FNT.OBJ 1 FNT.OI 0,0,fc_Selector,$a6 da.se.GSF8 FNT.OBJ 1 FNT.OI 0,0,fc_Selector,$aa da.se.GNF9 FNT.OBJ 1 FNT.OI 0,0,fc_Selector,$a7 da.se.GSF9 FNT.OBJ 1 FNT.OI 0,0,fc_Selector,$ab da.se.PageObj FNT.OBJ 60 Page Object FNT.OI 0,0,fc_Selector,$82 FNT.OI 32,0,fc_Selector,$83 FNT.OI 64,0,fc_Selector,$84 FNT.OI 96,0,fc_Selector,$83 FNT.OI 128,0,fc_Selector,$84 FNT.OI 160,0,fc_Selector,$83 FNT.OI 192,0,fc_Selector,$84 FNT.OI 224,0,fc_Selector,$84 FNT.OI 256,0,fc_Selector,$83 FNT.OI 288,0,fc_Selector,$85 FNT.OI 0,22,fc_Selector,$86 FNT.OI 288,22,fc_Selector,$88 FNT.OI 288,44,fc_Selector,$88 FNT.OI 288,66,fc_Selector,$88 FNT.OI 288,88,fc_Selector,$89 FNT.OI 0,44,fc_Selector,$86 FNT.OI 0,66,fc_Selector,$86 FNT.OI 0,88,fc_Selector,$86 FNT.OI 0,110,fc_Selector,$8b FNT.OI 32,110,fc_Selector,$8c FNT.OI 64,110,fc_Selector,$8c FNT.OI 96,110,fc_Selector,$8c FNT.OI 128,110,fc_Selector,$8c FNT.OI 160,110,fc_Selector,$8c FNT.OI 192,110,fc_Selector,$8c FNT.OI 224,110,fc_Selector,$8c FNT.OI 256,110,fc_Selector,$8c FNT.OI 288,110,fc_Selector,$8e FNT.OI 32,22,fc_Selector,$8a FNT.OI 32,44,fc_Selector,$8a FNT.OI 32,66,fc_Selector,$8a FNT.OI 32,88,fc_Selector,$8a FNT.OI 37,15,fc_Selector,$9b FNT.OI 37,32,fc_Selector,$9b FNT.OI 37,49,fc_Selector,$9b FNT.OI 37,66,fc_Selector,$9b FNT.OI 37,83,fc_Selector,$9b FNT.OI 37,100,fc_Selector,$9b FNT.OI 303,18,fc_Selector,$ed FNT.OI 303,35,fc_Selector,$ed FNT.OI 303,52,fc_Selector,$ed FNT.OI 303,69,fc_Selector,$ed FNT.OI 303,86,fc_Selector,$ed FNT.OI 303,103,fc_Selector,$ed FNT.OI 39,118,fc_Selector,$ee FNT.OI 84,118,fc_Selector,$ee FNT.OI 132,118,fc_Selector,$ee FNT.OI 176,118,fc_Selector,$ee FNT.OI 220,118,fc_Selector,$ee FNT.OI 259,118,fc_Selector,$ee FNT.OI 13,16,fc_Selector,$d5 FNT.OI 13,47,fc_Selector,$d6 FNT.OI 13,78,fc_Selector,$d7 FNT.OI 13,98,fc_Selector,$d8 FNT.OI 30,19,fc_Selector,$da FNT.OI 30,36,fc_Selector,$da FNT.OI 30,53,fc_Selector,$da FNT.OI 30,70,fc_Selector,$da FNT.OI 30,88,fc_Selector,$da FNT.OI 30,105,fc_Selector,$da da.se.BInfoObj FNT.OBJ 60 Big Info Page Object FNT.OI 0,0,fc_Selector,$8f FNT.OI 32,0,fc_Selector,$90 FNT.OI 64,0,fc_Selector,$91 FNT.OI 96,0,fc_Selector,$90 FNT.OI 128,0,fc_Selector,$91 FNT.OI 160,0,fc_Selector,$91 FNT.OI 192,0,fc_Selector,$90 FNT.OI 224,0,fc_Selector,$91 FNT.OI 256,0,fc_Selector,$90 FNT.OI 288,0,fc_Selector,$92 FNT.OI 0,22,fc_Selector,$93 FNT.OI 32,22,fc_Selector,$f1 FNT.OI 64,22,fc_Selector,$f1 FNT.OI 96,22,fc_Selector,$f1 FNT.OI 128,22,fc_Selector,$f1 FNT.OI 160,22,fc_Selector,$f1 FNT.OI 192,22,fc_Selector,$f1 FNT.OI 224,22,fc_Selector,$f1 FNT.OI 256,22,fc_Selector,$f1 FNT.OI 288,22,fc_Selector,$95 FNT.OI 0,44,fc_Selector,$94 FNT.OI 32,44,fc_Selector,$f1 FNT.OI 64,44,fc_Selector,$f1 FNT.OI 96,44,fc_Selector,$f1 FNT.OI 128,44,fc_Selector,$f1 FNT.OI 160,44,fc_Selector,$f1 FNT.OI 192,44,fc_Selector,$f1 FNT.OI 224,44,fc_Selector,$f1 FNT.OI 256,44,fc_Selector,$f1 FNT.OI 288,44,fc_Selector,$95 FNT.OI 0,66,fc_Selector,$94 FNT.OI 32,66,fc_Selector,$f1 FNT.OI 64,66,fc_Selector,$f1 FNT.OI 96,66,fc_Selector,$f1 FNT.OI 128,66,fc_Selector,$f1 FNT.OI 160,66,fc_Selector,$f1 FNT.OI 192,66,fc_Selector,$f1 FNT.OI 224,66,fc_Selector,$f1 FNT.OI 256,66,fc_Selector,$f1 FNT.OI 288,66,fc_Selector,$95 FNT.OI 0,88,fc_Selector,$94 FNT.OI 32,88,fc_Selector,$f1 FNT.OI 64,88,fc_Selector,$f1 FNT.OI 96,88,fc_Selector,$f1 FNT.OI 128,88,fc_Selector,$f1 FNT.OI 160,88,fc_Selector,$f1 FNT.OI 192,88,fc_Selector,$f1 FNT.OI 224,88,fc_Selector,$f1 FNT.OI 256,88,fc_Selector,$f1 FNT.OI 288,88,fc_Selector,$96 FNT.OI 0,110,fc_Selector,$97 FNT.OI 32,110,fc_Selector,$98 FNT.OI 64,110,fc_Selector,$99 FNT.OI 96,110,fc_Selector,$98 FNT.OI 128,110,fc_Selector,$99 FNT.OI 160,110,fc_Selector,$99 FNT.OI 192,110,fc_Selector,$98 FNT.OI 224,110,fc_Selector,$99 FNT.OI 256,110,fc_Selector,$99 FNT.OI 288,110,fc_Selector,$9a da.se.LInfoObj FNT.OBJ 30 Little Info Page Object FNT.OI 0,0,fc_Selector,$8f FNT.OI 32,0,fc_Selector,$90 FNT.OI 64,0,fc_Selector,$91 FNT.OI 96,0,fc_Selector,$90 FNT.OI 128,0,fc_Selector,$91 FNT.OI 160,0,fc_Selector,$91 FNT.OI 192,0,fc_Selector,$90 FNT.OI 224,0,fc_Selector,$91 FNT.OI 256,0,fc_Selector,$90 FNT.OI 288,0,fc_Selector,$92 FNT.OI 0,22,fc_Selector,$93 FNT.OI 32,22,fc_Selector,$f1 FNT.OI 64,22,fc_Selector,$f1 FNT.OI 96,22,fc_Selector,$f1 FNT.OI 128,22,fc_Selector,$f1 FNT.OI 160,22,fc_Selector,$f1 FNT.OI 192,22,fc_Selector,$f1 FNT.OI 224,22,fc_Selector,$f1 FNT.OI 256,22,fc_Selector,$f1 FNT.OI 288,22,fc_Selector,$95 FNT.OI 0,44,fc_Selector,$97 FNT.OI 32,44,fc_Selector,$99 FNT.OI 64,44,fc_Selector,$98 FNT.OI 96,44,fc_Selector,$99 FNT.OI 128,44,fc_Selector,$99 FNT.OI 160,44,fc_Selector,$98 FNT.OI 192,44,fc_Selector,$99 FNT.OI 224,44,fc_Selector,$98 FNT.OI 256,44,fc_Selector,$99 FNT.OI 288,44,fc_Selector,$9a ;------------------------------------------------------------------------------ ; ToolMenu Data ;------------------------------------------------------------------------------ da.tm.MainObj FNT.OBJ 81 FNT.OI 0,0,fc_Selector,$82 FNT.OI 32,0,fc_Selector,$83 FNT.OI 64,0,fc_Selector,$84 FNT.OI 96,0,fc_Selector,$83 FNT.OI 128,0,fc_Selector,$83 FNT.OI 160,0,fc_Selector,$84 FNT.OI 192,0,fc_Selector,$83 FNT.OI 224,0,fc_Selector,$84 FNT.OI 256,0,fc_Selector,$83 FNT.OI 288,0,fc_Selector,$85 FNT.OI 0,22,fc_Selector,$86 FNT.OI 32,22,fc_Selector,$8a FNT.OI 64,22,fc_Selector,$8a FNT.OI 96,22,fc_Selector,$8a FNT.OI 128,22,fc_Selector,$8a FNT.OI 160,22,fc_Selector,$8a FNT.OI 192,22,fc_Selector,$8a FNT.OI 224,22,fc_Selector,$8a FNT.OI 256,22,fc_Selector,$8a FNT.OI 288,22,fc_Selector,$89 FNT.OI 0,44,fc_Selector,$87 FNT.OI 32,44,fc_Selector,$8a FNT.OI 64,44,fc_Selector,$8a FNT.OI 96,44,fc_Selector,$8a FNT.OI 128,44,fc_Selector,$8a FNT.OI 160,44,fc_Selector,$8a FNT.OI 192,44,fc_Selector,$8a FNT.OI 224,44,fc_Selector,$8a FNT.OI 256,44,fc_Selector,$8a FNT.OI 288,44,fc_Selector,$89 FNT.OI 0,66,fc_Selector,$86 FNT.OI 32,66,fc_Selector,$8a FNT.OI 64,66,fc_Selector,$8a FNT.OI 96,66,fc_Selector,$8a FNT.OI 128,66,fc_Selector,$8a FNT.OI 160,66,fc_Selector,$8a FNT.OI 192,66,fc_Selector,$8a FNT.OI 224,66,fc_Selector,$8a FNT.OI 256,66,fc_Selector,$8a FNT.OI 288,66,fc_Selector,$88 FNT.OI 0,88,fc_Selector,$87 FNT.OI 32,88,fc_Selector,$8a FNT.OI 64,88,fc_Selector,$8a FNT.OI 96,88,fc_Selector,$8a FNT.OI 128,88,fc_Selector,$8a FNT.OI 160,88,fc_Selector,$8a FNT.OI 192,88,fc_Selector,$8a FNT.OI 224,88,fc_Selector,$8a FNT.OI 256,88,fc_Selector,$8a FNT.OI 288,88,fc_Selector,$88 FNT.OI 0,110,fc_Selector,$8b FNT.OI 32,110,fc_Selector,$8c FNT.OI 64,110,fc_Selector,$8d FNT.OI 96,110,fc_Selector,$8c FNT.OI 128,110,fc_Selector,$8d FNT.OI 160,110,fc_Selector,$8d FNT.OI 192,110,fc_Selector,$8c FNT.OI 224,110,fc_Selector,$8d FNT.OI 256,110,fc_Selector,$8c FNT.OI 288,110,fc_Selector,$8e FNT.OI 146,16,fc_Selector,$b8 FNT.OI 200,16,fc_Selector,$b8 FNT.OI 254,16,fc_Selector,$b8 FNT.OI 146,69,fc_Selector,$b8 FNT.OI 200,69,fc_Selector,$b8 FNT.OI 254,69,fc_Selector,$b8 FNT.OI 152,19,fc_Selector,$bd FNT.OI 206,19,fc_Selector,$be FNT.OI 260,19,fc_Selector,$bf FNT.OI 152,72,fc_Selector,$c0 FNT.OI 206,72,fc_Selector,$c1 FNT.OI 260,72,fc_Selector,$c2 FNT.OI 12,16,fc_Selector,$b9 FNT.OI 63,39,fc_Selector,$bb FNT.OI 193,17,fc_Selector,$f2 FNT.OI 247,17,fc_Selector,$f2 FNT.OI 301,17,fc_Selector,$f2 FNT.OI 193,70,fc_Selector,$f2 FNT.OI 247,70,fc_Selector,$f2 FNT.OI 301,70,fc_Selector,$f2 FNT.OI 178,54,fc_Selector,$fb da.tm.CtrlObj FNT.OBJ 1 FNT.OI 0,0,fc_Selector,$81 ;------------------------------------------------------------------------------ ; ToolSelector Data ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ ; WeaponMenu Data ;------------------------------------------------------------------------------ da.wm.MainObj FNT.OBJ 77 FNT.OI 0,0,fc_Selector,$82 FNT.OI 32,0,fc_Selector,$83 FNT.OI 64,0,fc_Selector,$84 FNT.OI 96,0,fc_Selector,$83 FNT.OI 128,0,fc_Selector,$84 FNT.OI 160,0,fc_Selector,$84 FNT.OI 192,0,fc_Selector,$83 FNT.OI 224,0,fc_Selector,$84 FNT.OI 256,0,fc_Selector,$83 FNT.OI 288,0,fc_Selector,$85 FNT.OI 0,22,fc_Selector,$86 FNT.OI 32,22,fc_Selector,$8a FNT.OI 64,22,fc_Selector,$8a FNT.OI 96,22,fc_Selector,$8a FNT.OI 128,22,fc_Selector,$8a FNT.OI 160,22,fc_Selector,$8a FNT.OI 192,22,fc_Selector,$8a FNT.OI 224,22,fc_Selector,$8a FNT.OI 256,22,fc_Selector,$8a FNT.OI 288,22,fc_Selector,$89 FNT.OI 0,44,fc_Selector,$87 FNT.OI 32,44,fc_Selector,$8a FNT.OI 64,44,fc_Selector,$8a FNT.OI 96,44,fc_Selector,$8a FNT.OI 128,44,fc_Selector,$8a FNT.OI 160,44,fc_Selector,$8a FNT.OI 192,44,fc_Selector,$8a FNT.OI 224,44,fc_Selector,$8a FNT.OI 256,44,fc_Selector,$8a FNT.OI 288,44,fc_Selector,$89 FNT.OI 0,66,fc_Selector,$86 FNT.OI 32,66,fc_Selector,$8a FNT.OI 64,66,fc_Selector,$8a FNT.OI 96,66,fc_Selector,$8a FNT.OI 128,66,fc_Selector,$8a FNT.OI 160,66,fc_Selector,$8a FNT.OI 192,66,fc_Selector,$8a FNT.OI 224,66,fc_Selector,$8a FNT.OI 256,66,fc_Selector,$8a FNT.OI 288,66,fc_Selector,$89 FNT.OI 0,88,fc_Selector,$87 FNT.OI 32,88,fc_Selector,$8a FNT.OI 64,88,fc_Selector,$8a FNT.OI 96,88,fc_Selector,$8a FNT.OI 128,88,fc_Selector,$8a FNT.OI 160,88,fc_Selector,$8a FNT.OI 192,88,fc_Selector,$8a FNT.OI 224,88,fc_Selector,$8a FNT.OI 288,110,fc_Selector,$8e FNT.OI 288,88,fc_Selector,$88 FNT.OI 0,110,fc_Selector,$8b FNT.OI 32,110,fc_Selector,$8d FNT.OI 64,110,fc_Selector,$8c FNT.OI 96,110,fc_Selector,$8d FNT.OI 128,110,fc_Selector,$8d FNT.OI 160,110,fc_Selector,$8c FNT.OI 192,110,fc_Selector,$8d FNT.OI 224,110,fc_Selector,$8c FNT.OI 256,110,fc_Selector,$8d FNT.OI 256,88,fc_Selector,$8a FNT.OI 146,16,fc_Selector,$b8 FNT.OI 200,16,fc_Selector,$b8 FNT.OI 254,16,fc_Selector,$b8 FNT.OI 200,69,fc_Selector,$b8 FNT.OI 152,19,fc_Selector,$c6 FNT.OI 206,19,fc_Selector,$c7 FNT.OI 260,19,fc_Selector,$c8 FNT.OI 206,72,fc_Selector,$c9 FNT.OI 12,16,fc_Selector,$b9 FNT.OI 13,19,fc_Selector,$ba FNT.OI 21,39,fc_Selector,$bc FNT.OI 193,17,fc_Selector,$f2 FNT.OI 247,17,fc_Selector,$f2 FNT.OI 301,17,fc_Selector,$f2 FNT.OI 247,70,fc_Selector,$f2 FNT.OI 151,79,fc_Selector,$c5 FNT.OI 178,54,fc_Selector,$fb da.wm.CtrlObj FNT.OBJ 4 FNT.OI 0,0,fc_Selector,$81 FNT.OI 92,21,fc_Selector,$dc FNT.OI 95,35,fc_Selector,$dd FNT.OI 124,35,fc_Selector,$df ;------------------------------------------------------------------------------ ; NumKey Data ;------------------------------------------------------------------------------ da.NumKeyCodes DC.B $0a,$01,$02,$03,$04,$05 DC.B $06,$07,$08,$09,$41,$44 DC.B $0f,$1d,$1e,$1f,$2d,$2e DC.B $2f,$3d,$3e,$3f,$3c,$43 DC.B $ff,$ff da.NumKeyObjs DC.L da.NK0,da.NK1,da.NK2,da.NK3 DC.L da.NK4,da.NK5,da.NK6,da.NK7 DC.L da.NK8,da.NK9,da.NKA,da.NKB DC.L da.NK0,da.NK1,da.NK2,da.NK3 DC.L da.NK4,da.NK5,da.NK6,da.NK7 DC.L da.NK8,da.NK9,da.NKA,da.NKB da.NK0 FNT.OBJ 1 FNT.OI 3,42,fc_NumKey,$50 da.NK1 FNT.OBJ 1 FNT.OI 3,29,fc_NumKey,$51 da.NK2 FNT.OBJ 1 FNT.OI 16,29,fc_NumKey,$52 da.NK3 FNT.OBJ 1 FNT.OI 29,29,fc_NumKey,$53 da.NK4 FNT.OBJ 1 FNT.OI 3,16,fc_NumKey,$54 da.NK5 FNT.OBJ 1 FNT.OI 16,16,fc_NumKey,$55 da.NK6 FNT.OBJ 1 FNT.OI 29,16,fc_NumKey,$56 da.NK7 FNT.OBJ 1 FNT.OI 3,3,fc_NumKey,$57 da.NK8 FNT.OBJ 1 FNT.OI 16,3,fc_NumKey,$58 da.NK9 FNT.OBJ 1 FNT.OI 29,3,fc_NumKey,$59 da.NKA FNT.OBJ 1 FNT.OI 29,42,fc_NumKey,$5a da.NKB FNT.OBJ 1 FNT.OI 42,29,fc_NumKey,$5b ******************************************************************************* * GameData ******************************************************************************* SectorPointers DC.L SectorA SectorA..E DC.L SectorA DC.L SectorA DC.L SectorA DC.L SectorA SectorA DC.L PlayFieldGfxA DC.L FieldGfxA DC.L KGfxA DC.L DroidsA BGFXA TOOLOBJ ******************************************************************************* * Droid Shape Data ******************************************************************************* ;------------------------------------------------------------------------------ ; Boss Shape Data ;------------------------------------------------------------------------------ BOSS_X0 EQU 16 BOSS_Y0 EQU 7 BOSS_X1 EQU 24 BOSS_Y1 EQU 31 BOSSFC MACRO BOSS_F0 SET \1 BOSS_F1 SET \2 ENDM BOSSOB MACRO FNT.OBJ 2 FNT.OI BOSS_X1+\4,BOSS_Y1+\5,BOSS_F1,\6 FNT.OI BOSS_X0+\1,BOSS_Y0+\2,BOSS_F0,\3 ENDM BOSSOB_SIZE EQU fnt_ob_SizeOf+(2*fnt_oi_SizeOf) da.ds.BossSRO BOSSFC fc_Boss,fc_LegTurn BOSSOB 0,2,$10,12,2,$30 da.ds.BossSLO BOSSFC fc_Boss,fc_LegTurn BOSSOB 0,2,$18,5,2,$38 da.ds.BossCRO BOSSFC fc_Boss,fc_LegCrouch BOSSOB 0,10,$10,9,9,$10 BOSSOB 0,18,$10,9,16,$11 BOSSOB 0,10,$10,9,9,$10 BOSSFC fc_Boss,fc_LegTurn BOSSOB 0,2,$10,12,2,$30 da.ds.BossCLO BOSSFC fc_Boss,fc_LegCrouch BOSSOB 0,10,$18,10,9,$18 BOSSOB 0,18,$18,10,16,$19 BOSSOB 0,10,$18,10,9,$18 BOSSFC fc_Boss,fc_LegTurn BOSSOB 0,2,$18,5,2,$38 da.ds.BossMRO BOSSFC fc_Boss,fc_LegStep BOSSOB 0,2,$10,11,2,$20 BOSSOB 0,1,$10,11,1,$21 BOSSOB 0,0,$10,10,0,$22 BOSSOB 0,1,$10,10,1,$23 BOSSOB 0,2,$10,11,2,$24 BOSSOB 0,1,$10,11,1,$25 BOSSOB 0,0,$10,10,0,$26 BOSSOB 0,1,$10,10,1,$27 da.ds.BossMLO BOSSFC fc_Boss,fc_LegStep BOSSOB 0,2,$18,10,2,$28 BOSSOB 0,1,$18,10,1,$29 BOSSOB 0,0,$18,1,0,$2a BOSSOB 0,1,$18,6,1,$2b BOSSOB 0,2,$18,10,2,$2c BOSSOB 0,1,$18,10,1,$2d BOSSOB 0,0,$18,1,0,$2e BOSSOB 0,1,$18,6,1,$2f da.ds.BossTRO BOSSFC fc_Boss,fc_LegTurn BOSSOB 0,2,$18,5,2,$38 BOSSOB 0,2,$17,8,2,$37 BOSSOB 0,2,$16,5,2,$36 BOSSOB 0,2,$15,3,2,$35 BOSSOB 0,2,$14,4,2,$34 BOSSOB 0,2,$13,2,2,$33 BOSSOB 0,2,$12,2,2,$32 BOSSOB 0,2,$11,7,2,$31 BOSSOB 0,2,$10,12,2,$30 da.ds.BossTLO BOSSFC fc_Boss,fc_LegTurn BOSSOB 0,2,$10,12,2,$30 BOSSOB 0,2,$11,7,2,$31 BOSSOB 0,2,$12,2,2,$32 BOSSOB 0,2,$13,2,2,$33 BOSSOB 0,2,$14,4,2,$34 BOSSOB 0,2,$15,3,2,$35 BOSSOB 0,2,$16,5,2,$36 BOSSOB 0,2,$17,8,2,$37 BOSSOB 0,2,$18,5,2,$38 BOSSEXO MACRO FNT.OBJ 1 FNT.OI 34,17,fc_Explode,\1 ENDM BOSSEXO_SIZE EQU fnt_ob_SizeOf+fnt_oi_SizeOf da.ds.BossEXO BOSSEXO $20 BOSSEXO $21 BOSSEXO $22 BOSSEXO $23 BOSSEXO $24 BOSSBX MACRO DC.W \1+BOSS_X0,\2+BOSS_Y0 DC.W \3+BOSS_X0,\4+BOSS_Y0 ENDM da.ds.BossBox DC.W 2 BOSSBX 0,0,63,23 BOSSBX 8,24,55,47 ;------------------------------------------------------------------------------ ; BossA Shape Data ;------------------------------------------------------------------------------ da.ds.BossA DC.B 0,fc_BossA Ident,FontCode DC.B 0,0 FirePhase,FireTimer DC.W 0,0 FireRdX,FireRdY DC.W 0,0 FireLdX,FireLdY DC.L 0 MissileShape DC.W 1 AmmoSize DC.L 0 WeaponInfo ;------------------------------------------------------------------------------ ; BossB Shape Data ;------------------------------------------------------------------------------ da.ds.BossB DC.B 1,fc_BossB Ident,FontCode DC.B 2,3 FirePhase,FireTimer DC.W 38,14 FireRdX,FireRdY DC.W 1,14 FireLdX,FireLdY DC.L .MissileShape MissileShape DC.W 32 AmmoSize DC.L va.WeaponInfoB WeaponInfo .MissileShape DC.B 0,fc_BossB Ident,FontCode DC.W 48,18 RightdX,RightdY DC.W -2,18 LeftdX,LeftdY DC.W 8,3 dX,dY DC.B 0,0 MaxPhase,MaxTimer DC.B 2+1,2 MaxHitPhase,MaxHitTimer DC.B 4,0 FireEff,FireTune DC.B $13,0 HitEffect,HitTune DC.B 4,16 Strength,Speed ;------------------------------------------------------------------------------ ; BossC Shape Data ;------------------------------------------------------------------------------ da.ds.BossC DC.B 2,fc_BossC Ident,FontCode DC.B 3,4 FirePhase,FireTimer DC.W 34,13 FireRdX,FireRdY DC.W 2,13 FireLdX,FireLdY DC.L .MissileShape MissileShape DC.W 1 AmmoSize DC.L va.WeaponInfoC WeaponInfo .MissileShape DC.B 0,fc_BossC Ident,FontCode DC.W 46,12 RightdX,RightdY DC.W 0,12 LeftdX,LeftdY DC.W 8,5 dX,dY DC.B 4,5 MaxPhase,MaxTimer DC.B 4+1,5 MaxHitPhase,MaxHitTimer DC.B 4,0 FireEff,FireTune DC.B $13,0 HitEffect,HitTune DC.B 64,2 Strength,Speed ;------------------------------------------------------------------------------ ; BossD Shape Data ;------------------------------------------------------------------------------ da.ds.BossD DC.B 3,fc_BossD Ident,FontCode DC.B 0,0 FirePhase,FireTimer DC.W 0,0 FireRdX,FireRdY DC.W 0,0 FireLdX,FireLdY DC.L 0 MissileShape DC.W 1 AmmoSize DC.L va.WeaponInfoD WeaponInfo ;------------------------------------------------------------------------------ ; BossE Shape Data ;------------------------------------------------------------------------------ da.ds.BossE DC.B 4,fc_BossE Ident,FontCode DC.B 3,4 FirePhase,FireTimer DC.W 33,14 FireRdX,FireRdY DC.W 1,14 FireLdX,FireLdY DC.L .MissileShape MissileShape DC.W 8 AmmoSize DC.L va.WeaponInfoE WeaponInfo .MissileShape DC.B 0,fc_BossE Ident,FontCode DC.W 56,14 RightdX,RightdY DC.W -7,14 LeftdX,LeftdY DC.W 8,5 dX,dY DC.B 4,5 MaxPhase,MaxTimer DC.B 4+1,4 MaxHitPhase,MaxHitTimer DC.B 4,0 FireEff,FireTune DC.B $13,0 HitEffect,HitTune DC.B 32,4 Strength,Speed ;------------------------------------------------------------------------------ ; BossF Shape Data ;------------------------------------------------------------------------------ da.ds.BossF DC.B 5,fc_BossF Ident,FontCode DC.B 2,4 FirePhase,FireTimer DC.W 13,14 FireRdX,FireRdY DC.W 21,14 FireLdX,FireLdY DC.L .MissileShape MissileShape DC.W 1 AmmoSize DC.L va.WeaponInfoF WeaponInfo .MissileShape DC.B 0,fc_BossF Ident,FontCode DC.W 49,16 RightdX,RightdY DC.W -1,16 LeftdX,LeftdY DC.W 8,2 dX,dY DC.B 6,5 MaxPhase,MaxTimer DC.B 4+1,5 MaxHitPhase,MaxHitTimer DC.B 4,0 FireEff,FireTune DC.B $13,0 HitEffect,HitTune DC.B 16,4 Strength,Speed ;------------------------------------------------------------------------------ ; BossG Shape Data ;------------------------------------------------------------------------------ da.ds.BossG DC.B 6,fc_BossG Ident,FontCode DC.B 0,0 FirePhase,FireTimer DC.W 0,0 FireRdX,FireRdY DC.W 0,0 FireLdX,FireLdY DC.L 0 MissileShape DC.W 1 AmmoSize DC.L va.WeaponInfoG WeaponInfo ;------------------------------------------------------------------------------ ; BossH Shape Data ;------------------------------------------------------------------------------ da.ds.BossH DC.B 7,fc_BossH Ident,FontCode DC.B 0,0 FirePhase,FireTimer DC.W 0,0 FireRdX,FireRdY DC.W 0,0 FireLdX,FireLdY DC.L 0 MissileShape DC.W 1 AmmoSize DC.L va.WeaponInfoH WeaponInfo ;------------------------------------------------------------------------------ ; BossI Shape Data ;------------------------------------------------------------------------------ da.ds.BossI DC.B 8,fc_BossI Ident,FontCode DC.B 0,0 FirePhase,FireTimer DC.W 0,0 FireRdX,FireRdY DC.W 0,0 FireLdX,FireLdY DC.L 0 MissileShape DC.W 1 AmmoSize DC.L va.WeaponInfoI WeaponInfo ;------------------------------------------------------------------------------ ; RCtrl Droid Shape Data ;------------------------------------------------------------------------------ RCTRLDR_X0 EQU 36 RCTRLDR_Y0 EQU 6 da.ds.RCtrlObj FNT.OBJ 1 FNT.OI RCTRLDR_X0,RCTRLDR_Y0,fc_RCtrlDr,$10 RCTRLBX MACRO DC.W \1+RCTRLDR_X0,\2+RCTRLDR_Y0 DC.W \3+RCTRLDR_X0,\4+RCTRLDR_Y0 ENDM da.ds.RCtrlBox DC.W 1 RCTRLBX 0,1,15,44 ;------------------------------------------------------------------------------ ; Radar Droid Shape Data ;------------------------------------------------------------------------------ RADARDR_X0 EQU 28 RADARDR_Y0 EQU 2 RADARDR_X1 EQU 28 RADARDR_Y1 EQU 42 da.ds.RadarObj FNT.OBJ 2 FNT.OI RADARDR_X0,RADARDR_Y0,fc_RadarDr,$10 FNT.OI RADARDR_X1,RADARDR_Y1,fc_RadarDr,$c1 RADARBX MACRO DC.W \1+RADARDR_X0,\2+RADARDR_Y0 DC.W \3+RADARDR_X0,\4+RADARDR_Y0 ENDM da.ds.RadarBox DC.W 3 RADARBX 8,1,24,9 RADARBX 0,10,31,22 RADARBX 2,23,29,39 ;------------------------------------------------------------------------------ ; MineA Droid Shape Data ;------------------------------------------------------------------------------ MINEADR_X0 EQU 40 MINEADR_Y0 EQU 18 MINEADR_X1 EQU 40 MINEADR_Y1 EQU 34 MINEASO MACRO FNT.OBJ 2 FNT.OI MINEADR_X0,MINEADR_Y0,fc_MineADr,$10 FNT.OI MINEADR_X1,MINEADR_Y1,fc_MineADr,\1 ENDM MINEASO_SIZE EQU fnt_ob_SizeOf+(2*fnt_oi_SizeOf) da.ds.MineASTO MINEASO $00 MINEASO $30 MINEASO $31 MINEASO $32 MINEASO $33 MINEASO $20 MINEAEO MACRO FNT.OBJ 1 FNT.OI MINEADR_X0+\1,MINEADR_Y0+\2,fc_MineADr,\3 ENDM MINEAEO_SIZE EQU fnt_ob_SizeOf+fnt_oi_SizeOf da.ds.MineAEXO MINEAEO 0,0,$80 MINEAEO -3,-2,$81 MINEAEO -5,-4,$82 MINEAEO -7,-6,$83 MINEAEO -9,-7,$84 MINEAEO -8,-7,$85 da.ds.MineADat DC.W $0400,$0401,$0502,$0504,$0505,$0506,$0507,$0508 DC.W $0509,$050A,$050B,$050C,$050C,$050D,$050D,$050D DC.W $050D,$050D,$050D,$050D,$050C,$050C,$050B,$050A DC.W $0509,$0508,$0507,$0506,$0505,$0504,$0502,$0501 DC.W $05FF,$05FE,$04FD,$04FB,$03FA,$03F9,$02F8,$02F7 DC.W $01F6,$01F5,$00F4,$00F3,$00F3,$00F2,$00F2,$00F2 DC.W $00F2,$00F2,$00F2,$00F2,$00F3,$00F3,$00F4,$00F5 DC.W $00F6,$00F7,$01F8,$01F9,$02FA,$02FB,$03FD,$03FE MINEABX MACRO DC.W \1+MINEADR_X0,\2+MINEADR_Y0 DC.W \3+MINEADR_X0,\4+MINEADR_Y0 ENDM da.ds.MineABox DC.W 1 MINEABX 4,2,12,16 ;------------------------------------------------------------------------------ ; MineB Droid Shape Data ;------------------------------------------------------------------------------ MINEBDR_X0 EQU 32 MINEBDR_Y0 EQU 22 da.ds.MineBObj FNT.OBJ 1 FNT.OI MINEBDR_X0,MINEBDR_Y0,fc_MineBDr,$10 MINEBEO MACRO FNT.OBJ 1 FNT.OI MINEBDR_X0+\1,MINEBDR_Y0+\2,fc_MineBDr,\3 ENDM MINEBEO_SIZE EQU fnt_ob_SizeOf+fnt_oi_SizeOf da.ds.MineBEXO MINEBEO 6,0,$80 MINEBEO 2,0,$81 MINEBEO 0,-2,$82 MINEBEO -2,-6,$83 MINEBEO -6,-14,$84 MINEBEO -6,-16,$85 MINEBEO -6,-18,$86 MINEBBX MACRO DC.W \1+MINEBDR_X0,\2+MINEBDR_Y0 DC.W \3+MINEBDR_X0,\4+MINEBDR_Y0 ENDM da.ds.MineBBox DC.W 1 MINEBBX 7,6,23,27 ;------------------------------------------------------------------------------ ; WalkA Droid Shape Data ;------------------------------------------------------------------------------ WALKADR_X0 EQU 16 WALKADR_Y0 EQU 12 WALKADR_X1 EQU 23 WALKADR_Y1 EQU 32 WALKAFC MACRO WALKADR_F0 SET \1 WALKADR_F1 SET \2 ENDM WALKAOB MACRO FNT.OBJ 2 FNT.OI WALKADR_X1+\4,WALKADR_Y1+\5,WALKADR_F1,\6 FNT.OI WALKADR_X0+\1,WALKADR_Y0+\2,WALKADR_F0,\3 ENDM WALKAOB_SIZE EQU fnt_ob_SizeOf+(2*fnt_oi_SizeOf) da.ds.WalkASRO WALKAFC fc_WalkADr,fc_LegTurn WALKAOB 0,2,$10,12,2,$30 da.ds.WalkASLO WALKAFC fc_WalkADr,fc_LegTurn WALKAOB 0,2,$18,5,2,$38 da.ds.WalkAMRO WALKAFC fc_WalkADr,fc_LegStep WALKAOB 0,2,$10,11,2,$20 WALKAOB 0,1,$10,11,1,$21 WALKAOB 0,0,$10,10,0,$22 WALKAOB 0,1,$10,10,1,$23 WALKAOB 0,2,$10,11,2,$24 WALKAOB 0,1,$10,11,1,$25 WALKAOB 0,0,$10,10,0,$26 WALKAOB 0,1,$10,10,1,$27 WALKAOB 0,2,$10,11,2,$20 WALKAOB 0,1,$10,11,1,$21 WALKAOB 0,0,$10,10,0,$22 WALKAOB 0,1,$10,10,1,$23 WALKAOB 0,2,$10,11,2,$24 WALKAOB 0,1,$10,11,1,$25 WALKAOB 0,0,$10,10,0,$26 WALKAOB 0,1,$10,10,1,$27 da.ds.WalkAMLO WALKAFC fc_WalkADr,fc_LegStep WALKAOB 0,2,$18,10,2,$28 WALKAOB 0,1,$18,10,1,$29 WALKAOB 0,0,$18,1,0,$2a WALKAOB 0,1,$18,6,1,$2b WALKAOB 0,2,$18,10,2,$2c WALKAOB 0,1,$18,10,1,$2d WALKAOB 0,0,$18,1,0,$2e WALKAOB 0,1,$18,6,1,$2f WALKAOB 0,2,$18,10,2,$28 WALKAOB 0,1,$18,10,1,$29 WALKAOB 0,0,$18,1,0,$2a WALKAOB 0,1,$18,6,1,$2b WALKAOB 0,2,$18,10,2,$2c WALKAOB 0,1,$18,10,1,$2d WALKAOB 0,0,$18,1,0,$2e WALKAOB 0,1,$18,6,1,$2f da.ds.WalkATRO WALKAFC fc_WalkADr,fc_LegTurn WALKAOB 0,2,$18,5,2,$38 WALKAOB 0,2,$17,8,2,$37 WALKAOB 0,2,$16,5,2,$36 WALKAOB 0,2,$15,3,2,$35 WALKAOB 0,2,$14,4,2,$34 WALKAOB 0,2,$13,2,2,$33 WALKAOB 0,2,$12,2,2,$32 WALKAOB 0,2,$11,7,2,$31 WALKAOB 0,2,$10,12,2,$30 da.ds.WalkATLO WALKAFC fc_WalkADr,fc_LegTurn WALKAOB 0,2,$10,12,2,$30 WALKAOB 0,2,$11,7,2,$31 WALKAOB 0,2,$12,2,2,$32 WALKAOB 0,2,$13,2,2,$33 WALKAOB 0,2,$14,4,2,$34 WALKAOB 0,2,$15,3,2,$35 WALKAOB 0,2,$16,5,2,$36 WALKAOB 0,2,$17,8,2,$37 WALKAOB 0,2,$18,5,2,$38 WALKABX MACRO DC.W \1+WALKADR_X0,\2+WALKADR_Y0 DC.W \3+WALKADR_X0,\4+WALKADR_Y0 ENDM da.ds.WalkABox DC.W 2 WALKABX 0,0,63,23 WALKABX 8,24,55,47 ******************************************************************************* * DroidWays ******************************************************************************* DroidWay.Debil DC.B gam_di_Right,gam_di_No,gam_di_Right DC.B gam_di_Left,gam_di_Left,gam_di_No DC.B gam_di_Right,gam_di_Right,gam_di_Left DC.B gam_di_Left,gam_di_Left,gam_di_Right DC.B gam_di_Ext DroidWay.Ace DC.B gam_di_Right,gam_di_Right,gam_di_Right DC.B gam_di_Right,gam_di_Left,gam_di_Left DC.B gam_di_Left,gam_di_Left DC.B gam_di_Ext EVEN ******************************************************************************* * ToolShapes ******************************************************************************* ******************************************************************************* * GameData to Save ******************************************************************************* ******************************************************************************* * Droids ******************************************************************************* Boss DC.B dr_ty_BossE,0,0,255 Type,Field,K,Energy DroidsA DC.B dr_ty_MineA,44,6,255 DC.B dr_ty_MineA,0,6,255 A-0 DC.B dr_ty_HD3,6,2,255 DC.B dr_ty_HD3,6,10,255 DC.B dr_ty_MineA,16,7,255 DC.B dr_ty_MineB,16,11,255 DC.B dr_ty_MineA,17,7,255 DC.B dr_ty_MineB,18,11,255 DC.B dr_ty_Fly,20,5,255 A-1 DC.B dr_ty_HD3,21,7,255 DC.B dr_ty_HD3,22,1,255 DC.B dr_ty_HD3,22,5,255 DC.B dr_ty_RCtrl,25,6,255 DC.B dr_ty_HD3,26,1,255 DC.B dr_ty_HD3,26,10,255 DC.B dr_ty_HD3,30,2,255 DC.B dr_ty_Radar,31,1,255 DC.B dr_ty_MineB,32,2,255 DC.B dr_ty_Fly,34,0,255 DC.B dr_ty_Fly,35,7,255 DC.B dr_ty_Radar,36,1,255 DC.B dr_ty_HD3,37,6,255 DC.B dr_ty_HD3,37,11,255 DC.B dr_ty_MineA,38,6,255 DC.B dr_ty_MineA,38,8,255 DC.B dr_ty_MineB,39,6,255 DC.B dr_ty_MineB,39,8,255 DC.B dr_ty_Fly,40,5,255 A-2 DC.B dr_ty_MineB,41,3,255 DC.B dr_ty_WalkA,41,6,255 DC.B dr_ty_HD3,41,11,255 DC.B dr_ty_Fly,42,9,255 DC.B dr_ty_Fly,45,8,255 DC.B dr_ty_Fly,46,0,255 DC.B dr_ty_HD3,46,8,255 DC.B dr_ty_RCtrl,50,5,255 DC.B dr_ty_MineB,51,7,255 DC.B dr_ty_HD3,51,8,255 DC.B dr_ty_MineB,52,2,255 DC.B dr_ty_MineA,53,3,255 DC.B dr_ty_MineB,53,5,255 DC.B dr_ty_MineB,54,1,255 DC.B dr_ty_MineB,54,5,255 DC.B dr_ty_Fly,55,6,255 DC.B dr_ty_HD3,56,5,255 DC.B dr_ty_WalkA,56,8,255 DC.B dr_ty_Radar,57,7,255 DC.B dr_ty_Fly,59,10,255 DC.B dr_ty_Fly,61,2,255 A-3 DC.B dr_ty_MineB,61,4,255 DC.B dr_ty_RCtrl,62,5,255 DC.B dr_ty_RCtrl,65,1,255 DC.B dr_ty_MineA,66,1,255 DC.B dr_ty_MineA,66,5,255 DC.B dr_ty_MineA,66,9,255 DC.B dr_ty_Fly,67,1,255 DC.B dr_ty_RCtrl,67,9,255 DC.B dr_ty_MineA,70,0,255 DC.B dr_ty_HD3,71,0,255 DC.B dr_ty_HD3,72,0,255 DC.B dr_ty_Fly,72,8,255 DC.B dr_ty_WalkA,76,0,255 DC.B dr_ty_WalkA,76,11,255 DC.B dr_ty_HD3,77,6,255 DC.B dr_ty_Fly,78,4,255 DC.B dr_ty_MineA,79,7,255 DC.B dr_ty_MineB,80,5,255 A-4 DC.B dr_ty_WalkA,81,4,255 DC.B dr_ty_WalkA,85,9,255 DC.B dr_ty_MineA,86,0,255 DC.B dr_ty_MineB,86,9,255 DC.B dr_ty_MineB,90,4,255 DC.B dr_ty_HD3,95,1,255 DC.B dr_ty_HD3,96,2,255 DC.B dr_ty_WalkA,96,4,255 DC.B dr_ty_EndOfList,0,0,0 End Of List ******************************************************************************* * Tools ******************************************************************************* ToolShape_00 DC.L ToolObj_00 DC.L ToolObj_00 DC.L 0 DC.L 0 DC.L 0 DC.L 0 DC.L ToolName_00 ToolName_00 DC.B 'TOOL 0',0 EVEN ToolShape_01 DC.L ToolObj_00 DC.L ToolObj_00 DC.L 0 DC.L 0 DC.L 0 DC.L 0 DC.L ToolName_01 ToolName_01 DC.B 'TOOL 1',0 EVEN ToolShape_02 DC.L ToolObj_00 DC.L ToolObj_00 DC.L 0 DC.L 0 DC.L 0 DC.L 0 DC.L ToolName_02 ToolName_02 DC.B 'TOOL 2',0 EVEN Tools DC.L Tool_00,Tool_01,Tool_02,Tool_03 DC.L 0 Tool_00 DC.L ToolShape_00 DC.B -1,0,0,0,0,0 Tool_01 DC.L ToolShape_00 DC.B -1,0,0,0,0,0 Tool_02 DC.L ToolShape_01 DC.B -1,0,0,0,0,0 Tool_03 DC.L ToolShape_02 DC.B -1,0,0,0,0,0 GameCodeSize EQU *-GameCode PRINTT '** Game Code size :' PRINTV GameCodeSize IF GameCodeSize>MaxGameCodeSize PRINTT '****************************************' PRINTT '* GameCode too long ! *' PRINTT '****************************************' ENDIF END ******************************************************************************* * TrashCan *******************************************************************************