! Catepill General Information Author: Carsten Strotmann \\ Language: ACTION! \\ Compiler/Interpreter: ACTION / Bibo Assembler \\ Published: 14.06.2006 \\ (c) 1990, Carsten Strotmann unfinished Game with Level Editor written in ACTION! !! Game Idea: Catapill is Sokoban on steroids: you drive the small catepill around in a huge warehouse and must complete missions There are several good in the warehouse, and rules that must be observed: * containers with base (L) and Acid (S) should never be stored side-by-side, else..... * containers including magnetics (positive and negative available) should never stored next to iron boxes, else they stick together * some containers contain explosives * some contain hidden time-bombs, that are acitivated once the container is moved * the catapill needs to refill gas from time to time * the catapill can be damaged, so it is running slower, or can only turn in one direction * there was also the idea to include some ideas from the boardgame "roborally" in this game !! How to use boot attached Disk, on the DOS prompt, start "CTG2.COM" for a shortly playable version with Splash-Screen, or first load "CATAPILL.COM" and then "C.COM" for the latest binary of the game. start "CEDIT.COM" for the Level Editor. {{{ ;******************************** ;** ** ;** Phoenix SoftCrew ACTION! ** ;** Programme und Tips f. 8Bit ** ;** ** ;** Carsten Strotmann ** ;** An der Kreutzbrede 20 ** ;** ** ;** D- 4410 Warendorf 1 ** ;** (02581) 8920 ** ;** ** ;******************************** ; Programmname:CATAPILL The Game ; Programmierer:PSC/Carsten Strotmann ; Filename:TG.ACT ; erste Version:02.07.90 ; letzte Aenderung:19.03.93 ; Zweck: ; Bemerkung: ; ; INCLUDE "D:SYSTEM.ACT" MODULE BYTE sflg=$03C6, phase, direc, ; Richtung Joystick px=$3DA,py=$3DB, ; Playerposition ax=$3DC,ay=$3DD, ; Absolute Position dx=$3DE,dy=$3DF, ; Richtungen hx=$3E0,hy=$3E1, ; Abweichung zum Zentr. pp,sti,str,player, consol=$D01F CARD hpixz=$3CA,vpixz=$3CC, svscrol=$3C0, shscrol=$3C1, plf=[$2003], rtclok=$12, points,copadr=$3C2 BYTE ARRAY raupe ($100), raupe1($100), raupe2($100), boom ($100), cols(3), color(3)=$3CE, save1($21), save2($21) INCLUDE "D:TGINC.ACT" PROC Count (BYTE xx,yy) BYTE c c=Look (xx,yy) IF c#0 THEN FOR c=1 TO 20 DO Sound (0,192-c,14,14-(C/2)) Pause (1) OD SndRst () FI Restaur (xx,yy,9) RETURN BYTE FUNC ChkLS (BYTE xx,yy,u) BYTE res,z res=0 z=Look (xx+1,yy) IF z+u=222 THEN res=1 FI z=Look (xx-1,yy) IF z+u=222 THEN res=1 FI z=Look (xx,yy+1) IF z+u=222 THEN res=1 FI z=Look (xx,yy-1) IF z+u=222 THEN res=1 FI RETURN (res) PROC BoomK (BYTE xx,yy) Sound (0,6,4,10) Restaur (xx,yy,93) Restaur (xx+1,yy,93) Restaur (xx+1,yy+1,93) Restaur (xx+1,yy-1,93) Restaur (xx-1,yy,93) Restaur (xx-1,yy+1,93) Restaur (xx-1,yy-1,93) Restaur (xx,yy+1,93) Restaur (xx,yy-1,93) Pause (100) SndRst () ClearK (xx+1,yy) ClearK (xx+1,yy+1) ClearK (xx+1,yy-1) ClearK (xx-1,yy) ClearK (xx-1,yy+1) ClearK (xx-1,yy-1) ClearK (xx,yy+1) ClearK (xx,yy-1) ClearK (xx,yy) RETURN PROC MoveBox (BYTE xx,yy) BYTE z,u,sx,sy,sc z=-1 DO z==+1 u=Look (xx,yy) xx==+dx yy==+dy UNTIL u=0 OR u=1 OR u=9 OR u=21 OR u=13 OR u=17 OR u=25 OR z>3 OD sc=u sx=xx-dx sy=yy-dy xx==-dx yy==-dy IF z<4 AND u=0 OR u=9 AND z>0 THEN Sound (0,50,12,9) FOR u=1 TO z DO xx==-dx yy==-dy MoveK (xx,yy,xx+dx,yy+dy) OD ClearK (xx,yy) SndRst () u=Look (xx+dx,yy+dy) IF u=113 OR u=109 THEN u=ChkLS (xx+dx,yy+dy,u) IF u=1 THEN BoomK (xx+dx,yy+dy) FI FI FI IF z>0 THEN IF sc=9 THEN Count (sx,sy) FI IF sc=21 AND dx=0 THEN BLft (sx,sy-dy) FI IF sc=13 AND dy=0 THEN BUp (sx-dx,sy) FI IF sc=17 AND dy=0 THEN BDwn (sx-dx,sy) FI IF sc=25 AND dx=0 THEN BRht (sx,sy-dy) FI FI RETURN PROC PosR () BYTE U CARD xx,yy ax=0 ay=0 xx=0 yy=0 DO DO u=Look(xx,yy) xx==+1 UNTIL xx=40 OR u=29 OD IF xx=40 THEN xx=0 FI yy==+1 UNTIL yy=24 OR u=29 OD ax=xx-1 ay=yy-1 xx==*8-hx yy==*16-hy IF xx>152 THEN px==+xx-152 xx=152 FI IF yy>160 THEN py==+yy-160+1 yy=160 FI DO IF xx>0 THEN sflg==%4 xx==-1 vpixz==+1 FI IF yy>0 THEN sflg==%1 yy==-1 hpixz==+1 FI DO UNTIL sflg=0 OD UNTIL xx=0 AND yy=0 OD RETURN PROC Blend () BYTE u,c color(0)=cols(0)&$F0 color(1)=cols(1)&$F0 color(2)=cols(2)&$F0 FOR u=0 TO $F DO FOR c=0 to 3 DO IF color(c)<cols(c) THEN color(c)==+1 FI OD Pause (3) OD RETURN PROC Change () BYTE c P_Clear(2) P_Clear(3) FOR c=1 TO 20 DO Sound (0,100+c,12,C/2) Pause (1) OD Restaur (ax,ay,29) IF player = 0 THEN MoveBlock (save1,$3C0,$21) MoveBlock ($3C0,save2,$21) ELSE MoveBlock (save2,$3C0,$21) MoveBlock ($3C0,save1,$21) FI ClearK (ax,ay) player == ! 1 ARaupe () SndRst () Pause (2) RETURN PROC ShowTime () BYTE hpos1=$3D7, hpos=$D000, t1=$12, t2=$13, xv, yv CARD pmadr=$2D5, adr IF t2>$1 OR hpos1=0 THEN t2=0 t1==+1 IF t1>19 THEN t1=0 Change () FI IF t1=10 THEN Change () FI IF t1<5 OR t1>14 THEN yv=0 ELSE yv=$B FI IF t1<10 THEN xv=7 ELSE xv=0 FI adr=pmadr+$11D+yv Zero (pmadr+$11D,$18) sflg=$10 DO UNTIL sflg=0 OD hpos1=$BE+xv hpos=hpos1 sflg=$10 DO UNTIL sflg=0 OD MoveBlock (adr,timpl+$C*t1,$C) FI RETURN PROC BoomBox (BYTE xx,yy) BYTE u,x,z BYTE ARRAY hpos=$3D2 z=0 FOR u=0 TO 7 DO FOR x=0 TO 10 DO Sound (0,z,0,15) z==+1 OD Animate (0,px+(dx*8),py+(dy*16),u,boom) IF u=4 THEN ClearK (xx,yy) FI Pause (2) OD SndRst () RETURN PROC MainInit () BYTE chsalt=$26B, chbas =$2F4, dmactl=$22F, nmien=$D40E,chr, crsinh=$2F0 CARD savmsc=$58 BYTE ARRAY file (20),scolor=$2C4 hx=$20 hy=$40 px=47+hx py=61+hy PM_Init () MPA_Set () chsalt=Set_Ramtop (8) dmactl=0 Font_Load ("D1:CATAPILL.FNT",chsalt) nmien==%$C0 chbas=chsalt+4 Font_Load ("D1:TOPLINE.FNT",chbas) Close (1) Open (1,"D1:TOPLINE.SCR") BGet (1,savmsc,160) Close (1) SCopy (file,"D1:LEVELDAT.SCR") Screen_Load (file) MPA_Load (raupe1,"D:RAUPE.MPA") MPA_Load (raupe2,"D:RAUPE2.MPA") MPA_Load (boom,"D:BOOM.MPA") MoveBlock (raupe,raupe1,$100) dmactl=34 PM_Set () PM_Col (2,0,6) PM_Col (3,2,10) PM_Col (0,0,7) PM_Col (1,0,12) crsinh=1 Dspl () Init () scolor(0)=$C4 scolor(1)=$1A scolor(2)=$86 scolor(4)=$0 points=0 sflg=$F0 DO UNTIL sflg=0 OD dx=1 dy=0 direc=2 phase=0 Blend () PosR () ClearK (ax,ay) Dreh(0) player=0 MoveBlock (save2,$3C0,$21) RETURN PROC Main () BYTE st,chr MainInit () ARaupe () rtclok=18 DO ShowTime () st=Stick(player)!$F str=Strig(player) dx=0 dy=0 IF st=1 THEN sti=0 dy=-1 ; OBEN ELSEIF st=2 THEN sti=1 dy=1 ; UNTEN ELSEIF st=4 THEN sti=2 dx=-1 ; LINKS ELSEIF st=8 THEN sti=3 dx=1 ; RECHTS FI chr=Look (ax+dx,ay+dy) ; PRINTB(CHR) IF sti=direc THEN IF chr=0 OR (chr>12 AND chr<26) THEN IF st=1 THEN Up () FI IF st=2 THEN Down () FI IF st=4 THEN Left () FI IF st=8 THEN Right () FI ELSEIF chr#29 THEN IF str THEN MoveBox (ax+dx,ay+dy) ELSEIF chr>25 THEN BoomBox (ax+dx,ay+dy) FI FI ELSEIF st#0 THEN Dreh (sti) Pause (5) FI OD RETURN }}}