home *** CD-ROM | disk | FTP | other *** search
Text File | 2000-12-29 | 47.4 KB | 2,096 lines |
- ;
- ; Ballmaster V1.2
- ; Copyright (C) 1998-2000 Damir Arh
- ;
- ; This program is Free software; you can redistribute it and/or modify
- ; it under the terms of the GNU General Public License as published by
- ; the Free Software Foundation; either version 2 of the License, or
- ; (at your option) any later version.
- ;
- ; This program is distributed in the hope that it will be useful,
- ; but WITHOUT ANY WARRANTY; without even the implied warranty of
- ; MERCHANTABILITY OR FITNESS For A PARTICULAR PURPOSE. See the
- ; GNU General Public License For more details.
- ;
- ; You should have received a copy of the GNU General Public License
- ; along with this program; if not, write to the Free Software
- ; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- ;
- ;
- ; E-mail: damir.arh@telesat.si
- ;
- ; S-mail: Damir Arh
- ; Titova 89
- ; SI-4270 Jesenice
- ; Slovenia
- ;
- ;
- ; $VER: BallMaster.bb2 V1.2 (29.12.2000)
- ;
-
- version$ = "$VER: BallMaster V1.2 (29.12.2000)"
-
- #ecs=0
-
-
- #_Width=$80000023
- #_Height=$80000024
- #_Depth=$80000025
- #_BitMap=$8000002E
- #_Exclusive=$8000003F
- #_DisplayID=$80000032
-
-
- ;potrebujemo tile funkciji ;)
-
- Statement Fade{}
- For i=1 To 100
- FadePalette 1,1,0.98
- Use Palette 1
- VWait
- Next i
- End Statement
-
- Statement SemiFade{}
- For i=1 To 15
- FadePalette 1,1,0.95
- Use Palette 1
- VWait
- Next i
- End Statement
-
-
- .zacetek:
- WBStartup
-
- ;za zacetek nekaj konstant in zacetnih vrednosti
- #sirina=10 ;stevilo polj na zaslonu po sirini
- #visina=7 ;stevilo polj na zaslonu po visini
- #zacx=310 ;x koordinata zacetnega polozaja
- #zacy=6 ;y koordinata zacetnega polozaja
- #hitrost=1 ;#hitrost gibanja kroglic
- #maxzog=20 ;najvecje mozno stevilo kroglic na zaslonu
- #vel=32 ;dimenzije posameznega polja
- #sredina=11 ;odmik koordinate od roba ob sredinskem polozaju
- #premer=9 ;odmik desnega roba kroglice od njenih koordinat
- #zamik=7 ;#zamik oblik glede na tip
- #odmor=10 ;premor med vrtenjem
-
-
- ;definicija kroglice
- NEWTYPE .zoga
- x.w:y:barva.b:obstoj:dx:dy:teleport
- End NEWTYPE
-
- ;definicija igralnega polja
- NEWTYPE .element
- tip.b:a:b:c:d:ok:draw:rot
- End NEWTYPE
-
- ;pripravimo nekaj tabel
- Dim zoga.zoga(#maxzog)
- Dim element.element(#sirina,#visina)
- Dim order.b(5)
- Dim kriz.b(4)
- Dim teleport(3)
-
- ;okno za napake ;)
-
- DosBuffLen 0
- If NOT OpenFile(1,"CON:0/15//150/BallMaster Output") Then End
- FileOutput 1
-
- NPrint ""
- NPrint "BallMaster V1.2 (29.12.2000)"
- NPrint "(c)1998-2000 Damir Arh"
- NPrint ""
-
-
- ;nalozimo grafiko in zvok
- NPrint "Loading level gfx and sound..."
- DecodeShapes 0,?grafika
- DecodePalette 0,?paleta
- DecodeShapes 47,?krizec
- Handle 47,-5,-5
-
- Dim zvoki$(5)
- zvoki$(0)="sfx/padec.sfx"
- zvoki$(1)="sfx/vrti.sfx"
- zvoki$(2)="sfx/trk.sfx"
- zvoki$(5)="sfx/prazno.sfx"
- zvoki$(3)="sfx/barvanje.sfx"
- zvoki$(4)="sfx/teleport.sfx"
-
- Dim dolzvok.b(5)
- dolzvok(0)=4
- dolzvok(1)=6
- dolzvok(2)=6
- dolzvok(5)=17
- dolzvok(3)=10
- dolzvok(4)=33
-
- For i=0 To 5
- If Exists(zvoki$(i))
- LoadSound i,zvoki$(i)
- Else
- Goto sounderr
- EndIf
- Next i
-
- If Exists("sfx/flouqe.mus")
- LoadMedModule 0,"sfx/flouqe.mus"
- Else
- Goto sounderr
- EndIf
-
- If Exists("sfx/meanwhile.mus")
- LoadMedModule 1,"sfx/meanwhile.mus"
- Else
- Goto sounderr
- EndIf
-
- If Exists("sfx/fazahn.mus")
- LoadMedModule 2,"sfx/fazahn.mus"
- Else
- Goto sounderr
- EndIf
-
- SetInt 5
- PlayMed
- If hold.b>0
- hold.b-1
- EndIf
- End SetInt
-
-
- ;preverimo registracijo
- NPrint "Checking registration..."
- Gosub register
-
-
- ;preverimo konfiguracijo
- Snd.b=True
- Mus.b=True
- Pro.b=False
- If Exists("BallMaster.cfg")
- If ReadFile(0,"BallMaster.cfg")
- ReadMem 0,&Snd,1
- ReadMem 0,&Mus,1
- ReadMem 0,&Pro,1
- CloseFile 0
- EndIf
- EndIf
-
- levelset$="default"
- gfxset$="default"
-
-
- ;nalozimo stopnje
- NPrint "Loading levels..."
- Gosub load_levels
-
-
- ;preverimo obstoj grafik
- NPrint "Loading pictures..."
- Dim slika$(16)
- For i=0 To 9
- slika$(i)="gfx/"+gfxset$+"/back"+Str$(i)+".iff"
- Next i
- slika$(10)="gfx/logo.iff"
- slika$(11)="gfx/title.iff"
- slika$(12)="gfx/menu.iff"
- slika$(13)="gfx/end.iff"
- slika$(14)="gfx/out.iff"
- slika$(15)="gfx/about.iff"
- slika$(16)="gfx/options.iff"
-
- For i=0 To 16
- If ReadFile(0,slika$(i))
-
- char.b=0
- j.b=0
-
- Repeat
- ReadMem 0,&char,1
- j=j+1
- Until Chr$(char)="I"
-
- FileInput 0
- Check$=Edit$(11)
- If NOT Left$(Check$,7)="LBMCHCK" Then Goto picerr
- Check$=Edit$(8)
- If NOT Left$(Check$,2)="BM" Then Goto picerr
- If NOT Val(Right$(Check$,6))=987654-Exists(slika$(i)) Then Goto picerr
-
- CloseFile 0
-
- EndIf
-
- Next i
-
- CloseFile 1
-
-
- ;pripravimo zaslon
- Gosub zaslon
-
-
- .info:
- retry=2 ;zaceli bomo novo igro
- Use BitMap 0
- BitMapOutput 0
- ShowBitMap 0
-
- Cls
-
- LoadPalette 1,"gfx/logo.iff"
- Use Palette 1
- LoadIFF "gfx/logo.iff",0
- VWait 100
- Fade{}
-
- Cls
-
- LoadPalette 1,"gfx/title.iff"
- Use Palette 1
- LoadIFF "gfx/title.iff",0
- VWait 100
- Fade{}
-
- StartMedModule 0
- SetMedMask 15
-
-
- .menu:
-
- Use BitMap 0
- Cls
- ShowBitMap 0
-
- LoadPalette 1,"gfx/menu.iff"
- Use Palette 1
- LoadIFF "gfx/menu.iff",0
-
- FlushEvents
- Repeat
- nwev.l=WaitEvent ;pocakajmo dogodek
- If nwev=$8 ;klik miske?
- If RectsHit(WMouseX,WMouseY,1,1,64,61,186,18) ;start new game?
- Fade{}
- stopnja=0
- StopMed
- Goto mainloop
- EndIf
- If RectsHit(WMouseX,WMouseY,1,1,30,88,260,18) ;password
- Fade{}
- Gosub password
- Fade{}
- StopMed
- Goto mainloop
- EndIf
- If RectsHit(WMouseX,WMouseY,1,1,103,114,117,18) ;options
- Fade{}
- Gosub options
- EndIf
- If RectsHit(WMouseX,WMouseY,1,1,115,142,92,18) ;about
- Fade{}
- Goto about
- EndIf
- If RectsHit(WMouseX,WMouseY,1,1,80,168,156,18) ;quit
- Fade{}
- StopMed
- Gosub savecfg
- End
- EndIf
- EndIf
- Until False
-
-
- .playsfx:
-
- Statement PlaySFX{num.b,ch.b}
- SHARED hold.b, cursnd.b, dolzvok.b(), Mus
- If Mus=True
- If hold=0
- cursnd=num
- Sound num,8
- hold=dolzvok(num)
- Else
- If num>=cursnd
- cursnd=num
- Sound num,8
- hold=dolzvok(num)
- EndIf
- EndIf
- Else
- Sound num,ch
- EndIf
- End Statement
-
-
- .mainloop:
-
- ;prikazimo stopnjo
- Gosub stopnja
-
- ;se nekaj zacetnih vrednosti
- bit.b=1 ;aktualni bitmap
- cev.b=0 ;ali je kaj v cevi
- cas=0 ;cas do naslednje dovoljene operacije
- changen.b=0 ;sprva se ni sprememb na zogici
- changeo.b=2 ;spremembe na semaforju so
- changec.b=2 ;prav tako na krizu
- hold.b=0 ;trenutno ni zv. ucinka
- cursnd.b=0 ;slisimo tudi ucinke najnizje prioritete
-
- For i=1 To #maxzog
- zoga(i)\obstoj=0 ;unicimo vse zogice
- Next i
- Gosub sledi ;priklici zogico
- Colour 5,0 ;pisali bomo z modro
- Format "##0" ;in sicer takole
-
- If Mus=True
- StartMedModule 2
- SetMedMask 7
- EndIf
-
- Repeat
- FlushEvents
- done.b=1 ;stopnjo bomo mogoce koncali
- igra.l=igra-1 ;tempus fugit.. ;)
- ritem.b=ritem-1
- If bonus>0
- bonus=bonus-1
- EndIf
-
- bit=1-bit ;zamenjamo bitmap
- UnBuffer bit ;spraznimo zaslon
- Use BitMap bit
- BitMapOutput bit
-
- Gosub miska
-
- USEPATH zoga(i) ;povecajmo preglednost
-
- For i=1 To #maxzog ;preverimo vse zogice
-
- If \obstoj=1 AND \teleport=0 ;ce zoga obstoja
-
- Gosub element ;preverimo posebnosti elementa
-
- If \teleport=0
- \x=\x+\dx ;jo premaknemo
- \y=\y+\dy
-
- If \y=#zacy ;ce je se vedno v cevi
- Gosub zoga_cev
- Else ;ce je v cevi ni vec
- Gosub zoga_tel ;ali sme zoga v teleport
- Gosub zoga_trk ;ali trci s kako drugo zogo
- Gosub zoga_rev ;preverimo, ali pade v revolver
- EndIf
-
- EndIf
-
- EndIf
-
- Next i
-
- krizc=krizc-1
- Gosub cev ;kako je s cevjo
- Gosub kriz ;napolnimo kriz?
-
- ;ali smo kaj storili
- USEPATH element(x.b,y.b) ;povecajmo preglednost
- If cas<1 ;ali ze smemo operirati
- Gosub klik_vrti ;hocemo vrteti?
- Gosub klik_zoga ;ali smo kliknili na zogico
- EndIf
- cas=cas-1 ;kmalu bomo zopet operirali
- Gosub avto ;atomatsko vrtenje
-
- Gosub revolverji ;preglejmo revolverje
- Gosub pano ;uredimo pano
- Gosub neosnovni ;narisimo drugi del sestavljenih elementov
-
- ShowBitMap bit ;prikazimo narisano
- VWait ;pocakajmo uskladitev
-
-
- ;ali je igre konec
- If vcevi=5 OR igra=0
- VWait 50
- StopMed
- If retry>0
- retry=retry-1
- Goto mainloop
- Else
- Goto the_end
- EndIf
- EndIf
-
- If done=1
- VWait 50
- StopMed
- stopnja=stopnja+1
- If stopnja<entries
- Goto mainloop
- Else
- Goto done
- EndIf
- EndIf
-
- If RawStatus($19) ;premor
- CNIF #ecs=1
- InitPalette 1,64
- CELSE
- InitPalette 1,256
- CEND
- FadePalette 0,1,0.5
- Use Palette 1
- SetMedVolume 32
- Repeat
- nwev.l=WaitEvent
- Until nwev=$8 ;klik miske?
- Use Palette 0
- Free Palette 1
- SetMedVolume 64
- EndIf
-
- Until RawStatus($45)
-
- VWait 10
- StopMed
- If retry>0
- retry=retry-1
- Goto mainloop
- Else
- Goto the_end
- EndIf
-
-
- .load_levels:
-
- If ReadFile(0,"lvl/"+levelset$+".dat") ;nalozimo podatke o stopnjah
- FileInput 0
- entries=Edit(5) ;koliko stopenj je v datoteki
- Dim lvldat(entries-1,5),lvlnm$(entries-1)
- For i=0 To entries-1
- lvlnm$(i)=Edit$(40)
- For j=0 To 5
- lvldat(i,j)=Edit(5) ;podatki
- Next j
- chcksm=Edit(5) ;kontrolna vsota
- If NOT chcksm=i+lvldat(i,0)+2*lvldat(i,1)+3*lvldat(i,2)+4*lvldat(i,3)+5*lvldat(i,4)+6*lvldat(i,5)+7*Len(lvlnm$(i))
- Goto levelerr ;preverimo kontrolno vsoto
- EndIf
- If (lvldat(i,0)<50) OR (lvldat(i,0)>999)
- Goto levelerr ;obseg casa
- EndIf
- If (lvldat(i,1)<1) OR (lvldat(i,1)>10)
- Goto levelerr ;obseg sprehodov zoge
- EndIf
- If (lvldat(i,2)<0) OR (lvldat(i,2)>5)
- Goto levelerr ;obseg stevila predpisanih barv
- EndIf
- If (lvldat(i,3)<0) OR (lvldat(i,3)>120)
- Goto levelerr ;obseg intervala med krizi
- EndIf
- If (lvldat(i,4)<0) OR (lvldat(i,4)>120)
- Goto levelerr ;obseg bonus casa
- EndIf
- If (lvldat(i,5)<0) OR (lvldat(i,5)>5)
- Goto levelerr ;obseg joker zogic
- EndIf
- Next i
- CloseFile 0
- Else
- Goto levelerr
- EndIf
-
- Dim lvlmap.b(9,6,entries-1) ;nalozimo izgled stopenj
-
- If ReadFile(0,"lvl/"+levelset$+".map")
- ReadMem 0,&lvlmap(0,0,0),entries*70
- CloseFile 0
- Else
- Goto levelerr
- EndIf
-
- Return
-
-
- .zaslon:
-
- CNIF #ecs=1
- BitMap 0,320,256,6 : Buffer 0,16384
- BitMap 1,320,256,6 : Buffer 1,16384
- ScreenTags 0,"BallMaster",#_Width,320,#_Height,256,#_Depth,6,#_BitMap,Addr BitMap(0),#_Exclusive,True,#_DisplayID,$80
- CELSE
- BitMap 0,320,256,8 : Buffer 0,16384
- BitMap 1,320,256,8 : Buffer 1,16384
- ScreenTags 0,"BallMaster",#_Width,320,#_Height,256,#_Depth,8,#_BitMap,Addr BitMap(0),#_Exclusive,True
- CEND
- Window 0,0,0,320,256,$1800,"",4,4
- WPointer 47
- Use Palette 0
- Menus Off
-
- Return
-
-
- .stopnja:
-
- FlushBuffer 0
- FlushBuffer 1
- Use BitMap 1
- BitMapOutput 1
-
- teleport(0)=0
- teleport(3)=0
- whleft=0 ;prestej revolverje
- changewl=2 ;to napisi na pano
- Cls
- For i=2 To #sirina-1
- Block 6,(i-1)*32,0 ;narisimo cev (srednji del)
- Next i
- Block 48,0,0 ;narisimo cev (zacetni del)
- Block 49,288,0 ;narisimo cev (koncni del)
- For j=1 To #visina
- For i=1 To #sirina
- element(i,j)\tip=lvlmap(i-1,j-1,stopnja) ;preberimo element
- Select element(i,j)\tip+1 ;dolocimo lastnosti (1-zaprto,0-odprto)
- Case 1
- element(i,j)\a=1,1,1,1,0,0,0
- Case 2
- element(i,j)\a=1,0,1,0,0,0,0
- Case 3
- element(i,j)\a=0,1,0,1,0,0,0
- Case 4
- element(i,j)\a=0,0,0,0,0,0,0
- whleft=whleft+1
- Case 5
- element(i,j)\a=0,0,0,0,0,0,0
- whleft=whleft+1
- Case 6
- element(i,j)\a=0,0,0,0,0,0,0
- Case 7
- element(i,j)\a=0,0,1,1,0,0,0
- Case 8
- element(i,j)\a=1,0,0,1,0,0,0
- Case 9
- element(i,j)\a=1,1,0,0,0,0,0
- Case 10
- element(i,j)\a=0,1,1,0,0,0,0
- Case 11
- element(i,j)\a=1,0,1,0,0,0,0
- Case 12
- element(i,j)\a=0,1,0,1,0,0,0
- Case 13
- element(i,j)\a=1,0,1,0,0,0,0
- Case 14
- element(i,j)\a=0,1,0,1,0,0,0
- Case 15
- element(i,j)\a=1,0,1,0,0,0,0
- Case 16
- element(i,j)\a=0,1,0,1,0,0,0
- Case 17
- element(i,j)\a=1,0,1,0,0,0,0
- Case 18
- element(i,j)\a=0,1,0,1,0,0,0
- Case 19
- element(i,j)\a=1,0,1,0,0,0,0
- Case 20
- element(i,j)\a=0,1,0,1,0,0,0
- Case 21
- element(i,j)\a=1,0,1,0,0,0,0
- Case 22
- element(i,j)\a=0,1,0,1,0,0,0
- Case 23
- element(i,j)\a=1,0,1,0,0,0,0
- Case 24
- element(i,j)\a=0,1,0,1,0,0,0
- Case 25
- element(i,j)\a=1,0,1,0,0,0,0
- Case 26
- element(i,j)\a=0,1,0,1,0,0,0
- Case 27
- element(i,j)\a=1,0,1,0,0,0,0
- Case 28
- element(i,j)\a=0,1,0,1,0,0,0
- Case 29
- element(i,j)\a=1,0,1,0,0,0,0
- Case 30
- element(i,j)\a=0,1,0,1,0,0,0
- Case 31
- element(i,j)\a=0,0,0,0,0,0,0
- Case 32
- element(i,j)\a=0,0,0,0,0,0,0
- whleft=whleft+1
- Case 33
- element(i,j)\a=0,0,0,0,0,0,0
- whleft=whleft+1
- End Select
- If element(i,j)\tip<10 OR element(i,j)\tip>29 ;ce je element osnoven
- If element (i,j)\tip<4
- Block element(i,j)\tip+#zamik,(i-1)*#vel,(j*#vel)-16
- Else
- If element(i,j)\tip=30
- Block 50,(i-1)*#vel,(j*#vel)-16
- If teleport(0)=0
- teleport(0)=i+(j-1)*10
- teleport(1)=i
- teleport(2)=j
- Else
- teleport(1)=i-teleport(1)
- teleport(2)=j-teleport(2)
- EndIf
- EndIf
- If element(i,j)\tip>30
- Block 10,(i-1)*#vel,(j*#vel)-16
- EndIf
- If element(i,j)\tip<10
- Block element(i,j)\tip+#zamik-1,(i-1)*#vel,(j*#vel)-16 ;narisimo
- EndIf
- EndIf
- Else ;sicer
- If element(i,j)\tip MOD 2 = 0 ;ce je sod
- Block 1+#zamik,(i-1)*#vel,(j*#vel)-16 ;narisemo vod. cev
- Else ;sicer
- Block 2+#zamik,(i-1)*#vel,(j*#vel)-16 ;narisemo nav. cev
- EndIf
- If element(i,j)\tip<14
- Blit element(i,j)\tip+25,i*32-22,j*32-6
- Else
- Blit (element(i,j)\tip)/2+32,i*32-22,j*32-6
- EndIf
- EndIf
- Next i
- Next j
- Block 17,0,240 ;narisimo se pano
-
- igra=lvldat(stopnja,0)*50+2 ;uredimo cas
- konst=lvldat(stopnja,1) ;preberimo stevilo obhodov zoge
- sem=lvldat(stopnja,2) ;stevilo predpisanih barv
- For i=1 To sem
- order(i)=Rnd(4)+1 ;napolnimo semafor
- Next i
- krizcas=lvldat(stopnja,3) ;preberimo cas kriza
- krizc=1
- If krizcas>0
- For i=1 To 4
- kriz(i)=Rnd(4)+1 ;napolnimo kriz (ce je treba)
- Next i
- EndIf
- bonus=lvldat(stopnja,4)*50 ;preberimo bonus
- bonusmax.w=bonus
- If bonus=0
- Box 201,253,236,254,1
- Else
- Box 201,253,236,254,5
- EndIf
- joker=lvldat(stopnja,5) ;kaj pa verjetnost jokerja
- ime$=lvlnm$(stopnja) ;in ime stopnje
- ritem=50 ;postavimo cas za vrtenje revolverjev
-
- Gosub level_info
- CopyBitMap 1,0
-
- Return
-
-
- .miska:
-
- misx.w=SMouseX ;spravimo miskine koordinate
- misy.w=SMouseY
- If misx>319 Then misx=319 ;poskrbimo, da koordinate niso
- If misx<0 Then misx=0 ;zunaj zaslona
- If misy>235 Then misy=235
- If misy<0 Then misy=0
- x.b=Int(misx/#vel)+1 ;prevedimo to v polje
- y.b=Int((misy-16)/#vel)+1
-
- Return
-
-
- .element:
-
- USEPATH zoga(i)
- elx.b=Int(\x/#vel)+1
- ely.b=Int((\y-16)/#vel)+1
- If \x MOD 32=11 AND (\y-16) MOD 32=11
- Select element(elx,ely)\tip
- Case 6
- If \dx=-#hitrost
- \dx=0
- \dy=-#hitrost
- Else
- If \dy=#hitrost
- \dy=0
- \dx=#hitrost
- EndIf
- EndIf
- Case 7
- If \dx=-#hitrost
- \dx=0
- \dy=#hitrost
- Else
- If \dy=-#hitrost
- \dy=0
- \dx=#hitrost
- EndIf
- EndIf
- Case 8
- If \dx=#hitrost
- \dx=0
- \dy=#hitrost
- Else
- If \dy=-#hitrost
- \dy=0
- \dx=-#hitrost
- EndIf
- EndIf
- Case 9
- If \dx=#hitrost
- \dx=0
- \dy=-#hitrost
- Else
- If \dy=#hitrost
- \dy=0
- \dx=-#hitrost
- EndIf
- EndIf
- Case 10
- If \dx=-#hitrost
- \dx=#hitrost
- If Snd=True Then PlaySFX{2,4}
- EndIf
- Case 11
- If \dy=-#hitrost
- \dy=#hitrost
- If Snd=True Then PlaySFX{2,4}
- EndIf
- Case 12
- If \dx=#hitrost
- \dx=-#hitrost
- If Snd=True Then PlaySFX{2,4}
- EndIf
- Case 13
- If \dy=#hitrost
- \dy=-#hitrost
- If Snd=True Then PlaySFX{2,4}
- EndIf
- Case 14
- If NOT (\barva=1 OR \barva=5)
- \dx=-\dx
- If Snd=True Then PlaySFX{2,4}
- EndIf
- Case 15
- If NOT (\barva=1 OR \barva=5)
- \dy=-\dy
- If Snd=True Then PlaySFX{2,4}
- EndIf
- Case 16
- If NOT (\barva=2 OR \barva=5)
- \dx=-\dx
- If Snd=True Then PlaySFX{2,4}
- EndIf
- Case 17
- If NOT (\barva=2 OR \barva=5)
- \dy=-\dy
- If Snd=True Then PlaySFX{2,4}
- EndIf
- Case 18
- If NOT (\barva=3 OR \barva=5)
- \dx=-\dx
- If Snd=True Then PlaySFX{2,4}
- EndIf
- Case 19
- If NOT (\barva=3 OR \barva=5)
- \dy=-\dy
- If Snd=True Then PlaySFX{2,4}
- EndIf
- Case 20
- If NOT (\barva=4 OR \barva=5)
- \dx=-\dx
- If Snd=True Then PlaySFX{2,4}
- EndIf
- Case 21
- If NOT (\barva=4 OR \barva=5)
- \dy=-\dy
- If Snd=True Then PlaySFX{2,4}
- EndIf
- Case 22
- If \barva<5
- \barva=1
- EndIf
- If Snd=True Then PlaySFX{3,8}
- Case 23
- If \barva<5
- \barva=1
- EndIf
- If Snd=True Then PlaySFX{3,8}
- Case 24
- If \barva<5
- \barva=2
- EndIf
- If Snd=True Then PlaySFX{3,8}
- Case 25
- If \barva<5
- \barva=2
- EndIf
- If Snd=True Then PlaySFX{3,8}
- Case 26
- If \barva<5
- \barva=3
- EndIf
- If Snd=True Then PlaySFX{3,8}
- Case 27
- If \barva<5
- \barva=3
- EndIf
- If Snd=True Then PlaySFX{3,8}
- Case 28
- If \barva<5
- \barva=4
- EndIf
- If Snd=True Then PlaySFX{3,8}
- Case 29
- If \barva<5
- \barva=4
- EndIf
- If Snd=True Then PlaySFX{3,8}
- End Select
- EndIf
- If element(elx,ely)\tip>9 AND element(elx,ely)\tip<30
- element(elx,ely)\draw=1
- EndIf
- If element(elx,ely)\tip=30
- If \x MOD 32=1 OR \x MOD 32=21 OR (\y-16) MOD 32=1 OR (\y-16) MOD 32=21
- If teleport(3)=0
- \teleport=1
- teleport(3)=1
- If Snd=True Then PlaySFX{4,8}
- Else
- teleport(3)=0
- EndIf
- EndIf
- EndIf
-
- Return
-
-
- .zoga_cev:
-
- USEPATH zoga(i)
- ;preverimo, ce se je zaletela
- If \x<0 OR \x>319-#premer
- \dx=-\dx ;spremenimo smer
- \x=\x+2*\dx ;in popravimo polozaj
- EndIf
-
- ;ali bo padla v revolver
- If \x MOD #vel=#sredina AND element(\x/#vel+1,1)\a=0 AND element(\x/#vel+1,1)\rot=0
- element(\x/#vel+1,1)\a=\barva ;revolver se napolni
- element(\x/#vel+1,1)\draw=2
- \obstoj=0 ;zogice ni vec
- cev=0 ;cev je prazna
- If Snd=True Then PlaySFX{0,1}
- EndIf
-
- Return
-
-
- .zoga_trk:
-
- USEPATH zoga(i)
- For j=i+1 To #maxzog
- If zoga(j)\obstoj=1 AND (i>j OR j>i)
- If \dx=-zoga(j)\dx OR \dy=-zoga(j)\dy ;trk na ravnem
- If RectsHit(\x,\y,10,10,zoga(j)\x,zoga(j)\y,10,10)=-1
- \dx=-\dx : \dy=-\dy ;spremeni smer
- \x=\x+\dx : \y=\y+\dy ;popravi pozicijo
- zoga(j)\dx=-zoga(j)\dx ;tudi drugi zogi se smer spremeni
- zoga(j)\dy=-zoga(j)\dy
- zoga(j)\y=zoga(j)\y+zoga(j)\dy
- zoga(j)\x=zoga(j)\x+zoga(j)\dx
- If Snd=True Then PlaySFX{2,4}
- EndIf
- Else ;trk v ovinku
- If RectsHit(\x+2,\y+2,6,6,zoga(j)\x+2,zoga(j)\y+2,6,6)=-1
- \dx=-\dx : \dy=-\dy ;spremeni smer
- \x=\x+\dx : \y=\y+\dy ;popravi pozicijo
- zoga(j)\dx=-zoga(j)\dx ;tudi drugi zogi se smer spremeni
- zoga(j)\dy=-zoga(j)\dy
- zoga(j)\y=zoga(j)\y+zoga(j)\dy
- zoga(j)\x=zoga(j)\x+zoga(j)\dx
- If Snd=True Then PlaySFX{2,4}
- EndIf
- EndIf
- EndIf
- Next j
-
- Return
-
-
- .zoga_tel
-
- USEPATH zoga(i)
-
- If \dy=-#hitrost AND element(\x/32+1,(\y-16)/32+1)\tip=30
- If teleport(3)=1
- \dy=-dy
- \y=\y+2*\dy
- If Snd=True Then PlaySFX{2,4}
- EndIf
- EndIf
-
- If \dx=#hitrost AND element((\x+9)/32+1,\y/32+1)\tip=30
- If teleport(3)=1
- \dx=-\dx
- \x=\x+2*\dx
- If Snd=True Then PlaySFX{2,4}
- EndIf
- EndIf
-
- If \dy=#hitrost AND element(\x/32+1,(\y-7)/32+1)\tip=30
- If teleport(3)=1
- \dy=-\dy
- \y=\y-2*\dy
- If Snd=True Then PlaySFX{2,4}
- EndIf
- EndIf
-
- If \dx=-#hitrost AND element(\x/32+1,\y/32+1)\tip=30
- If teleport(3)=1
- \dx=-\dx
- \x=\x+2*\dx
- If Snd=True Then PlaySFX{2,4}
- EndIf
- EndIf
-
- Return
-
-
- .zoga_rev:
-
- USEPATH zoga (i)
- ;ce gre gor
- If \dy=-#hitrost
- If element(\x/32+1,(\y-16)/32+1)\tip=3 OR element(\x/32+1,(\y-16)/32+1)\tip=4 OR element(\x/32+1,(\y-16)/32+1)\tip>30
-
- ;v revolverju je prostor in se ne vrti
- If element(\x/32+1,(\y-16)/32+1)\c=0 AND element(\x/32+1,(\y-16)/32+1)\rot=0
- element(\x/32+1,(\y-16)/32+1)\c=\barva ;zoga ga zasede
- element(\x/32+1,(\y-16)/32+1)\draw=2
- cas=#odmor ;ne smemo operirati
- \obstoj=0 ;sama pa izgine
- If Snd=True Then PlaySFX{0,1}
- Else ;ali pa ga ni
- \dy=-\dy ;zogica se odbije
- \y=\y+2*\dy ;in spremeni polozaj
- If Snd=True Then PlaySFX{2,4}
- EndIf
-
- EndIf
-
- EndIf
-
- ;ce gre desno
- If \dx=#hitrost
- If element((\x+9)/32+1,\y/32+1)\tip=3 OR element((\x+9)/32+1,\y/32+1)\tip=4 OR element((\x+9)/32+1,\y/32+1)\tip>30
-
- ;v revolverju je prostor
- If element((\x+9)/32+1,\y/32+1)\d=0 AND element((\x+9)/32+1,\y/32+1)\rot=0
- element((\x+9)/32+1,\y/32+1)\d=\barva ;zoga ga zasede
- element((\x+9)/32+1,\y/32+1)\draw=2
- cas=#odmor ;ne smemo operirati
- \obstoj=0 ;sama pa izgine
- If Snd=True Then PlaySFX{0,1}
- Else ;ali pa ga ni
- \dx=-\dx ;zogica se odbije
- \x=\x+2*\dx ;in spremeni polozaj
- If Snd=True Then PlaySFX{2,4}
- EndIf
-
- EndIf
-
- EndIf
-
- ;ce gre dol
- If \dy=#hitrost
- If element(\x/32+1,(\y-7)/32+1)\tip=3 OR element(\x/32+1,(\y-7)/32+1)\tip=4 OR element(\x/32+1,(\y-7)/32+1)\tip>30
-
- ;v revolverju je prostor
- If element(\x/32+1,(\y-7)/32+1)\a=0 AND element(\x/32+1,(\y-7)/32+1)\rot=0
- element(\x/32+1,(\y-7)/32+1)\a=\barva ;zoga ga zasede
- element(\x/32+1,(\y-7)/32+1)\draw=2
- cas=#odmor ;ne smemo operirati
- \obstoj=0 ;sama pa izgine
- If Snd=True Then PlaySFX{0,1}
- Else ;ali pa ga ni
- \dy=-\dy ;zogica se odbije
- \y=\y+2*\dy ;in spremeni polozaj
- If Snd=True Then PlaySFX{2,4}
- EndIf
-
- EndIf
-
- EndIf
-
- ;ce gre levo
- If \dx=-#hitrost
- If element(\x/32+1,\y/32+1)\tip=3 OR element(\x/32+1,\y/32+1)\tip=4 OR element(\x/32+1,\y/32+1)\tip>30
-
- ;v revolverju je prostor
- If element(\x/32+1,\y/32+1)\b=0 AND element(\x/32+1,\y/32+1)\rot=0
- element(\x/32+1,\y/32+1)\b=\barva ;zoga ga zasede
- element(\x/32+1,\y/32+1)\draw=2
- cas=#odmor ;ne smemo operirati
- \obstoj=0 ;sama pa izgine
- If Snd=True Then PlaySFX{0,1}
- Else ;ali pa ga ni
- \dx=-\dx ;zogica se odbije
- \x=\x+2*\dx ;in spremeni polozaj
- If Snd=True Then PlaySFX{2,4}
- EndIf
-
- EndIf
-
- EndIf
-
- Return
-
-
- .cev:
-
- USEPATH zoga(i)
- If cev=0 ;ce ni nic v cevi
- i=0
- ;poiscimo nezasedeno zogico
- Repeat
- i=i+1
- Until \obstoj=0
- ;naredimo novo zogico
- \x=#zacx,#zacy,sledi,1,-#hitrost,0,0
- Gosub sledi ;napovemo naslednjo
- changen=2 ;pano se je spremenil
- vcevi=314 ;zogica je sel prisla
- const=konst ;kako hitro bo tekel cas zogice
- Box 5,2,314,3,1 : Use BitMap 1-bit
- Box 5,2,314,3,1 : Use BitMap bit
- cev=1 ;cev je zdaj polna
- EndIf
-
- Return
-
-
- .kriz:
-
- If krizc=1
- For i=1 To 4
- kriz(i)=Rnd(4)+1
- Next i
- bonus=bonusmax
- If bonus=0
- t=1
- Else
- t=5
- EndIf
- Box 201,253,236,254,t : Use BitMap 1-bit
- Box 201,253,236,254,t : Use BitMap bit
- changec=2
- EndIf
-
- Return
-
-
- .klik_vrti:
-
- USEPATH element(x,y)
- If Joyb(0)=2 AND \tip=3
- t=\a:\a=\d:\d=\c:\c=\b:\b=t ;zavrtimo
- \rot=3
- cas=#odmor ;nastavimo premor
- If Snd=True Then PlaySFX{1,2} ;pa se zvok
- EndIf
- If Joyb(0)=2 AND \tip=4
- t=\a:\a=\b:\b=\c:\c=\d:\d=t
- \rot=3
- cas=#odmor
- If Snd=True Then PlaySFX{1,2}
- EndIf
-
- Return
-
-
- .klik_zoga:
-
- USEPATH element(x,y)
- If Joyb(0)=1 AND (\tip=3 OR \tip=4 OR \tip>30)
-
- ;zogica je zgoraj
- If \a>0 AND RectsHit(x*32-21,y*32-15,10,10,misx,misy,1,1)=-1
- If y>1 AND element(x,y-1)\c=0 ;ce ima prostor
- ok=1 ;kontrolna spremenljivka
- If element(x,y-1)\tip=3 OR element(x,y-1)\tip=4 OR element(x,y-1)\tip>30 ;ce je zraven revolver
- element(x,y-1)\c=\a ;ga napolnimo
- element(x,y-1)\draw=2
- Else ;kot kaze je nekaksna cev
- i=0
- Repeat ;poiscimo prazno zogico
- i=i+1
- Until zoga(i)\obstoj=0
- For j=1 To #maxzog
- If zoga(j)\obstoj=1 AND (i>j OR j>i) ;ali trci z drugo zogo
- ok=ok+RectsHit(zoga(j)\x,zoga(j)\y,10,10,x*32-21,y*32-28,10,10)
- EndIf
- Next j
- If ok=1 ;ce trka ni bilo
- zoga(i)\x=x*32-21,y*32-26,\a,1,0,-#hitrost ;naredimo novo
- EndIf
- EndIf
- If ok=1
- \a=0:cas=#odmor ;na koncu se je znebimo
- \draw=2
- If Snd=True Then PlaySFX{0,1}
- EndIf
- EndIf
- EndIf
-
- ;zogica je desno
- If \b>0 AND RectsHit(x*32-11,y*32-5,10,10,misx,misy,1,1)=-1
- If x<10 AND element(x+1,y)\d=0 ;ce ima prostor
- ok=1 ;kontrolna spremenljivka
- If element(x+1,y)\tip=3 OR element(x+1,y)\tip=4 OR element(x+1,y)\tip>30 ;ce je zraven revolver
- element(x+1,y)\d=\b ;ga napolnimo
- element(x+1,y)\draw=2
- Else ;kot kaze je nekaksna cev
- i=0
- Repeat ;poiscimo prazno zogico
- i=i+1
- Until zoga(i)\obstoj=0
- For j=1 To #maxzog
- If zoga(j)\obstoj=1 AND (i>j OR j>i) ;ali trci z drugo zogo
- ok=ok+RectsHit(zoga(j)\x,zoga(j)\y,10,10,x*32+2,y*32-5,10,10)
- EndIf
- Next j
- If ok=1 ;ce trka ni bilo
- zoga(i)\x=x*32,y*32-5,\b,1,#hitrost,0 ;naredimo novo
- EndIf
- EndIf
- If ok=1
- \b=0:cas=#odmor ;na koncu se je znebimo
- \draw=2
- If Snd=True Then PlaySFX{0,1}
- EndIf
- EndIf
- EndIf
-
- ;zogica je spodaj
- If \c>0 AND RectsHit(x*32-21,y*32+5,10,10,misx,misy,1,1)=-1
- If y<7 AND element (x,y+1)\a=0 ;ce ima prostor
- ok=1 ;kontrolna spremenljivka
- If element(x,y+1)\tip=3 OR element(x,y+1)\tip=4 OR element(x,y+1)\tip>30 ;ce je zraven revolver
- element(x,y+1)\a=\c ;ga napolnimo
- element(x,y+1)\draw=2
- Else ;kot kaze je nekaksna cev
- i=0
- Repeat ;poiscimo prazno zogico
- i=i+1
- Until zoga(i)\obstoj=0
- For j=1 To #maxzog
- If zoga(j)\obstoj=1 AND (i>j OR j>i) ;ali trci z drugo zogo
- ok=ok+RectsHit(zoga(j)\x,zoga(j)\y,10,10,x*32-21,y*32+18,10,10)
- EndIf
- Next j
- If ok=1 ;ce trka ni bilo
- zoga(i)\x=x*32-21,y*32+16,\c,1,0,#hitrost ;naredimo novo
- EndIf
- EndIf
- If ok=1
- \c=0:cas=#odmor ;na koncu se je znebimo
- \draw=2
- If Snd=True Then PlaySFX{0,1}
- EndIf
- EndIf
- EndIf
-
- ;zogica je levo
- If \d>0 AND RectsHit(x*32-31,y*32-5,10,10,misx,misy,1,1)=-1
- If x>1 AND element (x-1,y)\b=0 ;ce ima prostor
- ok=1 ;kontrolna spremenljivka
- If element(x-1,y)\tip=3 OR element(x-1,y)\tip=4 OR element(x-1,y)\tip>30 ;ce je zraven revolver
- element(x-1,y)\b=\d ;ga napolnimo
- element(x-1,y)\draw=2
- Else ;kot kaze je nekaksna cev
- i=0
- Repeat ;poiscimo prazno zogico
- i=i+1
- Until zoga(i)\obstoj=0
- For j=1 To #maxzog
- If zoga(j)\obstoj=1 AND (i>j OR j>i) ;ali trci z drugo zogo
- ok=ok+RectsHit(zoga(j)\x,zoga(j)\y,10,10,x*32-44,y*32-5,10,10)
- EndIf
- Next j
- If ok=1 ;ce trka ni bilo
- zoga(i)\x=x*32-42,y*32-5,\d,1,-#hitrost,0 ;naredimo novo
- EndIf
- EndIf
- If ok=1
- \d=0:cas=#odmor ;na koncu se je znebimo
- \draw=2
- If Snd=True Then PlaySFX{0,1}
- EndIf
- EndIf
- EndIf
-
- EndIf
-
- Return
-
-
- .avto:
-
- USEPATH element(i,j)
- If ritem<1 ;avto revolverji
- ritem=50
- For i=1 To 10
- For j=1 To 7
- If \tip=31
- t=\a:\a=\d:\d=\c:\c=\b:\b=t
- \rot=3
- If Snd=True Then PlaySFX{1,2}
- EndIf
- If \tip=32
- t=\a:\a=\b:\b=\c:\c=\d:\d=t
- \rot=3
- If Snd=True Then PlaySFX{1,2}
- EndIf
- Next j
- Next i
- EndIf
-
- Return
-
-
- .revolverji:
-
- USEPATH element(x,y)
- For x=1 To #sirina
- For y=1 To #visina
- If \tip=3 OR \tip=4 OR \tip=31 OR \tip=32
- If \rot=0 ;ce se revolver ne vrti vec
- If Pro=False OR \ok=0
- If kriz(1)=0 ;ce ni predpisane kombinacije
- If \a>0 AND \b>0 AND \c>0 AND \d>0 ;ce so vse luknje polne
- If \a<5 ;poiscimo barvo
- a=\a
- Else
- If \b<5
- a=\b
- Else
- If \c<5
- a=\c
- Else
- a=\d
- EndIf
- EndIf
- EndIf
- If (\a=a OR \a=5) AND (\b=a OR \b=5) AND (\c=a OR \c=5) AND (\d=a OR \d=5)
- If order(1)=0
- If \ok=0
- whleft=whleft-1 ;en manj do konca
- changewl=2
- EndIf
- \a=0,0,0,0,1,2 ;ce ni semaforja jih enostavno zbrisemo
- If Snd=True Then PlaySFX{5,15}
- Else
- If order(1)=a OR a=5
- If \ok=0
- whleft=whleft-1 ;en manj do konca
- changewl=2
- EndIf
- \a=0,0,0,0,1,2 ;ce se s semaforjem ujema, jih zbrisemo
- For i=1 To 4
- order(i)=order(i+1) ;semafor premaknemo
- Next i
- order(5)=0; zadnjega spraznimo
- changeo=2
- If Snd=True Then PlaySFX{5,15}
- EndIf
- EndIf
- EndIf
- EndIf
- Else ; ce pa kombinacija je
- If (\a=kriz(1) OR \a=5) AND (\b=kriz(2) OR \b=5) AND (\c=kriz(3) OR \c=5) AND (\d=kriz(4) OR \d=5) ;ce se s kombin
- If \ok=0
- whleft=whleft-1 ;en manj do konca
- changewl=2
- EndIf
- \a=0,0,0,0,1,2 ;zbrisemo revolver
- If Snd=True Then PlaySFX{5,15}
- For i=1 To 4
- kriz(i)=0 ;spraznimo kriz
- Next i
- krizc=krizcas*50
- igra=igra+bonus ;dodamo bonus cas
- bonus=2
- changec=2 ;ukazemo spremembo
- Box 201,253,236,254,1 : Use BitMap 1-bit ; pocistimo
- Box 201,253,236,254,1 : Use BitMap bit ; merilec
- EndIf
- EndIf
- EndIf
- EndIf
- If \draw>0
- \draw=\draw-1
- Blit 10,(x-1)*32,y*32-16
- If \a>0
- Blit \a,x*32-21,y*32-15 ;nato narisemo zogice v njih
- EndIf
- If \b>0
- Blit \b,x*32-11,y*32-5
- EndIf
- If \c>0
- Blit \c,x*32-21,y*32+5
- EndIf
- If \d>0
- Blit \d,x*32-31,y*32-5
- EndIf
- If \ok=1
- Blit 16,x*32-18,y*32-2 ;prizgemo zeleno lucko
- EndIf
- EndIf
- If \ok=0 Then done=0
- EndIf
- Next y
- Next x
-
- For x=1 To 10
- For y=1 To 7
- If \rot=1
- \draw=2
- \rot=0
- If \tip=3 OR \tip=31
- Blit 69,(x-1)*32,(y-1)*32+16
- If \a>0
- Blit \a,x*32-25,y*32-14
- EndIf
- If \b>0
- Blit \b,x*32-12,y*32-9
- EndIf
- If \c>0
- Blit \c,x*32-17,y*32+4
- EndIf
- If \d>0
- Blit \d,x*32-30,y*32-1
- EndIf
- EndIf
- If \tip=4 OR \tip=32
- Blit 67,(x-1)*32,(y-1)*32+16
- If \d>0
- Blit \d,x*32-30,y*32-9
- EndIf
- If \a>0
- Blit \a,x*32-17,y*32-14
- EndIf
- If \b>0
- Blit \b,x*32-12,y*32-1
- EndIf
- If \c>0
- Blit \c,x*32-25,y*32+4
- EndIf
- EndIf
- If \ok=1
- Blit 16,x*32-18,y*32-2
- EndIf
- EndIf
- If \rot=2
- \rot=1
- Blit 68,(x-1)*32,(y-1)*32+16
- If \tip=3 OR \tip=31
- If \b>0
- Blit \b,x*32-14,y*32-12
- EndIf
- If \c>0
- Blit \c,x*32-14,y*32+2
- EndIf
- If \d>0
- Blit \d,x*32-28,y*32+2
- EndIf
- If \a>0
- Blit \a,x*32-28,y*32-12
- EndIf
- EndIf
- If \tip=4 OR \tip=32
- If \a>0
- Blit \a,x*32-14,y*32-12
- EndIf
- If \b>0
- Blit \b,x*32-14,y*32+2
- EndIf
- If \c>0
- Blit \c,x*32-28,y*32+2
- EndIf
- If \d>0
- Blit \d,x*32-28,y*32-12
- EndIf
- EndIf
- If \ok=1
- Blit 16,x*32-18,y*32-2
- EndIf
- EndIf
- If \rot=3
- \rot=2
- If \tip=3 OR \tip=31
- Blit 67,(x-1)*32,(y-1)*32+16
- If \a>0
- Blit \a,x*32-30,y*32-9
- EndIf
- If \b>0
- Blit \b,x*32-17,y*32-14
- EndIf
- If \c>0
- Blit \c,x*32-12,y*32-1
- EndIf
- If \d>0
- Blit \d,x*32-25,y*32+4
- EndIf
- EndIf
- If \tip=4 OR \tip=32
- Blit 69,(x-1)*32,(y-1)*32+16
- If \d>0
- Blit \d,x*32-25,y*32-14
- EndIf
- If \a>0
- Blit \a,x*32-12,y*32-9
- EndIf
- If \b>0
- Blit \b,x*32-17,y*32+4
- EndIf
- If \c>0
- Blit \c,x*32-30,y*32-1
- EndIf
- EndIf
- If \ok=1
- Blit 16,x*32-18,y*32-2
- EndIf
- EndIf
- Next y
- Next x
-
-
- Return
-
-
- .neosnovni:
-
- USEPATH element(x,y)
- For x=1 To #sirina
- For y=1 To #visina
- If \draw=1 AND \tip>9 AND \tip<30
- If \tip<14
- Blit \tip+25,x*32-22,y*32-6
- Else
- Blit (element(x,y)\tip)/2+32,x*32-22,y*32-6
- EndIf
- \draw=0
- EndIf
- Next y
- Next x
-
- Return
-
-
- .pano:
-
- If igra MOD 50=0 OR igra MOD 50=1
- Format "##0"
- Locate 4,30.5
- Print Int(igra/50) ;cas
- EndIf
- If changewl>0 ;preostali revolverji
- changewl=changewl-1
- Format "#0"
- Locate 11,30.5
- Print whleft
- EndIf
- If changen>0
- changen=changen-1
- Blit Int(sledi),306,243 ;naslednja zoga
- EndIf
- If changeo>0
- changeo=changeo-1
- For i=1 To 5
- Blit order(i),133+i*11,243 ;semafor
- Next i
- EndIf
- If changec>0
- changec=changec-1
- If kriz(1)=0
- Blit 18,239,241
- Else
- Blit kriz(1)+18,242,242
- Blit kriz(2)+22,248,244
- Blit kriz(3)+26,242,249
- Blit kriz(4)+30,240,244
- EndIf
- EndIf
- const=const-1
- If const=0 ;ce se cas premakne
- const=konst ;popravimo premor
- vcevi=vcevi-1 ;crtica se podaljsa
- EndIf
- Box vcevi,2,Min(313,vcevi+2),3,5 ;narisimo crtico
- If bonus>0
- Box 235-Int((bonusmax-bonus)/bonusmax*35),253,Min(236,237-Int((bonusmax-bonus)/bonusmax*35)),254,1 ;narisimo bonus
- EndIf
-
- ;poskrbimo le se za risanje zogic
- For i=1 To #maxzog
- If zoga(i)\obstoj=1
- If zoga(i)\teleport=0
- BBlit bit,zoga(i)\barva,zoga(i)\x,zoga(i)\y
- Else
- xkoor=(teleport(0)-1) MOD 10
- ykoor=Int((teleport(0)-1) / 10)
- BBlit bit,51,xkoor*32+14,ykoor*32+30
- BBlit bit,51,(xkoor+teleport(1))*32+14,(ykoor+teleport(2))*32+30
- Select zoga(i)\teleport
- Case 1
- BBlit bit,51+zoga(i)\barva,zoga(i)\x,zoga(i)\y
- Case 2
- BBlit bit,56+zoga(i)\barva,zoga(i)\x,zoga(i)\y
- Case 3
- BBlit bit,61+zoga(i)\barva,zoga(i)\x,zoga(i)\y
- Case 4
- elx.b=Int(zoga(i)\x/#vel)+1
- ely.b=Int((zoga(i)\y-16)/#vel)+1
- If elx + (ely-1)*10=teleport(0)
- zoga(i)\x=zoga(i)\x+teleport(1)*32+zoga(i)\dx*20
- zoga(i)\y=zoga(i)\y+teleport(2)*32+zoga(i)\dy*20
- Else
- zoga(i)\x=zoga(i)\x-teleport(1)*32+zoga(i)\dx*20
- zoga(i)\y=zoga(i)\y-teleport(2)*32+zoga(i)\dy*20
- EndIf
- Case 5
- BBlit bit,61+zoga(i)\barva,zoga(i)\x,zoga(i)\y
- Case 6
- BBlit bit,56+zoga(i)\barva,zoga(i)\x,zoga(i)\y
- Case 7
- BBlit bit,51+zoga(i)\barva,zoga(i)\x,zoga(i)\y
- Case 8
- BBlit bit,zoga(i)\barva,zoga(i)\x,zoga(i)\y
- End Select
- zoga(i)\teleport=(zoga(i)\teleport+1) MOD 9
- EndIf
- EndIf
- Next i
-
- Return
-
-
- .sledi:
-
- If Rnd(50)<joker
- sledi=5
- Else
- sledi=Int(Rnd(4))+1
- EndIf
-
- Return
-
-
- .funkcije:
-
- Function Num{a$} ; vrne stevilko iz crke passworda
- a=Asc("z")-Asc(a$)
- Function Return a
- End Function
-
- Function$ Ltr{a} ; vrne crko za password iz stevilke
- a$=Chr$(Asc("z")-a)
- Function Return a$
- End Function
-
- Function$ pswd{lev} ; izracunajmo password
- SHARED lvlnm$(), lvldat(),lvlmap() ;poberemo potr. sprem.
- fime=Len(lvlnm$(lev)) ; izracunamo vrednosti
- fcas=lvldat(lev,0)
- fsum=0
- For fi=0 To 9
- For fj=0 To 6
- fsum=fsum+lvlmap(fi,fj,lev)
- Next fj
- Next fi
- fkon=lvldat(lev,1) ;sledi se dolocitev passworda
- a$=Ltr{fime/2}+Ltr{Int(lev/10)}+Ltr{fcas/100}+Ltr{fsum/100}+Ltr{lev MOD 10}
- a$=a$+Ltr{(fsum/5) MOD 20}+Ltr{fkon}+Ltr{(fcas/5) MOD 20}+Ltr{fsum MOD 5}
- Function Return a$
- End Function
-
- Function.l Encode{s$}
- l=Len(s$)
- For i=1 To l
- code.l=code.l+Asc(Mid$(s$,l+1-i,1))*i
- Next i
- Function Return code
- End Function
-
- Function.l Control{a.l,b.l}
- code.l=Abs(a-b)*10+a+b
- Function Return code
- End Function
-
- Function$ ChangeName{name$}
- newname$=""
- For i.b=1 To Len(name$)
- newname$=newname$+Chr$(Asc(Mid$(name$,i,1))-100+i)
- Next i
- Function Return newname$
- End Function
-
-
- .level_info:
-
- Use BitMap 0
- BitMapOutput 0
- ShowBitMap 0
-
- Cls
-
- StartMedModule 1
- SetMedMask 15
-
- slikanum=Int(stopnja/10)
-
- LoadPalette 1,slika$(slikanum)
- Use Palette 1
- LoadIFF slika$(slikanum),0
- VWait 25
- SemiFade{}
-
- CNIF #ecs=0
- AGARGB 255,255,255,0
- AGAPalRGB 1,255,255,255,0
- CELSE
- RGB 31,15,15,0
- PalRGB 1,31,15,15,0
- CEND
- FNSOutput 0,True
- CNIF #ecs=0
- FNSPrefs $1,255
- CELSE
- FNSPrefs $1,31
- CEND
-
- FNSPrint 0,160,8,"Next Level"
- Format "00"
- FNSPrint 0,160,48,"Level "+Str$(stopnja)
- FNSPrint 0,160,72,ime$
-
- FNSPrefs $8
- FNSPrint 0,160,104,"Time available:"
- FNSPrint 0,160,136,"Retries left:"
- If stopnja MOD 5=0
- FNSPrint 0,160,168,"Password:"
- EndIf
-
- FNSPrefs $0
- Format "##0"
- FNSPrint 0,170,104,Str$(Int(igra/50))
- Format "0"
- FNSPrint 0,170,136,Str$(retry)
- If stopnja MOD 5=0
- FNSPrint 0,170,168,pswd{stopnja}
- EndIf
-
- FNSPrefs $1
- FNSPrint 0,160,216,"Click mousebutton to start"
- FNSPrefs $8
- FNSPrint 0,312,248,"(ESC to quit)"
-
- FlushEvents ;pobrisimo dosedanje dogodke
- Repeat
- nwev.l=WaitEvent
- If nwev=$8 ;klik miske?
- Fade{}
- Cls
- Use Palette 0
- StopMed
- Return
- EndIf
- Until nwev=$400 AND Inkey$=Chr$(27) ;ESC?
- Fade{}
- StopMed
- Goto the_end
-
-
- .the_end:
-
- Use BitMap 1
- BitMapOutput 1
- ShowBitMap 1
-
- Cls
-
- LoadPalette 1,"gfx/end.iff"
- Use Palette 1
- LoadIFF "gfx/end.iff",1
-
- CNIF #ecs=0
- AGARGB 255,255,255,0
- AGAPalRGB 1,255,255,255,0
- CELSE
- RGB 31,15,15,0
- PalRGB 1,31,15,15,0
- CEND
- FNSOutput 1,True
- CNIF #ecs=0
- FNSPrefs $1,255
- CELSE
- FNSPrefs $1,31
- CEND
-
- FNSPrint 0,160,220,"You LOSE!"
-
- FlushEvents
- Repeat
- nwev.l=WaitEvent
- If nwev=$8
- Fade{}
- StartMedModule 0
- SetMedMask 15
- Goto menu
- EndIf
- Until False
-
-
- .done:
-
- Use BitMap 1
- BitMapOutput 1
- ShowBitMap 1
-
- Cls
-
- LoadPalette 1,"gfx/out.iff"
- Use Palette 1
- LoadIFF "gfx/out.iff",1
-
- CNIF #ecs=0
- AGARGB 255,255,255,0
- AGAPalRGB 1,255,255,255,0
- CELSE
- RGB 31,15,15,0
- PalRGB 1,31,15,15,0
- CEND
- FNSOutput 1,True
- CNIF #ecs=0
- FNSPrefs $1,255
- CELSE
- FNSPrefs $1,31
- CEND
-
- FNSPrint 0,160,220,"You WON!"
-
- FlushEvents
- Repeat
- nwev.l=WaitEvent
- If nwev=$8
- Fade{}
- StartMedModule 0
- SetMedMask 15
- Goto menu
- EndIf
- Until False
-
-
-
- .about:
-
- Use BitMap 0
- BitMapOutput 0
- ShowBitMap 0
-
- Cls
-
- LoadPalette 1,"gfx/about.iff"
- Use Palette 1
- LoadIFF "gfx/about.iff",0
-
- VWait 100
- SemiFade{}
-
- CNIF #ecs=0
- AGARGB 255,255,255,0
- AGAPalRGB 1,255,255,255,0
- CELSE
- RGB 31,15,15,0
- PalRGB 1,31,15,15,0
- CEND
- FNSOutput 0,True
- CNIF #ecs=0
- FNSPrefs $1,255
- CELSE
- FNSPrefs $1,31
- CEND
-
- FNSPrint 0,160,68,"BallMaster V1.2 (29.12.2000)"
- FNSPrint 0,160,84,"(c)1998-2000 Damir Arh"
-
- FNSPrint 0,160,142,"This version of the game"
- FNSPrint 0,160,158,"is released under the GPL licence."
- FNSPrint 0,160,182,"This program is free software under the"
- FNSPrint 0,160,198,"terms of the GNU General Public Licence."
-
- FlushEvents
- Repeat
- nwev.l=WaitEvent
- If nwev=$8
- Fade{}
- Goto menu
- EndIf
- Until False
-
-
- .options:
-
- Use BitMap 0
- BitMapOutput 0
- ShowBitMap 0
-
- Cls
-
- LoadPalette 1,"gfx/options.iff"
- Use Palette 1
- LoadIFF "gfx/options.iff",0
- VWait 25
- SemiFade{}
-
-
- options_ch:
-
- LoadIFF "gfx/options.iff",0
-
- CNIF #ecs=0
- AGARGB 255,255,255,0
- AGAPalRGB 1,255,255,255,0
- CELSE
- RGB 31,15,15,0
- PalRGB 1,31,15,15,0
- CEND
- FNSOutput 0,True
- CNIF #ecs=0
- FNSPrefs $8,255
- WColour 255,0
- CELSE
- FNSPrefs $8,31
- WColour 31,0
- CEND
-
-
- FNSPrint 0,160,72,"SoundFX:"
- FNSPrint 0,160,96,"Music:"
- FNSPrint 0,160,120,"Profi mode:"
- FNSPrefs $1
- FNSPrint 0,160,200,"Quit options"
-
- Use BitMap 0
- Use Window 0
- WJam 0
- WLocate 176,72
- If Snd=True
- Print " On"
- Else
- Print "Off"
- EndIf
- WLocate 176,96
- If Mus=True
- Print " On"
- Else
- Print "Off"
- EndIf
- WLocate 176,120
- If Pro=True
- Print " On"
- Else
- Print "Off"
- EndIf
-
- FlushEvents
- Repeat
- nwev.l=WaitEvent
- If nwev=$8
- If RectsHit(WMouseX,WMouseY,1,1,104,72,96,8)
- If Snd=True
- Snd=False
- Else
- Snd=True
- EndIf
- Repeat
- nwev=WaitEvent
- If nwev=$8 Then Goto options_ch
- Until False
- EndIf
- If RectsHit(WMouseX,WMouseY,1,1,122,96,78,8)
- If Mus=True
- Mus=False
- Else
- Mus=True
- EndIf
- Repeat
- nwev=WaitEvent
- If nwev=$8 Then Goto options_ch
- Until False
- EndIf
- If RectsHit(WMouseX,WMouseY,1,1,88,120,112,8)
- If Pro=True
- Pro=False
- Else
- Pro=True
- EndIf
- Repeat
- nwev=WaitEvent
- If nwev=$8 Then Goto options_ch
- Until False
- EndIf
- If RectsHit(WMouseX,WMouseY,1,1,120,200,80,8)
- Fade{}
- Goto menu
- EndIf
- EndIf
- Until False
-
-
-
- .password:
-
- Use BitMap 0
- BitMapOutput 0
- ShowBitMap 0
-
- Cls
-
- LoadPalette 1,"gfx/title.iff"
- Use Palette 1
- LoadIFF "gfx/title.iff",0
-
- VWait 25
- SemiFade{}
-
- CNIF #ecs=0
- AGARGB 255,255,255,0
- AGAPalRGB 1,255,255,255,0
- CELSE
- RGB 31,15,15,0
- PalRGB 1,31,15,15,0
- CEND
- FNSOutput 0,True
- CNIF #ecs=0
- FNSPrefs $1,255
- CELSE
- FNSPrefs $1,31
- CEND
-
-
- FNSPrint 0,160,116,"Enter password:"
-
- Use Window 0
- CNIF #ecs=0
- WColour 255,0
- CELSE
- WColour 31,0
- CEND
- WJam 1
- WLocate 120,132
- Print " "
- WLocate 120,132 ; preberemo password
- pswdent$=Edit$(10)
-
- If Len(pswdent$)=9 ; preverimo dolzino
- pswdlev=Num{Mid$(pswdent$,5,1)}+Num{Mid$(pswdent$,2,1)}*10
- If (pswdlev<0) OR (pswdlev>entries-1) OR (pswdlev MOD 5)>0; ali je v obsegu
- pswdlev=0
- EndIf
- If pswd{pswdlev}=pswdent$ ;ali ustreza
- stopnja=pswdlev
- Else
- stopnja=0
- EndIf
- Else
- stopnja=0
- EndIf
-
-
- Return
-
-
- .register:
-
- UserName$="GPL version"
-
- Return
-
-
- .levelerr:
-
- NPrint "Level files corrupt..."
- NPrint "Game loading aborted!"
- VWait 10
- CloseFile 1
- End
-
-
- .picerr:
-
- CloseFile 0
- NPrint "Can't find all the necessary pictures..."
- NPrint "Game loading aborted!"
- VWait 10
- CloseFile 1
- End
-
-
- .sounderr:
-
- NPrint "Can't load sound effects..."
- NPrint "Game loading aborted!"
- VWait 10
- CloseFile 1
- End
-
-
- .savecfg:
-
- If WriteFile(0,"BallMaster.cfg")
- WriteMem 0,&Snd,1
- WriteMem 0,&Mus,1
- WriteMem 0,&Pro,1
- CloseFile 0
- EndIf
-
- Return
-
-
- paleta:
- CNIF #ecs=1
- IncBin "ballmaster_ecs.col"
- CELSE
- IncBin "ballmaster_aga.col"
- CEND
-
- grafika:
- CNIF #ecs=1
- IncBin "ballmaster_ecs.gfx"
- CELSE
- IncBin "ballmaster_aga.gfx"
- CEND
-
- krizec:
- IncBin "pointer.gfx"
-
-
-