opt c-,l-,o1+,o2+,ow- ***************************************************************************** * * * A S H I D O * * ~~~~~~~~~~~~~~~ * * © by Aragorn of CLUSTER / HAWK 1990 * * * * Planned on 22.11.1990, Started on 04.11.1990, last update on 10.12.1990 * * * ***************************************************************************** * * * Structure of a stage: 12x7 plots (bytes), one byte is divided into * * two nibbles: xxxxyyyy, where x means the number of the color of the * * tile and y the pattern of the tile (see label 'Area'). * * Levels of difficulty: * * * * Level Clock Board Touch * * ------------------------------------------------------ * * Freestyle - - - * * Scorer X - - * * Explorer - X - * * Pioneer X X - * * Hero - X X * * Einstein X X X * * * * For the different boards look at the label 'Table_1', -1 means empty * * plot.Use the '<<'-opcode to create the high-nibble, '!' for the low one. * * * ***************************************************************************** incdir ram:include/ include libraries/dosextens.i include exec/exec_lib.i include exec/execbase.i OpenLibrary equ -552 CloseLibrary equ -414 AllocMem equ -198 FreeMem equ -210 Forbid equ -132 Permit equ -138 FindTask equ -294 Output equ -60 Open equ -30 Close equ -36 Read equ -42 Write equ -48 Delay equ -198 BLTCON0 equ $040 BLTCON1 equ $042 BLTAFWM equ $044 BLTALWM equ $046 BLTCPTH equ $048 BLTBPTH equ $04C BLTAPTH equ $050 BLTDPTH equ $054 BLTSIZE equ $058 BLTCMOD equ $060 BLTBMOD equ $062 BLTAMOD equ $064 BLTDMOD equ $066 DIWSTRT equ $08E DIWSTOP equ $090 DDFSTRT equ $092 DDFSTOP equ $094 BPL1PTH equ $0E0 BPL1PTL equ $0E2 BPL2PTH equ $0E4 BPL2PTL equ $0E6 BPL3PTH equ $0E8 BPL3PTL equ $0EA BPL4PTH equ $0EC BPL4PTL equ $0EE BPL5PTH equ $0F0 BPL5PTL equ $0F2 BPL6PTH equ $0F4 BPL6PTL equ $0F6 BPL1MOD equ $108 BPL2MOD equ $10A BPLCON0 equ $100 BPLCON1 equ $102 BPLCON2 equ $104 DMACONW equ $096 DMACONR equ $002 COP1LCH equ $080 COPJMP1 equ $088 BLTAPTL equ $052 BLTADAT equ $074 BLTBDAT equ $072 JOY0DAT equ $00A JOY1DAT equ $00C SPR0PTH equ $120 CIAAPRA equ $001 VHPOSR equ $006 STARTLIST equ 38 SECTION "Startup",CODE movem.l d0/a0,-(sp) clr.l _WBenchMsg sub.l a1,a1 CALLEXEC FindTask move.l d0,a4 tst.l pr_CLI(a4) beq.s _WB movem.l (sp)+,d0/a0 bra.s _run _WB lea pr_MsgPort(a4),a0 CALLEXEC WaitPort lea pr_MsgPort(a4),a0 CALLEXEC GetMsg move.l d0,_WBenchMsg movem.l (sp)+,d0/a0 _run jsr _Main move.l d0,-(sp) tst.l _WBenchMsg beq.s _Exit CALLEXEC Forbid move.l _WBenchMsg(pc),a1 CALLEXEC ReplyMsg _Exit move.l (sp)+,d0 rts _WBenchMsg ds.l 1 SECTION "Ashido",CODE _Main move.l 4.w,a6 allocate mem and open libs lea DOSName,a1 moveq #0,d0 jsr OpenLibrary(a6) move.l d0,DosBase lea $dff000,a5 move.l #2*5*256*40+10000+4+6*4+4+8,d0 move.l #$10002,d1 jsr AllocMem(a6) tst.l d0 beq Error_1 move.l d0,Mem move.l d0,Plane_1 add.l #5*256*40,d0 move.l d0,Plane_2 add.l #5*256*40,d0 move.l d0,Copper add.l #10000,d0 move.l d0,Sprite add.l #4+6*4+4,d0 move.l d0,Empty move.l DosBase,a6 move.l #Filename,d1 try to load highscores move.l #1005,d2 jsr Open(a6) tst.l d0 beq.s .No_High move.l d0,d7 move.l d7,d1 move.l #Highscores,d2 move.l #6*6*24,d3 jsr Read(a6) move.l d7,d1 jsr Close(a6) .No_High move.l 4.w,a6 bsr Create_Mask create tile-masks bsr Set_RND set RND to rnd (uh...) move.l Copper,a0 create copperlist lea Colortable_1,a1 move.l #Cols_1/2-1,d0 move.l #$210ffffe,d1 SetCols_1 move.l d1,(a0)+ move.w #$180,(a0)+ move.w (a1)+,(a0)+ add.l #$01000000,d1 dbra d0,SetCols_1 move.l #$fffffffe,(a0) jsr Forbid(a6) set registers move.w #$7fff,DMACONW(a5) move.l Copper,COP1LCH(a5) clr.w COPJMP1(a5) move.w #$3081,DIWSTRT(a5) move.w #$30c1,DIWSTOP(a5) move.w #$0038,DDFSTRT(a5) move.w #$00d0,DDFSTOP(a5) move.w #%0101000000000000,BPLCON0(a5) move.w #0,BPLCON1(a5) move.w #%0000000000100100,BPLCON2(a5) move.w #0,BPL1MOD(a5) move.w #0,BPL2MOD(a5) move.l Sprite,a2 create sprites move.w #0,(a2)+ move.w #0,(a2)+ lea sprptr,a1 moveq #6*2-1,d0 setptr move.w (a1)+,(a2)+ dbra d0,setptr move.w #0,(a2)+ move.w #0,(a2)+ move.l Empty,a1 move.l #0,(a1)+ move.l #0,(a1)+ move.l Sprite,a0 move.l #268,d0 move.l #160,d1 move.l #274,d2 move.l #0,d3 bsr Set_Spritepos move.l #268,ptr_x move.l #268,prev_x move.l #160,ptr_y move.l #160,prev_y move.w #%1000011111111111,DMACONW(a5) move.l #0,Clockflag set IRQ-flags + IRQ-ptr move.l #0,Scrollflag bchg #1,$bfe001 jsr Start_Muzak move.l $6c,OldIRQ+2 move.l #NewIRQ,$6c move.l #5,GameMode Mode = Einstein move.l #0,The_Flag clear the mysterious flag Title move.l #0,Clockflag bsr Clear_Plane move.l #256*44,bpsize move.w #%0100000000000000,BPLCON0(a5) move.w #4,BPL1MOD(a5) change into overscan move.w #4,BPL2MOD(a5) for scrolltext move.l #1,Colorflag lea Titleline_1,a0 give out ashido move.l Plane_1,a1 addq.l #2,a1 bsr BigPrint move.l #Text,vektor start scrolltext move.l #8,Smooth move.l #1,Scrollflag Page_I lea Page_1,a0 moveq #7,d7 move.l #38*44,d6 .PrintPage move.l Plane_1,a1 add.l d6,a1 bsr Print add.l #16*44,d6 dbra d7,.PrintPage move.l #$70000,d0 move.b #0,$bfec01 .Wait subq.l #1,d0 beq.s Page_II move.b $bfec01,d1 beq.s .NoKey bsr Check_Key tst.l d1 bne.s Page_II .NoKey btst #6,$bfe001 bne.s .Wait bra Start_Game Page_II lea Page_2,a0 moveq #7,d7 move.l #38*44,d6 .PrintPage move.l Plane_1,a1 add.l d6,a1 bsr Print add.l #16*44,d6 dbra d7,.PrintPage lea Modi,a0 move.l Plane_1,a1 add.l #38*44,a1 move.l GameMode,d0 mulu #41,d0 add.l d0,a0 bsr Print move.l #$70000,d0 move.b #0,$bfec01 .Wait subq.l #1,d0 beq.s Page_Highs move.b $bfec01,d1 beq.s .NoKey bsr Check_Key tst.l d1 bne.s Page_II .NoKey btst #6,$bfe001 bne.s .Wait bra Start_Game Page_Highs lea High_strings,a0 move.l GameMode,d0 mulu #41,d0 add.l d0,a0 move.l Plane_1,a1 add.l #38*44,a1 bsr Print lea Empty_line,a0 move.l Plane_1,a1 add.l #54*44,a1 bsr Print lea Highscores,a0 move.l GameMode,d0 mulu #6*24,d0 add.l d0,a0 moveq #5,d7 move.l #70*44,d6 .Print_Highs movem.l d0-d7/a0-a6,-(sp) lea TextBuffer,a1 moveq #39,d0 .Clear_Buffer move.b #" ",(a1)+ dbra d0,.Clear_Buffer move.b #0,(a1) move.l (a0)+,d0 move.l #5,d1 give out Scores moveq #0,d2 lea TextBuffer+6,a0 bsr BinDec move.b #" ",5(a0) movem.l (sp),d0-d7/a0-a6 lea TextBuffer+16,a1 addq.l #4,a0 moveq #23,d0 .CopyName move.b (a0)+,(a1)+ dbra d0,.CopyName lea TextBuffer,a0 move.l Plane_1,a1 add.l d6,a1 bsr Print movem.l (sp)+,d0-d7/a0-a6 add.l #24,a0 add.l #16*44,d6 dbra d7,.Print_Highs move.l #$70000,d0 move.b #0,$bfec01 .Wait subq.l #1,d0 beq.s Page_III move.b $bfec01,d1 beq.s .NoKey bsr Check_Key tst.l d1 bne Page_II .NoKey btst #6,$bfe001 bne.s .Wait bra Start_Game Page_III lea Page_3,a0 moveq #7,d7 move.l #38*44,d6 .PrintPage move.l Plane_1,a1 add.l d6,a1 bsr Print add.l #16*44,d6 dbra d7,.PrintPage move.l #$70000,d0 move.b #0,$bfec01 .Wait subq.l #1,d0 beq.s Page_IV move.b $bfec01,d1 beq.s .NoKey bsr.s Check_Key tst.l d1 bne Page_II .NoKey btst #6,$bfe001 bne.s .Wait bra Start_Game Page_IV lea Page_4,a0 moveq #7,d7 move.l #38*44,d6 .PrintPage move.l Plane_1,a1 add.l d6,a1 bsr Print add.l #16*44,d6 dbra d7,.PrintPage move.l #$70000,d0 move.b #0,$bfec01 .Wait subq.l #1,d0 beq Page_I move.b $bfec01,d1 beq.s .NoKey bsr.s Check_Key tst.l d1 bne Page_II .NoKey btst #6,$bfe001 bne.s .Wait bra Start_Game Check_Key btst #0,$bfec01 wait until release bne.s Check_Key move.b #0,$bfec01 cmp.b #$75,d1 ESC ? bne.s .Next_Check move.l (sp)+,d1 kill return-address bra End_Game and end game .Next_Check cmp.b #$5f,d1 bhi.s .The_Routine cmp.b #$55,d1 blt.s .The_Routine sub.b #$53,d1 lsr.l #1,d1 move.l #6,d2 sub.b d1,d2 move.l d2,GameMode move.l #1,d1 rts .The_Routine lea The_Word,a0 move.l The_Counter,d2 move.b (a0,d2),d2 cmp.b d1,d2 bne .The_Reset addq.l #1,The_Counter cmp.l #6,The_Counter bne.s .The_Return eor.l #1,The_Flag move.l #0,The_Counter tst.l The_Flag bne.s .The_Doom lea .The_Page_1,a0 moveq #7,d7 move.l #38*44,d6 .PrintPage_1 move.l Plane_1,a1 add.l d6,a1 bsr Print add.l #16*44,d6 dbra d7,.PrintPage_1 move.l #$ffffff,d0 bra.s .The_Return .The_Doom lea .The_Page_2,a0 moveq #7,d7 move.l #38*44,d6 .PrintPage_2 move.l Plane_1,a1 add.l d6,a1 bsr Print add.l #16*44,d6 dbra d7,.PrintPage_2 move.l #$ffffff,d0 .The_Return move.l #0,d1 rts .The_Reset move.l #0,The_Counter bra.s .The_Return .The_Page_2 dc.b " GREETINGS, NOBLE PLAYER. YOU TYPED IN ",0 dc.b "THE WORD THAT WILL GIVE YOU THE POWER TO",0 dc.b " CHEAT THIS GAME.FEEL FREE TO USE THE ",0 dc.b " FOLLOWING KEYS WHILE PLAYING THIS FINE ",0 dc.b " GAME: C - TOGGLE CLOCK ON/OFF ",0 dc.b " S - SKIP DISPLAYED TILE ",0 dc.b " M - INCREASE MULTIPLIER ",0 dc.b " N - LEAVE ACTUAL BOARD. ",0 even .The_Page_1 dc.b " YOU MADE A WISE MOVE TO SWITCH OFF THE ",0 dc.b "BORING CHEATMODE THAT WOULD ONLY DESTROY",0 dc.b " THE COMPETITION TO GET THE BEST SCORE. ",0 dc.b "IF YOU ONLY USED IT TO SEE ALL BOARDS OR",0 dc.b " TO SEE WHAT HAPPENS I MUST BOW BEFORE ",0 dc.b "YOU. OTHERWISE, IF YOU USED IT TO GET AN",0 dc.b "INCREDIBLE SCORE: SHAME ON YOU !!! NEVER",0 dc.b "USE IT AGAIN !!! SIGNED ARAGORN [AW]",0 even The_Word dc.b $bd,$bf,$d3,$d9,$cf,$93 yeah, it's the magic word... even The_Counter ds.l 1 The_Flag ds.l 1 Start_Game bsr Play bra Title End_Game move.l OldIRQ+2,$6c reset IRQ-ptr jsr Stop_Muzak bchg #1,$bfe001 lea GFXName,a1 set WB-copperlist clr.l d0 jsr OpenLibrary(a6) move.l d0,a1 move.l STARTLIST(a1),COP1LCH(a5) clr.w COPJMP1(a5) move.w #$8060,DMACONW(a5) reset registers jsr CloseLibrary(a6) move.l Mem,a1 free mem move.l #2*5*256*40+10000+4+6*4+4+8,d0 jsr FreeMem(a6) jsr Permit(a6) _CLI move.l 4.w,a6 move.l DosBase,a6 try to save scores move.l #Filename,d1 move.l #1006,d2 jsr Open(a6) tst.l d0 beq.s .NoSave move.l d0,d7 move.l d7,d1 move.l #Highscores,d2 move.l #6*6*24,d3 jsr Write(a6) move.l d7,d1 jsr Close(a6) .NoSave move.l 4.w,a6 move.l DosBase,a1 close libs and CLI jsr CloseLibrary(a6) moveq #0,d0 rts Error_1 move.l DosBase,a6 give out error text jsr Output(a6) move.l d0,d1 move.l #Error_text,d2 move.l #Error_len,d3 jsr Write(a6) bra _CLI NewIRQ movem.l d0-d7/a0-a6,-(sp) move.l Plane_1,d0 show bitplanes move.l d0,BPL1PTH(a5) add.l bpsize,d0 move.l d0,BPL2PTH(a5) add.l bpsize,d0 move.l d0,BPL3PTH(a5) add.l bpsize,d0 move.l d0,BPL4PTH(a5) add.l bpsize,d0 move.l d0,BPL5PTH(a5) move.l Sprite,SPR0PTH+28(a5) show sprites move.l Empty,SPR0PTH+0(a5) move.l Empty,SPR0PTH+4(a5) move.l Empty,SPR0PTH+4(a5) move.l Empty,SPR0PTH+8(a5) move.l Empty,SPR0PTH+12(a5) move.l Empty,SPR0PTH+16(a5) move.l Empty,SPR0PTH+20(a5) move.l Empty,SPR0PTH+24(a5) lea Colortable_2,a0 set colors lea $dff180,a1 moveq #31,d0 .SetBackCols move.w (a0)+,(a1)+ dbra d0,.SetBackCols tst.l Colorflag beq.s .NoTitle lea Colortable_3,a0 set scrollcolors lea $dff180,a1 moveq #7,d0 .SetScrollCols move.w (a0)+,(a1)+ dbra d0,.SetScrollCols .NoTitle bsr CheckMouse do mouse-pointer bsr Do_Clock do clock bsr.s Do_Scroll do scrolltext movem.l (sp)+,d0-d7/a0-a6 and return OldIRQ jmp $DEAD0 to death Do_Scroll tst.l Scrollflag really scroll ? bne.s .Do_it rts .Do_it btst #14,DMACONR(a5) scroll smooth bne.s .Do_it move.w #%1110100111110000,BLTCON0(a5) move.w #0,BLTCON1(a5) move.w #0,BLTAMOD(a5) move.w #0,BLTDMOD(a5) move.l Plane_1,d0 add.l #174*44,d0 moveq #2,d1 .Smooth_it btst #14,DMACONR(a5) bne.s .Smooth_it move.l d0,BLTAPTH(a5) subq.l #2,d0 move.l d0,BLTDPTH(a5) addq.l #2,d0 move.w #25*64+22,BLTSIZE(a5) add.l #256*44,d0 dbra d1,.Smooth_it subq.l #1,Smooth beq.s .NewLetter rts .NewLetter move.l #12,Smooth move.l vektor,a0 .GetChar moveq #0,d0 move.b (a0)+,d0 bne.s .NoRestart move.l #Text,a0 bra.s .GetChar .NoRestart move.l a0,vektor sub.b #$20,d0 mulu #3*24*3,d0 lea Charset,a0 add.l d0,a0 move.l Plane_1,a1 add.l #174*44+40,a1 moveq #2,d0 .CopyChar_1 move.l a1,a2 moveq #23,d1 .CopyChar_2 move.b (a0)+,0(a2) move.b (a0)+,1(a2) move.b (a0)+,2(a2) add.l #44,a2 dbra d1,.CopyChar_2 add.l #256*44,a1 dbra d0,.CopyChar_1 rts Clear_Plane move.l Plane_1,a0 clear plane move.l #(5*256*10)-1,d0 .ClearPlane move.l #0,(a0)+ dbra d0,.ClearPlane rts and return Play move.l #0,Scrollflag restore regs bsr WaitBlt move.l #256*40,bpsize move.w #%0101000000000000,BPLCON0(a5) move.w #0,BPL1MOD(a5) change into normal move.w #0,BPL2MOD(a5) for playfield move.l #0,Score play a new game move.l #0,Stage move.l #1,Multiplier .Play_Loop bsr Get_Ready bsr Play_Stage move.l #0,Clockflag tst.l d0 stage solved or escaped ? bne Game_Over bsr.s Good bra.s .Play_Loop rts Good bsr.s Clear_Plane move.l #0,Colorflag lea Good_text,a0 give out congrats move.l Plane_1,a1 add.l #60*40,a1 bsr Print lea Good_text_2,a0 move.l Plane_1,a1 add.l #84*40,a1 bsr Print lea Bonus_text,a0 give out bonus-text move.l Plane_1,a1 add.l #108*40,a1 bsr Print move.l Minutes,d0 mulu #6,d0 move.l Seconds,d1 divu #10,d1 and.l #$ffff,d1 add.l d1,d0 move.l Multiplier,d1 mulu d1,d0 add.l d0,Score move.l #5,d1 give out bonus moveq #0,d2 lea TextBuffer,a0 bsr BinDec move.l Plane_1,a1 add.l #108*40+24,a1 bsr Print bsr MBWait rts Game_Over move.l #0,Colorflag bsr Clear_Plane lea GameOver_text,a0 move.l Plane_1,a1 add.l #86*40,a1 bsr Print move.l Score,d0 move.l #5,d1 give out Scores moveq #0,d2 lea GameOver_score+23,a0 bsr BinDec lea GameOver_score,a0 move.l Plane_1,a1 add.l #110*40,a1 bsr Print bsr MBWait move.l Score,d1 check out highscore lea Highscores,a0 move.l GameMode,d0 mulu #6*24,d0 add.l d0,a0 move.l #0,d0 .Compare_Scores move.l (a0)+,d2 add.l #20,a0 cmp.l d1,d2 blt.s .Highscore addq.l #1,d0 cmp.l #6,d0 bne.s .Compare_Scores rts .Highscore sub.l #24,a0 cmp.l #9,d0 beq .No_Trans lea Highscores+5*24,a1 move.l GameMode,d1 mulu #6*24,d1 add.l d1,a1 moveq #5,d1 .Transfer move.l -24(a1),(a1) move.l -20(a1),4(a1) move.l -16(a1),8(a1) move.l -12(a1),12(a1) move.l -8(a1),16(a1) move.l -4(a1),20(a1) sub.l #24,a1 subq.l #1,d1 cmp.l d0,d1 bne.s .Transfer .No_Trans move.l Score,(a0)+ move.l a0,Hiptr bsr Clear_Plane lea High_text_1,a0 move.l Plane_1,a1 add.l #86*40,a1 bsr Print lea High_text_2,a0 move.l Plane_1,a1 add.l #110*40,a1 bsr Print move.l #19,d0 move.l #110,d1 lea TextBuffer,a0 move.l #20,d2 bsr Input lea TextBuffer,a0 move.l Hiptr,a1 moveq #19,d0 .RightBound cmp.b #0,(a0) beq .Anonymous cmp.b #" ",(a0) bne.s .Start_Copy addq.l #1,a0 move.b #" ",(a1)+ dbra d0,.RightBound bra .Anonymous .Start_Copy cmp.b #0,(a0) beq.s .Clear_End move.b (a0)+,(a1)+ dbra d0,.Start_Copy rts .Clear_End move.b #" ",(a1)+ dbra d0,.Clear_End rts .Anonymous lea Anonymous_text,a0 moveq #19,d0 .Copy_Ano move.b (a0)+,(a1)+ dbra d0,.Copy_Ano rts Get_Ready move.l #0,Colorflag bsr Clear_Plane lea GetReady_text,a0 move.l Plane_1,a1 add.l #90*40,a1 bsr Print bsr.s MBWait rts MBWait btst #6,$bfe001 bne.s MBWait .Release btst #6,$bfe001 beq.s .Release rts Play_Stage move.l #0,Colorflag move.l #0,Minutes move.l #0,Seconds move.l #62,Left start a new stage ! addq.l #1,Stage lea Table_1,a0 -> Empty stage cmp.l #0,GameMode set stage (if necessary) beq.s .NoSet cmp.l #1,GameMode beq.s .NoSet subq.l #6,Left six tiles already on table move.l Stage,d0 cmp.l #15,d0 ble.s .NoRND move.l #15,d0 bsr Get_RND addq.l #1,d0 .NoRND mulu #12*7,d0 add.l d0,a0 .NoSet lea Area,a1 moveq #12*7-1,d0 .Set_Area move.b (a0)+,(a1)+ dbra d0,.Set_Area lea Statusline,a0 prepare playfield move.l Plane_1,a1 add.l #184*40,a1 bsr Print bsr Show_Board give out board cmp.l #0,GameMode check out mode beq.s .NoClock cmp.l #2,GameMode beq.s .NoClock cmp.l #4,GameMode beq.s .NoClock move.l #4,Minutes move.l #0,Seconds move.l #1,Frames move.l #1,Clockflag start clock .NoClock Play_Loop bsr Show_Next loop: next tile tst.l Left stage finished ? bmi EndOfStage move.l Score,d0 give out score move.l #5,d1 moveq #0,d2 lea TextBuffer,a0 bsr BinDec move.l Plane_1,a1 add.l #184*40+8,a1 bsr Print move.l Multiplier,d0 and the multiplier move.l #1,d1 move.l #0,d2 lea TextBuffer,a0 bsr BinDec move.l Plane_1,a1 add.l #184*40+6,a1 bsr Print .wait tst.l Minutes check timer bne.s .Time_Left tst.l Seconds bne.s .Time_Left cmp.l #0,GameMode beq.s .Time_Left cmp.l #2,GameMode beq.s .Time_Left cmp.l #4,GameMode beq.s .Time_Left bra _End .Time_Left cmp.b #$75,$BFEC01 wait... beq _End tst.l The_Flag and the mysterious flag again beq.s .No_The cmp.b #$93,$BFEC01 bne.s .No_93 move.l #0,d0 rts .No_93 cmp.b #$91,$BFEC01 bne.s .No_91 cmp.l #9,Multiplier beq.s .No_91 addq.l #1,Multiplier move.b #$90,$BFEC01 .No_91 cmp.b #$bd,$BFEC01 bne.s .No_BD move.b #$bc,$BFEC01 bra Play_Loop .No_BD cmp.b #$99,$BFEC01 bne.s .No_99 move.b #$98,$BFEC01 eor.l #1,Clockflag .No_99 .No_The btst #6,$bfe001 bne .wait move.l ptr_x,d0 which plot was selected ? sub.l #136,d0 move.l ptr_y,d1 sub.l #50,d1 divu #24,d0 and.l #$ffff,d0 divu #24,d1 and.l #$ffff,d0 lea Area,a0 get ptr on stage-plot add.l d0,a0 mulu #12,d1 add.l d1,a0 divu #12,d1 cmp.b #-1,(a0) occupied ? bne .wait move.l #0,Adder Set adder to zero cmp.b #0,d0 check out the neighbours beq.s .NoCheck_1 cmp.b #-1,-1(a0) occupied ? beq.s .NoCheck_1 addq.l #1,Adder add one to score move.b -1(a0),d2 left one and.l #15,d2 cmp.l Next_Tile,d2 same pattern ? beq.s .NoCheck_1 move.b -1(a0),d2 lsr.l #4,d2 and.l #15,d2 cmp.l Next_Color,d2 same color ? beq.s .NoCheck_1 bra .wait cannot set this ! .NoCheck_1 cmp.b #11,d0 check out the neighbours beq.s .NoCheck_2 cmp.b #-1,1(a0) occupied ? beq.s .NoCheck_2 addq.l #1,Adder add one to score move.b 1(a0),d2 right one and.l #15,d2 cmp.l Next_Tile,d2 same pattern ? beq.s .NoCheck_2 move.b 1(a0),d2 lsr.l #4,d2 and.l #15,d2 cmp.l Next_Color,d2 same color ? beq.s .NoCheck_2 bra .wait cannot set this ! .NoCheck_2 cmp.b #0,d1 check out the neighbours beq.s .NoCheck_3 cmp.b #-1,-12(a0) occupied ? beq.s .NoCheck_3 addq.l #1,Adder add one to score move.b -12(a0),d2 upper one and.l #15,d2 cmp.l Next_Tile,d2 same pattern ? beq.s .NoCheck_3 move.b -12(a0),d2 lsr.l #4,d2 and.l #15,d2 cmp.l Next_Color,d2 same color ? beq.s .NoCheck_3 bra .wait cannot set this ! .NoCheck_3 cmp.b #6,d1 check out the neighbours beq.s .NoCheck_4 cmp.b #-1,12(a0) occupied ? beq.s .NoCheck_4 addq.l #1,Adder add one to score move.b 12(a0),d2 lower one and.l #15,d2 cmp.l Next_Tile,d2 same pattern ? beq.s .NoCheck_4 move.b 12(a0),d2 lsr.l #4,d2 and.l #15,d2 cmp.l Next_Color,d2 same color ? beq.s .NoCheck_4 bra .wait cannot set this ! .NoCheck_4 tst.l Adder neighbours there ? bne.s .SetIt cmp.l #4,GameMode is a neighbour necessary ? beq .wait cannot set tile alone ! cmp.l #5,GameMode beq .wait cannot set tile alone ! .SetIt move.l Next_Color,d0 set new tile lsl.l #4,d0 or.b Next_Tile+3,d0 move.b d0,(a0) cmp.l #4,Adder 4 neighbours ??? bne .NoBonus no special bonus lea Differents,a1 clear neighbours moveq #5,d0 .ClrNeighbours move.b #0,(a1)+ dbra d0,.ClrNeighbours lea Differents,a1 move.b (a0),d0 count different patterns and.l #15,d0 move.b #1,(a1,d0) move.b -1(a0),d0 and.l #15,d0 move.b #1,(a1,d0) move.b -12(a0),d0 and.l #15,d0 move.b #1,(a1,d0) move.b 1(a0),d0 and.l #15,d0 move.b #1,(a1,d0) move.b 12(a0),d0 and.l #15,d0 move.b #1,(a1,d0) clr.l d1 calc new score moveq #5,d0 .Count_Patterns add.b (a1)+,d1 dbra d0,.Count_Patterns add.l d1,Adder add to adder cmp.b #5,d1 new multiplier ?!? bne.s .NoNewMulti cmp.l #9,Multiplier beq.s .NoNewMulti addq.l #1,Multiplier .NoNewMulti lea Differents,a1 clear neighbours moveq #5,d0 .ClrNeighbours2 move.b #0,(a1)+ dbra d0,.ClrNeighbours2 lea Differents,a1 move.b (a0),d0 count different colors lsr.l #4,d0 and.l #15,d0 move.b #1,(a1,d0) move.b -1(a0),d0 lsr.l #4,d0 and.l #15,d0 move.b #1,(a1,d0) move.b -12(a0),d0 lsr.l #4,d0 and.l #15,d0 move.b #1,(a1,d0) move.b 1(a0),d0 lsr.l #4,d0 and.l #15,d0 move.b #1,(a1,d0) move.b 12(a0),d0 lsr.l #4,d0 and.l #15,d0 move.b #1,(a1,d0) lea Differents,a1 calc new score clr.l d1 moveq #5,d0 .CountPatterns2 add.b (a1)+,d1 dbra d0,.CountPatterns2 add.l d1,Adder add to adder cmp.b #5,d1 new multiplier ?!? bne.s .NoNewMulti2 addq.l #1,Multiplier .NoNewMulti2 .NoBonus move.l Adder,d0 add adder*multiplier to score move.l Multiplier,d1 mulu d1,d0 add.l d0,Score bsr Show_Board and update board bra Play_Loop loopieloopieloop _End move.l #1,d0 flag = esc rts end of stage (ESC) EndOfStage move.l #0,d0 flag = solved rts * input string (x/y/buffer/len d0/d1/a0/d2) Input move.l d0,.x move.l d1,.y move.l d2,.maxlen move.l #0,.pos .loop_1 move.l a0,-(sp) lea .cursor,a0 move.l Plane_1,a1 add.l .x,a1 add.l .pos,a1 move.l .y,d0 mulu #40,d0 add.l d0,a1 bsr Print move.l (sp)+,a0 move.b #0,$bfec01 .waitkey move.b $bfec01,d0 beq .waitkey .release btst #0,$bfec01 bne .release movem.l a0/d0,-(sp) lea .space,a0 move.l Plane_1,a1 add.l .x,a1 add.l .pos,a1 move.l .y,d0 mulu #40,d0 add.l d0,a1 bsr Print movem.l (sp)+,a0/d0 cmp.b #$7d,d0 beq .delete cmp.b #$77,d0 beq .return lea .keys(pc),a1 lea .chars(pc),a2 moveq #39,d1 .search cmp.b (a1),d0 beq .found addq.l #1,a1 addq.l #1,a2 dbra d1,.search bra .loop_1 .found move.l .pos,d1 cmp.l .maxlen,d1 bge .loop_1 move.b (a2),(a0)+ move.b (a2),.print move.l a0,-(sp) lea .print,a0 move.l Plane_1,a1 add.l .x,a1 add.l .pos,a1 move.l .y,d0 mulu #40,d0 add.l d0,a1 bsr Print move.l (sp)+,a0 addq.l #1,.pos bra .loop_1 .delete tst.l .pos beq .loop_1 subq.l #1,a0 subq.l #1,.pos movem.l a0/d0,-(sp) lea .space(pc),a0 move.l Plane_1,a1 add.l .x,a1 add.l .pos,a1 move.l .y,d0 mulu #40,d0 add.l d0,a1 bsr Print movem.l (sp)+,a0/d0 bra .loop_1 .return move.b #0,(a0) rts .pos ds.l 1 .maxlen ds.l 1 .x ds.l 1 .y ds.l 1 .keys dc.b $bf,$95,$99,$bb,$db,$b9,$b7,$b5 dc.b $d1,$b3,$b1,$af,$91,$93,$cf,$cd dc.b $df,$d9,$bd,$d7,$d3,$97,$dd,$9b dc.b $9d,$d5,$8d,$8f,$7f,$eb,$fd,$fb dc.b $f9,$f7,$f5,$f3,$f1,$ef,$ed,$8b EVEN .chars dc.b "ABCDEFGH" dc.b "IJKLMNOP" dc.b "QRSTUVWX" dc.b "YZ., 012" dc.b "3456789-" EVEN .cursor dc.b "#",0 .space dc.b " ",0 .print dc.b "X",0 * x/y d0/d1 Set_Tile lea NormMask,a4 set a tile-gfx lea Tiles,a0 get ptr on gfx move.l Next_Tile,d2 mulu #6*5*29*4,d2 move.l Next_Color,d3 mulu #5*29*4,d3 add.l d2,a0 add.l d3,a0 move.l Plane_2,a1 get ptr on target add.l #2,a1 mulu #3,d0 mulu #24*40,d1 add.l d0,a1 add.l d1,a1 move.l next_tile,d0 mulu #6*29*4,d0 add.l d0,a4 move.l next_color,d0 mulu #29*4,d0 add.l d0,a4 moveq #4,d0 and show it : 5 BPs .CopyTile_1 move.l a1,a2 moveq #28,d1 29 lines .CopyTile_2 move.l a2,a3 moveq #3,d2 3 bytes (24 dots) .CopyTile_3 moveq #0,d3 moveq #0,d4 move.b (a3),d3 or it into plane using move.b (a4),d4 a mask eor.b #$ff,d4 and.b d4,d3 move.b (a0)+,d4 and.b (a4)+,d4 or.b d4,d3 move.b d3,(a3)+ dbra d2,.CopyTile_3 add.l #40,a2 dbra d1,.CopyTile_2 sub.l #29*4,a4 add.l #256*40,a1 dbra d0,.CopyTile_1 rts Show_Board lea Board,a0 update board move.l Plane_2,a1 copy board-gfx moveq #4,d7 .Loop_1 move.l a1,a2 move.l #(10*178)-1,d6 .Loop_2 move.l (a0)+,(a2)+ dbra d6,.Loop_2 add.l #256*40,a1 dbra d7,.Loop_1 lea Area+12,a0 show all tiles move.l #11,d0 move.l #0,d1 .Show_1 moveq #0,d2 move.b -(a0),d2 occupied ? cmp.b #-1,d2 beq.s .Next move.l d2,d3 get ptr on gfx and.l #15,d2 move.l d2,Next_Tile lsr.l #4,d3 and.l #15,d3 move.l d3,Next_Color movem.l d0-d1/a0,-(sp) bsr Set_Tile copy tile-gfx movem.l (sp)+,d0-d1/a0 .Next subq.l #1,d0 next plot, cmp.l #-1,d0 bne.s .Show_1 add.l #24,a0 next line. move.l #11,d0 addq.l #1,d1 cmp.l #7,d1 bne.s .Show_1 bsr WaitBlt move.w #$ffff,BLTAFWM(a5) move.w #$ffff,BLTALWM(a5) move.w #%0000100111110000,BLTCON0(a5) move.w #0,BLTCON1(a5) move.w #0,BLTAMOD(a5) move.w #0,BLTDMOD(a5) move.l Plane_1,d0 move.l Plane_2,d1 moveq #4,d7 5 BPs .Blit_1 move.l d1,BLTAPTH(a5) move.l d0,BLTDPTH(a5) move.w #178*64+20,BLTSIZE(a5) .WaitBlt_2 btst #14,DMACONR(a5) bne.s .WaitBlt_2 add.l #256*40,d0 add.l #256*40,d1 dbra d7,.Blit_1 rts Create_Mask lea Tiles,a0 create mask for the gfx-or lea NormMask,a1 moveq #5,d7 .Loop_1 move.l a0,a2 moveq #5,d6 .Loop_2 move.l a2,a3 moveq #28,d5 .Loop_3 move.l a3,a4 moveq #3,d4 .Loop_4 move.b 0*29*4(a4),d0 or.b 1*29*4(a4),d0 or.b 2*29*4(a4),d0 or.b 3*29*4(a4),d0 or.b 4*29*4(a4),d0 move.b d0,(a1)+ addq.l #1,a4 dbra d4,.Loop_4 addq.l #4,a3 dbra d5,.Loop_3 add.l #5*29*4,a2 dbra d6,.Loop_2 add.l #6*5*29*4,a0 dbra d7,.Loop_1 rts Do_Clock tst.l Clockflag count clock bne.s .Do_it flag set ? rts .Do_it subq.l #1,Frames 50 (60) frames done ?!? beq.s .Do_Seconds rts .Do_Seconds move.b VBlankFrequency(a6),d0 restore vblank ptr ext.w d0 ext.l d0 move.l d0,Frames subq.l #1,Seconds next second... beq.s .Show_Clock bpl.s .Show_Clock move.l #59,Seconds subq.l #1,Minutes next minute... .Show_Clock bsr.s Show_Clock rts Show_Clock move.l Minutes,d0 display minute move.l #1,d1 moveq #1,d2 lea TextBuffer,a0 bsr BinDec move.l Plane_1,a1 add.l #184*40+36,a1 bsr Print move.l Seconds,d0 ... second move.l #2,d1 moveq #1,d2 lea TextBuffer,a0 bsr BinDec move.l Plane_1,a1 add.l #184*40+38,a1 bsr Print rts CheckMouse clr.l d0 do mouse-pointer move.w JOY0DAT(a5),d0 move.b prev_x+3,d1 old position move.b d0,prev_x+3 sub.b d0,d1 move.b d1,d2 bpl.s .pos_x neg.b d2 .pos_x cmp.b #127,d2 I really HATE this ble.s .No_WrapX register JOY0DAT !!! add.b #255,d1 .No_WrapX neg.b d1 ext.w d1 ext.l d1 add.l d1,ptr_x lsr.w #8,d0 move.b prev_y+3,d1 move.b d0,prev_y+3 sub.b d0,d1 move.b d1,d2 bpl.s .pos_y neg.b d2 .pos_y cmp.b #127,d2 ble.s .No_WrapY addi.b #255,d1 .No_WrapY neg.b d1 ext.w d1 ext.l d1 add.l d1,ptr_y cmp.l #136,ptr_x check limits bge.s .no_xreset move.l #136,ptr_x .no_xreset cmp.l #423,ptr_x blt.s .no_xreset_2 move.l #422,ptr_x .no_xreset_2 cmp.l #50,ptr_y bge.s .no_yreset move.l #50,ptr_y .no_yreset cmp.l #217,ptr_y blt.s .no_yreset_2 move.l #216,ptr_y .no_yreset_2 move.l Sprite,a0 and set new spritepos move.l ptr_x,d0 move.l ptr_y,d1 move.l ptr_y,d2 addq.l #6,d2 move.l #0,d3 bsr Set_Spritepos rts BigPrint moveq #0,d0 print message (a0/a1) move.b (a0)+,d0 tst.b d0 last letter ? beq.s .EndPrint sub.b #$20,d0 get ptr on gfx mulu #3*24*3,d0 lea Charset,a2 add.l d0,a2 move.l a1,a3 moveq #2,d0 copy letter (3*24*24 dots) .CopyLetter_1 move.l a3,a4 moveq #23,d1 .CopyLetter_2 move.b (a2)+,0(a4) move.b (a2)+,1(a4) move.b (a2)+,2(a4) move.l bpsize,d2 divu #256,d2 add.l d2,a4 dbra d1,.CopyLetter_2 add.l bpsize,a3 dbra d0,.CopyLetter_1 addq.l #3,a1 bra.s BigPrint .EndPrint rts Print moveq #0,d0 print message (a0/a1) move.b (a0)+,d0 tst.b d0 last letter ? beq.s .EndPrint sub.b #$20,d0 get ptr on gfx lsl.l #4,d0 lea Font,a2 add.l d0,a2 move.l a1,a3 moveq #15,d0 copy letter (8*16 dots) .CopyLetter move.b (a2)+,(a3) move.l bpsize,d1 divu #256,d1 add.l d1,a3 dbra d0,.CopyLetter addq.l #1,a1 bra.s Print .EndPrint rts Show_Next move.l #6,d0 create and show next tile bsr Get_RND get RND-tile move.l d0,Next_Tile move.l #6,d0 bsr Get_RND get RND-color move.l d0,Next_Color move.l Next_Tile,d0 mulu #6*5*29*4,d0 move.l Next_Color,d1 mulu #5*29*4,d1 add.l d1,d0 lea Tiles,a0 get ptr on gfx add.l d0,a0 move.l Plane_1,a1 and on plane add.l #177*40+19,a1 moveq #4,d0 copy 5 BPs... .Loop_1 move.l a1,a2 moveq #28,d1 .Loop_2 move.l a2,a3 moveq #3,d2 .Loop_3 move.b (a0)+,(a3)+ dbra d2,.Loop_3 add.l #40,a2 dbra d1,.Loop_2 add.l #256*40,a1 dbra d0,.Loop_1 move.l Left,d0 show number of tiles left move.l #2,d1 moveq #0,d2 lea TextBuffer,a0 bsr.s BinDec move.l Plane_1,a1 add.l #184*40+28,a1 bsr Print subq.l #1,Left rts * Bin to Dec * a0/d0/d1/d2 ^Buffer/Value/Digits/Zeroflag = a0 ^String BinDec lea .Potenzen(pc),a1 convert dx into string moveq #7,d3 8 digits .next moveq #"0",d4 start with zero .dec addq #1,d4 divide... sub.l (a1),d0 bcc.s .dec subq #1,d4 add.l (a1),d0 tst.b d2 leading zero flag set ? bne.s .FlagSet cmp.b #"0",d4 zero ? bne.s .NoZero move.b #" ",d4 bra.s .FlagSet .NoZero moveq #1,d2 set leading zero flag .FlagSet move.b d4,(a0)+ lea 4(a1),a1 dbra d3,.Next cmp.b #" ",-1(a0) number = zero ? bne.s .NotZero move.b #"0",-1(a0) .NotZero move.b #0,(a0) sub.l d1,a0 get ptr on first digit rts .Potenzen dc.l 10000000 dc.l 1000000 dc.l 100000 dc.l 10000 dc.l 1000 dc.l 100 dc.l 10 dc.l 1 Set_RND move.w $dff006,d0 set new RND-seed lsr.w #3,d0 swap d0 move.w $dff006,d0 lsr.w #1,d0 move.l d0,RND_Seed rts Get_RND move.l d0,d1 get new RND move.l RND_Seed(pc),d0 (routine taken from add.l d0,d0 and old C-program and bhi.s .Over changed a bit) eor.l #$1d872b41,d0 .Over move.w $dff006,d2 eor.w d2,d0 move.w $dff006,d2 swap d0 eor.w d2,d0 swap d0 move.l d0,RND_Seed and.l #$ffff,d0 divu d1,d0 swap d0 ext.l d0 rts RND_Seed dc.l $51d0f731 * Sprite-Koordinaten ausrechnen * a0/d0/d1/d2/d3 - sprite/x/y/lasty/at Set_Spritepos move.b d1,(a0) set new sprite-pos ror.w #1,d0 move.b d0,1(a0) move.b d2,2(a0) rol.w #1,d0 and.b #1,d0 btst #8,d1 beq.s .not_first bset #2,d0 .not_first btst #8,d2 beq.s .not_second bset #1,d0 .not_second tst.b d3 beq.s .no_AT bset #7,d0 .no_AT move.b d0,3(a0) rts WaitBlt btst #14,DMACONR(a5) bne.s WaitBlt rts SECTION "Replay",CODE_C start_muzak move.l #data,muzakoffset init0 move.l muzakoffset,a0 add.l #472,a0 move.l #$80,d0 clr.l d1 init1 move.l d1,d2 subq.w #1,d0 init2 move.b (a0)+,d1 cmp.b d2,d1 bgt.s init1 dbf d0,init2 addq.b #1,d2 init3 move.l muzakoffset,a0 lea pointers(pc),a1 lsl.l #8,d2 lsl.l #2,d2 add.l #600,d2 add.l a0,d2 moveq #14,d0 init4 move.l d2,(a1)+ clr.l d1 move.w 42(a0),d1 lsl.l #1,d1 add.l d1,d2 add.l #30,a0 dbf d0,init4 init5 clr.w $dff0a8 clr.w $dff0b8 clr.w $dff0c8 clr.w $dff0d8 clr.w timpos clr.l trkpos clr.l patpos init6 move.l muzakoffset,a0 move.b 470(a0),numpat+1 move.l $6c.w,lev3save+2 move.l #lev3interrupt,$6c.w rts stop_muzak move.l lev3save+2,$6c.w clr.w $dff0a8 clr.w $dff0b8 clr.w $dff0c8 clr.w $dff0d8 move.w #$f,$dff096 rts lev3interrupt bsr.s replay_muzak lev3save jmp $0 replay_muzak movem.l d0-d7/a0-a6,-(a7) addq.w #1,timpos speed cmp.w #6,timpos beq.w replaystep chaneleffects lea datach0(pc),a6 tst.b 3(a6) beq.s ceff1 lea $dff0a0,a5 bsr.s ceff5 ceff1 lea datach1(pc),a6 tst.b 3(a6) beq.s ceff2 lea $dff0b0,a5 bsr.s ceff5 ceff2 lea datach2(pc),a6 tst.b 3(a6) beq.s ceff3 lea $dff0c0,a5 bsr.s ceff5 ceff3 lea datach3(pc),a6 tst.b 3(a6) beq.s ceff4 lea $dff0d0,a5 bsr.s ceff5 ceff4 movem.l (a7)+,d0-d7/a0-a6 rts ceff5 move.b 2(a6),d0 and.b #$f,d0 tst.b d0 beq.s arpreggiato cmp.b #1,d0 beq.w pitchup cmp.b #2,d0 beq.w pitchdown cmp.b #12,d0 beq.w setvol cmp.b #14,d0 beq.w setfilt cmp.b #15,d0 beq.w setspeed rts arpreggiato cmp.w #1,timpos beq.s arp1 cmp.w #2,timpos beq.s arp2 cmp.w #3,timpos beq.s arp3 cmp.w #4,timpos beq.s arp1 cmp.w #5,timpos beq.s arp2 rts arp1 clr.l d0 move.b 3(a6),d0 lsr.b #4,d0 bra.s arp4 arp2 clr.l d0 move.b 3(a6),d0 and.b #$f,d0 bra.s arp4 arp3 move.w 16(a6),d2 bra.s arp6 arp4 lsl.w #1,d0 clr.l d1 move.w 16(a6),d1 lea notetable,a0 arp5 move.w (a0,d0.w),d2 cmp.w (a0),d1 beq.s arp6 addq.l #2,a0 bra.s arp5 arp6 move.w d2,6(a5) rts pitchdown bsr.s newrou clr.l d0 move.b 3(a6),d0 and.b #$f,d0 add.w d0,(a4) cmp.w #$358,(a4) bmi.s ok1 move.w #$358,(a4) ok1 move.w (a4),6(a5) rts pitchup bsr.s newrou clr.l d0 move.b 3(a6),d0 and.b #$f,d0 sub.w d0,(a4) cmp.w #$71,(a4) bpl.s ok2 move.w #$71,(a4) ok2 move.w (a4),6(a5) rts setvol move.b 3(a6),8(a5) rts setfilt move.b 3(a6),d0 and.b #1,d0 lsl.b #1,d0 and.b #$fd,$bfe001 or.b d0,$bfe001 rts setspeed clr.l d0 move.b 3(a6),d0 and.b #$f,d0 move.w d0,speed+2 rts newrou cmp.l #datach0,a6 bne.s next1 lea voi1(pc),a4 rts next1 cmp.l #datach1,a6 bne.s next2 lea voi2(pc),a4 rts next2 cmp.l #datach2,a6 bne.s next3 lea voi3(pc),a4 rts next3 lea voi4(pc),a4 rts replaystep clr.w timpos move.l muzakoffset,a0 move.l a0,a3 add.l #12,a3 move.l a0,a2 add.l #472,a2 add.l #600,a0 clr.l d1 move.l trkpos,d0 move.b (a2,d0),d1 lsl.l #8,d1 lsl.l #2,d1 add.l patpos,d1 clr.w enbits lea $dff0a0,a5 lea datach0(pc),a6 bsr.w chanelhandler lea $dff0b0,a5 lea datach1(pc),a6 bsr.w chanelhandler lea $dff0c0,a5 lea datach2(pc),a6 bsr.w chanelhandler lea $dff0d0,a5 lea datach3(pc),a6 bsr.w chanelhandler move.w #400,d0 rep1 dbf d0,rep1 move.w #$8000,d0 or.w enbits,d0 move.w d0,$dff096 cmp.w #1,datach0+14 bne.s rep2 clr.w datach0+14 move.w #1,$dff0a4 rep2 cmp.w #1,datach1+14 bne.s rep3 clr.w datach1+14 move.w #1,$dff0b4 rep3 cmp.w #1,datach2+14 bne.s rep4 clr.w datach2+14 move.w #1,$dff0c4 rep4 cmp.w #1,datach3+14 bne.s rep5 clr.w datach3+14 move.w #1,$dff0d4 rep5 add.l #16,patpos cmp.l #64*16,patpos bne.s rep6 clr.l patpos addq.l #1,trkpos clr.l d0 move.w numpat,d0 cmp.l trkpos,d0 bne.s rep6 clr.l trkpos rep6 movem.l (a7)+,d0-d7/a0-a6 rts chanelhandler move.l (a0,d1.l),(a6) addq.l #4,d1 clr.l d2 move.b 2(a6),d2 lsr.b #4,d2 beq.s chan2 move.l d2,d4 lsl.l #2,d2 mulu #30,d4 lea pointers-4(pc),a1 move.l (a1,d2.l),4(a6) move.w (a3,d4.l),8(a6) move.w 2(a3,d4.l),18(a6) move.l d0,-(a7) move.b 2(a6),d0 and.b #$f,d0 cmp.b #$c,d0 bne.s ok3 move.b 3(a6),8(a5) bra.s ok4 ok3 move.w 2(a3,d4.l),8(a5) ok4 move.l (a7)+,d0 clr.l d3 move.w 4(a3,d4),d3 add.l 4(a6),d3 move.l d3,10(a6) move.w 6(a3,d4),14(a6) cmp.w #1,14(a6) beq.s chan2 move.l 10(a6),4(a6) move.w 6(a3,d4),8(a6) chan2 tst.w (a6) beq.s chan4 move.w 22(a6),$dff096 tst.w 14(a6) bne.s chan3 move.w #1,14(a6) chan3 bsr.w newrou move.w (a6),(a4) move.w (a6),16(a6) move.l 4(a6),0(a5) move.w 8(a6),4(a5) move.w (a6),6(a5) move.w 22(a6),d0 or.w d0,enbits move.w 18(a6),20(a6) chan4 rts datach0 ds.w 11 dc.w 1 datach1 ds.w 11 dc.w 2 datach2 ds.w 11 dc.w 4 datach3 ds.w 11 dc.w 8 voi1 dc.w 0 voi2 dc.w 0 voi3 dc.w 0 voi4 dc.w 0 pointers ds.l 15 notetable dc.w 856,808,762,720,678,640,604,570 dc.w 538,508,480,453,428,404,381,360 dc.w 339,320,302,285,269,254,240,226 dc.w 214,202,190,180,170,160,151,143 dc.w 135,127,120,113,000 muzakoffset dc.l 0 trkpos dc.l 0 patpos dc.l 0 numpat dc.w 0 enbits dc.w 0 timpos dc.w 0 data INCBIN "ram:Ashido_Music.SFX" SECTION "Data",DATA sprptr dc.w 0,%0000000110000000 dc.w 0,%0000001111000000 dc.w 0,%0000011111100000 dc.w 0,%0000011111100000 dc.w 0,%0000001111000000 dc.w 0,%0000000110000000 Colortable_1 dc.w 1,1,1,1,1,2,1,2,2,2,2,2,2,3,2,3,3,3,3,3,3,4,3,4 dc.w 4,4,4,4,4,5,4,5,5,5,5,5,5,6,5,6,6,6,6,6,6,7,6,7 dc.w 7,7,7,7,7,8,7,8,8,8,8,8,8,9,8,9,9,9,9,9,9,10,9,10 dc.w 10,10,10,10,10,11,10,11,11,11,11,11,11,12,11,12 dc.w 12,12,12,12,12,13,12,13,13,13,13,13,13,14,13,14 dc.w 14,14,14,14,14,15,14,15,15,15,15,15,15,14,15,14 dc.w 14,14,14,14,14,13,14,13,13,13,13,13,13,12,13,12 dc.w 12,12,12,12,12,11,12,11,11,11,11,11,11,10,11,10 dc.w 10,10,10,10,10,9,10,9,9,9,9,9,9,8,9,8 dc.w 8,8,8,8,8,7,8,7,7,7,7,7,7,6,7,6,6,6,6,6,6,5,6,5 dc.w 5,5,5,5,5,4,5,4,4,4,4,4,4,3,4,3,3,3,3,3,3,2,3,2 dc.w 2,2,2,2,2,1,2,1,1,1,1,1,1,0,1,0 dc.w 0 Cols_1 equ *-Colortable_1 Colortable_2 dc.w $000,$08f,$f00,$b00,$700,$0c0,$080,$050 dc.w $0ba,$087,$054,$00f,$00b,$008,$cc0,$990 dc.w $660,$d0d,$909,$606,$222,$950,$740,$530 dc.w $777,$555,$444,$d70,$b60,$950,$dad,$000 Colortable_3 dc.w $000,$66f,$55e,$33c,$22b,$11a,$118,$007 Table_1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b 0<<4!0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1<<4!1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,4<<4!4,-1,-1,-1,-1,5<<4!5,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b 2<<4!2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3<<4!3 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,0,-1,-1,-1,-1,-1,-1,-1,-1,1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,4,-1,-1,5,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,2,-1,-1,-1,-1,-1,-1,-1,-1,3,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,0<<4,-1,-1,-1,-1,-1,-1,-1,-1,1<<4,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,4<<4,-1,-1,5<<4,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,2<<4,-1,-1,-1,-1,-1,-1,-1,-1,3<<4,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,2<<4!0,-1,-1,-1,-1,-1,-1,4<<4!3,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,2<<4!1,-1,-1,-1,-1,-1,-1,4<<4!4,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,2<<4!2,-1,-1,-1,-1,-1,-1,4<<4!5,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,0<<4!1,-1,1<<4!1,-1,2<<4!1,-1,3<<4!4,-1,4<<4!4,-1,5<<4!4 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,5,-1,-1,-1,-1,-1,-1,-1,-1,4,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,2<<4!1,2<<4!0,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,2,-1,-1,-1,-1,-1,-1,-1,-1,3,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,0<<4!1,1<<4!1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,2<<4!3,3<<4!3,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,4<<4!5,5<<4!5,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,2<<4!2,3<<4!2,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,0<<4!0,-1,-1,1<<4!0,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,4<<4!4,4<<4!4,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,1<<4!0,-1,-1,-1,-1,-1,-1,3<<4!3,-1,-1 dc.b -1,-1,1<<4!1,-1,-1,-1,-1,-1,-1,3<<4!4,-1,-1 dc.b -1,-1,1<<4!2,-1,-1,-1,-1,-1,-1,3<<4!5,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,0<<4!3,1<<4!3,2<<4!3,3<<4!3,4<<4!3,5<<4!3,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,5<<4!1,5<<4!2,5<<4!3,5<<4!4,-1,-1,-1,-1 dc.b -1,-1,-1,-1,5<<4!0,-1,-1,5<<4!5,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,3<<4!0,3<<4!1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,3<<4!2,3<<4!3,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,3<<4!4,3<<4!5,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,3<<4!0,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,1<<4!0,0<<4!0,2<<4!0,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,4<<4!0,-1,-1,-1,-1,-1 dc.b -1,0<<4!0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,4<<4!4,-1,-1,4<<4!1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,4<<4!5,4<<4!0,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,4<<4!3,-1,-1,4<<4!2,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,0<<4!1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,1<<4!1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,2<<4!1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,3<<4!1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,4<<4!1,-1,-1,-1,-1,-1,-1 dc.b -1,-1,-1,-1,-1,-1,5<<4!1,-1,-1,-1,-1,-1 even Board incbin ram:Ashido_Board.GFX Tiles incbin ram:Ashido_Tiles.GFX Font incbin ram:Ashido_Font.GFX Charset incbin ram:Ashido_Chars.GFX GfxName dc.b "graphics.library",0 even DosName dc.b "dos.library",0 even Error_text dc.b "?Not enough CHIPMEM to run program",10 Error_len equ *-Error_text even Filename dc.b "Ashido.SCO",0 even Statusline dc.b "SCORE # TILE LEFT TIME : ",0 even TitleLine_1 dc.b " * ASHIDO *",0 even GetReady_text dc.b " GET READY!",0 even GameOver_text dc.b " GAME OVER! ",0 even GameOver_Score dc.b " YOUR SCORE : ",0 even High_text_1 dc.b " VERY GOOD, YOU HAVE MADE A HIGHSCORE ! ",0 even High_text_2 dc.b "YOUR NAME, PLEASE:",0 even Anonymous_text dc.b "AN ANONYMOUS COWARD ",0 even Good_text dc.b " CONGRATULATIONS!",0 even Good_text_2 dc.b " YOU SOLVED THE STAGE.",0 even Bonus_text dc.b " TIME BONUS :",0 even Page_1 dc.b " --- ASHIDO --- ",0 dc.b " ",0 dc.b " CREATED BY ANDRE WICHMANN OF CLUSTER ",0 dc.b " ",0 dc.b " DESIGN, CODE, GFX AND SFX BY ARAGORN ",0 dc.b " ",0 dc.b " @ BY ARAGORN [AW] OF CLUSTER DEC 1990. ",0 dc.b " ",0 even Page_2 dc.b " ",0 dc.b " ",0 dc.b " F1 FREESTYLE ",0 dc.b " F2 SCORER ",0 dc.b " F3 EXPLORER ",0 dc.b " F4 PIONEER ",0 dc.b " F5 HERO ",0 dc.b " F6 EINSTEIN ",0 even Page_3 dc.b "ASHIDO IS FREEWARE AND MAY BE COPIED IF ",0 dc.b " ",0 dc.b " NO CHANGES ARE MADE, THE DOC-FILE IS ",0 dc.b " ",0 dc.b " INCLUDED AND *NO* PROFIT IS MADE WITH ",0 dc.b " ",0 dc.b "DISTRIBUTION.CONTACT ADDRESS (CLUSTER) :",0 dc.b " ",0 Page_4 dc.b " ANDRE WICHMANN (ARAGORN) ",0 dc.b " ",0 dc.b " POSENER WEG 4 ",0 dc.b " ",0 dc.b " 5300 BONN 1 ",0 dc.b " ",0 dc.b " WEST GERMANY ",0 dc.b " ",0 even Modi dc.b " GAME MODE: FREESTYLE ",0 dc.b " GAME MODE: SCORER ",0 dc.b " GAME MODE: EXPLORER ",0 dc.b " GAME MODE: PIONEER ",0 dc.b " GAME MODE: HERO ",0 dc.b " GAME MODE: EINSTEIN ",0 even High_strings dc.b " FREESTYLE HALL OF POINTS: ",0 dc.b " SCORER'S HALL OF FAME: ",0 dc.b " EXPLORER'S HALL OF RULERS: ",0 dc.b " PIONEER'S HALL OF HEROS: ",0 dc.b " THE HERO'S HALL OF CHAMPIONS: ",0 dc.b " EINSTEIN'S HALL OF REINCARNATIONS: ",0 even Highscores dc.l 1000 dc.b "ANDRE WICHMANN " dc.l 800 dc.b "CLUSTER " dc.l 600 dc.b "HAWK " dc.l 400 dc.b "ARAGORN " dc.l 200 dc.b "CLUSTER " dc.l 100 dc.b "HAWK " dc.l 1000 dc.b "ANDRE WICHMANN " dc.l 800 dc.b "CLUSTER " dc.l 600 dc.b "HAWK " dc.l 400 dc.b "ARAGORN " dc.l 200 dc.b "CLUSTER " dc.l 100 dc.b "HAWK " dc.l 1000 dc.b "ANDRE WICHMANN " dc.l 800 dc.b "CLUSTER " dc.l 600 dc.b "HAWK " dc.l 400 dc.b "ARAGORN " dc.l 200 dc.b "CLUSTER " dc.l 100 dc.b "HAWK " dc.l 1000 dc.b "ANDRE WICHMANN " dc.l 800 dc.b "CLUSTER " dc.l 600 dc.b "HAWK " dc.l 400 dc.b "ARAGORN " dc.l 200 dc.b "CLUSTER " dc.l 100 dc.b "HAWK " dc.l 1000 dc.b "ANDRE WICHMANN " dc.l 800 dc.b "CLUSTER " dc.l 600 dc.b "HAWK " dc.l 400 dc.b "ARAGORN " dc.l 200 dc.b "CLUSTER " dc.l 100 dc.b "HAWK " dc.l 1000 dc.b "ANDRE WICHMANN " dc.l 800 dc.b "CLUSTER " dc.l 600 dc.b "HAWK " dc.l 400 dc.b "ARAGORN " dc.l 200 dc.b "CLUSTER " dc.l 100 dc.b "HAWK " Empty_line dc.b " ",0 even Text dc.b " WELCOME TO *ASHIDO*, A NEW GAME CREATED BY CLUSTER" dc.b " IN DECEMBER 1990. DESIGN, CODE, GRAPHICS AND MUSIC" dc.b " WAS MADE BY ANDRE WICHMANN, TESTING WAS DONE BY" dc.b " MARTIN MOHR. THIS GAME IS FREEWARE AND MAY BE" dc.b " COPIED/SPREAD IF NO CHANGES ARE MADE, THE DOC-FILE" dc.b " IS INCLUDED AND -NO- PROFIT IS MADE WITH" dc.b " DISTRIBUTION. CONTACT ADDRESS: ANDRE WICHMANN," dc.b " POSENER WEG 4, 5300 BONN 1, WEST GERMANY. " dc.b " SOME HELLOS ARE GOING TO: ALL MEMBERS OF HAWK" dc.b " (BE PATIENT !) - MADISON (YOUR NEW TUNE IS REALLY" dc.b " COOL, KEEP ON WORKING !) - ANDRE/PDP (SORRY FOR" dc.b " THE LONG DELAY, BUT MY AMIGA WAS OUT OF ORDER AND" dc.b " THE REPAIR TOOK MUCH TIME AND WAS VERY EXPENSIVE.I HOPE" dc.b " THAT I WILL GET THE NEXT MAGS FROM YOU ?) - M.HELBER" dc.b " (I LIKE YOUR DREAMING, BUT IT IS A LITTLE BIT SHORT," dc.b " ISN'T IT ? KEEP ON WRITING !) - T.CARTER/CANADA" dc.b " (I HOPE THAT YOU LIKE MY NEW PROGRAMS, ESPECIALLY" dc.b " PIPELINE II !) - TILL/NK (YOU WILL LIKE CONQUEST !)" dc.b " GATOR AND POSSESSED OF AFL (?) (STILL TRYING TO BECOME" dc.b " FAMOUS ?!?) - HCF (I LIKED YOUR QUIZ ! AND WRITE TO" dc.b " COMMODORE !) - WONKO THE SANE (WHY NOT WRITING" dc.b " A GAME ?) - IRON (I LIKE AMOS, BUT ASSEMBLER IS" dc.b " BETTER. AND: WHICH WAY OUT ???) AND TO ALL AMIGA-" dc.b " AND RPG-FREAKS AROUND THE WORLD. " dc.b " DO YOU KNOW PDP, A RATHER NICE PD-MAGAZINE ?" dc.b " USEFUL PD-PROGRAMS AND SOME MORE OR LESS INTERESTING" dc.b " ARTICLES ARE PUBLISHED BY THIS MAG, IF YOU WANT TO" dc.b " HAVE A COPY OF ONE, SEND A DISK EITHER TO ME OR TO THE CREATORS" dc.b " OF PDP: PLK 117828 C, 5400 KOBLENZ, WEST GERMANY." dc.b " ALL ARTICLES ARE WRITTEN IN GERMAN AND ALL PROGRAMS" dc.b " WERE PACKED WITH THE POWER-PACKER TO PUT AS MUCH" dc.b " PROGRAMS AS POSSIBLE ON THE DISKS.IT IS A RATHER NEW" dc.b " MAG AND NOT A COMMERCIAL ONE, SO GIVE IT A CHANCE !" dc.b " (HEY ANDRE/PDP, WAS THAT ADVERTISING ENOUGH ?)" dc.b " IF YOU WANT TO HAVE OTHER PROGRAMS FROM CLUSTER," dc.b " SEND A DISK EITHER TO ME OR TO GUIDO WEGENER," dc.b " EISENACHERSTR. 2, 5300 BONN 1, WEST GERMANY. PROGRAMS" dc.b " AVAILABLE: PIPELINE AND PIPELINE II (A REALLY NICE" dc.b " GAME !), BRAIN (SMALL MULTITASKING-GAME), ASHIDO (THIS" dc.b " GAME HERE !), NEWBOOT (BOOTBLOCK WITH (OPTIONAL)" dc.b " NOFASTMEM, BLITZTEXT, MAXSIZE AND NO-NTSC), FILESELECT V2" dc.b " (A SMALL BUT COOL FILE-REQUEST WITH SOME NEW FEATURES)," dc.b " BLOB (A JOKE), MEGATEXTER (TO CREATE END- AND SENSE-LESS" dc.b " SCROLLS), X-GRAMS (TO DRAW OCTA-, PENTA-, HEPTA-, ...," dc.b " XTA-GRAMS), WA-TOR (A SIMULATION OF THE POPULATION OF" dc.b " FISHES AND SHARKS, SEE SCIENTIFIC AMERICAN) AND SOME" dc.b " OTHER STUFF SOON FINISHED LIKE CONQUEST (THE ULTIMATE" dc.b " STRATEGIC GAME) OR AN ADVENTURE-INTERPRETER (A LANGUAGE" dc.b " TO CREATE ADVENTURES). YOU CAN FIND SOME OF THESE" dc.b " PROGRAMS ALSO ON SOME FISH-DISKS. " dc.b " DO YOU LIKE ROLE-PLAYING GAMES ??? I DO NOT ONLY MEAN" dc.b " COMPUTER ROLE-PLAYING GAMES BUT RPG-SYSTEMS LIKE SDL," dc.b " AD&D, DSA, MERS, MIDGARD ETC. WE IN CLUSTER ARE FANATIC" dc.b " ROLE-PLAYERS AND WANT TO HAVE CONTACT TO MORE RPG-PLAYERS." dc.b " SO FEEL FREE TO SEND US A LETTER IF YOU ALSO LIKE" dc.b " PLAYING THAT STUFF ! I WONDER WHY ROLE-PLAYING GAMES ARE" dc.b " THAT UNKNOWN IN GERMANY. IN THE USA AD&D IS PLAYED EVERY" dc.b "WHERE, BUT HERE IN GERMANY EVERYBODY THINKS ABOUT THEATRES" dc.b " IF THEY HERE THE WORD 'ROLE-PLAYING'... " dc.b " BY THE WAY, I INCLUDED A CHEAT-MODE TO TEST THIS GAME. TRY" dc.b " TO FIND IT ! IF YOU ARE ABLE TO PROGRAM ASSEMBLER YOU ONLY" dc.b " HAVE TO TAKE A DEEP LOOK INTO THE SOURCE-CODE AND YOU WILL" dc.b " CHECK IT OUT...I ALSO INCLUDED ONE IN PIPELINE II, BECAUSE" dc.b " I THOUGHT, WHY SHOULD CHEAT-MODES ONLY BE INCLUDED IN" dc.b " COMMERCIAL GAMES ??? BUT I HOPE THAT IT IS NOT USED" dc.b " TO GET HYPER-SCORES... " dc.b " SEE YOU, GUYS... SIGNED ARAGORN [AW]... " dc.b " 'HAU WEG DIE SCHEISSE !' (WERNER) " dc.b " ",0 even SECTION "Buffers",BSS DosBase ds.l 1 Mem ds.l 1 Plane_1 ds.l 1 Plane_2 ds.l 1 Copper ds.l 1 Sprite ds.l 1 Empty ds.l 1 ptr_x ds.l 1 ptr_y ds.l 1 prev_x ds.l 1 prev_y ds.l 1 Next_Tile ds.l 1 Next_Color ds.l 1 NormMask ds.b 6*6*29*4 Minutes ds.l 1 Seconds ds.l 1 Frames ds.l 1 Left ds.l 1 TextBuffer ds.b 64 Area ds.b 12*7 Clockflag ds.l 1 Scrollflag ds.l 1 Smooth ds.l 1 vektor ds.l 1 Score ds.l 1 Adder ds.l 1 Multiplier ds.l 1 Differents ds.b 6 bpsize ds.l 1 GameMode ds.l 1 Colorflag ds.l 1 Stage ds.l 1 Hiptr ds.l 1