home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 26
/
AACD 26.iso
/
AACD
/
Programming
/
AllPlaton
/
Gamedisk3
/
F.T.C
/
FTC.AMOS
/
FTC.amosSourceCode
< prev
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
Macintosh to JP
NeXTSTEP
RISC OS/Acorn
Shift JIS
UTF-8
Wrap
AMOS Source Code
|
1993-06-22
|
65.4 KB
|
2,526 lines
Set Buffer 60
Break Off
Amos To Back : Amos Lock : Wait Vbl
On Error Goto GOTCHA
MUS=1 : SOU=1
Dim ICN(40,5),PL$(3,1),PL(3,35),F(3,39,24),F2(39,24),IN(3,15,2)
Dim MON$(11),WET$(6),PRO$(4),EH$(4),AN$(1),SVGM$(9)
Def Fn Z$(Z,LE)=Space$(LE-Len(Str$(Z)))+Str$(Z)
Def Fn STL$(S$,LE)=S$+Space$(LE-Len(S$))
Global FONT,TB,ICN(),TEX$,UP,SOU,MUS,PAG,WX,WY,B1,B2,S
Degree
GRABICONS
Restore MONATE
For A=0 To 11
Read MON$(A)
Next
Restore WETTER
For A=0 To 6
Read WET$(A)
Next
Restore PRODUKTE
For A=0 To 4
Read PRO$(A),EH$(A)
Next
Restore ANAUS
Read AN$(0),AN$(1)
Screen Open 0,320,200,32,0
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
Get Sprite Palette
Colour Back Colour(0)
Gr Writing 0
Multi Wait : Limit Mouse
INITFONTS
Set Font FONT
Gosub UPFREE
Amos To Front
WINDO[0,1,40,25,%111111,"Workbench"]
PASICON[1,2,16,32,15,14,"Spiele"]
DEFICON[0,0,8,7,15]
IS=-1 : TIMOUT=25 : UP=0
Do
Multi Wait : BP=-1
Inc UP : If UP=200 Then Gosub UPFREE : UP=0
If PAG=0 Then Gosub WORKCLICKING : Gosub INRO
If PAG>0 Then CLICKING : B=Param : BP=B
If PAG=1 Then Gosub INITMENU
If PAG=2 Then Gosub MAINMENU
If PAG=3 Then Gosub ARBEITSMENU
If PAG=4 Then Gosub KARTMENU
If BP=0
ALERT["Free Trading Company","Wollen Sie wirklich","F.T.C. beenden?","Ja!","Nein!"]
If Param=1 : Gosub RETWORKBENCH : End If
End If
Loop
Stop
AUTOTEST:
Inc UP : If UP=200 Then Gosub UPFREE : UP=0
If BP=0
ALERT["Free Trading Company","Wollen Sie wirklich","F.T.C. beenden?","Ja!","Nein!"]
If Param=1 : Pop : Gosub RETWORKBENCH : End If
End If
Return
GOTCHA:
SSSS=Screen
Screen Open 4,320,32,2,0
Curs Off : Palette 0,$FFF
Print "Error"+Str$(Errn)+" trapped!"
Print "Please call me: 089/805847!"
Print "Press a key to continue...";
Wait Key
Screen Close 4
If SSSS=>0 Then Screen SSSS
Resume Next
UPFREE:
If PAG=4 Then Return
Ink 2 : Bar 0,0 To 311,7
Put Cblock 25,312,0
T$="Amiga Workbench "+Str$(Chip Free)+" graphics mem "+Str$(Fast Free)+" other Mem"
Ink 0 : Text 1,5,T$
Return
WORKCLICKING:
X=X Screen(X Mouse) : Y=Y Screen(Y Mouse) : M=Mouse Key
If M>1 Then Ink 2 : Bar 0,0 To 319,7 : UP=198
B=-1 : BB=-1
Inc TIMOUT
If M=0 Then MP=0
If MP=1 and M=1 Then M=0
If M=1 Then MP=1
If M=1 Then CHECKICONS[X,Y] : B=Param
If M=1 and B=-1 and IS>-1 Then PRESSICON[IS] : IS=-1
If B>-1
If IS>-1 : PRESSICON[IS] : End If
If IS=B and TIMOUT<25
BB=B : TIMOUT=25
Else
TIMOUT=0
End If
IS=B
PRESSICON[B]
End If
Return
INRO:
If B=0
PRESSICON[B]
IS=-1 : TIMOUT=25
ALERT["Workbench Request","Do you really want","to quit workbench?","OK","Cancel"]
If Param=1 : Pop : Gosub QUIT : End If
End If
If BB=1 and ICN(2,0)=0
WINDO[10,5,30,20,%111111,"Spiele"]
Wait 20
DEFICON[3,80,40,87,47]
PASICON[2,1,160,100,64,48,"Free Trading Company"]
End If
If B=3
PRESSICON[B]
IS=-1 : TIMOUT=25
UNDEFICON[2]
UNDEFICON[3]
WINCLO[10,5,30,20]
End If
If BB=2
IS=-1
UNDEFICON[1]
UNDEFICON[2]
Wait 10
WINDO[0,5,40,15,%1110,"IconX"]
Wait 5
Ink 2 : Text 4,47+TB,"Lade Free Trading Company... Bitte warten!"
If Length(5)=0
Load "KartSounds.dat",6
Load "WorkSounds.dat",5
Sam Bank 5
Open In 1,"mod.InGame"
Reserve As Chip Work 3,Lof(1)
Sload 1 To Start(3),Lof(1)
Close 1
End If
TITLE
Loke Start(12)+10,Start(3)
Call Start(12)
Call Start(12)+6
WINDO[0,1,40,25,%11,"Free Trading Company Version 1.22"]
PAG=1
Ink 1 : CT[18,"Willkommen zu"]
Ink 3 : CT[28,"Free Trading Company"]
Ink 2 : Text 4,70+TB,"Wieviele Spieler:"
DEFGADGET[2,80,58,112,90,"1"]
DEFGADGET[3,114,58,146,90,"2"]
DEFGADGET[4,148,58,180,90,"3"]
DEFGADGET[5,182,58,214,90,"4"]
PASICON[1,9,40,176,32,24,"Spielstand laden"]
End If
B=-1 : BB=-1
Return
INITMENU:
If B>1 and B<6
Gosub GAMEINIT
End If
If B=1
For A=0 To 5
DISABLEICON[A]
Next
Gosub SPIELLOAD
For A=0 To 5
ENABLEICON[A]
Next
If LOA
WINCLR[0,1,40,25]
UNDEFICON[1]
UNDEFICON[2]
UNDEFICON[3]
UNDEFICON[4]
UNDEFICON[5]
PAG=2 : Gosub UPDATSCREEN1
End If
End If
B=-1 : BB=-1
Return
MAINMENU:
If B=1
For A=1 To 20
DISABLEICON[A]
Next
MO=1
Get Cblock 998,24,40,144,72
WINDO[3,5,21,14,%110,"Ankauf von Waren"]
For A=0 To 4
DEFGADGET[10+A,28,50+A*10,72,58+A*10,PRO$(A)]
Next
DEFGADGET[15,28,100,162,108,"Zur�ck"]
End If
If B=2
For A=1 To 20
DISABLEICON[A]
Next
MO=2
Get Cblock 998,24,40,144,64
WINDO[3,5,21,13,%110,"Verkauf von Waren"]
For A=1 To 4
DEFGADGET[10+A,28,40+A*10,72,48+A*10,PRO$(A)]
Next
DEFGADGET[15,28,90,162,98,"Zur�ck"]
End If
If B=3
Fade 2
For A=0 To 31
Colour Back Colour(0) : View : Wait Vbl
Next
WINCLO[1,3,20,16]
WINCLO[20,17,39,24]
WINCLO[1,17,19,24]
For A=1 To 20
UNDEFICON[A]
Next
PAG=4 : Gosub KARTE
End If
If B>9 and B<15 Then Gosub KAUF
If B=9
For A=1 To 20
DISABLEICON[A]
Next
Get Cblock 998,16,40,160,88
WINDO[2,5,22,16,%110,"Optionen"]
PASICON[20,9,56,63,32,24,"Spielstand laden"]
PASICON[21,10,56,95,32,24,"Spielstand sichern"]
PASICON[22,11+MUS,136,63,32,24,"Musik "+AN$(1-MUS)+"schalten"]
PASICON[23,13+SOU,136,95,32,24,"Sound "+AN$(1-SOU)+"schalten"]
DEFGADGET[15,20,116,170,124,"Zur�ck"]
End If
If B=21 Then Gosub SPIELSAVE
If B=20 Then Gosub SPIELLOAD : If LOA Then B=-15
If Abs(B)=15
Put Cblock 998
Del Cblock 998
For A=10 To 25
UNDEFICON[A]
Next
For A=1 To 20
ENABLEICON[A]
Next
MO=0
End If
If B=-15 Then Gosub UPDATSCREEN1
If B=22
ERAICON[B]
MUS=1-MUS
PASICON[B,11+MUS,136,63,32,24,"Musik "+AN$(1-MUS)+"schalten"]
If MUS=0
Call Start(12)+8
Call Start(12)+4
Else
Call Start(12)+6
End If
End If
If B=23
ERAICON[B]
SOU=1-SOU
PASICON[B,13+SOU,136,95,32,24,"Sound "+AN$(1-SOU)+"schalten"]
End If
B=-1 : BB=-1
Return
ARBEITSMENU:
If B>0 and B<5
Get Cblock 998,24,64,144,40
If B<3 : A$="Arbeiter" : P=0 : Else A$="Facharbeiter" : P=1 : End If
If B and 1 : B$="einstellen" : Else B$="entlassen" : End If
WINDO[3,8,21,13,%110,A$+" "+B$]
Ink 2
If PL(CP,30)
If(P=0 and PL(CP,30)<0) or(P=1 and PL(CP,30)>0)
If SOU : Sam Bank 6 : Sam Play 8,9 : Sam Bank 5 : End If
Text 28,71+TB,"Die "+A$+" streiken doch!"
Wait 50
Put Cblock 998
Del Cblock 998
B=-1 : BB=-1 : Return
End If
End If
If(B and 1)=0 and PL(CP,8+P)=0
If SOU : Sam Play 8,2 : End If
Text 28,71+TB,"Sie haben keine "+A$+"!"
Wait 50
Else
Text 28,71+TB,"Wieviele "+A$+" wollen Sie"
Text 28,77+TB,B$+"?"
If(B and 1)=0
Ink 1 : Text 28,83+TB,"(Das kostet Sie"+Str$(PL(CP,10+P)*4)+" $ pro Person!)"
Ink 2
TEX$=Str$(Max(PL(CP,8+P)-PL(CP,13+P),0))-" "
Else
Ink 1 : Text 28,83+TB,"(Das kostet Sie"+Str$(PL(CP,10+P))+" $ pro Person!)"
Ink 2
TEX$=Str$(Max(PL(CP,13+P)-PL(CP,8+P),0))-" "
End If
If TEX$="0" : TEX$="" : End If
EINGABE[28,89,6,5,1]
A=0
If TEX$<>""
For DD=1 To Len(TEX$)
A=A*10+Asc(Mid$(TEX$,DD,1))-48
Next
End If
If B and 1
A=Min(99999-PL(CP,8+P),A)
Add PL(CP,8+P),A
Add PL(CP,0),-PL(CP,10+P)*A
PL(CP,0)=Max(PL(CP,0),-9000000)
Else
If SOU : Sam Play 8,3 : End If
A=Min(A,PL(CP,8+P))
Add PL(CP,0),-PL(CP,10+P)*4*A
PL(CP,0)=Max(PL(CP,0),-9000000)
Add PL(CP,8+P),-A
End If
End If
Put Cblock 998
Del Cblock 998
Gosub UPDATARBEITER
Gosub UPDATLOHNKOSTEN
End If
If B=5
WINCLO[1,3,20,16]
WINCLO[1,17,22,24]
WINCLO[23,17,39,24]
For A=1 To 20
UNDEFICON[A]
Next
PAG=5 : Gosub UPDATSCREEN3
Gosub BEWASSERUNG
End If
B=-1 : BB=-1
Return
KARTE:
DISABLEICON[0]
Sam Bank 6
Unpack 13 To 1 : Screen To Back
Curs Off : Flash Off : Paper 0 : Pen 1
Colour 16,0
KART=-1 : Gr Writing 0
Ink 31,0
A$="Aktions Menu"
OT[160-Len(A$)*4,8,4,20,A$]
For A=0 To 8
X1=39 : Y1=17+Min(A,7)*20 : X2=56 : Y2=34+Min(A,7)*20
If A=8 Then Add X1,128 : Add X2,128
Ink 26 : Draw X1-1,Y2+1 To X1-1,Y1-1 : Draw To X2+1,Y1-1
Ink 31 : Draw X1,Y2 To X1,Y1 : Draw To X2,Y1
Ink 20 : Draw X1+1,Y2 To X2,Y2 : Draw To X2,Y1+1
Ink 23 : Draw X1,Y2+1 To X2+1,Y2+1 : Draw To X2+1,Y1
DEFICON[A+1,X1-1,Y1-1,X2,Y2]
Next
Paste Bob 40,18,39
Paste Bob 40,38,42
Paste Bob 40,58,44
Paste Bob 40,78,43
Paste Bob 40,98,41
Paste Bob 40,118,38
Paste Bob 40,138,40
Paste Bob 40,158,47
Paste Bob 168,158,45
PM=PL(CP,15)*500
OT[64,28,31,20,"Roden "+ Fn Z$(PM+1500,6)+" $"]
OT[64,48,31,20,"Dattelplantage pflanzen"+ Fn Z$(PM+3000,6)+" $"]
OT[64,68,31,20,"Tabak anbauen "+ Fn Z$(PM+4000,6)+" $"]
OT[64,88,31,20,"Zigarettenfabrik bauen "+ Fn Z$(PM+20000,6)+" $"]
OT[64,108,31,20,"�lturm errichten "+ Fn Z$(PM+30000,6)+" $"]
OT[64,128,31,20,"Insektizide verspr�hen "+ Fn Z$(PM+10000,6)+" $"]
OT[64,148,31,20,"Mitspieler angreifen "+ Fn Z$(PM+40000,6)+" $"]
OT[64,168,31,20,"Karte"]
OT[192,168,31,20,"Weiter"]
Get Cblock 998,64,178,240,16
Paste Bob 40,178,46
OT[64,188,31,20,"Geld"+ Fn Z$(PL(CP,0),25)+" $"]
Screen Open 3,320,200,32,0 : Screen To Back
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Get Palette 1
Screen To Front
WX=Screen Width : WY=Screen Height : B1=1 : B2=3
A=Rnd(13)+1 : S=8
On A Proc S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14
Screen To Front 1
Screen Close 3
Screen 1
PAG=4
Return
KARTMENU:
If B>0 and B<9
If B=1 : P=1500+PM : End If
If B=2 : P=3000+PM : End If
If B=3 : P=4000+PM : End If
If B=4 : P=20000+PM : End If
If B=5 : P=30000+PM : End If
If B=6 : P=10000+PM : End If
If B=7 : P=40000+PM : End If
If B=8 : P=-99999999 : End If
If PL(CP,0)<P
Gosub NOMONEY
Else
If B<>7
MO=B : Gosub EDIKARTE
Else
If PL>1
Gosub ANGRIFF
Else
If SOU : Sam Play 8,2 : End If
End If
End If
End If
End If
If B=9
If KART>-1 : Screen Close 2 : End If
Screen Open 3,320,200,32,0 : Screen To Back
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Get Palette 1
Screen To Front 1
WX=Screen Width : WY=Screen Height : B1=3 : B2=1
A=Rnd(13)+1 : S=8
On A Proc S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14
Screen Close 3
Screen Close 1
Screen 0
ENABLEICON[0]
For A=1 To 20
UNDEFICON[A]
Next
Gosub COMPUTE3
PAG=3 : Gosub UPDATSCREEN2
End If
B=-1 : BB=-1
Return
NOMONEY:
If SOU : Sam Play 8,2 : End If
For A=0 To 7
OT[64,188,Abs((A and 1)*31),20,"Geld"+ Fn Z$(PL(CP,0),25)+" $"]
Wait 5
Next
Return
EDIKARTE:
Gosub INITKARTE
Screen Open 3,320,10,32,0 : Screen Hide
Flash Off : Curs Off : Paper 0 : Pen 31
Cls : Gr Writing 0
OT[1,7,31,20, Fn Z$(PL(CP,0),11)+" $"]
Get Bob 48,0,0 To 112,10
OLMN=PL(CP,0) : OLPO=1
Screen 2
Hide On
Repeat
X=X Screen(X Mouse)/8 : Y=Y Screen(Y Mouse)/8 : M=Mouse Key
If OLMN<>PL(CP,0)
Bob Off 20
Screen 3
Cls
OT[1,7,31,20, Fn Z$(PL(CP,0),11)+" $"]
Get Bob 48,0,0 To 112,10
OLMN=PL(CP,0)
Screen 2
OLPO=1
End If
If OLPO=1 or((Y*8)>99)=OLPO
Wait Vbl : Bob 20,208,-((Y*8)<100)*190,48
OLPO=(Y*8)<100
End If
Sprite 0,X Hard(X*8)+2,Y Hard(Y*8)+2,2
If M=1
F=F(CP,X,Y)
If MO=1
Gosub CINS
If DD=16 and((F>9 and F<42) or(F>65))
If SOU : Sam Play 8,4 : End If
GX=X : GY=Y : F=Rnd(1) : Gosub PASBLOCK
Add PL(CP,0),-P
Else
If SOU : Sam Play 8,2 : End If
End If
End If
If MO=2
If F<2
If SOU : Sam Play 8,8 : End If
F(CP,X,Y)=67 : Inc PL(CP,17)
Put Cblock F(CP,X,Y)+50,X*8,Y*8
Add PL(CP,0),-P
Else
If SOU : Sam Play 8,2 : End If
End If
End If
If MO=3
If F<2
If SOU : Sam Play 8,8 : End If
F(CP,X,Y)=69 : Inc PL(CP,18)
Put Cblock F(CP,X,Y)+50,X*8,Y*8
Add PL(CP,0),-P
Else
If SOU : Sam Play 8,2 : End If
End If
End If
If MO=4
If F<2
If SOU : Sam Play 8,5 : End If
F(CP,X,Y)=68 : Inc PL(CP,19)
Put Cblock F(CP,X,Y)+50,X*8,Y*8
Add PL(CP,0),-P
Else
If SOU : Sam Play 8,2 : End If
End If
End If
If MO=5
If F<2
If SOU
For A=0 To 29
Sam Play 8,6,6000+Sin(A*10+90)*1000
Wait 5
Next
End If
If Rnd(2)=1
If SOU : Sam Play 8,7 : End If
F(CP,X,Y)=70 : Inc PL(CP,16)
Put Cblock F(CP,X,Y)+50,X*8,Y*8
Add PL(CP,0),-P
Else
If SOU : Sam Play 8,9 : End If
Add PL(CP,0),-P
End If
Else
If SOU : Sam Play 8,2 : End If
End If
End If
If MO=6
Gosub CINS
If DD<16
If SOU : Sam Play 8,6 : End If
IN(CP,DD,0)=-1 : IN(CP,DD,1)=-1 : IN(CP,DD,2)=0
Add PL(CP,0),-P
Bob Off DD
Else
If SOU : Sam Play 8,2 : End If
End If
End If
While Mouse Key : Multi Wait : Wend
End If
If MO=8 and M=1 Then M=2
Multi Wait
Until PL(CP,0)<P or M>1
Show On
Bob Off 20
Screen Close 3
Gosub QUITKARTE
Return
CINS:
For DD=0 To 15
If IN(CP,DD,0)=X and IN(CP,DD,1)=Y : Exit : End If
Next
Return
ANGRIFF:
OP=CP
For A=1 To 20
DISABLEICON[A]
Next
Get Cblock 997,40,50,240,100
Ink 26 : Bar 40,50 To 279,149
Ink 31 : Draw 40,149 To 40,50 : Draw To 279,50
Ink 20 : Draw 41,149 To 279,149 : Draw To 279,51
OT[104,60,31,20,"Wen angreifen?"]
Y=0
For A=0 To PL-1
If OP<>A Then DEFGADGET2[10+A,48,72+Y*16,271,84+Y*16,PL$(A,1)] : Inc Y
Next
DEFGADGET2[14,48,72+Y*16,271,84+Y*16,"Abbruch"]
CP=-1
Repeat
Multi Wait
CLICKING : B=Param
If B>0 Then CP=B-10
Until CP>-1
Put Cblock 997
Del Cblock 997
For A=10 To 14
UNDEFICON[A]
Next
For A=1 To 20
ENABLEICON[A]
Next
If CP=4 Then CP=OP : Return
Hide On
Add PL(OP,0),-P
If MUS Then Call Start(12)+8 : Call Start(12)+4
If SOU
For A=0 To 2
Sam Play 8,10
Wait 60
Next
End If
Gosub INITKARTE
For A=0 To 4
X=320 : Y=Rnd(22)+1
TX=Rnd(35)+2 : H=12
If SOU Then Sam Play 8,11
Repeat
If Mouse Key=0 Then Wait Vbl
Sprite 2,X Hard(X),Y Hard(Y*8-H+4),50+(X and 1)
Dec X : BX=X/8
If BX<TX+2 Then Dec H
Until H=0
If SOU Then Sam Play 8,3
For C=0 To 27
Sprite 2,X Hard(X-4),Y Hard(Y*8-8),C+10
Wait 3
Next
F=66
GX=TX : GY=Y : Gosub PASBLOCK
GX=TX+1 : GY=Y : Gosub PASBLOCK
GX=TX : GY=Y-1 : Gosub PASBLOCK
GX=TX+1 : GY=Y-1 : Gosub PASBLOCK
For C=15 To 0 Step -1
Colour 31,$FF0+C : Wait 2
Next
Sprite Off : Multi Wait
Colour 31,$FFF
Next
CP=OP
Gosub QUITKARTE
If MUS Then Call Start(12)+6
Show On
Return
INITKARTE:
If KART<>CP
Screen Open 2,320,200,32,0 : Screen To Back
Curs Off : Flash Off : Cls 0
Get Palette 1
For Y=0 To 24
For X=0 To 39
Put Cblock F(CP,X,Y)+50,X*8,Y*8
Next
Next
For A=0 To 15
If IN(CP,A,0)>-1 : Bob A,IN(CP,A,0)*8,IN(CP,A,1)*8,56 : End If
Next
Else
Screen 2
End If
Screen Open 3,320,200,32,0 : Screen To Back
Curs Off : Flash Off : Paper 0 : Pen 1
Get Palette 2
Screen Copy 1 To 3
Screen To Front
WX=Screen Width : WY=Screen Height : B1=2 : B2=3
A=Rnd(13)+1 : S=8
On A Proc S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14
Screen To Front 2
Screen Close 3
Screen 2
KART=CP
Return
PASBLOCK:
GF=F(CP,GX,GY)
For DD=0 To 15
If IN(CP,DD,0)=X and IN(CP,DD,1)=Y Then IN(CP,DD,0)=-1 : IN(CP,DD,1)=-1 : IN(CP,DD,2)=0 : Bob Off DD
Next
If GF=67 Then Dec PL(CP,17)
If GF=68 Then Dec PL(CP,19)
If GF=69 Then Dec PL(CP,18)
If GF=70 Then Dec PL(CP,16)
F(CP,GX,GY)=F
Put Cblock F+50,GX*8,GY*8
If F=67 Then Inc PL(CP,17)
If F=68 Then Inc PL(CP,19)
If F=69 Then Inc PL(CP,18)
If F=70 Then Inc PL(CP,16)
Return
QUITKARTE:
Screen 1 : Put Cblock 998 : OT[64,188,31,20,"Geld"+ Fn Z$(PL(CP,0),25)+" $"]
QUITKARTE2:
Screen Open 3,320,200,32,0 : Screen To Back
Curs Off : Flash Off : Paper 0 : Pen 1
Get Palette 2
Screen Copy 2 To 3
Screen To Front
WX=Screen Width : WY=Screen Height : B1=1 : B2=3
A=Rnd(13)+1 : S=8
On A Proc S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,S14
Screen To Front 1
Screen Close 3
Screen 1
Return
UPDATSCREEN3:
Sam Bank 5
WINDO[1,3,20,16,%10,"Feldbew�sserung "+PL$(CP,1)]
Ink 1 : Text 12,31+TB,"1. "+MON$(MON)+Str$(YEAR)+"."
Ink 2
Text 12,40+TB,Str$(PL(CP,1))-" "+EH$(0)+" "+PRO$(0)+" sind im Turm."
Gosub BENWASSER
Text 12,47+TB,A$
Text 12,53+TB,B$
Text 12,59+TB,C$
Text 12,66+TB,"Mit wieviel"+EH$(0)+" "+PRO$(0)+" wollen"
Text 12,72+TB,"Sie bew�ssern?"
Gosub ZEIGWASSERTURM
Return
BEWASSERUNG:
TEX$=Str$(Min(PL(CP,12),PL(CP,1)))-" "
EINGABE[12,78,7,6,1]
A=Min(Val(TEX$),PL(CP,1))
PL(CP,29)=A
Add PL(CP,1),-A
Gosub WASSERSTAND
WINCLO[1,3,20,16]
WINCLO[21,3,39,16]
Gosub COMPUTE1
Gosub COMPUTE2
PAG=2 : Gosub UPDATSCREEN1
Return
UPDATSCREEN2:
Sam Bank 5
WINDO[1,3,20,16,%10,"Arbeitsmarkt "+PL$(CP,1)]
Ink 1 : Text 12,31+TB,"1. "+MON$(MON)+Str$(YEAR)+"."
Gosub UPDATARBEITER
PASICON[1,7,38,76,32,24,"Arbeiter ein."]
PASICON[2,6,96,76,32,24,"Arbeiter ent."]
PASICON[3,7,38,107,32,24,"Facharb. ein."]
PASICON[4,6,96,107,32,24,"Facharb. ent."]
PASICON[5,5,136,107,32,24,"Weiter"]
WINDO[1,17,22,24,%10,"Informationen"]
Ink 1
Text 12,143+TB,"Immobilie Ben�tigte Arbeiter"
Ink 2
Text 12,151+TB,"�lfelder 30 Arbeiter 25 Facharb."
Text 12,157+TB,"Dattelplantage 20 Arbeiter 0 Facharb."
Text 12,163+TB,"Tabakplantage 30 Arbeiter 0 Facharb."
Text 12,169+TB,"Zigarettenfabrik 40 Arbeiter 10 Facharb."
Draw 12,151 To 172,151
Draw 125,151 To 125,175
Ink 1
Text 12,176+TB,"Ben�tigte Arbeiter "+ Fn Z$(PL(CP,13),7)
Text 12,182+TB,"Ben�tigte Facharbeiter"+ Fn Z$(PL(CP,14),7)
Gosub UPDATLOHNKOSTEN
Fade 2 To -1
For A=0 To 31
Colour Back Colour(0) : View : Wait Vbl
Next
If(Rnd(20)=0) or(PL(CP,30)<>0) Then Gosub LOHNERHOHUNG
Return
LOHNERHOHUNG:
Ink 2
If PL(CP,30)
G=Abs(PL(CP,30))+1
If PL(CP,30)<0 : P=0 : Else P=1 : End If
Else
G=Rnd(4)+1 : P=Rnd(1)
If PL(CP,P+8)=0 : Return : End If
End If
If P=0
PL(CP,30)=-G : A$="Arbeiter"
Else
PL(CP,30)=G : A$="Facharbeiter"
End If
Get Cblock 998,24,40,144,64
WINDO[3,5,21,13,%110,"Lohnerh�hung"]
For A=0 To 20
DISABLEICON[A]
Next
Text 28,47+TB,"Die "+A$+" fordern eine"
Text 28,53+TB,"Gehaltserh�hung um"+Str$(G)+"$."
Text 28,60+TB,"Sind Sie einverstanden?"
DEFGADGET[6,28,68,94,76,"Ja"]
DEFGADGET[7,96,68,163,76,"Nein!"]
Repeat
Multi Wait
CLICKING : B=Param
Until B>-1
If B=6
Add PL(CP,10+P),G
PL(CP,30)=0
Text 28,78+TB,"Die "+A$+" freuen sich sehr"
Text 28,84+TB,"�ber Ihre Entscheidung!"
If SOU : Sam Play 8,3 : End If
Else
If Rnd(20)<6
Text 28,78+TB,"Die "+A$+" sind sehr, sehr"
Text 28,84+TB,"entt�uscht!"
PL(CP,30)=0
If SOU : Sam Play 8,2 : End If
Else
G=(PL(CP,8+P)*(Rnd(50)+25))/100
Add PL(CP,8+P),-G
Text 28,78+TB,"Die "+A$+" sind sehr w�tend!"
Text 28,84+TB,Str$(G)-" "+" "+A$+" k�ndigen,"
Text 28,90+TB,"und die anderen streiken!"
If SOU : Sam Bank 6 : Sam Play 8,9 : Sam Bank 5 : End If
End If
End If
Wait 200
UNDEFICON[6]
UNDEFICON[7]
For A=0 To 20
ENABLEICON[A]
Next
Put Cblock 998
Del Cblock 998
Gosub UPDATARBEITER
Gosub UPDATLOHNKOSTEN
Return
UPDATARBEITER:
Ink 0 : Bar 12,38 To 156,63
Ink 2
Text 12,38+TB,"Geld"+ Fn Z$(PL(CP,0),10)+" $"
Text 12,44+TB,"�lfelder "+ Fn Z$(PL(CP,16),5)+" Tabakplantagen "+ Fn Z$(PL(CP,18),5)
Text 12,50+TB,"Datteln "+ Fn Z$(PL(CP,17),5)+" Zigarettenfab. "+ Fn Z$(PL(CP,19),5)
Text 12,56+TB,"Arbeiter"+ Fn Z$(PL(CP,8),6)+" Facharbeiter "+ Fn Z$(PL(CP,9),6)
Return
UPDATLOHNKOSTEN:
WINDO[23,17,39,24,%10,"Lohnkosten und -preise"]
Ink 2
Text 188,143+TB,"Arbeiter "+ Fn Z$(PL(CP,10),5)+" $"
Text 188,150+TB,"Facharbeiter"+ Fn Z$(PL(CP,11),5)+" $"
Ink 1 : Text 204,157+TB,"Lohnkosten pro Monat:"
Ink 2
P1=PL(CP,8)*PL(CP,10)
P2=PL(CP,9)*PL(CP,11)
Text 188,164+TB,"Arbeiter"+ Fn Z$(PL(CP,8),6)+"*"+ Fn Z$(PL(CP,10),3)+"$="+ Fn Z$(P1,8)+" $"
Text 188,171+TB,"Facharb."+ Fn Z$(PL(CP,9),6)+"*"+ Fn Z$(PL(CP,11),3)+"$="+ Fn Z$(P2,8)+" $"
Ink 1 : Text 188,178+TB,"Zusammen"+ Fn Z$(P1+P2,20)+" $"
Draw 275,186 To 306,186
Draw 275,188 To 306,188
Return
KAUF:
D=B-10
Ink 2
If MO=1
P=(PL(CP,20+D)*6)/5
If P<=PL(CP,0)
If D=0
Gosub ZEIGWASSERTURM : Ink 2
End If
If D=1
Gosub ZEIGOL : Ink 2
End If
Text 78,50+TB,"Wieviel"+EH$(D)+" "+PRO$(D)
Text 78,56+TB,"wollen Sie kaufen?"
MX=Min(PL(CP,0)/P,PL(0,31+D))
If D=0 : MX=Min(MX,100000-PL(CP,1)) : End If
Text 78,62+TB,"(max."+Str$(MX)+")"
TEX$="" : EINGABE[78,68,7,6,1]
A=Val(TEX$)
If D=0 and A>MX : A=MX : End If
If A*P<=PL(CP,0)
If A<=MX
If SOU : Sam Play 8,3 : End If
Add PL(CP,0),-A*P
Add PL(CP,D+1),A
Add PL(0,D+31),-A
If D>0
G=PL(0,24+D)
If G<90 or G>270 : G=(540-G) mod 360 : End If
G=Min(G-Min(A/10,90),90)
PL(0,24+D)=G
End If
Gosub UPDATBESITZ
Else
If SOU : Sam Play 8,2 : End If
Text 78,74+TB,"Soviele Waren sind"
Text 78,80+TB,"nicht auf dem Markt!"
Wait 50
End If
Else
If SOU : Sam Play 8,2 : End If
Text 78,74+TB,"Soviel Geld haben"
Text 78,80+TB,"Sie nicht!"
Wait 50
End If
If D=0
Gosub WASSERSTAND
End If
Gosub ZEIGPLANTAGE
Else
If SOU : Sam Play 8,2 : End If
Text 78,50+TB,"Das k�nnen Sie sich"
Text 78,56+TB,"nicht leisten!"
Wait 50
End If
Else
P=PL(CP,20+D)
If PL(CP,D+1)>0
If D=1
Gosub ZEIGOL : Ink 2
End If
Text 78,50+TB,"Wieviel"+EH$(D)+" "+PRO$(D)
Text 78,56+TB,"wollen Sie verkaufen?"
If P>0 : Text 78,62+TB,"(max."+Str$(PL(CP,D+1))+")" : End If
TEX$="" : EINGABE[78,68,7,6,1]
A=Min(Val(TEX$),PL(CP,D+1))
If SOU : Sam Play 8,3 : End If
Add PL(CP,0),A*P
Add PL(CP,D+1),-A
Add PL(0,D+31),A
If D>0
G=PL(0,24+D)
If G>90 and G<270 : G=(540-G) mod 360 : End If
G=Min((G-Min(A/40,90)+360) mod 360,270)
PL(0,24+D)=G
End If
Gosub ZEIGPLANTAGE
Gosub UPDATBESITZ
Else
If SOU : Sam Play 8,2 : End If
Text 78,50+TB,"Davon haben Sie"
Text 78,56+TB,"doch nichts!"
Wait 50
End If
End If
Ink 0 : Bar 78,50 To 160,86
Return
ZEIGWASSERTURM:
WINDO[21,3,39,16,%10,"Der Wasserturm"]
Paste Bob 171,33,4
OWA=85-((PL(CP,1)*37)/100000)
If OWA=85 Then Return
For Y=85 To OWA Step -1
X1=220 : X2=258
For X=0 To 5
If Point(X+220,Y)<>2 Then Inc X1
If Point(258-X,Y)<>2 Then Dec X2
Next
Ink 3 : Draw X1,Y To X2,Y
Next
Return
WASSERSTAND:
NWA=85-((PL(CP,1)*37)/100000)
If NWA=OWA Then Return
If SOU Then Sam Loop On : Sam Play 8,4
For Y=OWA To NWA Step Sgn(NWA-OWA)
X1=220 : X2=258
For X=0 To 5
If Point(X+220,Y)/2<>1 Then Inc X1
If Point(258-X,Y)/2<>1 Then Dec X2
Next
If NWA>OWA
Ink 2
Draw X1,Y To X2,Y
Else
Ink 3
Draw 253,46 To 254,46
If Y>47
Bar 253,47 To Min(257,X2),Y
Draw X1,Y To X2,Y
Else
Draw 253,47 To 258,47
Draw X1,Y To X2,Y
End If
If Y>50
XX=Rnd(3)+253 : Y1=47+Rnd(Max(Y-50,0)) : Y2=47+Rnd(Max(Y-50,0))
Ink 1+Rnd(1)*6 : Draw XX,Min(Y1,Y2) To XX,Max(Y1,Y2)
End If
End If
Multi Wait
Next
If NWA<OWA
Ink 2
Draw 253,46 To 254,46
If Y>47
Bar 253,47 To 257,Y
Else
Draw 253,47 To 258,47
End If
End If
OWA=NWA
Wait 25
If SOU Then Sam Loop Off : Sam Stop
Return
ZEIGPLANTAGE:
WINDO[21,3,39,16,%10,"Die Plantage von "+PL$(CP,0)]
Paste Bob 171,33,3
Return
ZEIGOL:
WINDO[21,3,39,16,%10,"Der �lvorat"]
Paste Bob 171,33,5
Return
SPIELLOAD:
Get Cblock 997,24,32,160,136
WINDO[3,4,23,21,%110,"Spielstand laden"]
FF$="Save/SavedGames.dat"
If Exist(FF$)=0
Ink 2 : Text 28,39+TB,"Keine Spielstande vorhanden!!!"
Wait 25
Put Cblock 997
Del Cblock 997
LOA=0 : Return
End If
For A=15 To 25
DISABLEICON[A]
Next
Reserve As Work 10,400
Bload FF$,Start(10)
For A=0 To 9
SVGM$(A)=""
For D=0 To 39
P=Peek(Start(10)+A*40+D)
If P>0 Then SVGM$(A)=SVGM$(A)+Chr$(P)
Next
Next
Erase 10
Ink 2 : Text 28,39+TB,"Welchen Spielstand laden?"
Y=0
For A=0 To 9
If SVGM$(A)<>"" Then DEFGADGET[30+A,28,50+Y*10,179,58+Y*10,SVGM$(A)] : Inc Y
Next
DEFGADGET[29,28,50+Y*10,179,58+Y*10,"Abbruch"]
Repeat
Multi Wait
CLICKING : B=Param
Until B>-1
For A=0 To 10
UNDEFICON[A+29]
Next
For A=15 To 25
ENABLEICON[A]
Next
Put Cblock 997
Del Cblock 997
If B=29 Then LOA=0 : Return
F$="Save/SavedGame"+Str$(B-29)-" "+".ftc"
If Exist(F$)=0 Then LOA=0 : Return
Open In 1,F$
LE=Lof(1)
Reserve As Work 9,LE
ST=Start(9)
Sload 1 To ST,LE
Close 1
A$="FTC-Save"
For A=0 To 7
If Peek(ST+A)<>Asc(Mid$(A$,A+1,1)) Then Erase 9 : LOA=0 : Return
Next
CK=0
For A=ST To ST+LE-6 Step 2
CK=(CK+Deek(A)) mod $10000
Next
If Deek(ST+LE-4)<>$10000-CK Then Erase 9 : LOA=0 : Return
Add ST,8
YEAR=Deek(ST)
MON=Deek(ST+2)
OP=Deek(ST+4)
PL=Deek(ST+6) : Add ST,8
For CP=0 To PL-1
PL$(CP,0)=""
For A=1 To 16
If Peek(ST)>0 Then PL$(CP,0)=PL$(CP,0)+Chr$(Peek(ST))
Inc ST
Next
PL$(CP,1)=""
For A=1 To 20
If Peek(ST)>0 Then PL$(CP,1)=PL$(CP,1)+Chr$(Peek(ST))
Inc ST
Next
For A=0 To 35
PL(CP,A)=Leek(ST) : Add ST,4
Next
For A=0 To 15
IN(CP,A,0)=Leek(ST)
IN(CP,A,1)=Leek(ST+4)
IN(CP,A,2)=Leek(ST+8) : Add ST,12
Next
For Y=0 To 24
For X=0 To 39
F(CP,X,Y)=Peek(ST) : Inc ST
Next
Next
Next
LOA=1
CP=OP
Erase 9
Return
SPIELSAVE:
Get Cblock 997,24,32,160,136
WINDO[3,4,23,21,%110,"Spielstand speichern"]
If Exist("Save")=0 Then Mkdir "Save"
FF$="Save/SavedGames.dat"
If Exist(FF$)=0
Reserve As Work 10,400
Else
Reserve As Work 10,400
Bload FF$,Start(10)
End If
For A=15 To 29
DISABLEICON[A]
Next
For A=0 To 9
SVGM$(A)=""
For D=0 To 39
P=Peek(Start(10)+A*40+D)
If P>0 Then SVGM$(A)=SVGM$(A)+Chr$(P)
Next
Next
Ink 2 : Text 28,39+TB,"Welchen Spielstand speichern?"
For A=0 To 9
DEFGADGET[30+A,28,50+A*10,179,58+A*10,SVGM$(A)]
Next
DEFGADGET[29,28,150,179,158,"Abbruch"]
Repeat
Multi Wait
CLICKING : B=Param
Until B>-1
Ink 1
If B>29
D=B-30
TEX$=SVGM$(D)
EINGABE[30,50+D*10,40,37,0]
If TEX$="" : TEX$="1. "+MON$(MON)+Str$(YEAR) : End If
SVGM$(D)=TEX$
For A=0 To 39
If A<Len(SVGM$(D))
Poke Start(10)+D*40+A,Asc(Mid$(SVGM$(D),A+1,1))
Else
Poke Start(10)+D*40+A,0
End If
Next
Bsave FF$,Start(10) To Start(10)+400
End If
Erase 10
For A=0 To 10
UNDEFICON[A+29]
Next
For A=15 To 25
ENABLEICON[A]
Next
Put Cblock 997
Del Cblock 997
If B=29 Then Return
F$="Save/SavedGame"+Str$(B-29)-" "+".ftc"
Reserve As Work 9,5500
ST=Start(9)
A$="FTC-Save"
For A=1 To 8
Poke ST,Asc(Mid$(A$,A,1)) : Inc ST
Next
Doke ST,YEAR
Doke ST+2,MON
Doke ST+4,CP
Doke ST+6,PL : Add ST,8
OP=CP
For CP=0 To PL-1
For A=1 To 16
If A<=Len(PL$(CP,0)) Then Poke ST,Asc(Mid$(PL$(CP,0),A,1)) Else Poke ST,0
Inc ST
Next
For A=1 To 20
If A<=Len(PL$(CP,1)) Then Poke ST,Asc(Mid$(PL$(CP,1),A,1)) Else Poke ST,0
Inc ST
Next
For A=0 To 35
Loke ST,PL(CP,A) : Add ST,4
Next
For A=0 To 15
Loke ST,IN(CP,A,0)
Loke ST+4,IN(CP,A,1)
Loke ST+8,IN(CP,A,2) : Add ST,12
Next
For Y=0 To 24
For X=0 To 39
Poke ST,F(CP,X,Y) : Inc ST
Next
Next
Next
CK=0
For A=Start(9) To ST-2 Step 2
CK=(CK+Deek(A)) mod $10000
Next
Doke ST,$10000-CK : Add ST,4
Bsave F$,Start(9) To ST
Erase 9
CP=OP : B=-1 : BB=-1
Return
GAMEINIT:
PL=B-1
WINCLR[0,1,40,25]
UNDEFICON[1]
UNDEFICON[2]
UNDEFICON[3]
UNDEFICON[4]
UNDEFICON[5]
YEAR=1970 : MON=0
Ink 2
For CP=0 To PL-1
Text 4,15+TB+CP*32,"Spieler"+Str$(CP+1)
Text 12,23+TB+CP*32,"Name des Spielers:"
TEX$=PL$(CP,0) : EINGABE[90,23+CP*32,20,15,0]
If TEX$="" Then TEX$="Spieler"+Str$(CP+1)
PL$(CP,0)=TEX$
Text 12,31+TB+CP*32,"Name der Firma :"
TEX$=PL$(CP,1) : EINGABE[90,31+CP*32,25,20,0]
If TEX$="" Then TEX$=PL$(CP,0)+" co."
PL$(CP,1)=TEX$
Next
WINCLR[0,1,40,25]
Ink 2
CT[80,"Bitte Warten..."]
For CP=0 To PL-1
Gosub RESETPLAYER
Next
WINCLR[0,1,40,25]
PAG=2 : CP=0 : Gosub UPDATSCREEN1
Return
RESETPLAYER:
PL(CP,0)=10000
PL(CP,1)=500
For B=2 To 5
PL(CP,B)=0
Next
For B=8 To 19
PL(CP,B)=0
Next
If CP=0 Then PL(CP,7)=Min(Rnd(7),6)
PL(CP,10)=10
PL(CP,11)=25
For A=0 To 15
IN(CP,A,0)=-1 : IN(CP,A,1)=-1 : IN(CP,A,2)=0
Next
If CP=0 Then PL(CP,6)=PL(CP,7)*(Rnd(20)+10)
Add PL(CP,1),PL(CP,6)
Gosub COMPUTE2
Gosub GENERATE
Return
COMPUTE1:
WINDO[1,3,39,24,%10,"Nachrichten an "+PL$(CP,0)]
A$="30"
If MON=1 Then A$="28"
If MON=1 and(YEAR mod 4)=0 Then A$="29"
If MON=0 or MON=2 or MON=4 or MON=6 or MON=7 or MON=9 or MON=11 Then A$="31"
Ink 1 : Text 12,31+TB,A$+". "+MON$(MON)+Str$(YEAR)+"."
Gosub INSECTS
Y=38
PL(CP,6)=PL(CP,7)*(Rnd(5)+5)
R=PL(CP,6)*(1+PL(CP,17)+PL(CP,18))
Add PL(CP,12),-Min(R,PL(CP,12))
Add PL(CP,1),R
RST=Max(PL(CP,18)-(PL(CP,19)*4),0)
If PL(CP,12)>0 Then WE=Min((PL(CP,29)*100)/PL(CP,12),125) Else WE=150
If PL(CP,13)>0 Then EF1=Min((PL(CP,8)*100)/PL(CP,13),150) Else EF1=100
If PL(CP,14)>0 Then EF2=Min((PL(CP,9)*100)/PL(CP,14),150) Else EF2=100
If PL(CP,19)>0 Then EF3=((PL(CP,18)-RST)*100)/(PL(CP,19)*4) Else EF3=100
If PL(CP,30)<0 Then EF1=0
If PL(CP,30)>0 Then EF2=0
Gosub OTHEREVENTS
P1=(Max(EF1+EF2-Rnd(50),0)*PL(CP,16)*(Rnd(5)+5))/5
P2=(Max(EF1-Rnd(25),0)*WE*PL(CP,17)*(10-PL(CP,7)))/750
P3=(Max(EF1-Rnd(10),0)*WE*RST*(9-PL(CP,7)))/1000
P4=(Max(EF1+EF2-Rnd(25),0)*EF3*WE*PL(CP,19)*(10-PL(CP,7)))/40000
L1=PL(CP,8)*PL(CP,10)
L2=PL(CP,9)*PL(CP,11)
If PL(CP,0)<0 Then L3=Abs((PL(CP,0)*4)/10) Else L3=0
Add PL(CP,0),-(L1+L2+L3)
Ink 2
If VER Then Text 12,Y+TB,"Die Insekten haben sich vermehrt!" : Add Y,6
If INS=1 Then Text 12,Y+TB,"Es ist nur ein Insektenschwarm auf Ihrem Grundst�ck!" : Add Y,6
If INS>1 Then Text 12,Y+TB,"Es befinden sich"+Str$(INS)+" Insektenschw�rme auf Ihrem Grundst�ck!" : Add Y,6
If DES=1 Then Text 12,Y+TB,"Au�erdem wurde ein Feld zerst�rt!" : Add Y,6
If DES>1 Then Text 12,Y+TB,"Au�erdem wurden"+Str$(DES)+" Felder zerst�rt!" : Add Y,6
If P1>0 and PL(CP,16)>1 Then Text 12,Y+TB,"Die �lt�rme konnten"+Str$(P1)+EH$(1)+" "+PRO$(1)+" f�rdern." : Add Y,6
If P1>0 and PL(CP,16)=1 Then Text 12,Y+TB,"Der �lturm konnte"+Str$(P1)+EH$(1)+" "+PRO$(1)+" f�rdern." : Add Y,6
If P2>0 Then Text 12,Y+TB,"Es wurden"+Str$(P2)+EH$(2)+" "+PRO$(2)+" geerntet." : Add Y,6
If P3>0 Then Text 12,Y+TB,"Es wurden"+Str$(P3)+EH$(3)+" "+PRO$(3)+" geerntet." : Add Y,6
If P4>0 Then Text 12,Y+TB,Str$(P4)-" "+" "+PRO$(4)+" konnten produziert werden." : Add Y,6
Add PL(CP,2),P1
Add PL(CP,3),P2
Add PL(CP,4),P3
Add PL(CP,5),P4
If P1=0 and P2=0 and P3=0 and P4=0
A$="Es wurde �berhaupt nichts produziert! " : B$=""
If PL(CP,30)
A$=A$+"Geben Sie halt den "
If PL(CP,30)<0 : A$=A$+"Arbeitern" : Else A$=A$+"Facharbeitern" : End If
B$="Ihre Lohnerh�hung und Sie k�nnen wieder etwas produzieren!"
Else
If PL(CP,17)+PL(CP,18)=0
A$=A$+"Sie sollten endlich etwas anbauen!"
If PL(CP,8)+PL(CP,9)=0
B$="und dann Arbeiter einstellen!"
End If
Else
If PL(CP,8)+PL(CP,9)=0
A$=A$+"Sie sollten Arbeiter einstellen!"
End If
End If
End If
Text 12,Y+TB,A$ : Add Y,6
If B$<>"" : Text 12,Y+TB,B$ : Add Y,6 : End If
End If
If MON=11 Then L1=L1*2 : L2=L2*2
If L1>0 and L2>0
Text 12,Y+TB,"Die Ausgaben f�r die Arbeiter und Facharbeiter betrugen"+Str$(L1+L2)+" $." : Add Y,6
Else
If L1>0
Text 12,Y+TB,"Der Lohn f�r die Arbeiter betrug"+Str$(L1)+" $." : Add Y,6
End If
If L2>0
Text 12,Y+TB,"Der Lohn f�r die Facharbeiter betrug"+Str$(L1)+" $." : Add Y,6
End If
End If
If MON=11 and L1+L2>0 Then Text 12,Y+TB,"(Inklusive Weihnachtsgeld.)" : Add Y,6
If L3>0
Text 12,Y+TB,"Abz�glich 4% Zins betr�gt "+PL$(CP,0)+"s Guthaben nun"+Str$(PL(CP,0))+" $." : Add Y,6
If PL(CP,0)<-100000 : Gosub PFANDUNG : End If
Else
Text 12,Y+TB,"Ihr Guthaben betr�gt nun"+Str$(PL(CP,0))+" $." : Add Y,6
End If
DISABLEICON[0]
DEFGADGET[1,12,178,158,188,"Weiter"]
DEFGADGET[2,160,178,307,188,"Karte anschauen"]
Repeat
Multi Wait
CLICKING : B=Param
If B=2 Then Gosub AFTERMAP
BP=B : Gosub AUTOTEST
Until B=1
UNDEFICON[1]
ENABLEICON[0]
WINCLO[1,3,39,24]
Inc CP
If CP=PL
CP=0
Add MON,1,0 To 11
If MON=0
Inc YEAR
If(YEAR and 2)=0
For A=0 To PL-1
Inc PL(A,15)
Next
End If
End If
End If
Return
OTHEREVENTS:
Ink 1
If Rnd(150)=0 and PL(CP,0)>5000
Text 12,Y+TB,"Achtung: In Ihrem B�ro wurde eingebrochen. Das ganze Geld aus Ihrem" : Add Y,6
Text 12,Y+TB,"Safe wurde entwendet!" : Add Y,6
PL(CP,0)=0
End If
If Rnd(75)=0
P=Rnd(9)*10000+10000
Text 12,Y+TB,"Gl�ckwunsch: Sie haben im Lotto"+Str$(P)+" $ gewonnen!" : Add Y,6
Add PL(CP,0),P
End If
If Rnd(25)=0
D=Rnd(2)
If D=0 : A$="Zehn" : P=10 : End If
If D=1 : A$="Hundert" : P=100 : End If
If D=2 : A$="Tausend" : P=1000 : End If
Text 12,Y+TB,"Gl�ckwunsch: Sie haben einen "+A$+"-Dollar Schein gefunden!" : Add Y,6
Add PL(CP,0),P
End If
If Rnd(100)=0
D=Rnd(3)
P=Rnd(10000)*500+500
If D=0 : A$="Ihrem Vater" : End If
If D=1 : A$="Ihrem Mutter" : End If
If D=2 : A$="Ihrer Tante" : End If
If D=3 : A$="Ihrem Onkel" : End If
Text 12,Y+TB,"Gl�ckwunsch: Sie erben von "+A$+Str$(P)+" $." : Add Y,6
Add PL(CP,0),P
End If
If Rnd(10)=0 and PL(CP,7)=6 Then Gosub FLOODING
If Rnd(200)=0 Then Gosub ERDBEBEN
D=Rnd(3)
If Rnd(50)=0 and PL(CP,16+D)>0 Then Gosub ZERSTORGEBAUDE
If Rnd(50)=0
For A=0 To 15
If IN(CP,A,0)=-1 : Exit : End If
Next
If A<16
IN(CP,A,0)=Rnd(39) : IN(CP,A,1)=Rnd(24) : IN(CP,A,2)=10
Text 12,Y+TB,"Achtung: Ein Insektenschwarm wurde auf Ihrem Gebiet gesichtet!" : Add Y,6
Inc INS
End If
End If
If Rnd(100)=0
Text 12,Y+TB,"Achtung: Ein Atomkrieg bricht aus!" : Add Y,6
Text 12,Y+TB,"Das Land wird von Atomraketen bombadiert!" : Add Y,6
Wait 100
Gosub AOMKRIEG
End If
If Rnd(50)=0
D=Rnd(2)
P=Rnd(50)+10
If D=0
Text 12,Y+TB,"Achtung: Durch eine Grippewelle wurden"+Str$(P)+"% Ihrer Arbeiter" : Add Y,6
Text 12,Y+TB,"und Facharbeiter krank."
End If
If D=1
Text 12,Y+TB,"Achtung: Durch �berm��igen Alkoholkonsum fallen"+Str$(P)+"% Ihrer" : Add Y,6
Text 12,Y+TB,"Arbeiter und Facharbeiter aus."
End If
If D=2
Text 12,Y+TB,"Achtung: Durch eine Lebensmittelvergiftung k�nnen"+Str$(P)+"% Ihrer" : Add Y,6
Text 12,Y+TB,"Arbeiter und Facharbeiter nicht kommen."
End If
Add Y,6
Add EF1,-((P*EF1)/100)
Add EF2,-((P*EF2)/100)
End If
D=Rnd(4)
If Rnd(50)=0 and PL(CP,D+1)
P=Rnd(60)+30
If D=0
B=0
Text 12,Y+TB,"Achtung: Durch einen Bedienungsfehler wurden"+Str$(P)+"% Ihres "+PRO$(D)+"s" : Add Y,6
Text 12,Y+TB,"verschwendet."
End If
If D=1
B=Rnd(P+50)*500
Text 12,Y+TB,"Achtung: Bei einer Explosion im �llager sind"+Str$(P)+"% Ihres "+PRO$(D)+"s" : Add Y,6
Text 12,Y+TB,"verbrannt. Schaden am Lager:"+Str$(B)+" $."
End If
If D=2
B=Rnd(P+50)*100
Text 12,Y+TB,"Achtung:"+Str$(P)+"% Ihrer "+PRO$(D)+" wurden von Ratten aufgefressen." : Add Y,6
Text 12,Y+TB,"Lohn f�r den Rattenf�nger:"+Str$(B)+" $."
End If
If D=3
B=Rnd(P+50)*200
Text 12,Y+TB,"Achtung: Bei einem Feuer im Tabaklager wurden"+Str$(P)+"% Ihres "+PRO$(D)+"s" : Add Y,6
Text 12,Y+TB,"zerst�rt. Schaden am Lager:"+Str$(B)+" $."
End If
If D=4
B=Rnd(P+50)*300
Text 12,Y+TB,"Achtung: Durch eine glimmende Zigarette wurde ein Feuer im Zigaretten-" : Add Y,6
Text 12,Y+TB,"lager entfacht."+Str$(P)+"% Ihrer "+PRO$(D)+" wurden zerst�rt." : Add Y,6
Text 12,Y+TB,"Schaden am Lager:"+Str$(B)+" $."
End If
Add Y,6
Add PL(CP,D+1),-(P*PL(CP,D+1)/100)
Add PL(CP,0),-B
End If
Ink 2
Return
ZERSTORGEBAUDE:
A$="Achtung: Durch ein Feuer wurde ein" :
If D=0
Text 12,Y+TB,A$+" �lturm zerst�rt." : P=70
End If
If D=1
Text 12,Y+TB,A$+"e Dattelplantage zerst�rt." : P=67
End If
If D=2
Text 12,Y+TB,A$+"e Tabakplantage zerst�rt." : P=69
End If
If D=3
Text 12,Y+TB,A$+"e Zigarettenfabrik zerst�rt." : P=68
End If
Add Y,6
YY=Y
For X=0 To 39
For Y=0 To 24
F=F(CP,X,Y)
If F=P Then GX=X : GY=Y : F=66 : Gosub CHGBLOCK : Exit 2
Next
Next
Y=YY
Return
FLOODING:
Text 12,Y+TB,"Achtung: Durch den starken Regenfall tritt der Flu� �ber die Ufer." : Add Y,6
Text 12,Y+TB,"Alles in Ufern�he befindliche wird weggeschwemmt!" : Add Y,6
YY=Y
For X=0 To 39
For Y=0 To 24
F=F(CP,X,Y)
If(F>1 and F<10) or(F>41 and F<66)
If F>41
F(CP,X,Y)=2+(F-42)/3
End If
GX=X-1 : GY=Y-1 : Gosub FLOODBLK
GX=X : GY=Y-1 : Gosub FLOODBLK
GX=X+1 : GY=Y-1 : Gosub FLOODBLK
GX=X+1 : GY=Y : Gosub FLOODBLK
GX=X+1 : GY=Y+1 : Gosub FLOODBLK
GX=X : GY=Y+1 : Gosub FLOODBLK
GX=X-1 : GY=Y+1 : Gosub FLOODBLK
GX=X-1 : GY=Y : Gosub FLOODBLK
End If
Next
Next
Y=YY
Return
FLOODBLK:
If GX<0 or GX>39 or GY<0 or GY>24 Then Return
GF=F(CP,GX,GY)
If(GF>1 and GF<10) or(GF>41 and GF<66) Then Return
If GF=67 Then Dec PL(CP,17)
If GF=68 Then Dec PL(CP,19)
If GF=69 Then Dec PL(CP,18)
If GF=70 Then Dec PL(CP,16)
F(CP,GX,GY)=Rnd(1)
Return
AOMKRIEG:
If MUS Then Call Start(12)+8 : Call Start(12)+4
Sam Bank 6
Hide On
OP=CP : YY=Y
For CP=0 To PL-1
Gosub NACHINITKARTE
For A=0 To 14
X=320 : Y=Rnd(22)+1
TX=Rnd(35)+2 : H=12
If SOU Then Sam Play 8,11
Repeat
If Mouse Key=0 Then Wait Vbl
Sprite 2,X Hard(X),Y Hard(Y*8-H+4),50+(X and 1)
Dec X : BX=X/8
If BX<TX+2 Then Dec H
Until H=0
If SOU Then Sam Play 8,3
For C=0 To 27
Sprite 2,X Hard(X-4),Y Hard(Y*8-8),C+10
Wait 3
Next
F=66
GX=TX : GY=Y : Gosub PASBLOCK
GX=TX+1 : GY=Y : Gosub PASBLOCK
GX=TX : GY=Y-1 : Gosub PASBLOCK
GX=TX+1 : GY=Y-1 : Gosub PASBLOCK
For C=15 To 0 Step -1
Colour 31,$FF0+C : Wait 2
Next
Sprite Off : Multi Wait
Colour 31,$FFF
Next
Next
CP=OP : Y=YY
Gosub NACHQUITKARTE
Show On
Sam Bank 5
If MUS Then Call Start(12)+6
Return
ERDBEBEN:
If PL(CP,19) or PL(CP,16)
A$=""
If PL(CP,19) : A$=A$+"Fabriken" : End If
If PL(CP,19)>0 and PL(CP,16)>0 : A$=A$+" und " : End If
If PL(CP,16) : A$=A$+"�lt�rme" : End If
Text 12,Y+TB,"Achtung: Durch ein Erdbeben wurden viele Ihrer "+A$ : Add Y,6
Text 12,Y+TB,"v�llig zerst�rt." : Add Y,6
YY=Y
For Y=0 To 24
For X=0 To 39
F=F(CP,X,Y)
If(F=68 or F=70) and Rnd(30)<24
GX=X : GY=Y : F=66 : Gosub CHGBLOCK
End If
Next
Next
Y=YY
P=(PL(CP,19)+PL(CP,16))*10000
Text 12,Y+TB,"Reparaturkosten anderer Geb�ude betragen"+Str$(P)+" $" : Add Y,6
Add PL(CP,0),-P
Else
Text 12,Y+TB,"Bei einem kleineren Erdbeben wurde nichts zerst�rt!" : Add Y,6
End If
Return
AFTERMAP:
Gosub NACHINITKARTE
While Mouse Key=0 : Multi Wait : Wend
Gosub NACHQUITKARTE
Return
NACHINITKARTE:
Fade 1
For A=0 To 16
Colour Back Colour(0) : View : Wait Vbl
Next
Unpack 13 To 1 : Screen To Back
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Colour 16,0
KART=-1 : Gr Writing 0
Gosub INITKARTE
Return
NACHQUITKARTE:
Gosub QUITKARTE2
Screen Close 2
Screen Close 1
Screen 0
Fade 2 To -1
For A=0 To 31
Colour Back Colour(0) : View : Wait Vbl
Next
Return
PFANDUNG:
Add Y,6
If PL(CP,16)+PL(CP,17)+PL(CP,18)+PL(CP,19)=0 Then Pop : Goto GAMEOVER
Ink 1 : Text 12,Y+TB,"Um Sie vor einem Bankrott zu bewahren, werden Sie gepf�ndet!"
Add Y,6 : Ink 2
For A=0 To 3
If PL(CP,2+A)
P=PL(CP,2+A)*PL(CP,21+A) : PL(CP,2+A)=0
Add PL(CP,0),P
If PL(CP,0)<0
Text 12,Y+TB,PRO$(1+A)+" im Wert von"+Str$(P)+" $ verkauft. Restschuld"+Str$(-PL(CP,0))+" $."
Else
Text 12,Y+TB,PRO$(1+A)+" im Wert von"+Str$(P)+" $ verkauft. Guthaben"+Str$(PL(CP,0))+" $."
End If
Add Y,6
End If
If PL(CP,0)>-10000
Text 12,Y+TB+6,"Noch mal Schwein gehabt!" : Add Y,12
Return
End If
Next
PM=PL(CP,15)*250
A=1 : YY=Y
Repeat
If A=1 and PL(CP,16)=0 Then Inc A
If A=2 and PL(CP,19)=0 Then Inc A
If A=3 and PL(CP,18)=0 Then Inc A
For Y=0 To 24
For X=0 To 39
F=F(CP,X,Y)
If F>66 and F<71
If F=67 : A$="Eine Dattelplantage" : P=1500+PM : D=4 : End If
If F=68 : A$="Eine Zigarettenfabrik" : P=10000+PM : D=2 : End If
If F=69 : A$="Eine Tabakplantage" : P=2000+PM : D=3 : End If
If F=70 : A$="Ein �lturm" : P=15000+PM : D=1 : End If
If D=A
GX=X : GY=Y : F=66 : Gosub CHGBLOCK
Add PL(CP,0),P
If PL(CP,0)<0
B$=A$+" wurde f�r"+Str$(P)+" $ verkauft. Restschuld"+Str$(-PL(CP,0))+" $."
Else
B$=A$+" wurde f�r"+Str$(P)+" $ verkauft. Guthaben"+Str$(PL(CP,0))+" $."
End If
Gosub ST
End If
End If
Exit If PL(CP,16)+PL(CP,17)+PL(CP,18)+PL(CP,19)=0 or PL(CP,0)>-10000,2
Next
Next
Inc A
Until A>4
Y=YY
If PL(CP,0)<-10000 Then Pop : Goto GAMEOVER
B$="" : Gosub ST
B$="Noch mal Schwein gehabt!" : Gosub ST
Y=YY
Return
ST:
If YY>170
Screen Copy 0,12,46,307,188 To 0,12,40
Multi Wait : Add YY,-6
End If
Text 12,YY+TB,B$ : Add YY,6
Return
GAMEOVER:
YY=Y
B$="" : Gosub ST
Ink 1 : B$="Schlechte Nachrichten, "+PL$(CP,0)+"! Sie sind bankrott!" : Gosub ST
Ink 2 : B$="Sie d�rfen wieder von vorne anfangen." : Gosub ST
B$="" : Gosub ST
Ink 1 : B$="Bitte Warten..." : Gosub ST
Gosub RESETPLAYER
DISABLEICON[0]
DEFGADGET[1,12,178,307,188,"Weiter"]
Repeat
Multi Wait
CLICKING : B=Param
BP=B : Gosub AUTOTEST
Until B>-1
UNDEFICON[1]
ENABLEICON[0]
WINCLO[1,3,39,24]
Inc CP
If CP=PL
CP=0
Add MON,1,0 To 11
If MON=0 : Inc YEAR : End If
If(YEAR and 2)=0
For A=0 To PL-1
Inc PL(A,15)
Next
End If
End If
B=-1
Return
INSECTS:
VER=0 : DES=0 : INS=0
For A=0 To 15
X=IN(CP,A,0) : Y=IN(CP,A,1) : FU=IN(CP,A,2)
If FU>0
F=F(CP,X,Y)
If(F>1 and F<10) or(F>41 and F<66) : FU=Max(FU-10,0) : End If
If F>9 and F<42 : Add FU,5 : End If
If F=67 : Add FU,40 : End If
If F=69 : Add FU,25 : End If
If F>66 and F<71 : Inc DES : End If
If(F>9 and F<42) or(F>66 and F<71)
GX=X : GY=Y : F=66 : Gosub CHGBLOCK
End If
DD=999
For GY=Max(Y-5,0) To Min(Y+5,24)
For GX=Max(X-5,0) To Min(X+5,39)
D=Abs(GX-X)+Abs(GY-Y)
If F(CP,GX,GY)>66 and D<DD : XX=GX : YY=GY : DD=D : End If
Next
Next
If DD<999
RX=Sgn(XX-X) : RY=Sgn(YY-Y)
Else
RX=Rnd(2)-1 : RY=Rnd(2)-1
End If
For D=0 To 19
For DD=0 To 15
If DD<>A and IN(CP,A,0)=IN(CP,DD,0) and IN(CP,A,1)=IN(CP,DD,1)
RX=Rnd(2)-1 : RY=Rnd(2)-1
Exit
End If
Next
Exit If DD=8
Next
If FU>20
For D=0 To 15
If IN(CP,D,0)=-1
FU=FU/2 : Inc VER
IN(CP,D,0)=X : IN(CP,D,1)=Y : IN(CP,D,2)=-FU
Exit
End If
Next
End If
Add X,RX : Add Y,RY : Add FU,-2
IN(CP,A,0)=X : IN(CP,A,1)=Y : IN(CP,A,2)=FU
End If
Next
For A=0 To 15
If IN(CP,A,2)<0 Then IN(CP,A,2)=Abs(IN(CP,A,2))
If IN(CP,A,0)<0 or IN(CP,A,0)>39 or IN(CP,A,1)<0 or IN(CP,A,1)>24 or IN(CP,A,2)<1
IN(CP,A,0)=-1 : IN(CP,A,1)=-1 : IN(CP,A,2)=0
Else
Inc INS
End If
Next
Return
CHGBLOCK:
GF=F(CP,GX,GY)
If GF=67 Then Dec PL(CP,17)
If GF=68 Then Dec PL(CP,19)
If GF=69 Then Dec PL(CP,18)
If GF=70 Then Dec PL(CP,16)
F(CP,GX,GY)=F
If F=67 Then Inc PL(CP,17)
If F=68 Then Inc PL(CP,19)
If F=69 Then Inc PL(CP,18)
If F=70 Then Inc PL(CP,16)
Return
COMPUTE2:
If CP>0 Then Gosub COMPUTE3 : Return
PL(CP,7)=Min(Rnd(7),6)
PL(CP,20)=7-PL(CP,7)
Gosub COMPUTE3
For B=25 To 28
PL(CP,B)=(PL(CP,B)+Rnd(45)+5) mod 360
Next
PL(CP,21)=Sin(PL(CP,25))*10+40
PL(CP,22)=Sin(PL(CP,26))*3+9
PL(CP,23)=Sin(PL(CP,27))*4+12
PL(CP,24)=Sin(PL(CP,28))*5+16
PL(CP,31)=(7-PL(CP,20))*(Rnd(15000)+7500)
PL(CP,32)=(51-PL(CP,21))*(Rnd(150)+75)
PL(CP,33)=(13-PL(CP,22))*(Rnd(1500)+750)
PL(CP,34)=(16-PL(CP,23))*(Rnd(1000)+500)
PL(CP,35)=(21-PL(CP,24))*(Rnd(750)+500)
If PL=1 Then Return
For CP=1 To PL-1
PL(CP,6)=PL(0,6)
PL(CP,7)=PL(0,7)
For B=20 To 28
PL(CP,B)=PL(0,B)
Next
For B=31 To 35
PL(CP,B)=PL(0,B)
Next
Gosub COMPUTE3
Next
CP=0
Return
COMPUTE3:
PL(CP,13)=PL(CP,16)*30+PL(CP,17)*20+PL(CP,18)*30+PL(CP,19)*40
PL(CP,14)=PL(CP,16)*25+PL(CP,19)*10
PL(CP,1)=Min(PL(CP,1),100000)
PL(CP,0)=Max(PL(CP,0),-9000000)
PL(CP,12)=(PL(CP,17)*50+PL(CP,18)*30)*PL(CP,20)
Return
UPDATSCREEN1:
Sam Bank 5
WINDO[1,3,20,16,%10,PL$(CP,1)]
PASICON[1,3,30,107,32,24,"Ankauf"]
PASICON[2,4,66,107,32,24,"Verkauf"]
PASICON[3,5,102,107,32,24,"Weiter"]
PASICON[9,8,138,107,32,24,"Optionen"]
Ink 1 : Text 12,32+TB,"1. "+MON$(MON)+Str$(YEAR)+"."
Ink 2
If PL(CP,6)>0
Text 12,40+TB,"Im "+MON$((MON+11) mod 12)+" sind"+Str$(PL(CP,6))+EH$(0)+"/ha Regen"
Text 12,46+TB,"gefallen."
Else
Text 12,40+TB,"Im "+MON$((MON+11) mod 12)+" hat es nicht geregnet!"
End If
Text 12,54+TB,"Im Moment "+WET$(PL(CP,7))
Gosub BENWASSER
Text 12,62+TB,A$
Text 12,68+TB,B$
Text 12,74+TB,C$
Gosub ZEIGPLANTAGE
Gosub UPDATBESITZ
Gosub UPDATPREISLISTE
Return
BENWASSER:
If PL(CP,12)>0
A$="Um die"
If PL(CP,17)>0
A$=A$+Str$(PL(CP,17))+" ha "+PRO$(2)+" "
If PL(CP,18)>0
A$=A$+"und die"+Str$(PL(CP,18))+" ha"
B$=PRO$(3)+" optimal bew�ssern zu k�nnen,"
C$="werden"+Str$(PL(CP,12))+EH$(0)+" "+PRO$(0)+" ben�tigt."
Else
A$=A$+"optimal be-"
B$="w�ssern zu k�nnen, werden"+Str$(PL(CP,12))+EH$(0)
C$=PRO$(0)+" ben�tigt."
End If
Else
A$=A$+Str$(PL(CP,18))+" ha "+PRO$(3)+" optimal be-"
B$="w�ssern zu k�nnen, werden"+Str$(PL(CP,12))+EH$(0)
C$=PRO$(0)+" ben�tigt."
End If
Else
A$="Zur Bew�sserung der Felder wird kein"
B$=PRO$(0)+" ben�tigt!"
C$=""
End If
Return
UPDATPREISLISTE:
WINDO[20,17,39,24,%10,"Preisliste"]
Ink 1 : Text 164,143+TB," Verkaufspreis/Ankaufspreis"
Ink 2
Text 164,152+TB, Fn STL$(PRO$(0),12)+" "+ Fn Z$(PL(CP,20),3)+" $"
For A=1 To 4
A$= Fn STL$(PRO$(A),12)+ Fn Z$(PL(CP,A+20),3)+" $ "+ Fn Z$((PL(CP,A+20)*6)/5,3)+" $"
Text 164,152+A*7+TB,A$
Next
Draw 164,151 To 306,151
Draw 249,151 To 249,188
Return
UPDATBESITZ:
WINDO[1,17,19,24,%10,"Besitz"]
Ink 2
F$=Chr$(173)+Chr$(187)
Text 12,144+TB,"Geld "+ Fn Z$(PL(CP,0),9)+" $"
Text 12,152+TB, Fn STL$(PRO$(0),9)+ Fn Z$(PL(CP,1),9)+EH$(0)
For A=1 To 4
A$= Fn STL$(PRO$(A),11)+ Fn Z$(PL(CP,A+1),7)+ Fn STL$(EH$(A),3)+" "+F$
A$=A$+ Fn Z$(PL(CP,A+1)*PL(CP,A+20),8)+" $"
Text 12,152+A*7+TB,A$
Next
Return
RETWORKBENCH:
If MUS=1 Then Call Start(12)+8 : Call Start(12)+4
IS=-1 : TIMOUT=25
For A=1 To 40
UNDEFICON[A]
Next
WINDO[0,1,40,25,%111111,"Workbench"]
PASICON[1,2,16,32,15,14,"Spiele"]
WINDO[10,5,30,20,%111111,"Spiele"]
DEFICON[3,80,40,87,47]
PASICON[2,1,160,100,64,48,"Free Trading Company"]
PAG=0
Return
GENERATE:
L=0
For Y=0 To 24
For X=0 To 39
F(CP,X,Y)=Rnd(1)
Next
Next
Repeat
If Rnd(1)=0
X=Rnd(1)*39 : Y=Rnd(17)+1
If X=0 : RX=1 : Else RX=-1 : End If
RY=0
Else
X=Rnd(39) : Y=Rnd(1)*24
If Y=0 : RY=1 : Else RY=-1 : End If
RX=0
End If
RXA=RX : RYA=RY : B=20
Repeat
If RY Then A=Rnd(1)+2
If RX Then A=Rnd(1)+4
F(CP,X,Y)=A : C=0
Repeat
F=0
If X+RX<40 and X+RX>-1 and Y+RY<25 and Y+RY>-1 Then F=F(CP,X+RX,Y+RY)
If F>1 Then B=Max(B-1,6)
If Rnd(B)=1 or F>1
R=Rnd(1)
If R=0
If RX
RY=RX : RX=0
Else
RX=-RY : RY=0
End If
Else
If RX
RY=-RX : RX=0
Else
RX=RY : RY=0
End If
End If
End If
F=0
If X+RX<40 and X+RX>-1 and Y+RY<25 and Y+RY>-1 Then F=F(CP,X+RX,Y+RY)
Inc C : If C>10 Then Exit 2
Until F<2
If RY<>RYA or RX<>RXA
If(RYA=-1 and RX=1) or(RXA=-1 and RY=1) : A=6 : End If
If(RYA=-1 and RX=-1) or(RXA=1 and RY=1) : A=7 : End If
If(RYA=1 and RX=1) or(RXA=-1 and RY=-1) : A=8 : End If
If(RYA=1 and RX=-1) or(RXA=1 and RY=-1) : A=9 : End If
End If
B=Max(B-1,6)
RXA=RX : RYA=RY : F(CP,X,Y)=A
Add X,RX : Add Y,RY : Inc L
Until X<0 or X>39 or Y<0 or Y>24
Until L>30
LL=L : L=0
Repeat
Repeat
X=Rnd(37)+1
Y=Rnd(22)+1
Until F(CP,X,Y)<2
If F(CP,X,Y)<2 Then F(CP,X,Y)=A
F(CP,X,Y)=Rnd(1)+10
RX=Rnd(1)*2-1 : RY=Rnd(1)*2-1
Do
A=Rnd(1)+10 : F(CP,X,Y)=A : C=0
Repeat
RX=Rnd(2)-1 : RY=Rnd(2)-1
F=2
If X+RX<40 and X+RX>-1 and Y+RY<25 and Y+RY>-1 Then F=F(CP,X+RX,Y+RY)
Inc C : If C>10 Then Exit 2
Until F<2
Add X,RX : Add Y,RY : Inc L
Loop
Until L>800-LL
For Y=0 To 24
For X=0 To 39
F=F(CP,X,Y) : F2(X,Y)=F
If X>0 Then F01=F(CP,X-1,Y)>9 Else F01=0
If X<39 Then F21=F(CP,X+1,Y)>9 Else F21=0
If Y>0 Then F10=F(CP,X,Y-1)>9 Else F10=0
If Y<24 Then F12=F(CP,X,Y+1)>9 Else F12=0
If F(CP,X,Y)<2 Then Gosub SMOOTHPLAIN
If F(CP,X,Y)>1 and F(CP,X,Y)<10 Then Gosub SMOOTHRIVER
Next
Next
For Y=0 To 24
For X=0 To 39
F(CP,X,Y)=F2(X,Y)
Next
Next
Return
SMOOTHRIVER:
If(F=2 or F=3) and(F01 or F21) Then F=38+F-F01*2-F21*4
If(F=4 or F=5) and(F10 or F12) Then F=42+F-F12*2-F10*4
If(F=6) and(F10 or F01) Then F=53-F10-F01*2
If(F=7) and(F10 or F21) Then F=56-F10-F21*2
If(F=8) and(F12 or F01) Then F=59-F01-F12*2
If(F=9) and(F12 or F21) Then F=62-F21-F12*2
F2(X,Y)=F
Return
SMOOTHPLAIN:
If X>0 and Y>0 Then F00=F(CP,X-1,Y-1)>9 Else F00=0
If X<39 and Y>0 Then F20=F(CP,X+1,Y-1)>9 Else F20=0
If X>0 and Y<24 Then F02=F(CP,X-1,Y+1)>9 Else F02=0
If X<39 and Y<24 Then F22=F(CP,X+1,Y+1)>9 Else F22=0
D=-F00-F20*2-F02*4-F22*8
If D>0 Then F=26+D
D=-F10-F01*2-F21*4-F12*8
If D>0 Then F=11+D
F2(X,Y)=F
Return
QUIT:
Pop
Fade 2
For A=0 To 31
Colour Back Colour(0) : View : Wait Vbl
Next
Screen Close 0
Erase 5
Erase 6
End
MONATE:
Data "Januar","Februar","M�rz","April","Mai","Juni","Juli","August"
Data "September","Oktober","November","Dezember"
WETTER:
Data "herrscht D�rre!","ist es sehr hei�.","ist es hei�."
Data "ist es relativ warm.","ist es feucht."
Data "regnet es oft.","regnet es in Str�men!"
PRODUKTE:
Data "Wasser"," Hl","�l"," Ba","Datteln"," Kg"
Data "Tabak"," Kg","Zigaretten"," St"
ANAUS:
Data "aus","ein"
Procedure TITLE
Hide On
Dim S1(2),S2(1),C2(3)
Open In 1,"mod.title"
Reserve As Chip Work 8,Lof(1)
Sload 1 To Start(8),Lof(1)
Loke Start(8)-8,$54726163
Loke Start(8)-4,$6B657220
Close 1
Unpack 11 To 2 : Screen Hide 2
For A=0 To 2 : S1(A)=Logbase(A) : Next
Unpack 7 To 1 : Screen Hide 1
For A=0 To 58
Get Block A+1,(A mod 20)*16,(A/20)*16,16,16
Next
For A=0 To 3 : C2(A)=Colour(A) : Next
Screen Open 1,320,400,4,0 : Screen Hide 1
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
For A=0 To 1 : S2(A)=Logbase(A) : Next
Copper Off
Cop Reset
Cop Move $100,0
Cop Wait $FE,$FF
Cop Swap
Cop Reset
AD=Cop Logic
SPR$=Chr$(0)+Chr$(0)+Chr$(0)+Chr$(0)
Cop Move $100,0
Cop Movel $EC,S2(0) : Rem 6
Cop Movel $F0,S2(1) : Rem 14
Cop Movel $E0,S1(0)
Cop Movel $E4,S1(1)
Cop Movel $E8,S1(2)
For A=0 To 7
Cop Movel $120+A*4,Varptr(SPR$)
Next
Cop Wait $0,$2E
Cop Movel $102,0 : Rem BPLCON1 BPLCON2
Cop Move $8E,$3081 : Rem DIWSTRT
Cop Move $90,$F8C1 : Rem DIWSTOP
Cop Move $92,$38 : Rem DDFSTRT
Cop Move $94,$D0 : Rem DFFSTOP
For A=0 To 3
Cop Move $180+A*16,C2(A)
Next
For A=1 To 7
For B=0 To 3
Cop Move $180+A*2+B*16,A*$222
Next
Next
Cop Move $100,$5200 : Rem BLPCON0
Cop Move $96,$8180 : Rem DMACON
Cop Wait $0,$7F
For A=1 To 7
Cop Move $180+A*2,A*$10
Next
For A=1 To 3
For B=0 To 7
F1=Max(C2(A)/$100-B/2,0)
F2=Min((C2(A) and $F0)/$10+B/2,15)
F3=Max(C2(A) mod $10-B/2,0)
Cop Move $180+A*16+B*2,F1*$100+F2*$10+F3
Next
Next
Cop Wait $0,$90
For A=1 To 7
Cop Move $180+A*2,A*$110
Next
For A=1 To 3
For B=0 To 7
F1=Min(C2(A)/$100+B/2,15)
F2=Min((C2(A) and $F0)/$10+B/2,15)
F3=Max(C2(A) mod $10-B/2,0)
Cop Move $180+A*16+B*2,F1*$100+F2*$10+F3
Next
Next
Cop Wait $0,$A0
For A=1 To 7
Cop Move $180+A*2,A*$11
Next
For A=1 To 3
For B=0 To 7
F1=Max(C2(A)/$100-B/2,0)
F2=Min((C2(A) and $F0)/$10+B/2,15)
F3=Min(C2(A) mod $10+B/2,15)
Cop Move $180+A*16+B*2,F1*$100+F2*$10+F3
Next
Next
Cop Wait $0,$B0
For A=1 To 7
For B=0 To 3
Cop Move $180+A*2+B*16,A*$222
Next
Next
Cop Wait $FE,$FF
Cop Swap
S$="WILLKOMMEN ZU##FREE TRADING COMPANY####EIN SPIEL VON##PETER HODGES #UND#CHRISTOPHER HODGES###"
S$=S$+"KONZEPT UND DESIGN##PETER HODGES###PROGRAMM##CHRISTOPHER HODGES###"
S$=S$+"GRAFIKEN##PETER HODGES###WEITERE GRAFIKEN##CHRISTOPHER HODGES###"
S$=S$+"MUSIK UND SOUND##CHRISTOPHER HODGES###DOKUMENTATION##PETER HODGES###"
S$=S$+"COPYRIGHT 1993##THE SOFTWARE SOCIETY##ALL RIGHTS RESERVED!#####"
S$=S$+"VIEL SPASS!####DRUECKEN SIE DIE##LINKE MAUSTASTE!################"
Track Loop On
Track Play 8
BP=1
YP=0
Repeat
Timer=0
COPL[AD+6,S2(0)+YP*40]
COPL[AD+14,S2(1)+YP*40]
Add YP,1,0 To 175
If(YP mod 16)=0 Then Gosub PT Else Wait Vbl
If Timer<1 : Wait Vbl : End If
Until Mouse Key
Copper On
Track Stop
Erase 8
Screen Close 1
Screen Close 2
Show On
Pop Proc
PT:
A$=""
Do
If BP=Len(S$) Then BP=1
B$=Mid$(S$,BP,1)
If B$="#" Then Exit
A$=A$+B$ : Inc BP
Loop
Inc BP
X=144-Len(A$)*8
Ink 0 : Bar 0,YP To 319,YP+15
Wait Vbl
If A$="" Then Ink 0 : Bar 0,YP+176 To 319,YP+191 : Return
For A=1 To Len(A$)
Put Block Asc(Mid$(A$,A,1))-31,X+A*16,YP
Next
Screen Copy 1,0,YP,319,YP+16 To 1,0,YP+176
Return
End Proc
Procedure INITFONTS
Get Disc Fonts
A=0 : FONT=0
Repeat
Inc A
If Instr(Upper$(Font$(A)),"FTC") Then FONT=A : Exit
Until Font$(A)=""
If FONT=0
Screen Open 0,320,200,2,0
Curs Off : Flash Off : Paper 0 : Pen 1 : Cls
Print "Error: FTC.font not found!"
Print "Please copy the font onto your"
Print "Harddisk!!!"
Wait Key
Screen Close 0
End
End If
TB=Text Base
End Proc
Procedure GRABICONS
Unpack 14 To 0 : Screen Hide 0
For A=0 To 70
Get Cblock A+50,(A mod 40)*8,(A/40)*8,8,8
Next
Screen Close 0
Change Mouse 5
Unpack 15 To 0 : Screen Hide 0
For A=0 To 24
Get Cblock A+1,A*8,0,8,8
Next
Screen Close 0
End Proc
Procedure WINDO[X1,Y1,X2,Y2,FL,T$]
XX1=X1*8 : YY1=Y1*8 : XX2=X2*8-8 : YY2=Y2*8-8
Ink 0 : Bar XX1,YY1 To XX2+7,YY2+7
If FL and 1
Put Cblock 10,XX1,YY1
Put Cblock 7,XX1+8,YY1
Else
Put Cblock 7,XX1,YY1
Put Cblock 8,XX1+8,YY1
End If
If FL and 2
If FL and 4
Put Cblock 9,XX2-16,YY1
Put Cblock 13,XX2-8,YY1
Put Cblock 12,XX2,YY1
Else
Put Cblock 8,XX2-16,YY1
Put Cblock 9,XX2-8,YY1
Put Cblock 12,XX2,YY1
End If
Else
If FL and 4
Put Cblock 8,XX2-16,YY1
Put Cblock 9,XX2-8,YY1
Put Cblock 13,XX2,YY1
Else
Put Cblock 8,XX2-16,YY1
Put Cblock 8,XX2-8,YY1
Put Cblock 9,XX2,YY1
End If
End If
For A=X1+2 To X2-4
Put Cblock 8,A*8,YY1
Next
For A=Y1+1 To Y2-1
Put Cblock 2,XX1,A*8
Next
If FL and 16
A1=14 : A2=15 : A3=16 : EP=X2-5
Else
A1=4 : A2=5 : A3=5 : EP=X2-3
End If
Put Cblock A1,XX1,YY2
For A=X1+1 To EP
Put Cblock A2,A*8,YY2
Next
Put Cblock A3,EP*8+8,YY2
If FL and 16
Put Cblock 17,EP*8+16,YY2
Put Cblock 18,EP*8+24,YY2
End If
If FL and 8
Put Cblock 11,XX2,YY2
Else
Put Cblock 6,XX2,YY2
End If
If FL and 32
A1=19 : A2=20 : A3=21 : EP=Y2-5
Else
If FL and 8
A1=24 : A2=24 : A3=24 : EP=Y2-3
Else
A1=3 : A2=3 : A3=3 : EP=Y2-3
End If
End If
Put Cblock A1,XX2,YY1+8
For A=Y1+2 To EP
Put Cblock A2,XX2,A*8
Next
Put Cblock A3,XX2,EP*8+8
If FL and 32
Put Cblock 22,XX2,EP*8+16
Put Cblock 23,XX2,EP*8+24
End If
Ink 1
If FL and 1
Text XX1+10,YY1+TB,T$
Else
Text XX1+2,YY1+TB,T$
End If
End Proc
Procedure WINCLR[X1,Y1,X2,Y2]
Ink 0 : Bar X1*8+2,Y1*8+8 To X2*8-9,Y2*8-3
End Proc
Procedure WINCLO[X1,Y1,X2,Y2]
Ink 0 : Bar X1*8,Y1*8 To X2*8-1,Y2*8-1
End Proc
Procedure PASICON[N,I,X1,Y1,X2,Y2,T$]
GX=X2/2 : GY=Y2/2
ICN(N,0)=X1-GX : ICN(N,1)=Y1-GY
ICN(N,2)=X1-GX+X2-1 : ICN(N,3)=Y1-GY+Y2-1
ICN(N,4)=I : ICN(N,5)=(Text Length(T$))/2
Paste Icon X1-GX,Y1-GY,I
Ink 1 : Text X1-ICN(N,5),Y1+GY+5,T$
End Proc
Procedure DEFICON[N,X1,Y1,X2,Y2]
ICN(N,0)=X1 : ICN(N,1)=Y1
ICN(N,2)=X2 : ICN(N,3)=Y2
End Proc
Procedure DEFGADGET[N,X1,Y1,X2,Y2,T$]
ICN(N,0)=X1 : ICN(N,1)=Y1
ICN(N,2)=X2 : ICN(N,3)=Y2
Ink 1 : Draw X1,Y2 To X1,Y1 : Draw To X2,Y1
Ink 2 : Draw X1+1,Y2 To X2,Y2 : Draw To X2,Y1+1
Text(X1+X2)/2-(Text Length(T$))/2,(Y1+Y2)/2+TB/2-1,T$
End Proc
Procedure DEFGADGET2[N,X1,Y1,X2,Y2,T$]
ICN(N,0)=X1 : ICN(N,1)=Y1
ICN(N,2)=X2 : ICN(N,3)=Y2
Ink 31 : Draw X1,Y2 To X1,Y1 : Draw To X2,Y1
Ink 20 : Draw X1+1,Y2 To X2,Y2 : Draw To X2,Y1+1
Text(X1+X2)/2-(Text Length(T$))/2,(Y1+Y2)/2+TB/2-1,T$
End Proc
Procedure PRESSICON[N]
X1=ICN(N,0) : Y1=ICN(N,1)
X2=ICN(N,2) : Y2=ICN(N,3)
Screen Copy Screen,X1,Y1,X2+1,Y2+1 To Screen,X1,Y1,%110000
End Proc
Procedure UNDEFICON[N]
ICN(N,0)=0 : ICN(N,1)=0
ICN(N,2)=0 : ICN(N,3)=0
End Proc
Procedure DISABLEICON[N]
ICN(N,2)=-Abs(ICN(N,2))
ICN(N,3)=-Abs(ICN(N,3))
End Proc
Procedure ENABLEICON[N]
ICN(N,2)=Abs(ICN(N,2))
ICN(N,3)=Abs(ICN(N,3))
End Proc
Procedure ERAICON[N]
Ink 0 : Bar ICN(N,0),ICN(N,1) To ICN(N,2),ICN(N,3)
MX=(ICN(N,0)+ICN(N,2))/2
Bar MX-ICN(N,5),ICN(N,3)+2 To MX+ICN(N,5),ICN(N,3)+6
ICN(N,0)=0 : ICN(N,1)=0
ICN(N,2)=0 : ICN(N,3)=0
End Proc
Procedure CHECKICONS[X,Y]
BB=-1
For A=0 To 40
If ICN(A,0)<X and ICN(A,2)>X and ICN(A,1)<Y and ICN(A,3)>Y Then BB=A : Exit
Next
End Proc[BB]
Procedure ALERT[TI$,T1$,T2$,YES$,NO$]
Get Cblock 999,0,0,128,56
WINDO[0,0,16,7,%1110,TI$]
Ink 1
Text 60-(Text Length(T1$))/2,10+TB,T1$
Text 60-(Text Length(T2$))/2,16+TB,T2$
For A=0 To 40
DISABLEICON[A]
Next
DEFGADGET[39,10,32,56,48,YES$]
DEFGADGET[40,64,32,110,48,NO$]
Repeat
Wait Vbl : CLICKING : B=Param
Until B>-1
Put Cblock 999
Del Cblock 999
UNDEFICON[39]
UNDEFICON[40]
For A=0 To 40
ENABLEICON[A]
Next
End Proc[40-B]
Procedure CLICKING
X=X Screen(X Mouse) : Y=Y Screen(Y Mouse) : M=Mouse Key
B=-1
If M>1 and PAG<>4 Then Ink 2 : Bar 0,0 To 319,7 : UP=198
If M=1 Then CHECKICONS[X,Y] : B=Param
If B>-1
If SOU>0 and PAG>0 : Sam Play 8,1 : End If
IS=0
While M=1
Wait Vbl : X=X Screen(X Mouse) : Y=Y Screen(Y Mouse) : M=Mouse Key
CHECKICONS[X,Y]
If Param=B and IS=0 : IS=1 : PRESSICON[B] : End If
If Param<>B and IS=1 : IS=0 : PRESSICON[B] : End If
Wend
If IS=0
B=-1
Else
PRESSICON[B]
End If
End If
End Proc[B]
Procedure CT[Y,T$]
Text 160-(Text Length(T$))/2,Y+TB,T$
End Proc
Procedure OT[X,Y,C1,C2,T$]
Ink C2 : Text X-1,Y,T$ : Text X-1,Y-1,T$ : Text X,Y-1,T$
Text X+1,Y-1,T$ : Text X+1,Y,T$ : Text X+1,Y+1,T$
Text X,Y+1,T$ : Text X-1,Y+1,T$
Ink C1 : Text X,Y,T$
End Proc
Procedure EINGABE[TX,TY,WX,MC,NUMS]
Gr Writing 1 : Ink 2,0 : Clear Key
TEXX=Len(TEX$) : TEXOF=0 : ALT$="x" : RET=0
Do
Multi Wait : I$=Inkey$ : AC=Asc(I$) : SC=Scancode : KS=Key Shift
If AC=13 Then RET=1
Exit If AC=13 or AC=27
If(NUMS and 1) and AC>31 and(AC<48 or AC>57) Then AC=0
If AC>31 and Len(TEX$)<MC Then TEX$=Left$(TEX$,TEXX)+I$+Mid$(TEX$,TEXX+1) : Inc TEXX
If SC=65 and KS=0 and TEXX>0 Then TEX$=Left$(TEX$,TEXX-1)+Mid$(TEX$,TEXX+1) : Dec TEXX
If SC=70 and KS=0 and TEXX<Len(TEX$) Then TEX$=Left$(TEX$,TEXX)+Mid$(TEX$,TEXX+2)
If SC=65 and KS and TEXX>0 Then TEX$=Mid$(TEX$,TEXX+1) : TEXX=0
If SC=70 and KS and TEXX<Len(TEX$) Then TEX$=Left$(TEX$,TEXX) : TEXX=Len(TEX$)
If AC=29 and TEXX>0 Then Dec TEXX
If AC=28 and TEXX<Len(TEX$) Then Inc TEXX
If SC=79 and KS Then TEXX=0
If SC=78 and KS Then TEXX=Len(TEX$)
If TEXX-TEXOF>WX-1 Then TEXOF=TEXX-WX+1
If TEXX-TEXOF<0 Then TEXOF=Max(0,TEXX)
If(ALT$<>TEX$) or(ALTOF<>TEXOF) or(ALTXX<>TEXX)
If SOU : Sam Play 8,5 : End If
ALT$=TEX$ : ALTOF=TEXOF : ALTXX=TEXX
Text TX,TY+6,Mid$(TEX$,TEXOF+1,Min(Len(TEX$)+TEXOF,WX))+String$(".",Max(0,Min(WX,MC)-Len(TEX$)+TEXOF))
XX=TX+TEXX*4-TEXOF*4
If TEXX-TEXOF<MC : Screen Copy 0,XX,TY+2,XX+4,TY+8 To 0,XX,TY+2,%110000 : End If
End If
Loop
If NUMS and 1 Then TEX$=Str$(Val(TEX$))-" "
Text TX,TY+TB,Left$(TEX$,Min(Len(TEX$),WX))+Space$(Max(0,Min(WX,MC)-Len(TEX$)))
If SOU : Sam Play 8,1 : End If
Wait Vbl
Gr Writing 0
End Proc[RET]
Procedure COPL[ADR,V]
Doke ADR,V/$10000
Doke ADR+4,V and $FFFF
End Proc
Procedure S1
For Y=0 To WY+S Step S
Screen Copy B1,0,Y,WX,Y+S To B2,0,Y : Wait Vbl
Next
End Proc
Procedure S2
For Y=WY To -S Step -S
Screen Copy B1,0,Y,WX,Y+S To B2,0,Y : Wait Vbl
Next
End Proc
Procedure S3
For X=0 To WX+S Step S
Screen Copy B1,X,0,X+S,WY To B2,X,0 : Wait Vbl
Next
End Proc
Procedure S4
For X=WX To -S Step -S
Screen Copy B1,X,0,X+S,WY To B2,X,0 : Wait Vbl
Next
End Proc
Procedure S5
For YY=0 To S-1
For Y=0 To WY+S Step S
Screen Copy B1,0,Y+YY,WX,Y+YY+1 To B2,0,Y+YY
Next
Wait Vbl
Next
End Proc
Procedure S6
For YY=S-1 To 0 Step -1
For Y=WY To -S Step -S
Screen Copy B1,0,Y+YY,WX,Y+YY+1 To B2,0,Y+YY
Next
Wait Vbl
Next
End Proc
Procedure S7
For XX=0 To S-1
For X=0 To WX+S Step S
Screen Copy B1,X+XX,0,X+XX+1,WY To B2,X+XX,0
Next
Wait Vbl
Next
End Proc
Procedure S8
For XX=S-1 To 0 Step -1
For X=WX To -S Step -S
Screen Copy B1,X+XX,0,X+XX+1,WY To B2,X+XX,0
Next
Wait Vbl
Next
End Proc
Procedure S9
B=0 : A=0 : X=0 : Y=0 : RX=16 : RY=0 : BX1=-16 : BX2=WX-16 : BY1=0 : BY2=WY+8
Repeat
Screen Copy B1,X,Y,X+16,Y+16 To B2,X,Y : Add B,1,0 To 3 : If B=0 Then Wait Vbl
If Y+RY<BY1 and A=3 Then Add A,1,0 To 3 : RY=0 : RX=16 : Add BX2,-16
If X+RX<BX1 and A=2 Then Add A,1,0 To 3 : RX=0 : RY=-16 : Add BY1,16
If Y+RY>BY2 and A=1 Then Add A,1,0 To 3 : RY=0 : RX=-16 : Add BX1,16
If X+RX>BX2 and A=0 Then Add A,1,0 To 3 : RX=0 : RY=16 : Add BY2,-16
Add X,RX : Add Y,RY
Until BX2<=BX1 or BY2<BY1
End Proc
Procedure S10
X=0 : Y=0 : RY=16 : A=0
Repeat
Screen Copy B1,X,Y,X+16,Y+16 To B2,X,Y : Add A,1,0 To 3 : If A=0 Then Wait Vbl
If Y>WY or Y<0 Then RY=-RY : Add X,16
Add Y,RY
Until X>WX
End Proc
Procedure S11
Dim F(WX/S) : B=WX/S
Repeat
Repeat : A=Rnd(WX/S-1) : Until F(A)<WY
C=Rnd(S)+1
Screen Copy B1,A*S,F(A),A*S+S,F(A)+C To B2,A*S,F(A)
Add F(A),C : If F(A)=>WY Then Dec B
Until B=0
End Proc
Procedure S12
Dim F(WX/S) : B=WX/S
For A=0 To WX/S
F(A)=WY
Next
Repeat
Repeat : A=Rnd(WX/S-1) : Until F(A)>0
C=Rnd(S)+1
Add F(A),-C
Screen Copy B1,A*S,F(A),A*S+S,F(A)+C To B2,A*S,F(A)
If F(A)<1 Then Dec B
Until B=0
End Proc
Procedure S13
For Y=0 To 400 Step S
For X=0 To WX/64-1
YY=Y-(4-X)*32
Screen Copy B1,X*64,YY,X*64+64,YY+S To B2,X*64,YY
Next
Wait Vbl
Next
End Proc
Procedure S14
For Y=0 To 408 Step S
For X=0 To WX/16-1
Screen Copy B1,X*16,Y-X*8,X*16+16,Y-X*8+S To B2,X*16,Y-X*8
Next
Wait Vbl
Next
End Proc