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
 

Add new attachment

Only authorized users are allowed to upload new attachments.

List of attachments

Kind Attachment Name Size Version Date Modified Author Change note
atr
catapill.atr 92.2 kB 1 09-Mar-2010 08:51 Carsten Strotmann
« This page (revision-3) was last changed on 23-Jul-2010 17:25 by Carsten Strotmann