home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GEMini Atari
/
GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso
/
files
/
games
/
arcade
/
stonedlx
/
stonedlx.gfa
(
.txt
)
< prev
next >
Wrap
GFA-BASIC Atari
|
1993-08-14
|
28KB
|
1,268 lines
CLEAR
pl#=1
npl#=1
js#=1
skill_level#=1
IF XBIOS(4)<>0
ALERT 3," | TO PLAY STONE-AGE|GO TO LOW RESOLUTION",1,"EXIT",b#
SYSTEM
ENDIF
DIM stone#(32,19),stickx#(10),sticky#(10),points#(2),player#(2)
DIM strip$(100),file$(50),zeit#(2),punkte#(2)
DIM screen$(95,31),wlvl#(2),man#(2),score#(2)
DIM keydecode%(10)
file$=""
GOSUB screen_init
FOR i#=0 TO 50
READ strip$(i#)
EXIT IF strip$(i#)="***"
NEXT i#
strip$(i#)=""
strip$(i#+1)=""
GOSUB makecolor
SETCOLOR 15,7,7,7
DATA Info, Instructions
DATA ----------------
DATA 1,2,3,4,5,6,""
DATA Disk, Load World , Save World ,""
DATA Play, PLAYERS , One Player , Two Players , LEVEL TO START , Level 1 , Level 2 , Level 3 , Level 4 , Level 5 , Joy Stick , Keypad ,""
DATA Genesis, New World , Create/Edit ,""
DATA Leave, Bye-Bye ,""
DATA ***
CLS
GET 75,45,235,130,help$
GET 75,45,235,90,name_input$
GET 0,0,309,179,clear$
GET 0,0,9,9,blank$
GOSUB mainscreen
DO
ON MENU
' Print At(1,1);Mousex,Mousey
' Z$=Inkey$
' Print At(1,3);Len(Z$),Left$(Z$)''Asc(Z$),Right$(Z$)''Asc(Right$(Z$))
LOOP
PROCEDURE screen_init
FOR x#=1 TO 95
screen$(x#,1)="0000000000000000000000000000000"
NEXT x#
screen$(1,1)="NO"
screen$(20,1)="NO"
screen$(39,1)="NO"
screen$(58,1)="NO"
screen$(77,1)="NO"
RETURN
PROCEDURE mainscreen
MENU strip$()
MENU 15,2
MENU 18,2
MENU 15+npl#,1
MENU 24+js#,1
SHOWM
DEFTEXT 12,2,0,32
TEXT 15,50,"S T O N E - A G E"
TEXT 55,80,"D E L U X E !"
DEFTEXT 3,0,0,13
TEXT 58,120,"Modified By John Hickey"
DEFTEXT 7,0,0,4
ttte$="From An ST Conversion By David Addison"
TEXT 48,170,ttte$
DEFTEXT 7,0,0,4
TEXT 70,190,"Of A Program By Klaus Kramer!"
'
ON MENU GOSUB menu
RETURN
PROCEDURE menu
a$=strip$(MENU(0))
IF MID$(a$,1,6)=" Level"
STICK 0
ALERT 3,"| Would You Like To| Practice Or Play?",2,"Practice|PLAY!",b#
play#=0
IF b#=2
play#=1
STICK 0
ALERT 3,"| Select Your SKILL Level",2,"Simple|Tougher|HARD!",b#
skill_level#=b#
ENDIF
FOR x#=1 TO 2
wlvl#(x#)=VAL(MID$(a$,8))
NEXT x#
HIDEM
GOSUB stoneage_play
ENDIF
IF a$=" New World "
STICK 0
ALERT 1,"| This Will OBLITERATE| All Levels!",2,"Do It!|I Goofed!",b#
IF b#=1
GOSUB screen_init
ENDIF
ENDIF
IF a$=" Load World "
GOSUB load_world
ENDIF
IF a$=" Save World "
GOSUB save_world
ENDIF
IF a$=" Create/Edit "
GOSUB create_edit
ENDIF
IF a$=" Bye-Bye "
STICK 0
ALERT 1,"Time To Go?",2,"Yep|NO!",b#
IF b#=1
SETCOLOR 0,7,7,7
SETCOLOR 15,0,0,0
SETCOLOR 1,7,0,0
SETCOLOR 2,0,7,0
END
ENDIF
ENDIF
IF a$=" One Player "
npl#=1
ENDIF
IF a$=" Two Players "
npl#=2
ENDIF
IF a$=" Instructions"
GOSUB instructions
ENDIF
IF a$=" Joy Stick "
js#=0
ENDIF
IF a$=" Keypad "
js#=1
ENDIF
MENU OFF
MENU 16,0
MENU 17,0
MENU 24,0
MENU 25,0
MENU 15+npl#,1
MENU 24+js#,1
RETURN
REPEAT
a$=INKEY$
UNTIL a$<>""
'
PROCEDURE load_world
FILESELECT "\*.SCR",file$,a$
IF a$<>""
file$=a$
DEFMOUSE 2
OPEN "I",#1,a$
FOR x#=1 TO 95
INPUT #1,a$
screen$(x#,1)=a$
NEXT x#
CLOSE
ENDIF
DEFMOUSE 0
RETURN
PROCEDURE save_world
FILESELECT "\*.scr",file$,a$
IF a$<>""
DEFMOUSE 2
file$=a$
OPEN "O",#2,a$
FOR x#=1 TO 95
PRINT #2,screen$(x#,1)
NEXT x#
CLOSE
ENDIF
DEFMOUSE 0
RETURN
PROCEDURE create_edit
GOSUB init
CLS
COLOR 2
LINE 0,180,310,180
LINE 310,0,310,180
PUT 15,183,willi$,3
PUT 48,183,rock$,3
PUT 85,183,cabbage$,3
PUT 125,183,wall$,3
PUT 159,183,world$,3
SETCOLOR 15,7,7,7
DEFTEXT 3,0,0,4
TEXT 5,198,"Willi Rock Cabbage Wall World"
DEFTEXT 7,0,0,4
TEXT 149,198,"World"
DEFTEXT 2,16,0,6
TEXT 185,190,"1 2 3 4 5"
DEFTEXT 6,0,0,4
TEXT 195,198,"Level Names"
DEFTEXT 3,0,4
TEXT 285,188,"MAIN"
TEXT 285,198,"MENU"
wlvl#(pl#)=1
GOSUB world_select
DO
WHILE MOUSEK=0
z$=INKEY$
IF MID$(z$,2,1)="b"
GOSUB help_edit
ENDIF
' Print At(1,1);Mousex,Mousey
WEND
mx#=MOUSEX
my#=MOUSEY
mk#=MOUSEK
EXIT IF (mx#>283 AND mx#<310) AND my#>180
IF my#>180
IF mx#>183 AND mx#<273 AND my#<=190
IF mk#=1
wlvl#(pl#)=ABS(-1+(mx#>202)+(mx#>223)+(mx#>243)+(mx#>263))
GOSUB world_select
ELSE
GOSUB copy_erase
ENDIF
ENDIF
IF mx#>183 AND mx#<273 AND my#>190
GOSUB change_name
ENDIF
IF mx#>12 AND mx#<169
DEFTEXT 3,0,0,4
TEXT 5,198,"Willi Rock Cabbage Wall World"
DEFTEXT 7,0,0,4
IF mx#<26
drm$=willi$
drm#=2
TEXT 5,198,"Willi"
ENDIF
IF mx#>45 AND mx#<58
drm$=rock$
drm#=1
TEXT 41,198,"Rock"
ENDIF
IF mx#>83 AND mx#<95
drm$=cabbage$
drm#=3
TEXT 71,198,"Cabbage"
ENDIF
IF mx#>123 AND mx#<135
drm$=wall$
drm#=4
TEXT 119,198,"Wall"
ENDIF
IF mx#>157 AND mx#<169
drm$=world$
drm#=0
TEXT 149,198,"World"
ENDIF
ENDIF
ENDIF
IF my#<180 AND mx#<310
IF mk#=2
drt$=drm$
drt#=drm#
drm$=blank$
drm#=5
ENDIF
PUT INT(mx#/10)*10,INT(my#/10)*10,drm$
a$=screen$((wlvl#(pl#)-1)*19+2+INT(my#/10),1)
MID$(a$,INT(mx#/10)+1,1)=STR$(drm#)
screen$((wlvl#(pl#)-1)*19+2+INT(my#/10),1)=a$
IF mk#=2
drm$=drt$
drm#=drt#
ENDIF
ENDIF
LOOP
CLS
GOSUB mainscreen
RETURN
'
PROCEDURE copy_erase
STICK 0
ALERT 2,"| Copy/Erase Level | | Which One?",3,"Copy|Erase|Neither",b#
IF b#=1
GOSUB copy
ENDIF
IF b#=2
GOSUB erase
ENDIF
RETURN
'
PROCEDURE copy
GET 75,45,235,90,temp$
PUT 75,45,name_input$
BOX 77,47,233,88
PRINT AT(12,8);"CLICK On Level"
PRINT AT(12,9);"To Copy FROM"
DO
REPEAT
UNTIL MOUSEK
mx#=MOUSEX
my#=MOUSEY
mk#=MOUSEK
EXIT IF mx#>183 AND mx#<273 AND my#<=190
LOOP
cfrom#=ABS(-1+(mx#>202)+(mx#>223)+(mx#>243)+(mx#>263))
PUT 75,45,name_input$
BOX 77,47,233,88
PRINT AT(12,8);"CLICK On Level"
PRINT AT(12,9);" To Copy TO"
PAUSE 10
DO
REPEAT
UNTIL MOUSEK
mx#=MOUSEX
my#=MOUSEY
mk#=MOUSEK
EXIT IF mx#>183 AND mx#<273 AND my#<=190
LOOP
cto#=ABS(-1+(mx#>202)+(mx#>223)+(mx#>243)+(mx#>263))
PUT 75,45,temp$
mx#=0
my#=0
mk#=0
PAUSE 10
FOR i#=1 TO 19
screen$(i#+(cto#-1)*19,1)=screen$(i#+(cfrom#-1)*19,1)
NEXT i#
wlvl#(pl#)=cto#
GOSUB world_select
RETURN
'
PROCEDURE erase
GET 75,45,235,90,temp$
PUT 75,45,name_input$
BOX 77,47,233,88
PRINT AT(12,8);"CLICK On Level"
PRINT AT(12,9);" To ERASE"
DO
REPEAT
UNTIL MOUSEK
mx#=MOUSEX
my#=MOUSEY
mk#=MOUSEK
EXIT IF mx#>183 AND mx#<273 AND my#<=190
LOOP
elvl#=ABS(-1+(mx#>202)+(mx#>223)+(mx#>243)+(mx#>263))
PUT 75,45,name_input$
PAUSE 10
PUT 75,45,temp$
b$="| Erase Level "+STR$(elvl#)+"? "
STICK 0
ALERT 2,b$,2,"You Bet|Oops,No!",b#
IF b#=1
FOR i#=1 TO 19
screen$(i#+(elvl#-1)*19,1)="0000000000000000000000000000000"
NEXT i#
screen$(1+(elvl#-1)*19,1)="NO"
wlvl#(pl#)=elvl#
GOSUB world_select
ENDIF
RETURN
'
PROCEDURE world_select
HIDEM
PUT 0,0,clear$
DEFFILL 0,2,8
a$="188207230249270"
FOR y#=1 TO 5
FILL VAL(MID$(a$,((y#-1)*3+1),3)),189
NEXT y#
DEFFILL 7,2,8
FILL VAL(MID$(a$,((wlvl#(pl#)-1)*3+1),3)),189
GOSUB show_screen
IF na$="NO"
GOSUB change_name
ENDIF
DEFTEXT 6,0,0,4
TEXT 183,198," "
TEXT 183,198,na$
screen$(1+(wlvl#(pl#)-1)*19,1)=na$
SHOWM
RETURN
'
PROCEDURE change_name
GET 75,45,235,90,temp$
PUT 75,45,name_input$
BOX 77,47,233,87
PRINT AT(11,8);"Name For This Level"
PRINT AT(11,10);">";
FORM INPUT 16,na$
PUT 75,45,temp$
DEFTEXT 6,0,0,4
TEXT 183,198," "
TEXT 183,198,na$
screen$(1+(wlvl#(pl#)-1)*19,1)=na$
RETURN
'
PROCEDURE stoneage_play
stoneage:
GOSUB init
punkte#(1)=0
punkte#(2)=0
FOR x#=1 TO 2
man#(x#)=1
points#(x#)=0
score#(x#)=0
NEXT x#
tlimit#=300/skill_level#
GOTO w
GOSUB bild1
PUT 0,160,blank$,3
wx#=1
wy#=17
IF stone#(wx#,wy#)=3
ko#=ko#-1
ENDIF
PUT 0,160,willi$,3
stone#(wx#,wy#)=2
'
'
neu:
zeit#=TIMER
COLOR 2
LINE 0,180,310,180
LINE 310,0,310,180
IF play#
TEXT 5,188,"PLAYER 1:"
IF npl#=2
TEXT 5,198,"PLAYER 2:"
ENDIF
tlimit#=300/skill_level#
ENDIF
points#(1)=0
points#(2)=0
GOSUB show_score
points#(pl#)=0
DEFTEXT 2,16,0,13
TEXT 145,198,ko#
PUT 133,188,cabbage$
PUT 165,188,cabbage$
DEFTEXT 1,0,0,6
FOR x#=1 TO 10
PUT 200+((x#-1)*10),189,blank$
NEXT x#
FOR x#=1 TO (10-man#(pl#))
PUT 200+((x#-1)*10),189,willi$
NEXT x#
GOSUB start_game
zeit#(pl#)=TIMER
'
'
mainprog:
FOR qu#=1 TO 5
OUT 4,22
NEXT qu#
esc$=INKEY$
k#=MOUSEK
IF k#=2
PAUSE 3
ENDIF
IF play#
elapsed#=INT((TIMER-zeit#)/200)
c$="000"
b$=STR$(tlimit#-elapsed#)
MID$(c$,4-LEN(b$),LEN(b$))=b$
b$="TIME LEFT> "+c$
TEXT 200,187,b$
IF tlimit#-elapsed#<=0
GOTO itsover
ENDIF
ENDIF
' x=PEEK(3592) AND 255
IF js#=0
x#=STICK(1) !joystick
ELSE
x#=11 !keypad
ENDIF
IF js#=0
IF (x#<1 OR x#>10)
IF esc$=CHR$(27)
GOTO itsover
ENDIF
ENDIF
jy#=sticky#(x#)
jx#=stickx#(x#)
GOTO good
ELSE
asc_code%=ASC(esc$)
IF asc_code%>48 AND asc_code%<58
x#=asc_code%-48
x#=keydecode%(x#)
jy#=sticky#(x#)
jx#=stickx#(x#)
GOTO good
ENDIF
IF esc$=CHR$(27)
GOTO itsover
ENDIF
ENDIF
IF MID$(esc$,2,1)="b"
GOSUB help2_edit
ENDIF
GOTO mainprog
good:
IF ABS(jy#)=1 OR ABS(jx#)=1
IF wy#+jy#<19 AND wy#+jy#>0 AND wx#+jx#<32 AND wx#+jx#>0
IF stone#(wx#+jx#,wy#+jy#)=4
GOTO mainprog
ENDIF
IF ABS(jx#)=1 AND ABS(jy#)=1 AND stone#(wx#+jx#,wy#)<>0 AND stone#(wx#,wy#+jy#)<>0
IF stone#(wx#+jx#,wy#)<>-2 AND stone#(wx#,wy#+jy#)<>-2
GOTO mainprog
ENDIF
ENDIF
IF stone#(wx#+jx#,wy#+jy#)<>1
cabflag#=0
IF stone#(wx#+jx#,wy#+jy#)=3
ko#=ko#-1
IF play#
points#(pl#)=points#(pl#)+1
score#(pl#)=score#(pl#)+1
GOSUB show_score
ENDIF
SOUND 2,14,8,5
SOUND 3,14,11,5
PAUSE 5
cabflag#=1
ENDIF
wy#=wy#+jy#
wx#=wx#+jx#
x#=(wx#-1)*10
y#=(wy#-1)*10
stone#(wx#,wy#)=2
PUT x#,y#,blank$,3
IF cabflag#=0
SOUND 2,15,5,3
SOUND 3,15,7,3
PAUSE 5
ENDIF
WAVE 0,0
PUT x#-10*jx#,y#-10*jy#,blank$,3
PUT x#,y#,willi$,3
IF ko#=0
GOTO weiter
ENDIF
stone#(wx#-jx#,wy#-jy#)=-2
IF stone#(wx#-jx#,wy#-jy#-1)=1
sx#=wx#-jx#
sy#=wy#-jy#-1
GOSUB hitwithrock
IF itsoverflag#=1
GOTO itsover
ENDIF
ENDIF
ELSE
IF ABS(jy#)=0 AND stone#(wx#+2*jx#,wy#+2*jy#)=-2
GOTO pushrock
ENDIF
ENDIF
ENDIF
ENDIF
GOTO mainprog
itsover:
FOR i#=1 TO 8 STEP 0.5
x#=(wx#-1)*10
y#=(wy#-1)*10
PUT x#,y#,rock$,3
PAUSE 2
PUT x#,y#,willi$,3
PUT x#-st#*10,y#-10,rock$,3
PAUSE 2
PUT x#-st#*10,y#-10,blank$,3
SOUND 2,12,i#,i#
SOUND 3,12,i#,i#
PAUSE 5
WAVE 0,0
NEXT i#
WAVE 0,0
man#(pl#)=man#(pl#)+1
IF man#(pl#)=10
STICK 0
ALERT 1,"Willi Is History!",1,"Sorry",b#
GOTO stonend
ENDIF
PRINT
b$="| Poor Willi!!|You have "+STR$(10-man#(pl#))+" Lives left."
STICK 0
ALERT 3,b$,1,"More!|Enough!",b#
IF npl#=2
IF pl#=2 AND man#(1)<>10
pl#=1
GOTO f
ENDIF
IF pl#=1 AND man#(2)<>10
pl#=2
ENDIF
ENDIF
'
'
f:
IF b#=1
GOTO w
ELSE
GOTO stone_stop
ENDIF
weiter:
zeit2#=TIMER
GOSUB bonus
punkte#(pl#)=punkte#(pl#)+zeit2#-zeit#(pl#)
GOSUB next_level
IF b#=2
GOTO stone_stop
ENDIF
wlvl#(pl#)=wlvl#(pl#)+1
ko#=0
IF wlvl#(pl#)=6
GOTO freak
ENDIF
'
w:
lvl#=0
ko#=0
IF screen$(1+(wlvl#(pl#)-1)*19,1)="NO"
b$="Level "+STR$(wlvl#(pl#))+" Doesn't Exist!"
ALERT 1,b$,1,"Ooops!",b#
GOTO stonend
ENDIF
GOSUB show_screen
DEFTEXT 2,0,0,6
z#=1
FOR x#=9 TO 29
TEXT 312,x#," "
NEXT x#
FOR x#=9 TO (LEN(na$)*9) STEP 9
TEXT 312,x#,MID$(na$,z#,1)
z#=z#+1
NEXT x#
GOTO neu
'
'
'
'
freak:
CLS
PRINT " SUCCESS !!!"
man#(pl#)=10
FOR i#=1 TO 15
DEFTEXT i#,0,0,6
q$=STR$(INT(punkte#/200))+" Seconds. Victory!"
TEXT 70,10+(i#*10),q$
NEXT i#
PAUSE 150
FOR i#=1 TO 333
PUT RND*309,RND*190,willi$,3
PUT RND*309,RND*190,rock$,3
SOUND 1,15,RANDOM(12)+1,RANDOM(8)+1,1
SOUND 1,0,0,0,0
EXIT IF MOUSEK=2
NEXT i#
PAUSE 150
CLS
GOTO stonend
pushrock:
stone#(wx#,wy#)=-2
stone#(wx#+jx#,wy#+jy#)=2
wx#=wx#+jx#
wy#=wy#+jy#
x#=(wx#-1)*10
y#=(wy#-1)*10
stone#(wx#+jx#,wy#+jy#)=1
DEFFILL 0
PBOX x#-jx#*10,y#-jy#*20,x#-jx#*10+9,y#-jy#*10+9
PUT x#,y#,blank$,3
SOUND 2,15,8,3
SOUND 3,15,11,3
PUT x#,y#,willi$,3
PUT x#+jx#*10,y#+jy#*10,rock$,3
PAUSE 4
WAVE 0,0
IF stone#(wx#+jx#,wy#+jy#+1)=-2
sx#=wx#+jx#
sy#=wy#+jy#
GOSUB hitwithrock
IF itsoverflag#=1
GOTO itsover
ENDIF
ENDIF
IF stone#(wx#-jx#,wy#-jy#-1)=1
sx#=wx#-jx#
sy#=wy#-jy#-1
GOSUB hitwithrock
IF itsoverflag#=1
GOTO itsover
ENDIF
ENDIF
GOTO mainprog
stonend:
IF play#
IF man#(1)<>10 OR man#(2)<>10
IF npl#=2
IF pl#=2 AND man#(1)<>10
pl#=1
GOTO skip
ENDIF
IF pl#=1 AND man#(2)<>10
pl#=2
ENDIF
ENDIF
skip:
GOTO f
ENDIF
ENDIF
stone_stop:
CLS
GOSUB makecolor
GOSUB mainscreen
RETURN
'
PROCEDURE show_score
IF play#
FOR q#=1 TO npl#
z#=188
IF q#=2
z#=198
ENDIF
a$="000"
c$=STR$(points#(q#))
MID$(a$,1-(points#(q#)<10)-(points#(q#)<100),LEN(c$))=c$
points$=a$
a$="000"
c$=STR$(score#(q#))
MID$(a$,1-(score#(q#)<10)-(score#(q#)<100),LEN(c$))=c$
score$=a$
a$=points$+" "+score$
TEXT 77,z#,a$
NEXT q#
ENDIF
RETURN
'
PROCEDURE show_screen
PUT 0,0,clear$
na$=screen$(1+(wlvl#(pl#)-1)*19,1)
DEFTEXT 2,0,0,6
FOR i#=1 TO 18
b$=screen$(i#+((wlvl#(pl#)-1)*19)+1,1)
FOR j#=1 TO 31
stone#(j#,i#)=VAL(MID$(b$,j#,1))
x#=(j#-1)*10
y#=(i#-1)*10
IF stone#(j#,i#)=0
PUT x#,y#,world$,3
ELSE
IF stone#(j#,i#)=1
PUT x#,y#,rock$,3
ELSE
IF stone#(j#,i#)=2
PUT x#,y#,willi$,3
wx#=j#
wy#=i#
ELSE
IF stone#(j#,i#)=3
PUT x#,y#,cabbage$,3
ko#=ko#+1
ELSE
IF stone#(j#,i#)=4
PUT x#,y#,wall$,3
ELSE
stone#(j#,i#)=-2
PUT x#,y#,blank$,3
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
NEXT j#
NEXT i#
RETURN
PROCEDURE hitwithrock
itsoverflag#=0
a#=1
za:
IF stone#(sx#,sy#-a#)=1
a#=a#+1
GOTO za
ENDIF
sz#=sy#
sw#=sx#
FOR i#=1 TO a#
sy#=sz#-i#+1
sx#=sw#
s1:
IF stone#(sx#,sy#+1)=-2
x#=(sx#-1)*10
y#=(sy#-1)*10
PUT x#,y#,blank$,3
stone#(sx#,sy#)=-2
sy#=sy#+1
stone#(sx#,sy#)=1
PUT x#,y#+10,rock$,3
PAUSE 3
GOTO s1
ELSE
IF stone#(sx#,sy#+1)=0 OR stone#(sx#,sy#+1)=3 OR stone#(sx#,sy#+1)=4
SOUND 2,15,5,1
SOUND 3,15,8,1
PAUSE 10
WAVE 0,0
GOTO send
ELSE
IF stone#(sx#,sy#+1)=2
st#=0
itsoverflag#=1
REM Goto Itsover
i#=a#+1
GOTO send
ELSE
IF ABS(stone#(sx#-1,sy#+1))=2 AND ABS(stone#(sx#+1,sy#+1))=2 AND stone#(sx#-1,sy#)=-2 AND stone#(sx#+1,sy#)=-2
st#=SGN(RND*10-5)
GOTO u
ELSE
IF ABS(stone#(sx#-1,sy#+1))=2 AND stone#(sx#-1,sy#)=-2
st#=-1
GOTO u
ENDIF
IF ABS(stone#(sx#+1,sy#+1))=2 AND stone#(sx#+1,sy#)=-2
st#=1
GOTO u
ENDIF
SOUND 2,15,5,1
SOUND 3,15,8,1
PAUSE 10
WAVE 0,0
GOTO send
ENDIF
ENDIF
ENDIF
ENDIF
'
'
u:
stone#(sx#,sy#)=-2
IF stone#(sx#+st#,sy#+1)=2
itsoverflag#=1
REM Goto Itsover
i#=a#+1
GOTO send
ENDIF
x#=(sx#-1)*10
y#=(sy#-1)*10
PUT x#,y#,blank$,3
sy#=sy#+1
sx#=sx#+st#
stone#(sx#,sy#)=1
PUT x#+10*SGN(st#),y#+10,rock$,3
SOUND 2,15,5,2
SOUND 3,15,8,2
PAUSE 2
WAVE 0,0
GOTO s1
send:
NEXT i#
send2:
RETURN
'
'
'
'
'
'
PROCEDURE bild1
ko#=0
FOR y#=0 TO 170 STEP 10
FOR x#=0 TO 300 STEP 10
stone#(x#/10+1,y#/10+1)=0
IF RND<0.7
GOTO pul
ENDIF
IF RND<0.5
PUT x#,y#,rock$,3
stone#(x#/10+1,y#/10+1)=1
GOTO pul2
ELSE
IF RND<0.2
PUT x#,y#,cabbage$,3
stone#(x#/10+1,y#/10+1)=3
ko#=ko#+1
ELSE
IF RND<0.5
PUT x#,y#,wall$,3
stone#(x#/10+1,y#/10+1)=4
ELSE
pul:
PUT x#,y#,world$,3
pul2:
ENDIF
ENDIF
ENDIF
NEXT x#
NEXT y#
RETURN
'
'
'
PROCEDURE makecolor
RESTORE farben
DEFFN t(x#)=(x#-2)*(SGN(x#-2)/2+3)
FOR i#=0 TO 15
READ r#,g#,b#
SETCOLOR i#,r#/2,g#/2,b#/2
NEXT i#
SETCOLOR 15,7,7,7
'
'
farben:
DATA 0,0,0,15,15,15,12 ,0,0,15,6,0
DATA 0,9,0,3,15,1,0,0,15,2,12,13
DATA 15,0,12,10,0,15,9,5,0,15,12,10
DATA 15,14,0,12,12,12,8,8,8,4,4,4
RETURN
'
PROCEDURE init
RESTORE stickdata
FOR i#=1 TO 10
READ stickx#(i#)
NEXT i#
FOR i#=1 TO 10
READ sticky#(i#)
NEXT i#
FOR i#=1 TO 9
READ keydecode%(i#)
NEXT i#
stickdata:
DATA 0,0,0,-1,-1,-1,0,1,1,1
DATA -1,1,0,0,-1,1,0,0,-1,1
sch#=40
DATA 6,2,10,4,0,8,5,1,9
PRINT "c"+CHR$(0)
CLS
GET 0,0,9,9,blank$
DEFTEXT 2,0,0,6
DEFFN f=RND*15/2
DEFFN r=(RND*7+8)/2
ttte1#=0
GOSUB makecolor
'
RESTORE willi
willi$=""
FOR i#=0 TO 85
READ x#
willi$=willi$+CHR$(x#)
NEXT i#
willi:
DATA 0,9,0,9,0,4,59,0,0,0,0,0,0,0,100,128,0,0,0,0
DATA 0,0,228,192,0,0,0,0,0,0,127,128,0,0,18,0,0,0,128,64
DATA 127,128,0,0,0,0,169,127,64,190,0,19,0,15,128,69,64,137,0,46
DATA 0,7,173,64,64,130,0,52,0,7,64,128,63,63,0,60,0,19,63,15
DATA 0,5,63,9,0,46
'
world$=""
FOR i#=0 TO 85
READ x#
world$=world$+CHR$(x#)
NEXT i#
DATA 0,9,0,9,0,4,0,0,182,192,0,0,134,64,0,0,221,192,0,0
DATA 157,192,0,0,254,64,0,0,250,64,0,0,167,192,0,0,166,0,0,0
DATA 91,64,0,0,11,0,0,63,167,254,0,19,165,207,0,5,255,73,0,46
DATA 255,71,0,0,214,130,0,52,214,135,0,0,63,127,0,60,30,83,0,15
DATA 237,197,0,9,141,110
'
cabbage$=""
FOR i#=0 TO 85
READ x#
cabbage$=cabbage$+CHR$(x#)
NEXT i#
DATA 0,9,0,9,0,4,75,0,0,0,91,0,16,0,200,64,0,0,255,192
DATA 55,128,14,128,10,128,127,192,113,64,186,64,40,0,255,192,5,0,42,128
DATA 32,0,127,128,65,0,150,255,0,62,255,211,105,15,89,133,0,9,127,238
DATA 38,7,94,192,0,2,127,244,0,7,207,192,0,63,255,252,0,19,105,143
DATA 0,5,121,137,0,46
'
rock$=""
FOR i#=0 TO 85
READ x#
rock$=rock$+CHR$(x#)
NEXT i#
DATA 0,9,0,9,0,4,30,0,0,0,30,0,30,0,54,128,73,0,127,128
DATA 127,128,127,192,128,0,255,192,255,192,208,0,46,192,254,192,254,192,160,0
DATA 95,192,255,192,255,192,129,255,127,254,255,211,255,207,7,69,255,73,255,110
DATA 255,71,22,0,254,66,254,116,254,71,11,128,123,191,123,188,123,147,30,15
DATA 30,5,30,9,30,46
'
wall$=""
FOR i#=0 TO 85
READ x#
wall$=wall$+CHR$(x#)
NEXT i#
DATA 0,9,0,9,0,4,0,0,0,0,0,0,251,192,235,128,0,0,0,0
DATA 251,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,192,59,192
DATA 0,0,0,0,127,192,0,63,0,62,0,19,0,15,0,5,0,9,0,46
DATA 239,199,206,64,0,2,0,52,239,199,206,192,0,63,0,60,239,211,0,15
DATA 0,5,0,9,0,46
'
RETURN
'
PROCEDURE instructions
CLS
HIDEM
GOSUB makecolor
PRINT AT(3,2);" STONE AGE DELUXE"
PRINT " Instructions"
PRINT
PRINT " Poor Willi lives in a hostile world."
PRINT "Everywhere he goes, boulders fall! Help"
PRINT "Willi to collect all the cabbages while"
PRINT "avoiding deadly boulders!"
PRINT
PRINT " MENU SELECTIONS "
PRINT ""
PRINT "Under DISK:"
PRINT
PRINT "LOAD WORLD: Use to load one of Willi's"
PRINT " wild worlds! There are 5 levels "
PRINT " in each world. Look for files with"
PRINT " an .SCR extension."
PRINT ""
PRINT "SAVE WORLD: Use to save worlds that"
PRINT " you create for Willi! Be sure to"
PRINT " use an .SCR extension."
PRINT
PRINT " (Push Key Or Mouse Button For More)"
REPEAT
z$=INKEY$
UNTIL z$<>"" OR MOUSEK<>0
CLS
PRINT AT(3,2);" STONE AGE DELUXE"
PRINT " Instructions"
PRINT
PRINT "Under PLAY:"
PRINT ""
PRINT "ONE PLAYER: Used to select One Player"
PRINT " games."
PRINT
PRINT "TWO PLAYERS: Used to select Two Player"
PRINT " games!"
PRINT ""
PRINT "LEVEL ONE-FIVE: Selects which Level to"
PRINT " start playing the game at. You "
PRINT " can then choose between PRACTICE"
PRINT " or PLAY. If you PLAY, you will "
PRINT " choose between EASY, TOUGHER, or"
PRINT " HARD. These affect how much time"
PRINT " you have for Willi to collect all"
PRINT " the cabbages. PRACTICE mode has"
PRINT " no time limit or score displayed."
PRINT
PRINT " (Push Key Or Mouse Button For More)"
REPEAT
z$=INKEY$
UNTIL z$<>"" OR MOUSEK<>0
CLS
PRINT AT(3,2);" STONE AGE DELUXE"
PRINT " Instructions"
PRINT
PRINT "Under PLAY:"
PRINT ""
PRINT "Under Keypad"
PRINT
PRINT " Willi is moved about using the "
PRINT " number keypad on the right of your"
PRINT " keyboard. The numbers 8,9,6,3,2"
PRINT " 1,4,7 corresponds to the points"
PRINT " on the compass."
PRINT
PRINT "Under Joystick"
PRINT
PRINT " Willi may also be moved with your"
PRINT " joystick. However, I find it more"
PRINT " difficult to go diagonally."
PRINT
PRINT " (Push Key Or Mouse Button For More)"
REPEAT
z$=INKEY$
UNTIL z$<>"" OR MOUSEK<>0
CLS
PRINT AT(3,2);" STONE AGE DELUXE"
PRINT " Instructions"
PRINT
PRINT "Under GENESIS:"
PRINT ""
PRINT "NEW WORLD: Use to clear out ALL"
PRINT " levels currently in memory."
PRINT " (in other words, you start from"
PRINT " scratch!). "
PRINT ""
PRINT "CREATE/EDIT: Takes you to the EDIT"
PRINT " screen. Use to create your own"
PRINT " world for Willi to wander through!"
PRINT ""
PRINT "Under LEAVE:"
PRINT ""
PRINT "BYE-BYE: Away you go! You will lose"
PRINT " everthing in memory, so make sure"
PRINT " you have saved your work!"
PRINT ""
PRINT
PRINT " (Push Key Or Mouse Button For More)"
REPEAT
z$=INKEY$
UNTIL z$<>"" OR MOUSEK<>0
CLS
PRINT AT(3,2);" STONE AGE DELUXE"
PRINT " Instructions"
PRINT
PRINT "FOR ADDITIONAL HELP:"
PRINT ""
PRINT "Type the HELP key while in the PLAY"
PRINT "or EDIT screens. You will be given"
PRINT "additional HELP for those screens!"
PRINT ""
PRINT "PERSONAL NOTE:"
PRINT "I love to tinker around and make a"
PRINT "good program better. And I just LOVE"
PRINT "GFA BASIC! If you don't have it, get"
PRINT "it... it's the simplest and most"
PRINT "powerful BASIC I've ever worked"
PRINT "with (no, I don't work for MICHTRON!"
PRINT "I appreciate feedback:"
PRINT "call the STARSHIP BBS, 509-375-4228,"
PRINT "or send comments to JOHN HICKEY,"
PRINT "2320 EASTON, RICHLAND, WA 99352."
PRINT
PRINT " (Push Key Or Mouse Button For More)"
REPEAT
z$=INKEY$
UNTIL z$<>"" OR MOUSEK<>0
CLS
GOSUB makecolor
GOSUB mainscreen
SHOWM
RETURN
'
PROCEDURE help_edit
GET 75,45,235,130,temp$
PUT 75,45,help$
BOX 77,45,233,128
PRINT AT(11,7);" Edit Help"
PRINT AT(11,9);" WHEN DRAWING"
PRINT AT(11,11);"LEFT BUTTON Draws"
PRINT AT(11,12);" Selected Object"
PRINT AT(11,14);"RIGHT BUTTON Erases"
PRINT AT(11,16);" (Click For More)"
REPEAT
UNTIL MOUSEK
PAUSE 3
PUT 75,45,help$
BOX 77,45,233,128
PRINT AT(11,7);" MENU SELECTION"
PRINT AT(11,9);"LEFT BUTTON Selects"
PRINT AT(11,10);" Menu Item "
PRINT AT(11,12);"RIGHT BUTTON On"
PRINT AT(11,13);" Level Number For"
PRINT AT(11,14);" Copy/Erase Level"
PRINT AT(11,16);" (Click For More)"
REPEAT
UNTIL MOUSEK
PAUSE 3
PUT 75,45,help$
BOX 77,45,233,128
PRINT AT(11,7);" MENU SELECTION"
PRINT AT(11,8);" (continued) "
PRINT AT(11,10);"CLICK on Level "
PRINT AT(11,11);" Name To Change"
PRINT AT(11,16);" (Click For More)"
REPEAT
UNTIL MOUSEK
PAUSE 3
PUT 75,45,temp$
RETURN
PROCEDURE help2_edit
GET 75,45,235,130,temp$
PUT 75,45,help$
BOX 77,45,233,128
PRINT AT(11,7);" Play Help"
PRINT AT(11,9);" Collect All The"
PRINT AT(11,10);"Cabbages For Poor"
PRINT AT(11,11);" Hungry Willi!"
PRINT AT(11,13);"Use ESC If You Get"
PRINT AT(11,14);" Stuck Or To Quit."
PRINT AT(11,16);" (Click For More)"
REPEAT
UNTIL MOUSEK
PAUSE 3
PUT 75,45,help$
BOX 77,45,233,128
PRINT AT(11,7);" DO NOT Let Any"
PRINT AT(11,8);"Rocks Fall On Your"
PRINT AT(11,9);"Head, Or Get Stuck"
PRINT AT(11,10);"Between Them. You"
PRINT AT(11,11);"May Push Rocks If"
PRINT AT(11,12);"There Is An Empty"
PRINT AT(11,13);"Space Next To Them"
PRINT AT(11,14);" GOOD LUCK!"
PRINT AT(11,16);" (Click For More)"
REPEAT
UNTIL MOUSEK
PAUSE 3
PUT 75,45,temp$
RETURN
PROCEDURE start_game
IF play#
GET 75,45,235,130,temp$
PUT 75,45,help$
BOX 77,45,233,128
PRINT AT(11,7);na$
PRINT AT(11,9);" Can YOU Collect"
PRINT AT(11,10);" All The Cabbages?"
PRINT AT(11,12);" OK PLAYER ";pl#
PRINT AT(11,14);" Push JOYSTICK "
PRINT AT(11,15);" BUTTON To START!"
PRINT AT(11,16);""
REPEAT
UNTIL MOUSEK
PAUSE 3
PUT 75,45,temp$
ENDIF
RETURN
'
PROCEDURE bonus
IF play#
GET 75,45,235,130,temp$
PUT 75,45,help$
BOX 77,45,233,128
PRINT AT(11,7);na$
PRINT AT(11,9);" Good Job!!!"
PRINT AT(11,10);" You Now Collect?"
PRINT AT(11,12);" 10 BONUS CABBAGES"
FOR x#=1 TO 10
score#(pl#)=score#(pl#)+1
SOUND 2,14,8,5
SOUND 3,14,11,5
PAUSE 8
SOUND 2,0,0,0
SOUND 3,0,0,0
PAUSE 4
GOSUB show_score
NEXT x#
PUT 75,45,temp$
ENDIF
RETURN
PROCEDURE next_level
IF play#
GET 75,45,235,130,temp$
PUT 75,45,help$
BOX 77,45,233,128
b$=STR$(INT((zeit2#-zeit#(pl#))/200))+" Seconds Used,"
a$="Total "+STR$(INT(punkte#(pl#)/200))+" Seconds."
PRINT AT(11,7);na$
PRINT AT(11,9);b$
PRINT AT(11,11);a$
PRINT AT(11,14);" Push JOYSTICK "
PRINT AT(11,15);" BUTTON To START,"
PRINT AT(11,16);" ESC KEY To END!"
REPEAT
esc$=INKEY$
UNTIL MOUSEK OR esc$=CHR$(27)
PAUSE 3
IF esc$=CHR$(27)
b#=2
ENDIF
PUT 75,45,temp$
ENDIF
RETURN
'