;ùúùúap¥¥¥¥¥¥¥¥¥main_debugoff main_sysinfooff main_reqinfooff main_endinfooff main_disabledos main_playeroff main_meteroff ;mnu_nowait ; Skip the "waiting for opp.." ;mnu_nocode ; include "demo:System/Main_V3.82.S" mnu_start: bsr.w mnu_saveframe bsr.w mnu_copycredz bsr.w mnu_setscreen move.l a7,mnu_mainstack bsr.w mnu_viewcredz bsr.w mnu_cls IFND mnu_nocode bsr.w mnu_protection ENDC mnu_loop: lea mnu_mainmenu,a0 bsr.w mnu_domenu lea mnu_quitmenu,a0 bsr.w mnu_domenu bra.w mnu_loop mnu_exit: move.l mnu_mainstack,a7 bsr.w mnu_clearscreen rts mnu_protection: .retry: moveq.l #0,d0 bsr.w mnu_getrnd move.l d0,d2 bsr.w mnu_getrnd move.l d0,d1 bsr.w mnu_getrnd lsr.w #4,d2 lsr.w #2,d1 divu #7,d0 swap.w d0 ; d0=Page number divu #50,d1 swap.w d1 addq.w #1,d1 ; d1=Row number divu #17,d2 swap.w d2 addq.w #1,d2 ; d2=Column number movem.l d0-d2,-(a7) add.w #65,d0 move.b d0,mnu_tableptr add.w #64,d2 move.b d2,mnu_columnptr move.w d1,d2 ext.l d1 divu #10,d1 add.w #48,d1 move.b d1,mnu_rowptr swap.w d1 add.w #48,d1 move.b d1,mnu_rowptr+1 lea mnu_protecttext,a0 moveq.l #4,d0 moveq.l #60,d1 bsr.w mnu_printxy clr.w mnu_row clr.w mnu_spread move.w #1,mnu_items move.w #180,mnu_cury moveq.l #0,d7 .print: move.l d7,-(a7) lea mnu_numberptr,a0 moveq.l #24,d0 move.l #180,d1 bsr.w mnu_printxy move.l (a7)+,d7 .inploop: move.l d7,-(a7) move.w #24,mnu_curx add.w d7,mnu_curx add.w d7,mnu_curx bsr.w mnu_docursor bsr.w key_readkey move.l (a7)+,d7 tst.b d0 beq.s .inploop lea mnu_numberptr,a0 add.l d7,a0 tst.w d7 beq.s .skipback cmp.b #8,d0 bne.s .skipback ; back space move.b #32,(a0) subq.w #1,d7 bra.s .print .skipback: cmp.w #3,d7 bne.s .noenter cmp.w #13,d0 beq.s .enter cmp.w #32,d0 bne.s .noenter .enter: bra.s .exit .noenter: cmp.w #3,d7 beq.s .error cmp.b #'0',d0 blo.s .error cmp.b #'9',d0 bhi.s .error move.b d0,(a0) addq.w #1,d7 bra.w .print .error: move.l #mnu_errcursanim,mnu_frameptr bra.w .inploop .exit: movem.l (a7)+,d0-d2 bsr.w mnu_decoder moveq.l #0,d1 moveq.l #0,d2 move.b mnu_numberptr,d1 sub.w #48,d1 mulu #10,d1 move.b mnu_numberptr+1,d2 sub.w #48,d2 add.w d2,d1 mulu #10,d1 move.b mnu_numberptr+2,d2 sub.w #48,d2 add.w d2,d1 cmp.w d1,d0 beq.s .ok move.l #mnu_errcursanim,mnu_frameptr move.b #32,mnu_numberptr move.b #32,mnu_numberptr+1 move.b #32,mnu_numberptr+2 subq.w #1,.tries beq.s .quit bra.w .retry .ok: rts .quit: bsr.w mnu_cls moveq.l #4,d0 moveq.l #110,d1 lea mnu_dontbelong,a0 bsr.w mnu_printxy move.l #100,timer .w8loop: tst.l timer bne.s .w8loop jmp mnu_exit .tries: dc.w 3 mnu_decoder:;in: d0.l=Table ; d1.l=Row ; d2.l=Column moveq.l #0,d5 mulu #6*4,d0 add.l #.variables,d0 lea .dividers(pc),a1 move.l d0,a0 ; a0=Decode table ptr move.l d1,d6 ; d6=Row move.l d2,d7 ; d7=Column move.w d6,d0 move.w d7,d1 mulu d0,d0 mulu d1,d1 mulu d0,d1 ; d1=c*c*r*r move.l d1,d0 mulu.l (a0)+,d0 ; d0=c*c*r*r*A mulu.l d0,d0:d1 ; d0:d1=c*c*r*r move.w d6,d2 move.w d7,d3 move.w d3,d4 mulu d3,d3 mulu d4,d3 ; d3=c*c*c move.l (a0)+,d4 mulu d4,d2 ; d2=r*B mulu d3,d2 ; d2=c*c*c*r*B add.l d2,d1 ; Add lower lw addx.l d5,d0 ; Add X bit move.w d6,d2 move.w d7,d3 mulu d2,d3 ; d3=r*c move.l (a0)+,d4 mulu d4,d3 ; d3=r*c*C add.l d3,d1 ; Add lower lw addx.l d5,d0 ; Add X bit move.l (a0)+,d4 mulu d4,d6 ; d6=r*D add.l d6,d1 ; Add lower lw addx.l d5,d0 ; Add X bit move.l (a0)+,d4 mulu d4,d7 ; d7=c*E add.l d7,d1 ; Add lower lw addx.l d5,d0 ; Add X bit add.l (a0)+,d1 ; Add lower lw (F) addx.l d5,d0 ; Add X bit divu.l (a1)+,d0:d1 divu (a1)+,d0 clr.w d0 swap.w d0 neg.l d0 add.l (a1),d0 rts ; a b c d e f .variables: dc.l 54,97,2,94,66,23 ; Table A dc.l 61,78,247,622,59,324 ; Table B dc.l 34,76,99,168,43,66 ; Table C dc.l 63,67,422,132,66,87 ; Table D dc.l 43,49,47,84,51,9 ; Table E dc.l 34,97,20,61,74,33 ; Table F dc.l 74,54,61,62,96,147 ; Table G .dividers: dc.l 643*2000 dc.w 643 dc.l 999 mnu_getrnd: move.w $dff00a,d0 add.w $dff00c,d0 add.w $dff008,d0 add.w $dff012,d0 add.w $dff014,d0 add.w $dff016,d0 add.w $dff018,d0 add.w $dff01a,d0 add.w $dff002,d0 add.w $dff004,d0 add.w $dff006,d0 rts mnu_saveframe: lea mnu_frame,a0 lea mnu_savedcredz,a1 move.l #10*256*3-1,d0 .loop: move.l (a0)+,(a1)+ dbra d0,.loop lea mnu_frame+40*32+4,a0 moveq.l #8,d3 moveq.l #0,d0 move.w #191,d1 .loop1: moveq.l #7,d2 .loop2: move.l d0,(a0)+ move.l d0,40*256-4(a0) move.l d0,40*2*256-4(a0) dbra d2,.loop2 add.l d3,a0 dbra d1,.loop1 rts mnu_viewcredz: clr.l counter bsr.w mnu_copycredz .w8key: bsr.w key_readkey cmp.l #50*10,counter beq.s .exit tst.w d0 beq.s .w8key .exit: rts mnu_copycredz: lea mnu_savedcredz,a0 lea mnu_morescreen+40*256*3,a1 move.w #10*256-1,d0 .loop: move.l (a0)+,(a1)+ move.l 40*256-4(a0),40*256-4(a1) move.l 2*40*256-4(a0),2*40*256-4(a1) dbra d0,.loop rts mnu_clearscreen:bsr.w mnu_fadeout clr.l main_vblint .loop1: tst.w mnu_bltbusy bne.s .loop1 bsr.w key_kbdexit clr.l main_bltint macro_sync move.w #$7de0,$dff096 rts mnu_setscreen: bsr.w mnu_init macro_sync move.w #$7de0,$dff096 move.w #$8200!%110000000,$dff096 move.l #mnu_copper,$dff080 move.w #0,$dff088 bsr.w key_kbdinit move.l #mnu_vblint,main_vblint bsr.w mnu_fadein rts mnu_vblint: bsr.w mnu_movescreen bsr.w mnu_dofire bsr.w key_kbdlevel3 bsr.w mnu_animcursor bsr.w mnu_plot rts mnu_init: bsr.w mnu_initrnd ; Uses palette buffer bsr.w mnu_createpalette tst.w .cp bne.s .skipfs lea mnu_screen,a0 lea mnu_screen+40*256,a1 lea mnu_screen+40*256*2,a2 lea mnu_screen+40*256*3,a3 move.w #40*256/4-1,d1 .fsloop: move.l (a1),d0 move.l d0,(a2)+ move.l d0,(a3)+ move.l (a0)+,(a1)+ dbra d1,.fsloop .skipfs: st.b .cp ;-------------------------------------------------------------- Clear screen -- lea mnu_morescreen,a0 move.l #40*256*3/16-1,d0 moveq.l #0,d1 .clrloop: REPT 4 move.l d1,(a0)+ ENDR dbra d0,.clrloop bsr.w mnu_cls ;--------------------------------------------------------------- Set bplptrs -- lea mnu_bplptrs+2,a0 move.l #mnu_screen,d0 moveq.l #0,d1 bsr.w .setbplptrs move.l #mnu_screen+40*256*2,d0 moveq.l #0,d1 bsr.w .setbplptrs move.l #mnu_morescreen,d0 moveq.l #5,d1 bsr.s .setbplptrs ;-------------------------------------------------------------- Init palette -- lea mnu_palette,a2 moveq.l #7,d0 ; #of banks-1 move.l #$01060000,d6 move.l #$01060200,d7 lea mnu_colptrs,a0 lea mnu_colptrs+33*4,a1 .bankloop: moveq.l #31,d1 ; d1=#of colour/bank move.l d6,(a0)+ move.l d7,(a1)+ move.w #$0180,d5 .colloop: ;move.l (a2)+,d2 clr.l d2 move.l d2,d3 and.l #$f0f0f0,d2 lsr.l #4,d2 ; x0x0x lsl.b #4,d2 ; x0xx0 lsl.w #4,d2 ; xxx00 lsr.l #8,d2 ; 00xxx and.l #$f0f0f,d3 lsl.b #4,d3 ; x0xx0 lsl.w #4,d3 ; xxx00 lsr.l #8,d3 ; 00xxx move.w d5,(a0)+ move.w d2,(a0)+ move.w d5,(a1)+ move.w d3,(a1)+ addq.w #2,d5 dbra d1,.colloop add.l #33*4,a0 add.l #33*4,a1 add.l #$2000,d6 add.l #$2000,d7 dbra d0,.bankloop move.l #-2,(a0) rts .setbplptrs: swap.w d0 move.w d0,(a0) swap.w d0 move.w d0,4(a0) addq.l #8,a0 add.l #40*256,d0 dbra d1,.setbplptrs rts .cp: dc.w 0 mnu_initrnd: lea mnu_palette+256,a1 move.w #255,d0 .parityloop: move.b d0,d1 and.w #$1,d1 move.b d0,d2 lsr.w #2,d2 and.w #$1,d2 eor.w d2,d1 move.b d0,d2 lsr.w #3,d2 and.w #$1,d2 eor.w d2,d1 move.b d0,d2 lsr.w #5,d2 and.w #$1,d2 eor.w d2,d1 move.b d1,-(a1) dbra d0,.parityloop move.l a1,a4 ; a4=Parity buffer move.l #'TBL!',d3 ; Random seed lea mnu_morescreen+6*40*256,a0 move.w #40*256+8192-1,d0 .loop: moveq.l #0,d1 ; d1=0 move.l d3,d2 ; d2=Random seed move.b d2,d1 and.b #$fe,d2 move.b (a4,d1.l),d1 or.b d1,d2 ror.w #1,d2 swap.w d2 move.b d2,d1 and.b #$fe,d2 move.b (a4,d1.l),d1 or.b d1,d2 ror.w #1,d2 move.l d2,d3 move.w d2,d1 lsr.w #8,d1 or.w d1,d2 move.l d2,d1 swap.w d1 or.w d1,d2 move.b d2,(a0)+ dbra d0,.loop rts mnu_movescreen: move.w mnu_screenpos,d0 and.w #$ff,d0 mulu #40,d0 add.l #mnu_screen,d0 lea mnu_bplptrs+2,a0 moveq.l #1,d1 .loop: swap.w d0 move.w d0,(a0) swap.w d0 move.w d0,4(a0) addq.l #8,a0 add.l #40*256*2,d0 dbra d1,.loop subq.w #1,mnu_screenpos rts mnu_createpalette: lea mnu_backpal,a0 lea mnu_firepal,a1 lea mnu_fontpal,a2 lea mnu_palette+256*4,a3 move.w #255,d0 .loop: move.w d0,d1 and.w #$e0,d1 beq.s .next lsr.w #5,d1 move.l (a2,d1.w*4),-(a3) bra.s .cont .next: move.w d0,d1 and.w #$1c,d1 beq.s .next1 lsr.w #2,d1 move.w d0,d2 and.w #$3,d2 moveq #0,d3 move.b 3(a1,d1.w*4),d3 moveq #0,d4 move.b 3(a1,d2.w*4),d4 add.w d4,d3 cmp.w #255,d3 ble.s .okmax1 move.b #255,d3 .okmax1 move.b d3,-(a3) moveq #0,d3 move.b 2(a1,d1.w*4),d3 moveq #0,d4 move.b 2(a1,d2.w*4),d4 add.w d4,d3 cmp.w #255,d3 ble.s .okmax2 move.b #255,d3 .okmax2 move.b d3,-(a3) moveq #0,d3 move.b 1(a1,d1.w*4),d3 moveq #0,d4 move.b 1(a1,d2.w*4),d4 add.w d4,d3 cmp.w #255,d3 ble.s .okmax3 move.b #255,d3 .okmax3 move.w d3,-(a3) move.l (a1,d1.w*4),-(a3) bra.s .cont .next1: move.w d0,d1 and.w #$3,d1 move.l (a0,d1.w*4),-(a3) .cont: dbra d0,.loop rts mnu_fadespeed = 16 mnu_fadein: clr.w mnu_fadefactor moveq.l #256/mnu_fadespeed-1,d0 .loop: move.l d0,-(a7) .wsync: cmp.b #$80,$dff006 blt.s .wsync cmp.b #$90,$dff006 bgt.s .wsync bsr.w mnu_fade .wsync2: cmp.b #$a0,$dff006 blt.s .wsync2 add.w #mnu_fadespeed,mnu_fadefactor move.l (a7)+,d0 dbra d0,.loop move.w #255,mnu_fadefactor .wsync3: cmp.b #$80,$dff006 blt.s .wsync3 cmp.b #$90,$dff006 bgt.s .wsync3 bsr.w mnu_fade rts mnu_fadeout: move.w #255,mnu_fadefactor moveq.l #256/mnu_fadespeed-1,d0 .loop: move.l d0,-(a7) bsr.w mnu_docursor .wsync: cmp.b #$80,$dff006 blt.s .wsync cmp.b #$90,$dff006 bgt.s .wsync bsr.w mnu_fade .wsync2: cmp.b #$a0,$dff006 blt.s .wsync2 sub.w #mnu_fadespeed,mnu_fadefactor move.l (a7)+,d0 dbra d0,.loop clr.w mnu_fadefactor .wsync3: cmp.b #$80,$dff006 blt.s .wsync3 cmp.b #$90,$dff006 bgt.s .wsync3 bsr.w mnu_fade rts mnu_fadefactor: dc.w 0 mnu_fade: lea mnu_palette,a2 moveq.l #7,d0 lea mnu_colptrs+2,a0 lea mnu_colptrs+2+33*4,a1 move.w mnu_fadefactor,d7 move.l #$f0f0f0,d5 move.l #$ff,d6 .bankloop: moveq.l #31,d1 addq.l #4,a0 addq.l #4,a1 .colloop: moveq.l #0,d4 move.l (a2)+,d2 REPT 2 move.l d2,d3 and.w d6,d3 mulu d7,d3 divu d6,d3 move.b d3,d4 ror.l #8,d4 ror.l #8,d2 ENDR move.l d2,d3 and.w d6,d3 mulu d7,d3 divu d6,d3 move.b d3,d4 ror.l #8,d4 ror.l #8,d4 move.l d4,d3 and.l d5,d3 lsr.l #4,d3 ; x0x0x lsl.b #4,d3 ; x0xx0 lsl.w #4,d3 ; xxx00 lsr.l #8,d3 ; 00xxx and.l #$f0f0f,d4 move.w d3,(a0) lsl.b #4,d4 ; x0xx0 lsl.w #4,d4 ; xxx00 lsr.l #8,d4 ; 00xxx addq.l #4,a0 move.w d4,(a1) addq.l #4,a1 dbra d1,.colloop add.l #33*4,a0 add.l #33*4,a1 dbra d0,.bankloop rts mnu_printxy:;in:a0,d0,d1=Text ptr,XPos,YPos (XPos in words YPos in pixels) lea mnu_font,a3 lea mnu_font+176*40,a4 lea mnu_font+176*40*2,a5 moveq.l #40,d7 moveq.l #20,d6 move.l #40*16,d5 mulu d7,d1 add.w d0,d1 add.l #mnu_morescreen+40*256*3,d1 move.l d1,a1 ; a1=Ptr move.l a1,a2 .loop: move.b (a0)+,d2 beq.s .exit move.l mnu_printdelay,timer .w8a: tst.l timer bne.s .w8a and.l #$ff,d2 sub.w #32,d2 bge.s .ok move.l a2,a1 add.l #20*40,a1 move.l a1,a2 bra.s .loop .ok: divu d6,d2 move.w d2,d3 ; d3=Y swap.w d2 ; d2=X mulu d5,d3 ; d3=Y Addy lsl.w #1,d2 add.w d2,d3 ; d3=Addy Offset move.l a1,a6 moveq.l #15,d2 .yloop: move.w (a3,d3.l),(a6) move.w (a4,d3.l),40*256(a6) move.w (a5,d3.l),40*256*2(a6) add.l d7,d3 add.l d7,a6 dbra d2,.yloop addq.l #2,a1 bra.s .loop .exit: rts mnu_dofire: btst.b #0,main_counter+3 beq.s .skip rts .skip: move.l #mnu_bltint,main_bltint move.w $dff006,d0 add.w d0,mnu_rnd tst.b $dff002 .w8: tst.w mnu_bltbusy bne.s .w8 btst.b #6,$dff002 bne.s .w8 lea mnu_sourceptrs,a0 move.l (a0),d0 move.l 4(a0),(a0) move.l 8(a0),4(a0) move.l d0,8(a0) lea $dff000,a6 st.b mnu_bltbusy move.w #$0040,$9c(a6) ; Clear BLT req move.w #$8040,$9a(a6) ; Enable BLT int move.w #$8200!%1000000,$96(a6) ; Enable blitter dma bsr.w mnu_bltint rts mnu_bltint: bsr.w .getrnd lea $dff000,a6 move.l .passptr,a0 move.l (a0),d0 beq.s .last addq.l #4,.passptr move.l d0,a0 jmp (a0) .last: move.w #$0040,$9a(a6) ; Disable BLT int move.w #%1000000,$96(a6) ; Disable blitter dma move.l #.passlist,.passptr clr.w mnu_bltbusy rts .getrnd: moveq.l #0,d0 move.w mnu_rnd,d0 and.l #8190,d0 add.l #mnu_morescreen+6*40*256,d0 move.l d0,mnu_rndptr addq.w #5,mnu_rnd rts .rnd: dc.w 0 .passptr: dc.l .passlist .passlist: dc.l mnu_pass1 dc.l mnu_pass2 dc.l mnu_pass3 dc.l 0 mnu_rnd: dc.w 0 mnu_bltbusy: dc.w 0 mnu_speed = 1 mnu_size = 256 mnu_subtract: dc.l 0 mnu_count: dc.w 0 mnu_pass1: clr.l mnu_subtract move.w mnu_count,d0 addq.w #1,mnu_count and.w #$3,d0 beq.s .l1 cmp.w #1,d0 bne.s .normal move.l #-2,mnu_subtract move.l #$fff80000,$40(a6) ; D=A+BC bra.s .cont .l1: move.l #$1ff80000,$40(a6) ; D=A+BC bra.s .cont .normal: move.l #$0ff80000,$40(a6) ; D=A+BC .cont: move.l #$ffffffff,$44(a6) ; Masks A move.l #$00000000,$60(a6) ; CB modulo move.l #$00000000,$64(a6) ; AD modulo move.l #mnu_morescreen+mnu_speed*40,$48(a6) ; Source C move.l mnu_rndptr,$4c(a6) ; Source B move.l mnu_sourceptrs,d0 sub.l mnu_subtract,d0 move.l d0,$50(a6) ; Source A move.l #mnu_morescreen,$54(a6) ; Dest D move.w #(mnu_size-mnu_speed)*64+20,$58(a6) ; Size and trigger rts mnu_pass2:; move.l #$0ff80000,$40(a6) ; D=A+BC ; move.l #$ffffffff,$44(a6) ; Masks A ; move.l #$00000000,$60(a6) ; CB modulo ; move.l #$00000000,$64(a6) ; AD modulo move.l #mnu_morescreen+40*256+mnu_speed*40,$48(a6) ; Source C move.l mnu_rndptr,$4c(a6) ; Source B move.l mnu_sourceptrs+4,d0 sub.l mnu_subtract,d0 move.l d0,$50(a6) ; Source A move.l #mnu_morescreen+40*256,$54(a6) ; Dest D move.w #(mnu_size-mnu_speed)*64+20,$58(a6) ; Size and trigger rts mnu_pass3:; move.l #$0ff80000,$40(a6) ; D=A+BC ; move.l #$ffffffff,$44(a6) ; Masks A ; move.l #$00000000,$60(a6) ; CB modulo ; move.l #$00000000,$64(a6) ; AD modulo move.l #mnu_morescreen+40*256*2+mnu_speed*40,$48(a6) ; Source C move.l mnu_rndptr,$4c(a6) ; Source B move.l mnu_sourceptrs+8,d0 sub.l mnu_subtract,d0 move.l d0,$50(a6) ; Source A move.l #mnu_morescreen+40*256*2,$54(a6) ; Dest D move.w #(mnu_size-mnu_speed)*64+20,$58(a6) ; Size and trigger rts mnu_cls: lea mnu_frame+40*256*3,a0 lea mnu_morescreen+40*256*6,a1 move.w #40*256*3/16-1,d0 .loop: REPT 4 move.l -(a0),-(a1) ENDR dbra d0,.loop rts mnu_animcursor: btst #0,main_counter+3 beq.s .skip move.l mnu_frameptr,a0 move.b (a0),mnu_arrow tst.b 1(a0) beq.s .skip cmp.b #40,1(a0) bhi.s .ok moveq.l #0,d0 move.b 1(a0),d0 sub.l d0,mnu_frameptr .ok: addq.l #1,mnu_frameptr .skip: rts mnu_domenu:;in: a0=Menu ptr bsr.w key_flushbuffer .redraw: move.l a0,-(a7) bsr.w mnu_openmenu ; Open new menu move.l (a7)+,a0 .loop: movem.l a0,-(a7) bsr.w mnu_update movem.l (a7)+,a0 move.l a0,-(a7) bsr.w mnu_waitmenu ; Wait for option move.l (a7)+,a0 moveq.l #0,d2 move.w mnu_row,d2 divu 14(a0),d2 swap.w d2 move.w d2,mnu_currentsel tst.l d1 beq.s .ok cmp.w #42,d1 beq.w .left cmp.w #41,d1 beq.w .right .ok: cmp.w #-1,d0 ; Esc ??? beq.w .exit ; Yepp exit move.l 16(a0,d0.w*8),d1 ; Get option type tst.l d1 ; 0=Do Nothing ??? beq.s .loop cmp.l #1,d1 ; 1=Sub menu beq.w .newmenu cmp.l #2,d1 ; 2=Exit sub beq.w .exit cmp.l #3,d1 beq.w .bsr cmp.l #4,d1 beq.w .left cmp.l #5,d1 beq.w .leftsl cmp.l #6,d1 beq.w .jump cmp.l #7,d1 beq.w .changemenu cmp.l #8,d1 beq.w .doraw cmp.l #9,d1 beq.w .doload cmp.l #10,d1 beq.w .dosave .wrong: move.l #mnu_errcursanim,mnu_frameptr bra.w .loop ; Strange option ??? Loop .dosave: movem.l d0-a6,-(a7) move.l 20(a0,d0.w*8),a0 move.w mnu_currentlevel,(a0) bsr.w mnu_savelevel movem.l (a7)+,d0-a6 ; bra.w .loop bra.w .exit .doload: movem.l d0-a6,-(a7) move.l 20(a0,d0.w*8),a0 move.w (a0),mnu_currentlevel bsr.w mnu_loadlevel movem.l (a7)+,d0-a6 ;bra.w .loop bra.w .exit .doraw: movem.l d0-a6,-(a7) move.l #mnu_buttonanim,mnu_frameptr move.l 20(a0,d0.w*8),a0 .rawloop: move.l a0,-(a7) bsr.w mnu_getrawvalue move.l (a7)+,a0 cmp.w (a0),d0 beq.s .rawcont cmp.w #69,d0 beq.s .rawcont lea mnu_rawkeys,a1 .tstraw: move.w (a1)+,d1 cmp.w #$ffff,d1 beq.s .rawok cmp.w d0,d1 bne.s .tstraw move.l #mnu_errbutanim,mnu_frameptr bra.s .rawloop .rawok: move.w d0,(a0) .rawcont: move.l #mnu_cursanim,mnu_frameptr movem.l (a7)+,d0-a6 bra.w .loop .bsr: movem.l d0-a6,-(a7) move.l 20(a0,d0.w*8),a0 jsr (a0) movem.l (a7)+,d0-a6 bra.w .redraw .jump: move.l 20(a0,d0.w*8),a0 move.l mnu_mainstack,a7 jmp (a0) ;--------------------------------------------------------------------------- .left: move.l 16(a0,d0.w*8),d1 cmp.l #4,d1 bne.s .leftsl move.l 20(a0,d0.w*8),a1 move.l 10(a1),a2 move.w 8(a1),d0 add.w d0,(a2) bra.w .loop .leftsl: cmp.l #5,d1 bne.w .wrong move.l 20(a0,d0.w*8),a1 move.l 6(a1),a2 addq.w #1,(a2) bra.w .loop .right: move.l 16(a0,d0.w*8),d1 cmp.l #4,d1 bne.s .rightsl move.l 20(a0,d0.w*8),a1 move.l 10(a1),a2 move.w 8(a1),d0 sub.w d0,(a2) bra.w .loop .rightsl: cmp.l #5,d1 bne.w .wrong move.l 20(a0,d0.w*8),a1 move.l 6(a1),a2 subq.w #1,(a2) bra.w .loop ;------------------------------------------------------------------ New menu -- .changemenu: move.l 20(a0,d0.w*8),a0 bra.w .redraw .newmenu: move.l a0,-(a7) move.l 20(a0,d0.w*8),a0 ; Set new menu bsr.w mnu_domenu move.l (a7)+,a0 bra.w .redraw .exit: rts mnu_openmenu:;in:a0=Ptr to menu bsr.w key_flushbuffer move.w mnu_currentlevel,d0 add.w #65,d0 move.b d0,mnu_mainleveltext move.l a0,-(a7) move.l #0,mnu_printdelay bsr.w mnu_cls move.l #35,timer .w8a: tst.l timer bne.s .w8a move.l (a7)+,a0 move.l a0,-(a7) move.w (a0),d0 move.w 2(a0),d1 move.l 4(a0),a0 bsr.w mnu_printxy move.l (a7)+,a0 move.w 8(a0),mnu_curx move.w 10(a0),mnu_cury move.w 12(a0),mnu_spread move.w 14(a0),mnu_items move.w 14(a0),d0 mulu #3000,d0 move.w d0,mnu_row move.w d0,mnu_oldrow bsr.w mnu_update rts mnu_waitmenu:;out: d0=Selection number ; move.l #mnu_cursanim,mnu_frameptr clr.l mnu_printdelay .loop: moveq.l #0,d1 move.w mnu_oldrow,d1 cmp.w mnu_row,d1 beq.s .skip ; move.l #mnu_cursanim,mnu_frameptr divu mnu_items,d1 swap.w d1 mulu mnu_spread,d1 add.w mnu_cury,d1 move.w mnu_curx,d0 lea mnu_cleararrow,a0 bsr.w mnu_printxy .skip: .w8key: bsr.w mnu_docursor bsr.w key_readkey tst.w d0 beq.s .w8key cmp.b #27,d0 beq.s .exit cmp.b #129,d0 ; Down Arrow beq.s .down cmp.b #128,d0 beq.s .up cmp.b #13,d0 beq.s .quit cmp.b #32,d0 beq.s .quit cmp.b #130,d0 beq.s .sliderr cmp.b #131,d0 beq.s .sliderl move.l #mnu_errcursanim,mnu_frameptr bra.w .loop .exit: moveq.l #-1,d0 ; Esc key moveq.l #0,d1 rts .sliderr: moveq.l #41,d1 bra.s .cpcont .sliderl: moveq.l #42,d1 bra.s .cpcont .quit: moveq.l #0,d1 .cpcont: move.w mnu_row,d0 divu mnu_items,d0 swap.w d0 and.l #$ffff,d0 rts .down: addq.w #1,mnu_row bra.w .loop .up: subq.w #1,mnu_row bra.w .loop mnu_docursor: moveq.l #0,d1 move.w mnu_row,d1 move.w d1,mnu_oldrow divu mnu_items,d1 swap.w d1 mulu mnu_spread,d1 add.w mnu_cury,d1 move.w mnu_curx,d0 lea mnu_arrow,a0 bsr.w mnu_printxy rts mnu_docursor1: moveq.l #0,d1 move.w mnu_row,d1 divu mnu_items,d1 swap.w d1 mulu mnu_spread,d1 add.w mnu_cury,d1 move.w mnu_curx,d0 lea mnu_arrow,a0 bsr.w mnu_printxy rts mnu_update:;in: a0=Ptr to menu move.w 14(a0),d7 subq.w #1,d7 move.w 10(a0),d1 ; d1=YPos move.w 8(a0),d0 move.l a0,a1 add.l #16,a1 .itemloop: move.l (a1)+,d2 cmp.l #4,d2 ; Slider ? beq.s .doslider cmp.l #5,d2 ; Slider ? beq.s .docycler cmp.l #8,d2 beq.s .dorawkey cmp.l #9,d2 beq.s .doloadlevel cmp.l #10,d2 beq.s .doloadlevel .continue: add.w 12(a0),d1 addq.l #4,a1 dbra d7,.itemloop rts .doslider: movem.l d0-a6,-(a7) move.l (a1),a0 ; a0=Slider ptr bsr.w mnu_putslider movem.l (a7)+,d0-a6 bra.s .continue .docycler: movem.l d0-a6,-(a7) move.l (a1),a0 ; a0=Cycler ptr bsr.w mnu_putcycler movem.l (a7)+,d0-a6 bra.s .continue .dorawkey: movem.l d0-a6,-(a7) move.l (a1),a0 ; a0=Ptr to value move.w (a0),d3 add.w #132,d3 add.w #2,d0 move.b d3,mnu_rawprint lea mnu_rawprint,a0 bsr.w mnu_printxy movem.l (a7)+,d0-a6 bra.s .continue .doloadlevel: movem.l d0-a6,-(a7) move.l (a1),a0 move.w (a0),d2 ; d0=Level no add.w #65,d2 move.b d2,mnu_levelno addq.w #2,d0 lea mnu_leveltext,a0 bsr.w mnu_printxy movem.l (a7)+,d0-a6 bra.s .continue mnu_putslider:;in: d0,d1,d7,a0=Xpos,Ypos,Spread,Slider ptr add.w (a0),d0 add.w 2(a0),d1 move.w d0,.xpos movem.l d0-d1/a0,-(a7) lea mnu_leftslider,a0 bsr.w mnu_printxy movem.l (a7)+,d0-d1/a0 addq.w #2,d0 move.w 6(a0),d2 lsr.w #4,d2 tst.w d2 beq.s .skip move.w d2,d4 movem.l d0-d1/a0,-(a7) lea mnu_sliderspace,a0 move.l a0,a1 subq.w #1,d2 .loop: move.b #59,(a1)+ dbra d2,.loop clr.b (a1) bsr.w mnu_printxy movem.l (a7)+,d0-d1/a0 add.w d4,d0 add.w d4,d0 .skip: move.w 6(a0),d2 and.w #$f,d2 beq.w .skip2 move.w d2,d5 subq.w #1,d2 moveq.l #0,d3 .loop1: ror.w #1,d3 or.w #$8000,d3 dbra d2,.loop1 movem.l d0-d1,-(a7) mulu d7,d1 add.w d0,d1 add.l #mnu_morescreen+40*256*3,d1 move.l d1,a4 ; a4=Screen Ptr movem.l (a7)+,d0-d1 swap.w d3 clr.w d3 moveq.l #15,d2 move.l a4,a5 move.l mnu_sliddat,a3 .loop2: move.l (a3),d4 and.l d3,d4 move.l d4,(a4) move.l 176*40(a3),d4 and.l d3,d4 move.l d4,40*256(a4) move.l 176*40*2(a3),d4 and.l d3,d4 move.l d4,40*256*2(a4) add.l #40,a3 add.l #40,a4 dbra d2,.loop2 move.l a5,a4 moveq.l #15,d2 move.l mnu_sliddat,a3 .loop3: move.l 2(a3),d4 lsr.l d5,d4 or.l d4,(a4) move.l 2+176*40(a3),d4 lsr.l d5,d4 or.l d4,40*256(a4) move.l 2+176*40*2(a3),d4 lsr.l d5,d4 or.l d4,40*256*2(a4) add.l #40,a3 add.l #40,a4 dbra d2,.loop3 bra.s .cont1 .skip2: movem.l d0/d1/a0,-(a7) lea mnu_rightslider,a0 bsr.w mnu_printxy movem.l (a7)+,d0/d1/a0 .cont1: move.l 10(a0),a1 ; Value 2 change ptr move.w (a1),d0 cmp.w #0,d0 bge.s .ok1 moveq.l #0,d0 .ok1: cmp.w 4(a0),d0 ble.s .ok2 move.w 4(a0),d0 .ok2: move.w d0,(a1) mulu 6(a0),d0 divu 4(a0),d0 ; d0=Slider position X sub.w mnu_sliderwidth,d0 move.w .xpos,d2 lsl.w #3,d2 add.w d2,d0 move.w d0,d2 and.l #$f,d2 lsr.w #4,d0 lsl.w #1,d0 addq.w #2,d0 and.l #$ffff,d0 mulu d7,d1 add.l d0,d1 add.l #mnu_morescreen+40*256*3,d1 move.l d1,a4 ; a1=Screen ptr moveq.l #15,d3 move.l mnu_sliddat,a3 .loop4: move.l 6(a3),d4 lsr.l d2,d4 or.l d4,(a4) move.l 6+176*40(a3),d4 lsr.l d2,d4 or.l d4,40*256(a4) move.l 6+176*40*2(a3),d4 lsr.l d2,d4 or.l d4,40*256*2(a4) add.l #40,a3 add.l #40,a4 dbra d3,.loop4 rts .xpos: dc.w 0 mnu_putcycler:;in: d0,d1,a0=Xpos,Ypos,Spread,Cycler ptr add.w (a0),d0 add.w 2(a0),d1 move.l 6(a0),a1 moveq.l #0,d2 move.w (a1),d2 divu 4(a0),d2 swap.w d2 move.w d2,(a1) move.l 10(a0,d2.w*4),a0 bsr.w mnu_printxy rts mnu_plot: lea mnu_sines,a0 move.w mnu_xsine0,d0 and.w #1022,d0 move.w (a0,d0.w),d1 move.w mnu_xsine1,d0 and.w #1022,d0 add.w (a0,d0.w),d1 asr.w #4,d1 add.w #160,d1 move.w mnu_ysine0,d0 and.w #1022,d0 move.w (a0,d0.w),d2 move.w mnu_ysine1,d0 and.w #1022,d0 add.w (a0,d0.w),d2 asr.w #4,d2 add.w #128,d2 mulu #40,d2 move.w d1,d0 lsr.w #3,d1 add.w d1,d2 neg.w d0 addq.w #$7,d0 add.l #mnu_morescreen,d2 move.l d2,a0 bset.b d0,(a0) bset.b d0,40*256(a0) bset.b d0,40*256*2(a0) addq.w #3,mnu_xsine0 subq.w #4,mnu_xsine1 addq.w #5,mnu_ysine0 subq.w #2,mnu_ysine1 rts mnu_getrawvalue:;out: d0=Raw value ; Waits until a key is pressed the returns the raw value bsr.w mnu_docursor1 tst.b key_keypressed bne.s mnu_getrawvalue .loop: bsr.w mnu_docursor1 tst.b key_keypressed beq.s .loop move.b key_rawkey,d0 and.l #$ff,d0 move.l d0,-(a7) .oloop: bsr.w mnu_docursor1 tst.b key_keypressed bne.s .oloop bsr.w key_flushbuffer move.w #$ffff,mnu_oldrow move.l (a7)+,d0 rts mnu_test4quit: clr.w mnu_quitflag bsr.w mnu_docursor bsr.w key_readkey cmp.w #27,d0 beq.s .quit cmp.w #13,d0 beq.s .quit cmp.w #32,d0 beq.s .quit tst.w d0 beq.s .skip move.l #mnu_errcursanim,mnu_frameptr .skip: moveq.l #-1,d0 tst.w d0 rts .quit: st.b mnu_quitflag moveq.l #0,d0 tst.w d0 rts mnu_quitflag: dc.w 0 mnu_playgame: cmp.w #1,mnu_playtype ; Is it 2 player master ??? bne.w .noplayermaster lea mnu_2pmastermenu,a0 bsr.w mnu_domenu cmp.w #1,mnu_currentsel bne.s .rts bsr.w mnu_cls lea mnu_slavewaittext,a0 IFND mnu_nowait moveq.l #6,d0 moveq.l #60,d1 bsr.w mnu_printxy clr.w mnu_spread move.w #4,mnu_curx move.w #140,mnu_cury bsr.w mnu_wait4slave tst.w mnu_quitflag beq.s .playgame rts ENDC bra.s .playgame .rts: rts .noplayermaster:cmp.w #2,mnu_playtype bne.w .playgame IFND mnu_nowait bsr.w mnu_cls lea mnu_masterwaittext,a0 moveq.l #6,d0 moveq.l #60,d1 bsr.w mnu_printxy clr.w mnu_spread move.w #4,mnu_curx move.w #140,mnu_cury bsr.w mnu_wait4master tst.w mnu_quitflag beq.s .playgame rts ENDC .playgame: bsr.w mnu_clearscreen ;-------------------------------------- Jump to game here !! -- move.w mnu_playtype,d0 lea .playtypeptr,a0 move.l (a0,d0.w*4),a0 jsr (a0) bsr.w mnu_setscreen rts .playtypeptr: dc.l mnu_play1p dc.l mnu_play2pMaster dc.l mnu_play2pSlave ******************************************************************************* ******************************************************************************* ******************************************************************************* ******************************************************************************* mnu_wait4slave: ; Wait for the slave to connect. .loop: bsr.w mnu_test4quit ; Check for "cancel" (and cursor) beq.s .rts ; Cancel key was selected ;.............. Do your tests here ................................. ;.............. if the slave connects just exit with a rts ......... btst #6,$bfe001 bne.s .loop .loop1: btst #6,$bfe001 beq.s .loop1 .rts: rts ******************************************************************************* mnu_wait4master:; Wait for the master to connect. .loop: bsr.w mnu_test4quit ; Check for "cancel" (and cursor) beq.s .rts ; Cancel key was selected ;.............. Do your tests here .................................. ;.............. if the master connects just exit with a rts ......... btst #6,$bfe001 bne.s .loop .loop1: btst #6,$bfe001 beq.s .loop1 .rts: rts ******************************************************************************* mnu_play1p: ; Do the 1 player game stuff here .loop: btst #6,$bfe001 bne.s .loop rts ******************************************************************************* mnu_play2pMaster:; Do the 2 player master game stuff here .loop: btst #6,$bfe001 bne.s .loop rts ******************************************************************************* mnu_play2pSlave:; Do the 2 player slave game stuff here .loop: btst #6,$bfe001 bne.s .loop rts ******************************************************************************* mnu_loadlevel: ; Level to load is in mnu_currentlevel.w ; Current menu item is in mnu_currentsel.w (0 based) rts ******************************************************************************* mnu_savelevel: ; Level to save is in mnu_currentlevel.w ; Current menu item is in mnu_currentsel.w (0 based) ; Or all saved levels in the mnu_levellist+n*2.w rts ******************************************************************************* include "demo:System/KeyBoard.S" ****************************************************************** Variables ** mnu_2plevel: dc.w 0 mnu_currentsel: dc.w 0 ; Containes the current menu item mnu_currentlevel: mnu_level: dc.w 0 ; Current level choosen. 0=A,1=B... mnu_playtype: dc.w 0 ; Selected type of game. 0=1 player ; 1=2 player master ; 2=2 player slave ;------------------------------------------------- Rawcodes for control keys -- mnu_rawkeys: ;----------------------------- Here are all defined raw keys -- mnu_key00: dc.w $4f ; Turn left mnu_key01: dc.w $4e ; Turn right mnu_key02: dc.w $4c ; Forwards mnu_key03: dc.w $4d ; Backwards mnu_key04: dc.w 101 ; Fire mnu_key05: dc.w $40 ; Operate door mnu_key06: dc.w 97 ; Run mnu_key07: dc.w 103 ; Force sidestep mnu_key08: dc.w 57 ; Sidestep left mnu_key09: dc.w 58 ; Sidestep right mnu_key10: dc.w 34 ; Duck mnu_key11: dc.w 40 ; Look behind mnu_key12: dc.w 15 ; Jump mnu_key13: dc.w 27 ; Look up mnu_key14: dc.w 42 ; Look down mnu_key15: dc.w 41 ; Centre view ;------------------------------------------- Put other reserved keys here !! -- dc.w 69 ; Escape dc.w 1,2,3,4,5,6,7,8,9,10 ; Weapon selects dc.w 80 ; Zoom in on map dc.w 81 ; Zoom out on map dc.w 82 ; 4/8 Channel sound dc.w 83 ; Mono/Stereo sound dc.w 84 ; Recall message dc.w 85 ; Render quality dc.w 29 ; Map down left dc.w 30 ; Map down dc.w 31 ; Map down right dc.w 45 ; Map left dc.w 46 ; Center map dc.w 47 ; Map right dc.w 61 ; Map up left dc.w 62 ; Map up dc.w 63 ; Map up right dc.w -1 ; End list with -1 mnu_levellist:;----------------------------- Current levels in the save list -- mnu_saved0: dc.w 0 ; Level number for saved pos 0 mnu_saved1: dc.w 1 mnu_saved2: dc.w 3 mnu_saved3: dc.w 8 mnu_saved4: dc.w 4 mnu_saved5: dc.w 11 mnu_xsine0: dc.w 0 mnu_xsine1: dc.w 0 mnu_ysine0: dc.w 0 mnu_ysine1: dc.w 0 mnu_sines: dc.w $0006,$0013,$001f,$002c,$0038,$0045,$0052,$005e,$006b,$0077 dc.w $0083,$0090,$009c,$00a9,$00b5,$00c1,$00ce,$00da,$00e6,$00f2 dc.w $00ff,$010b,$0117,$0123,$012f,$013b,$0147,$0153,$015f,$016a dc.w $0176,$0182,$018d,$0199,$01a4,$01b0,$01bb,$01c6,$01d2,$01dd dc.w $01e8,$01f3,$01fe,$0209,$0213,$021e,$0229,$0233,$023e,$0248 dc.w $0252,$025c,$0266,$0270,$027a,$0284,$028e,$0297,$02a1,$02aa dc.w $02b4,$02bd,$02c6,$02cf,$02d8,$02e1,$02e9,$02f2,$02fa,$0303 dc.w $030b,$0313,$031b,$0323,$032a,$0332,$0339,$0341,$0348,$034f dc.w $0356,$035d,$0364,$036a,$0371,$0377,$037d,$0383,$0389,$038f dc.w $0395,$039a,$039f,$03a5,$03aa,$03af,$03b4,$03b8,$03bd,$03c1 dc.w $03c5,$03c9,$03cd,$03d1,$03d5,$03d8,$03dc,$03df,$03e2,$03e5 dc.w $03e7,$03ea,$03ed,$03ef,$03f1,$03f3,$03f5,$03f7,$03f8,$03f9 dc.w $03fb,$03fc,$03fd,$03fd,$03fe,$03ff,$03ff,$03ff,$03ff,$03ff dc.w $03ff,$03fe,$03fd,$03fd,$03fc,$03fb,$03f9,$03f8,$03f7,$03f5 dc.w $03f3,$03f1,$03ef,$03ed,$03ea,$03e7,$03e5,$03e2,$03df,$03dc dc.w $03d8,$03d5,$03d1,$03cd,$03c9,$03c5,$03c1,$03bd,$03b8,$03b4 dc.w $03af,$03aa,$03a5,$039f,$039a,$0395,$038f,$0389,$0383,$037d dc.w $0377,$0371,$036a,$0364,$035d,$0356,$034f,$0348,$0341,$0339 dc.w $0332,$032a,$0323,$031b,$0313,$030b,$0303,$02fa,$02f2,$02e9 dc.w $02e1,$02d8,$02cf,$02c6,$02bd,$02b4,$02aa,$02a1,$0297,$028e dc.w $0284,$027a,$0270,$0266,$025c,$0252,$0248,$023e,$0233,$0229 dc.w $021e,$0213,$0209,$01fe,$01f3,$01e8,$01dd,$01d2,$01c6,$01bb dc.w $01b0,$01a4,$0199,$018d,$0182,$0176,$016a,$015f,$0153,$0147 dc.w $013b,$012f,$0123,$0117,$010b,$00ff,$00f2,$00e6,$00da,$00ce dc.w $00c1,$00b5,$00a9,$009c,$0090,$0083,$0077,$006b,$005e,$0052 dc.w $0045,$0038,$002c,$001f,$0013,$0006,$fffa,$ffed,$ffe1,$ffd4 dc.w $ffc8,$ffbb,$ffae,$ffa2,$ff95,$ff89,$ff7d,$ff70,$ff64,$ff57 dc.w $ff4b,$ff3f,$ff32,$ff26,$ff1a,$ff0e,$ff01,$fef5,$fee9,$fedd dc.w $fed1,$fec5,$feb9,$fead,$fea1,$fe96,$fe8a,$fe7e,$fe73,$fe67 dc.w $fe5c,$fe50,$fe45,$fe3a,$fe2e,$fe23,$fe18,$fe0d,$fe02,$fdf7 dc.w $fded,$fde2,$fdd7,$fdcd,$fdc2,$fdb8,$fdae,$fda4,$fd9a,$fd90 dc.w $fd86,$fd7c,$fd72,$fd69,$fd5f,$fd56,$fd4c,$fd43,$fd3a,$fd31 dc.w $fd28,$fd1f,$fd17,$fd0e,$fd06,$fcfd,$fcf5,$fced,$fce5,$fcdd dc.w $fcd6,$fcce,$fcc7,$fcbf,$fcb8,$fcb1,$fcaa,$fca3,$fc9c,$fc96 dc.w $fc8f,$fc89,$fc83,$fc7d,$fc77,$fc71,$fc6b,$fc66,$fc61,$fc5b dc.w $fc56,$fc51,$fc4c,$fc48,$fc43,$fc3f,$fc3b,$fc37,$fc33,$fc2f dc.w $fc2b,$fc28,$fc24,$fc21,$fc1e,$fc1b,$fc18,$fc16,$fc13,$fc11 dc.w $fc0f,$fc0d,$fc0b,$fc09,$fc08,$fc07,$fc05,$fc04,$fc03,$fc03 dc.w $fc02,$fc01,$fc01,$fc01,$fc01,$fc01,$fc01,$fc02,$fc03,$fc03 dc.w $fc04,$fc05,$fc07,$fc08,$fc09,$fc0b,$fc0d,$fc0f,$fc11,$fc13 dc.w $fc16,$fc19,$fc1b,$fc1e,$fc21,$fc24,$fc28,$fc2b,$fc2f,$fc33 dc.w $fc37,$fc3b,$fc3f,$fc43,$fc48,$fc4c,$fc51,$fc56,$fc5b,$fc61 dc.w $fc66,$fc6b,$fc71,$fc77,$fc7d,$fc83,$fc89,$fc8f,$fc96,$fc9c dc.w $fca3,$fcaa,$fcb1,$fcb8,$fcbf,$fcc7,$fcce,$fcd6,$fcdd,$fce5 dc.w $fced,$fcf5,$fcfd,$fd06,$fd0e,$fd17,$fd1f,$fd28,$fd31,$fd3a dc.w $fd43,$fd4c,$fd56,$fd5f,$fd69,$fd72,$fd7c,$fd86,$fd90,$fd9a dc.w $fda4,$fdae,$fdb8,$fdc2,$fdcd,$fdd7,$fde2,$fded,$fdf7,$fe02 dc.w $fe0d,$fe18,$fe23,$fe2e,$fe3a,$fe45,$fe50,$fe5c,$fe67,$fe73 dc.w $fe7e,$fe8a,$fe96,$fea1,$fead,$feb9,$fec5,$fed1,$fedd,$fee9 dc.w $fef5,$ff01,$ff0e,$ff1a,$ff26,$ff32,$ff3f,$ff4b,$ff57,$ff64 dc.w $ff70,$ff7d,$ff89,$ff95,$ffa2,$ffae,$ffbb,$ffc8,$ffd4,$ffe1 dc.w $ffed,$fffa mnu_mainstack: dc.l 0 ;--------------------------------------------------------------- Slider data -- mnu_sliderwidth:dc.w 6 mnu_sliddat: dc.l mnu_font+40*16+7*2 mnu_leftslider: dc.b 58,0 mnu_sliderspace: dcb.b 20,0 mnu_rightslider:dc.b 60,0 mnu_rawprint: dc.b 0,0 even ;----------------------------------------------------------------- Menu data -- mnu_curx: dc.w 5 mnu_cury: dc.w 78 mnu_spread: dc.w 40 mnu_items: dc.w 3 mnu_arrow: dc.b ' ',0 mnu_cleararrow: dc.b ' ',0 mnu_row: dc.w 30000 mnu_oldrow: dc.w 30000 mnu_screenpos: dc.w 0 mnu_printdelay: dc.l 0 ;----------------------------------------------------------------- Fire data -- mnu_rndptr: dc.l mnu_morescreen+6*40*256 mnu_sourceptrs: dc.l mnu_morescreen+3*40*256+mnu_speed*40 dc.l mnu_morescreen+4*40*256+mnu_speed*40 dc.l mnu_morescreen+5*40*256+mnu_speed*40 ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Menues %% ; Types: 0 = Do nothing ; 1 = Sub menu ; 2 = Exit sub menu ; 3 = Execute subroutine ; 4 = Slider ; 5 = Cycler ; 6 = Branch (SP) set to value in mnu_mainstack ; 7 = Change menu ; 8 = Get raw key ; 9 = Level Load ; 10 = Level Save mnu_mainmenu: dc.w 6,12 ; X,Y dc.l mnu_maintext ; Text ptr dc.w 4,70 ; XCursor,YCursor dc.w 20 ; Spread dc.w 7 ; Items dc.l 5,mnu_playercycler ; Change player type dc.l 3,mnu_playgame dc.l 1,mnu_controlmenu0 dc.l 3,mnu_viewcredz dc.l 1,mnu_loadmenu dc.l 1,mnu_savemenu dc.l 2,0 ; 2=Exit sub menu (Esc) mnu_controlmenu0:dc.w 6,32 ; X,Y dc.l mnu_controltext0 ; Text ptr dc.w 4,50 ; XCursor,YCursor dc.w 20 ; Spread dc.w 9 ; Items dc.l 8,mnu_key00 dc.l 8,mnu_key01 dc.l 8,mnu_key02 dc.l 8,mnu_key03 dc.l 8,mnu_key04 dc.l 8,mnu_key05 dc.l 8,mnu_key06 dc.l 8,mnu_key07 dc.l 7,mnu_controlmenu1 mnu_controlmenu1:dc.w 6,32 ; X,Y dc.l mnu_controltext1 ; Text ptr dc.w 4,50 ; XCursor,YCursor dc.w 20 ; Spread dc.w 9 ; Items dc.l 8,mnu_key08 dc.l 8,mnu_key09 dc.l 8,mnu_key10 dc.l 8,mnu_key11 dc.l 8,mnu_key12 dc.l 8,mnu_key13 dc.l 8,mnu_key14 dc.l 8,mnu_key15 dc.l 7,mnu_controlmenu2 mnu_controlmenu2:dc.w 4,12 ; X,Y dc.l mnu_controltext2 ; Text ptr dc.w 4,210 ; XCursor,YCursor dc.w 20 ; Spread dc.w 1 ; Items dc.l 7,mnu_controlmenu0 mnu_loadmenu: dc.w 4,42 dc.l mnu_loadmenutext dc.w 4,80 ; XCursor,YCursor dc.w 20 ; Spread dc.w 7 ; Items dc.l 9,mnu_saved0 dc.l 9,mnu_saved1 dc.l 9,mnu_saved2 dc.l 9,mnu_saved3 dc.l 9,mnu_saved4 dc.l 9,mnu_saved5 dc.l 2,0 mnu_savemenu: dc.w 4,42 dc.l mnu_savemenutext dc.w 4,80 ; XCursor,YCursor dc.w 20 ; Spread dc.w 7 ; Items dc.l 10,mnu_saved0 dc.l 10,mnu_saved1 dc.l 10,mnu_saved2 dc.l 10,mnu_saved3 dc.l 10,mnu_saved4 dc.l 10,mnu_saved5 dc.l 2,0 mnu_quitmenu: dc.w 4,82 dc.l mnu_quitmenutext dc.w 4,120 ; XCursor,YCursor dc.w 20 ; Spread dc.w 2 ; Items dc.l 6,mnu_loop dc.l 6,mnu_exit mnu_2pmastermenu: dc.w 4,82 dc.l mnu_2pmastertext dc.w 4,120 ; XCursor,YCursor dc.w 20 ; Spread dc.w 3 ; Items dc.l 5,mnu_levelcycler dc.l 2,0 dc.l 2,0 ;--------------------------------------------------------------------- Texts -- mnu_slavewaittext: dc.b 'Waiting for ',1 dc.b 'your opponent',1 dc.b 'to respond...',1,1 dc.b 58,58,'Cancel',0 mnu_masterwaittext: dc.b 'Waiting for ',1 dc.b 'your opponent',1 dc.b 'to respond...',1,1 dc.b 58,58,'Cancel',0 mnu_maintext: dc.b 1,1 dc.b 60,'Level ' mnu_mainleveltext:dc.b 'A',58,1 dc.b 1 dc.b 'Play game',1 dc.b 'Control options',1 dc.b 'Game credits',1 dc.b 'Load position',1 dc.b 'Save position',1 dc.b 'Quit',1 dc.b 0 mnu_quitmenutext:dc.b ' Quit game',131,131,131,1,1 dc.b ' No,I',39,'m addicted',1 dc.b ' Yes! Let me OUT',1 dc.b 0 mnu_2pmastertext:dc.b ' 2 Player master',1,1 dc.b ' Play level',1 dc.b ' Start game',1 dc.b ' ',58,58,'Cancel',1 dc.b 0 mnu_loadmenutext:dc.b ' Load game',1,1 dc.b 1,1,1,1,1,1 dc.b ' ',58,58,'Cancel',58,58,0 mnu_savemenutext:dc.b ' Save game',1,1 dc.b 1,1,1,1,1,1 dc.b ' ',58,58,'Cancel',58,58,0 mnu_controltext0:dc.b 1 dc.b ' Turn left',1 dc.b ' Turn right',1 dc.b ' Forwards',1 dc.b ' Backwards',1 dc.b ' Fire',1 dc.b ' Operate door',1 dc.b ' Run',1 dc.b ' Sidestep',1 dc.b 60,60,'More',60,60,1 dc.b 0 mnu_controltext1:dc.b 1 dc.b ' Sidestep left',1 dc.b ' Sidestep right',1 dc.b ' Duck',1 dc.b ' Look behind',1 dc.b ' Jump',1 dc.b ' Look up',1 dc.b ' Look down',1 dc.b ' Centre view',1 dc.b 60,60,'Others',60,60,1 dc.b 0 mnu_controltext2:dc.b 1 dc.b 157,'Pause',1 dc.b 212,'Zoom in on map',1 dc.b 213,'Zoom out on map',1 dc.b 214,'4/8 Ch. sound',1 dc.b 215,'Mono/Stereo snd',1 dc.b 216,'Recall message',1 dc.b 217,'Render quality',1 dc.b 133,'-',142,'Select weapon',1 dc.b 161,'-',195,'Scroll map',1 dc.b ' ',58,58,'Back',58,58,1 dc.b 0 mnu_leveltext: dc.b 'Level ' mnu_levelno: dc.b 'A',0 mnu_protecttext:dc.b 'Enter number at_',1,1 dc.b ' Table_ ' mnu_tableptr: dc.b '0',1 dc.b ' Row_ ' mnu_rowptr: dc.b '00',1 dc.b ' Column_ ' mnu_columnptr: dc.b '0',1,1 dc.b ' Number_ ' mnu_numberptr: dc.b ' ' dc.b 0 mnu_dontbelong: dc.b ' You do NOT',1 dc.b ' belong here !!',0 even ;------------------------------------------------------- Cyclers and sliders -- mnu_level0: dc.b 'A',0 mnu_level1: dc.b 'B',0 mnu_level2: dc.b 'C',0 mnu_level3: dc.b 'D',0 mnu_level4: dc.b 'E',0 mnu_level5: dc.b 'F',0 mnu_level6: dc.b 'G',0 mnu_level7: dc.b 'H',0 mnu_level8: dc.b 'I',0 mnu_level9: dc.b 'J',0 mnu_level10: dc.b 'K',0 mnu_level11: dc.b 'L',0 mnu_level12: dc.b 'M',0 mnu_level13: dc.b 'N',0 mnu_level14: dc.b 'O',0 mnu_level15: dc.b 'P',0 even mnu_levelcycler:dc.w 24,2 ; X,Y Add dc.w 16 ; #of items dc.l mnu_2plevel ; Value to effect dc.l mnu_level0 dc.l mnu_level1 dc.l mnu_level2 dc.l mnu_level3 dc.l mnu_level4 dc.l mnu_level5 dc.l mnu_level6 dc.l mnu_level7 dc.l mnu_level8 dc.l mnu_level9 dc.l mnu_level10 dc.l mnu_level11 dc.l mnu_level12 dc.l mnu_level13 dc.l mnu_level14 dc.l mnu_level15 even mnu_playercycler:dc.w 2,2 ; X,Y Add dc.w 3 ; #of items dc.l mnu_playtype ; Value to effect dc.l mnu_playtype0 dc.l mnu_playtype1 dc.l mnu_playtype2 even mnu_playtype0: dc.b '1 Player ',0 mnu_playtype1: dc.b '2 Player master',0 mnu_playtype2: dc.b '2 Player slave ',0 ;----------------------------------------------------------------- Animation -- mnu_frameptr: dc.l mnu_cursanim mnu_errcursanim:dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 mnu_cursanim: dc.b 130,129,128,127,126,125,124,123,8 even mnu_errbutanim: dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 dc.b 240,240,241,241,242,242,243,243 mnu_buttonanim: dc.b 236,236,236,236 dc.b 237,237,237,237 dc.b 238,238,238,238 dc.b 239,239,239,239 dc.b 238,238,238,238 dc.b 237,237,237,237 dc.b 24 even mnu_font: incbin "demo:Menu/Font16x16.Raw2" mnu_fontpal: incbin "demo:Menu/Font16x16.Pal2" mnu_firepal: incbin "Demo:Menu/FirePal.Pal2" mnu_backpal: incbin "demo:Menu/Back.Pal" mnu_palette: ds.l 256 mnu_frame: incbin "demo:Menu/Credits.Raw" section data_b,bss mnu_savedcredz: ds.b 40*256*3 section data_c,data_c mnu_copper: dc.l $01000211,$01020000,$01040000 dc.l $0108fff8,$010afff8,$010c0000 dc.l $01fc0003 dc.l $008e2881,$009028c1,$00920038,$009400d0 mnu_bplptrs: dc.l $00e00000,$00e20000,$00e40000,$00e60000 dc.l $00e80000,$00ea0000,$00ec0000,$00ee0000 dc.l $00f00000,$00f20000,$00f40000,$00f60000 dc.l $00f80000,$00fa0000,$00fc0000,$00fe0000 mnu_colptrs: ds.l (32+1)*8*2+1 cnop 64,64 mnu_screen: incbin "Demo:Menu/Back2.Raw" ds.b 40*256*2 mnu_morescreen: ds.b 40*256*8