Changes

Jump to: navigation, search

ZACK

8,601 bytes added, 07:46, 5 September 2006
ZACK Programing
==== ZACK Programming Language ====
<br>
<pre>
BACKGROUND (x,y) = value Set a background tile
BACKGROUND COLLISION from[ .. to] Test for background collision
BORDER ink Set Border
BYTE var{ ,var} Define Byte variable(s)
CLEAR SCREEN byte Clear the screen
CONSOLE Output on Console
CONST var = value{ ,var = value} Define constant(s)
COPY LAYOUT x,y,width,height TO x,y Copy a section of the Layout
COPY SPRITE n TO n Copy a Sprite
DEC var Decrement a variable
DEFINE var = value{ ,var = value} Define constant(s) (Same as CONST)
DEFINE KEY key Define a key
DEFINE MAIN TASK number Define a Main Task
DEFINE MARKER TASK number Define a Marker Task
DEFINE MOVE TASK number Define a Move Task
DEFINE DRAW TASK number Define a Draw Task
DRAW x,y[,pen] Not implemented (Draw a line)
DRAW TASK number Execute DRAW Task
ELSE ELSE statement
ELSE IF expr ELSE IF statement
ENDIF End of IF statement
FLASH OBJECT Flash the current Object
FOR var = start TO end[ STEP step] For loop statement
GOTO line GOTO statement
GOTO MARKER marker Go to Layout Marker
HIDDEN SCREEN Output on Hidden Screen
IF expr[ GOTO line] IF or IF .. GOTO statement
INC var Increment a variable
INK pen, ink Set the given pen to palette colour
INPUT var[:width] Assign user input to variable
INSERT HIGH position Insert a High Score in the table
KILL number Kill given Object
KILL ALL Kill all Objects
LOCATE x,y Position text cursor
MAIN TASK number Execute MAIN Task
MOVE x,y Move graphics position
MOVE OBJECT dx,dy[ SCROLL] Move current Object (include scroll)
MOVE OBJECTS Execute MOVE Tasks for all Objects
MOVE TASK number Execute given MOVE Task
NEW OBJECT obj,part,x,y,mt[,dt[,v1..]] Create a new Object (mt = Move Task, dt=Draw Task)
NEXT Continue FOR loop
OBJECT COLLISION from[ .. to] Check for collision with another Object
ORIGIN x,y Change the output Origin
PAUSE delay[ KEY key] Pause for given time (or until key pressed)
PLAY FX number Not implemented (Play given Sound Effect)
PLAY TUNE number Not implemented (Play given Tune)
PLOT x,y[,pen] Not implemented (Plot a point)
PRINT [@x,y,]expr[:width] Print value (at position, with given width)
REPEAT Repeat loop statement
RESET var{ ,var} Reset variable(s) to zero
RESET INKS Reset palette to default???
RETURN Return from a Task
SCORE var{, var} Define a Score variable
SCREEN TYPE number Set the screen format
SCROLL Scroll the layout (if scrolling on)
SCROLL OFF Turn automatic scrolling off
SCROLL ON Turn automatic scrolling on
SHOW BACKGROUND Show the background
SHOW KEY key Show the label for the given key
SHOW MINI number Show given Mini-Sprite at current position
SHOW OBJECT obj,part Show an Object at current position
SHOW OBJECTS Show all Objects
SHOW SCREEN Show the hidden screen
SHOW SHOT number Show Shot-Sprite at current position
SHOW SPRITE number Draw a Sprite at the current position
STOP FX Not implemented (Stop Sound Effect)
STOP TUNE Not implemented (Stop Tune playing)
STRING var{ ,var} Define a String variable
SWAP SPRITE number,number Swap two sprites
UNTIL expr End of REPEAT..UNTIL loop
VISIBLE SCREEN Output on the Visible Screen
WEND End of WHILE loop
WHILE expr WHILE loop statement
WINDOW x,y,width,height Define a window for output
WORD var{ ,var} Define a Word variable
</pre>
<br>
Some of these commands may not be fully implemented.<br>
<br>
Below is an example ZACK program:<br>
<pre>
WORD mky,dots,w1,w2
BYTE pills,stage,m,power

PAUSE 10

SCREEN TYPE 1
MAIN TASK 1

DEFINE MAIN TASK 1

0 stage = 1
m = 0
1 KILL ALL
NEW OBJECT 1,28,48,0,0,-2
INC m
GOTO MARKER m
mky = lay_y-184
COPY LAYOUT 256,mky,32,14 TO 0,mky

x = 24
y = 0
FOR v1 = 0 TO m2
NEW OBJECT 4,x+24,-16,y,1,2,0,0,1,0,0,0,lay_x+x,lay_y-16
x = x+2
y = y+4
IF y=12
y = 0
ENDIF
NEXT

MAIN TASK 2
MAIN TASK 3

WHILE dots
HIDDEN SCREEN
SHOW BACKGROUND
SHOW OBJECTS
SHOW SCREEN
CONSOLE
MOVE OBJECTS
COPY SPRITE 15 TO 35
COPY SPRITE 34 TO 15
COPY SPRITE 33 TO 34
COPY SPRITE 32 TO 33
COPY SPRITE 35 TO 32
IF INKEY 38
MAIN TASK 2
ENDIF
WEND
INC stage
IF m1 GOTO 1
GOTO 0

DEFINE MAIN TASK 2

HIDDEN SCREEN
CLEAR SCREEN 0
PRINT @11,0,"PAC ATTACK"
PRINT @12,2,"Stage"
PRINT @18,2,stage:2
v2 = 32
RESET dots,pills
FOR w2 = mky TO mky+448 STEP 32
FOR w1 = 32 TO 280 STEP 8
v1 = BACKGROUND (w1,w2)
MOVE w1/8+12,v2
IF v1=0
v3 = 1
ELSE IF v1<15
v3 = 2
ELSE IF v1<18
v3 = v1-12
ELSE
v3 = 0
ENDIF
SHOW SHOT v3
IF v1=16
INC dots
ELSE IF v1=17
INC pills
ENDIF
NEXT
v2 = v2+4
NEXT
PRINT @10,13,"Dots :"
PRINT @17,13,dots:4
PRINT @10,15,"Pills :"
PRINT @17,15,pills:4
SHOW SCREEN
REPEAT
UNTIL INKEY 47


DEFINE MAIN TASK 3

BYTE c1,c2,i1[5],i2[5]
DEFINE i1[1]=3,i1[2]=2,i1[4]=6,i1[5]=13
DEFINE i2[1]=3,i2[2]=2,i2[3]=4,i2[4]=0,i2[5]=13
CONSOLE

v2 = 1
FOR w2 = mky TO mky+448 STEP 32
v4 = 1
FOR w1 = 32 TO 280 STEP 8
v1 = BACKGROUND (w1,w2)
IF v1=0
v3 = 1
ELSE IF v1<15
v3 = 2
ELSE IF v1<18
v3 = v1-12
ELSE
v3 = 0
ENDIF
c1 = i1[v3]
c2 = i2[v3]
PLOT v4,v2,mask[c1]
PLOT v4,v2+1,mask[c2]
i1[4] = i1[4] XOR 3
INC v4
NEXT
v2 = v2+2
NEXT


DEFINE MOVE TASK 0

power = 0
w1 = lay_x+28
w2 = lay_y+48
IF NOT ((w1 AND 7) OR (w2 AND 31))
v6 = BACKGROUND (w1+v1*4,w2+v2*4)
IF v6<16
v1 = 0
v2 = 0
ENDIF
ENDIF
IF (lay_y AND 31)=16
IF v1<2 AND INKEY 63
v6 = BACKGROUND (w1+8,w2)
IF v6>15
v1 = 2
v2 = 0
object = 0
GOTO 1
ENDIF
ELSE IF v1>-2 AND INKEY 71
v6 = BACKGROUND (w1-1,w2)
IF v6>15
v1 = -2
v2 = 0
object = 1
GOTO 1
ENDIF
ENDIF
ENDIF
IF (lay_x AND 7)=4
IF v2<8 AND INKEY 22
v6 = BACKGROUND (w1,w2+32)
IF v6>15
v1 = 0
v2 = 8
object = 3
ENDIF
ELSE IF v2>-8 AND INKEY 19
v6 = BACKGROUND (w1,w2-32)
IF v6>15
v1 = 0
v2 = -8
object = 2
ENDIF
ENDIF
ENDIF
1 lay_x = (lay_x+v1) AND 255
lay_y = lay_y+v2
IF NOT ((w1 AND 7) OR (w2 AND 31))
v6 = BACKGROUND (w1,w2)
IF v6=16 OR v6=17
IF v6=16
DEC dots
ELSE
power = 1
ENDIF
BACKGROUND (w1,w2) = 63
v4 = w1/8-3
v5 = ((w2-mky+32) AND &FFE0)/16+1
PLOT v4,v5,0
PLOT v4,v5+1,0
ENDIF
ENDIF
IF v1 OR v2
part = (part+1) MOD 6
ENDIF
OBJECT COLLISION 4
IF hit
BORDER 26
ENDIF

DEFINE MOVE TASK 1

BYTE a,b,d[4],adx[3],ady[3]
DEFINE adx[1]=8,adx[3]=-8
DEFINE ady[0]=-32,ady[2]=32

IF power
v3 = 255
IF object=4
object = 5
v1 = -v1
v2 = -v2
ENDIF
ENDIF

IF v3
DEC v3
ELSE
object = 4
ENDIF

IF NOT ((w1 AND 7) OR (w2 AND 31))
v6 = BACKGROUND (w1+v1*4,w2+v2*4)
IF v1<>0
a = BACKGROUND (w1,w2-32)
b = BACKGROUND (w1,w2+32)
ELSE
a = BACKGROUND (w1-8,w2)
b = BACKGROUND (w1+8,w2)
ENDIF
IF v6<16 OR (a>15) OR (b>15)
a = DIR (1)/2
IF v3
a = a XOR 2
ENDIF
IF a=(v4 XOR 2)
d[3] = a
b = 0
ELSE
d[0] = a
b = 1
ENDIF
a = RND AND 3
IF a=(v4 XOR 2)
a = (a+1) AND 3
ENDIF
FOR v4 = b TO b+2
d[v4] = a
a = (a+1) AND 3
NEXT
d[4] = a
a = 0
GOTO 2
1 INC a
IF a>4
PAUSE 100
ENDIF
2 v4 = d[a]
v6 = BACKGROUND (w1+adx[v4],w2+ady[v4])
IF v6<15 OR (v6=15 AND ((v4<>0) OR (RND AND 7))) GOTO 1
v1 = adx[v4]/4
v2 = ady[v4]/4
ENDIF
ENDIF
w1 = w1+v1
w2 = w2+v2

x = MAX (MIN (w1-lay_x,72),-16)
y = MAX (MIN (w2-lay_y,160),-64)
part = (part AND 12)+((part+1) AND 3)
</pre>
<br>
[[User:220.233.179.160|220.233.179.160]] 09:46, 5 September 2006 (CEST)
Anonymous user