**************************************************************************** **************************************************************************** ** ** Platinum (Level Definitions) ** ** This software is in the public domain. There is no warranty. ** ** by Patrick Davidson (pad@calc.org, http://pad.calc.org/) ** ** Last updated August 2, 2001 ** **************************************************************************** **************************************************************************** ********************************************* LEVEL TABLE * * This is the table of levels used to decode level number bytes, as is * described in 'LEVELS.ASM'. The LEVEL macro adds one entry to the table * (as a word offset from the start of the table), sets a symbol of the level * name to the current level number, then increments the number. * ******** Level_Table: LEVEL Level_1_Standard LEVEL Level_2_Standard LEVEL Level_3_Boss LEVEL Platinum_Shop LEVEL Level_4_Standard LEVEL Level_5_Standard LEVEL Level_Twirl_1 LEVEL Level_6_Boss LEVEL Triangles LEVEL Platinum_Shop LEVEL Level_4a_Standard LEVEL Level_5a_Standard LEVEL Level_Twirl_2 LEVEL Level_6a_Boss LEVEL Triangles LEVEL Platinum_Shop LEVEL Level_7_Standard LEVEL Level_8_Standard LEVEL Level_9_Boss LEVEL Triangles LEVEL Platinum_Shop LEVEL Level_10_Standard LEVEL Level_11_Standard LEVEL Level_12_2Boss LEVEL Platinum_Shop LEVEL Level_13_Standard LEVEL Level_14_Standard LEVEL Level_15_3Boss LEVEL Platinum_Shop LEVEL Level_17_Standard LEVEL Level_18_Standard LEVEL Level_19_Boss LEVEL Platinum_Shop LEVEL Level_20_Standard LEVEL Level_21_Standard LEVEL Level_22_3Boss LEVEL Platinum_Shop LEVEL Level_Swoop LEVEL Level_25_SuperBoss_Hard LEVEL Platinum_Shop LEVEL Wheel_Loop_5 LEVEL Wheel_Loop_8 LEVEL Wheel_Loop_10 LEVEL Wheel_Loop_16 LEVEL MWheel_Loop_20 LEVEL Platinum_Shop LEVEL Level_33_RandX LEVEL Level_34_RandX LEVEL Level_35_RandX LEVEL Platinum_Shop LEVEL Level_26_Operators,LVL_O LEVEL Level_27_Operators_3Boss,LVL_O3 LEVEL Level_28_Operators_5Boss,LVL_O5 LEVEL Platinum_Shop LEVEL Level_Swoop LEVEL MegaBoss LEVEL Game_Finished ******************************************** LEVEL LOADERS * * These are the actual level loaders called to initialize each level. The * loaders for fake levels (the shop, etc.) are contained in their specific * files. For the levels specified by data, use the following macros: * * "LVL n" at the start of a level with n entries * "LVLDB n,db" at the start of a level with n entries, using data bank db * for coordinate data * * "LENTRY n,type" to insert n enemies of type type * * "LWHEEL n,sep" wheel level, n wheels, separated by sep pixels * * "LMWHEEEL n,sep" as above, but with wheels in larger route * ******** Level_Twirl_1: lea Enemy_10(pc),a0 moveq #15,d0 bsr Load_Enemy_Info move.w #Figure_1_Start-C_FIGURE,d1 moveq #14,d0 moveq #-5,d2 moveq #65,d3 moveq #1,d4 moveq #19,d5 bra Prepare_Figure_Enemies Level_Twirl_2: lea Enemy_10(pc),a0 moveq #15,d0 bsr Load_Enemy_Info move.w #Figure_2_Start-C_FIGURE,d1 moveq #14,d0 moveq #-5,d2 moveq #65,d3 moveq #1,d4 moveq #19,d5 bra Prepare_Figure_Enemies Level_1_Standard: lea standard_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_1(pc),a0 moveq #20,d0 bsr Load_Enemy_Info moveq #19,d0 moveq #14,d4 bra Prepare_U_Entry Level_2_Standard: lea swing_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_1(pc),a0 moveq #20,d0 bsr Load_Enemy_Info moveq #19,d0 moveq #14,d4 bra Prepare_U_Entry Level_3_Boss: lea low_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_1(pc),a0 moveq #10,d0 bsr Load_Enemy_Info lea E_Boss1(pc),a0 moveq #1,d0 bsr Load_Enemy_Info moveq #9,d0 moveq #14,d4 bra Prepare_U_Entry Level_4_Standard: lea standard_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_1b(pc),a0 moveq #10,d0 bsr Load_Enemy_Info lea Enemy_2(pc),a0 moveq #10,d0 bsr Load_Enemy_Info moveq #19,d0 bra Prepare_Simple_Entry Level_5_Standard: lea swing_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_2(pc),a0 moveq #20,d0 bsr Load_Enemy_Info moveq #19,d0 bra Prepare_Simple_Entry Level_6_Boss: lea low_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_2(pc),a0 moveq #10,d0 bsr Load_Enemy_Info lea E_Boss1(pc),a0 moveq #1,d0 bsr Load_Enemy_Info moveq #9,d0 bra Prepare_Simple_Entry Level_4a_Standard: lea standard_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_1(pc),a0 moveq #10,d0 bsr Load_Enemy_Info lea Enemy_9(pc),a0 moveq #10,d0 bsr Load_Enemy_Info moveq #19,d0 moveq #12,d4 bra Prepare_U_Entry Level_5a_Standard: lea swing_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_9(pc),a0 moveq #20,d0 bsr Load_Enemy_Info moveq #19,d0 moveq #12,d4 bra Prepare_U_Entry Level_6a_Boss: lea low_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_9(pc),a0 moveq #10,d0 bsr Load_Enemy_Info lea E_Boss1(pc),a0 moveq #1,d0 bsr Load_Enemy_Info moveq #9,d0 moveq #12,d4 bra Prepare_U_Entry Level_7_Standard: lea standard_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_5(pc),a0 moveq #15,d0 bsr Load_Enemy_Info moveq #14,d0 moveq #0,d3 bra Prepare_Plain_Entry Level_8_Standard: lea swing_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_5(pc),a0 moveq #20,d0 bsr Load_Enemy_Info moveq #19,d0 moveq #-5,d3 bra Prepare_Plain_Entry Level_9_Boss: lea low_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_5(pc),a0 moveq #10,d0 bsr Load_Enemy_Info lea E_Boss1(pc),a0 moveq #1,d0 bsr Load_Enemy_Info moveq #9,d0 moveq #-5,d3 bra Prepare_Plain_Entry Level_10_Standard: lea standard_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_3(pc),a0 moveq #15,d0 bsr Load_Enemy_Info moveq #14,d0 bra Prepare_Spin_Entry Level_11_Standard: lea swing_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_3(pc),a0 moveq #20,d0 bsr Load_Enemy_Info moveq #19,d0 bra Prepare_Spin_Entry Level_12_2Boss: lea low_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_3(pc),a0 moveq #10,d0 bsr Load_Enemy_Info lea E_Boss1(pc),a0 moveq #1,d0 bsr Load_Enemy_Info lea E_Boss2(pc),a0 moveq #1,d0 bsr Load_Enemy_Info moveq #9,d0 bra Prepare_Spin_Entry Level_13_Standard: lea standard_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_3(pc),a0 moveq #10,d0 bsr Load_Enemy_Info lea Enemy_4(pc),a0 moveq #10,d0 bsr Load_Enemy_Info moveq #19,d0 bra Prepare_Spin_Entry Level_14_Standard: lea swing_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_4(pc),a0 moveq #20,d0 bsr Load_Enemy_Info moveq #19,d0 bra Prepare_Spin_Entry Level_15_3Boss: lea low_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_4(pc),a0 moveq #10,d0 bsr Load_Enemy_Info lea E_Boss2(pc),a0 moveq #3,d0 bsr Load_Enemy_Info move.w #-210,-e_size+e_data(a1) move.w #-270,-(2*e_size)+e_data(a1) moveq #9,d0 bra Prepare_Spin_Entry Level_20_Standard: lea standard_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_3(pc),a0 moveq #10,d0 bsr Load_Enemy_Info lea Enemy_7(pc),a0 moveq #10,d0 bsr Load_Enemy_Info moveq #19,d0 bra Prepare_Spin_Entry Level_21_Standard: lea swing_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_7(pc),a0 moveq #20,d0 bsr Load_Enemy_Info moveq #19,d0 bra Prepare_Spin_Entry Level_22_3Boss: lea low_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_7(pc),a0 moveq #10,d0 bsr Load_Enemy_Info lea E_Boss2(pc),a0 moveq #3,d0 bsr Load_Enemy_Info move.w #-210,-e_size+e_data(a1) move.w #-270,-(2*e_size)+e_data(a1) moveq #9,d0 bra Prepare_Spin_Entry Level_17_Standard: lea standard_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_6(pc),a0 moveq #20,d0 bsr Load_Enemy_Info moveq #19,d0 bra Prepare_Simple_Entry Level_18_Standard: lea swing_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_6(pc),a0 moveq #20,d0 bsr Load_Enemy_Info moveq #19,d0 bra Prepare_Simple_Entry Level_19_Boss: lea multi_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_6(pc),a0 moveq #24,d0 bsr Load_Enemy_Info lea E_Boss3(pc),a0 moveq #1,d0 bsr Load_Enemy_Info moveq #23,d0 bra Prepare_Simple_Entry Level_21_3Boss: lea low_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_7(pc),a0 moveq #10,d0 move.w #EDestruct_Solid-Destroy_Base,d6 bsr Load_Enemy_Info move.w #EDestruct_Normal-Destroy_Base,d6 lea E_Boss2(pc),a0 moveq #3,d0 bsr Load_Enemy_Info move.w #-210,-e_size+e_data(a1) move.w #-270,-(2*e_size)+e_data(a1) rts Level_25_SuperBoss_Hard: lea low_data_bank(pc),a4 bsr Install_Data_Bank lea Enemy_9(pc),a0 moveq #10,d0 bsr Load_Enemy_Info Level_25_SuperBoss: move.w #EDestruct_Boss-Destroy_Base,d6 lea E_fake(pc),a0 moveq #1,d0 bsr Load_Enemy_Info lea E_SupL(pc),a0 moveq #1,d0 bsr Load_Enemy_Info lea E_SupR(pc),a0 moveq #1,d0 bsr Load_Enemy_Info subq.w #1,enemies_remaining(a5) moveq #9,d0 moveq #12,d4 bra Prepare_U_Entry Level_26_Operators: move.b #64,smct+1 lea Enemy_0(pc),a0 moveq #12,d0 bra Load_Enemy_Info Level_27_Operators_3Boss: lea Enemy_0(pc),a0 moveq #12,d0 bsr Load_Enemy_Info lea E_Boss2(pc),a0 moveq #3,d0 bsr Load_Enemy_Info move.w #-180,-e_size+e_data(a1) move.w #-120,-(2*e_size)+e_data(a1) rts Level_28_Operators_5Boss: lea Enemy_0(pc),a0 moveq #20,d0 bsr Load_Enemy_Info lea E_Boss2(pc),a0 moveq #5,d0 bsr Load_Enemy_Info move.w #-210,-e_size+e_data(a1) move.w #-240,-(2*e_size)+e_data(a1) move.w #-180,-(3*e_size)+e_data(a1) move.w #-120,-(4*e_size)+e_data(a1) rts Level_29_SuperBoss: lea E_fake(pc),a0 moveq #1,d0 bsr Load_Enemy_Info lea E_SupL(pc),a0 moveq #1,d0 bsr Load_Enemy_Info lea E_SupR(pc),a0 L29_Common: moveq #1,d0 move.w #EDestruct_Boss-Destroy_Base,d6 bsr Load_Enemy_Info subq.w #1,enemies_remaining(a5) lea Enemy_0(pc),a0 moveq #22,d0 bra Load_Enemy_Info Level_33_RandX: move.b #98,smct+1 lea E_X(pc),a0 moveq #12,d0 bra Load_Enemy_Info Level_34_RandX: lea E_X(pc),a0 moveq #12,d0 bsr Load_Enemy_Info lea E_Boss2(pc),a0 moveq #3,d0 bsr Load_Enemy_Info move.w #-180,-e_size+e_data(a1) move.w #-120,-(2*e_size)+e_data(a1) rts Level_35_RandX: lea E_X(pc),a0 moveq #20,d0 bsr Load_Enemy_Info lea E_Boss2(pc),a0 moveq #5,d0 bsr Load_Enemy_Info move.w #-210,-e_size+e_data(a1) move.w #-240,-(2*e_size)+e_data(a1) move.w #-180,-(3*e_size)+e_data(a1) move.w #-120,-(4*e_size)+e_data(a1) rts MWheel_Loop_20: moveq #20,d1 moveq #18,d2 move.w #MWHEEL_WAIT,d4 bra.s Wheel_Loader_Init Wheel_Loop_16: moveq #16,d1 moveq #10,d2 bra.s Wheel_Loader_Select Wheel_Loop_10: moveq #10,d1 moveq #16,d2 bra.s Wheel_Loader_Select Wheel_Loop_8: moveq #8,d1 moveq #20,d2 bra.s Wheel_Loader_Select Wheel_Loop_5: moveq #5,d1 ; D1 = number of wheels moveq #32,d2 ; D2 = space between wheels Wheel_Loader_Select: move.w #WHEEL_WAIT,d4 Wheel_Loader_Init: move.w d1,enemies_remaining(a5) subq.w #1,d1 moveq #1,d0 moveq #40,d3 moveq #-128,d5 Wheel_Loader: move.w d4,(a1)+ ; Initial type move.w d3,(a1)+ ; Enemy strength move.w d5,(a1)+ ; Dummy X-coord move.w #15,(a1)+ ; Width move.w d5,(A1)+ ; Dummy X-coord move.w #15,(A1)+ ; Height move.w #in_Wheel_1,(a1)+ ; Image move.w d0,(a1)+ ; Time counter move.w d6,(a1)+ add.w d2,d0 ; Increment staggering level addq.w #6,a1 dbra d1,Wheel_Loader rts MegaBoss: lea E_MBC(pc),a0 moveq #1,d0 move.w #EDestruct_MBC-Destroy_Base,d6 bsr Load_Enemy_Info lea E_MBL(pc),a0 moveq #1,d0 move.w #EDestruct_MBL-Destroy_Base,d6 bsr Load_Enemy_Info lea E_MBR(pc),a0 moveq #1,d0 move.w #EDestruct_MBR-Destroy_Base,d6 bra Load_Enemy_Info Level_Swoop: moveq #15,d0 lea E_Swoop(pc),a0 bra Load_Enemy_Info Triangles: move.w level_number(a5),d0 lea E_Tri(pc),a0 bra Load_Enemy_Info ******************************************** COORDINATE DATA BANKS standard_data_bank: dc.w 70,20,90,20,110,20,130,20,150,20 dc.w 70,35,90,35,110,35,130,35,150,35 dc.w 70,50,90,50,110,50,130,50,150,50 dc.w 70,65,90,65,110,65,130,65,150,65 swing_data_bank: dc.w 67,20,87,20,107,20,127,20,147,20 dc.w 73,35,93,35,113,35,133,35,153,35 dc.w 67,50,87,50,107,50,127,50,147,50 swing_data_bank_spread: dc.w 73,65,93,65,113,65,133,65,153,65 dc.w 63,20,83,20,103,20,123,20,143,20 dc.w 73,35,93,35,113,35,133,35,153,35 dc.w 63,50,83,50,103,50,123,50,143,50 low_data_bank: dc.w 70,54,90,54,110,54,130,54,150,54 dc.w 70,69,90,69,110,69,130,69,150,69 multi_data_bank: dc.w 64,52,76,52,88,52,100,52,112,52,124,52,136,52,148,52 dc.w 64,61,76,61,88,61,100,61,112,61,124,61,136,61,148,61 dc.w 64,70,76,70,88,70,100,70,112,70,124,70,136,70,148,70 ******************************************** ENEMY DATA BLOCKS ;type, strength, width, height, image, data Enemy_1: dc.w U_ENTER,3,9,8,in_Enemy_1,FORM_STANDARD Enemy_1b: dc.w SIMPLE_ENTER,3,9,8,in_Enemy_1,FORM_STANDARD Enemy_2: dc.w SIMPLE_ENTER,4,11,8,in_Enemy_2,FORM_STANDARD Enemy_9: dc.w U_ENTER,6,6,5,in_Enemy_8,FORM_MODIFIED Enemy_5: dc.w PLAIN_ENTER,6,7,13,in_Enemy_5,FORM_ARROW Enemy_3: dc.w SPIN_ENTRY,8,10,10,in_Enemy3_1,FORM_SPIN1,82 Enemy_4: dc.w SPIN_ENTRY,12,10,10,in_Enemy4_1,FORM_SPIN2,82 Enemy_7: dc.w SPIN_ENTRY,20,10,10,in_Enemy7_1,FORM_SPIN3,42 Enemy_6: dc.w SIMPLE_ENTER,16,7,7,in_Enemy_6,FORM_CROSS Enemy_0: dc.w OPERATOR_LOCATING,30,7,7,in_Enemy_0_5,-1 E_Tri: dc.w TRIANGLE,16,13,11,in_Triangle,$101 E_X: dc.w RANDOM_X,24,9,7,in_E_X,$101 E_Boss1: dc.w BOSS,40,17,14,in_Boss_1,-90 ; Standard boss E_Boss2: dc.w BOSS,50,17,14,in_Boss_2,-150 ; Second (fuzzy center) boss E_Boss3: dc.w BOSS,100,17,9,in_Boss_X,-100 ; Double-X Boss E_SupL: dc.w SUPERBOSS_L,150,17,11,in_SuperBoss_Left,-5 E_SupR: dc.w SUPERBOSS_R,150,16,11,in_SuperBoss_Right,-5 E_fake: dc.w FAKE1,32767,33,-100,in_fake,-5 ; Fake enemy for attaching E_Swoop: dc.w SWOOP,40,16,10,in_Swoop1 E_MBL: dc.w MEGABOSS_L,1,17,17,in_MBL,1 E_MBC: dc.w MEGABOSS_C,700,17,17,in_MBC,1 E_MBR: dc.w MEGABOSS_R,1,17,17,in_MBR,1 Enemy_10: dc.w FIGURE,8,11,11,in_Enemy10_1,0,90 ********************************************* MOVEMENT FIGURES Figure_2_Start: dc.b 0,0 dc.w 40 dc.b 0,4 Figure_2_Loop: dc.w 20 dc.b 0,4 dc.w 12 dc.b 2,2 dc.w 20 dc.b 4,0 dc.w 64 dc.b 4,-2 dc.w 20 dc.b 4,0 dc.w 12 dc.b 2,2 dc.w 20 dc.b 0,4 dc.w 12 dc.b -2,2 dc.w 20 dc.b -4,0 dc.w 64 dc.b -4,-2 dc.w 20 dc.b -4,0 dc.w 12 dc.b -2,2 dc.w 0 dc.w Figure_2_Loop-2-C_FIGURE Figure_1_Start dc.b 0,0 dc.w 40 dc.b 0,4 Figure_1_Loop: dc.w 20 dc.b 0,4 dc.w 10 dc.b 2,2 dc.w 106 dc.b 4,0 dc.w 10 dc.b 2,-2 dc.w 20 dc.b 0,-4 dc.w 10 dc.b -2,-2 dc.w 106 dc.b -4,0 dc.w 10 dc.b -2,2 dc.w 0 dc.w Figure_1_Loop-2-C_FIGURE EVEN