home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 5 / CD_Magazyn_EXEC_nr_5.iso / Programy / Programowanie / BASIC / BallMasterSrc.lha / BallMasterSrc / BallMaster.asc < prev    next >
Encoding:
Text File  |  2000-12-29  |  47.4 KB  |  2,096 lines

  1. ;
  2. ; Ballmaster V1.2
  3. ; Copyright (C) 1998-2000  Damir Arh
  4. ;
  5. ; This program is Free software; you can redistribute it and/or modify
  6. ; it under the terms of the GNU General Public License as published by
  7. ; the Free Software Foundation; either version 2 of the License, or
  8. ; (at your option) any later version.
  9. ;
  10. ; This program is distributed in the hope that it will be useful,
  11. ; but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ; MERCHANTABILITY OR FITNESS For A PARTICULAR PURPOSE.  See the
  13. ; GNU General Public License For more details.
  14. ;
  15. ; You should have received a copy of the GNU General Public License
  16. ; along with this program; if not, write to the Free Software
  17. ; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. ;
  19. ;
  20. ; E-mail: damir.arh@telesat.si
  21. ;
  22. ; S-mail: Damir Arh
  23. ;         Titova 89
  24. ;         SI-4270 Jesenice
  25. ;         Slovenia
  26. ;
  27. ;
  28. ; $VER: BallMaster.bb2 V1.2 (29.12.2000)
  29. ;
  30.  
  31. version$ = "$VER: BallMaster V1.2 (29.12.2000)"
  32.  
  33. #ecs=0
  34.  
  35.  
  36. #_Width=$80000023
  37. #_Height=$80000024
  38. #_Depth=$80000025
  39. #_BitMap=$8000002E
  40. #_Exclusive=$8000003F
  41. #_DisplayID=$80000032
  42.  
  43.  
  44. ;potrebujemo tile funkciji ;)
  45.  
  46.   Statement Fade{}
  47.     For i=1 To 100
  48.       FadePalette 1,1,0.98
  49.       Use Palette 1
  50.       VWait
  51.     Next i
  52.   End Statement
  53.  
  54.   Statement SemiFade{}
  55.     For i=1 To 15
  56.       FadePalette 1,1,0.95
  57.       Use Palette 1
  58.       VWait
  59.     Next i
  60.   End Statement
  61.  
  62.  
  63. .zacetek:
  64.   WBStartup
  65.  
  66.   ;za zacetek nekaj konstant in zacetnih vrednosti
  67.   #sirina=10  ;stevilo polj na zaslonu po sirini
  68.   #visina=7   ;stevilo polj na zaslonu po visini
  69.   #zacx=310   ;x koordinata zacetnega polozaja
  70.   #zacy=6     ;y koordinata zacetnega polozaja
  71.   #hitrost=1  ;#hitrost gibanja kroglic
  72.   #maxzog=20  ;najvecje mozno stevilo kroglic na zaslonu
  73.   #vel=32     ;dimenzije posameznega polja
  74.   #sredina=11 ;odmik koordinate od roba ob sredinskem polozaju
  75.   #premer=9   ;odmik desnega roba kroglice od njenih koordinat
  76.   #zamik=7    ;#zamik oblik glede na tip
  77.   #odmor=10   ;premor med vrtenjem
  78.  
  79.  
  80.   ;definicija kroglice
  81.   NEWTYPE .zoga
  82.     x.w:y:barva.b:obstoj:dx:dy:teleport
  83.   End NEWTYPE
  84.  
  85.   ;definicija igralnega polja
  86.   NEWTYPE .element
  87.     tip.b:a:b:c:d:ok:draw:rot
  88.   End NEWTYPE
  89.  
  90.   ;pripravimo nekaj tabel
  91.   Dim zoga.zoga(#maxzog)
  92.   Dim element.element(#sirina,#visina)
  93.   Dim order.b(5)
  94.   Dim kriz.b(4)
  95.   Dim teleport(3)
  96.  
  97.   ;okno za napake ;)
  98.  
  99.   DosBuffLen 0
  100.   If NOT OpenFile(1,"CON:0/15//150/BallMaster Output") Then End
  101.   FileOutput 1
  102.  
  103.   NPrint ""
  104.   NPrint "BallMaster V1.2 (29.12.2000)"
  105.   NPrint "(c)1998-2000 Damir Arh"
  106.   NPrint ""
  107.  
  108.  
  109.   ;nalozimo grafiko in zvok
  110.   NPrint "Loading level gfx and sound..."
  111.   DecodeShapes 0,?grafika
  112.   DecodePalette 0,?paleta
  113.   DecodeShapes 47,?krizec
  114.   Handle 47,-5,-5
  115.  
  116.   Dim zvoki$(5)
  117.   zvoki$(0)="sfx/padec.sfx"
  118.   zvoki$(1)="sfx/vrti.sfx"
  119.   zvoki$(2)="sfx/trk.sfx"
  120.   zvoki$(5)="sfx/prazno.sfx"
  121.   zvoki$(3)="sfx/barvanje.sfx"
  122.   zvoki$(4)="sfx/teleport.sfx"
  123.  
  124.   Dim dolzvok.b(5)
  125.   dolzvok(0)=4
  126.   dolzvok(1)=6
  127.   dolzvok(2)=6
  128.   dolzvok(5)=17
  129.   dolzvok(3)=10
  130.   dolzvok(4)=33
  131.  
  132.   For i=0 To 5
  133.     If Exists(zvoki$(i))
  134.       LoadSound i,zvoki$(i)
  135.     Else
  136.       Goto sounderr
  137.     EndIf
  138.   Next i
  139.  
  140.   If Exists("sfx/flouqe.mus")
  141.     LoadMedModule 0,"sfx/flouqe.mus"
  142.   Else
  143.     Goto sounderr
  144.   EndIf
  145.  
  146.   If Exists("sfx/meanwhile.mus")
  147.     LoadMedModule 1,"sfx/meanwhile.mus"
  148.   Else
  149.     Goto sounderr
  150.   EndIf
  151.  
  152.   If Exists("sfx/fazahn.mus")
  153.     LoadMedModule 2,"sfx/fazahn.mus"
  154.   Else
  155.     Goto sounderr
  156.   EndIf
  157.  
  158.   SetInt 5
  159.     PlayMed
  160.     If hold.b>0
  161.       hold.b-1
  162.     EndIf
  163.   End SetInt
  164.  
  165.  
  166.   ;preverimo registracijo
  167.   NPrint "Checking registration..."
  168.   Gosub register
  169.  
  170.  
  171.   ;preverimo konfiguracijo
  172.   Snd.b=True
  173.   Mus.b=True
  174.   Pro.b=False
  175.   If Exists("BallMaster.cfg")
  176.     If ReadFile(0,"BallMaster.cfg")
  177.       ReadMem 0,&Snd,1
  178.       ReadMem 0,&Mus,1
  179.       ReadMem 0,&Pro,1
  180.       CloseFile 0
  181.     EndIf
  182.   EndIf
  183.  
  184.   levelset$="default"
  185.   gfxset$="default"
  186.  
  187.  
  188.   ;nalozimo stopnje
  189.   NPrint "Loading levels..."
  190.   Gosub load_levels
  191.  
  192.  
  193.   ;preverimo obstoj grafik
  194.   NPrint "Loading pictures..."
  195.   Dim slika$(16)
  196.   For i=0 To 9
  197.     slika$(i)="gfx/"+gfxset$+"/back"+Str$(i)+".iff"
  198.   Next i
  199.   slika$(10)="gfx/logo.iff"
  200.   slika$(11)="gfx/title.iff"
  201.   slika$(12)="gfx/menu.iff"
  202.   slika$(13)="gfx/end.iff"
  203.   slika$(14)="gfx/out.iff"
  204.   slika$(15)="gfx/about.iff"
  205.   slika$(16)="gfx/options.iff"
  206.  
  207.   For i=0 To 16
  208.     If ReadFile(0,slika$(i))
  209.  
  210.       char.b=0
  211.       j.b=0
  212.  
  213.       Repeat
  214.         ReadMem 0,&char,1
  215.         j=j+1
  216.       Until Chr$(char)="I"
  217.  
  218.       FileInput 0
  219.       Check$=Edit$(11)
  220.       If NOT Left$(Check$,7)="LBMCHCK" Then Goto picerr
  221.       Check$=Edit$(8)
  222.       If NOT Left$(Check$,2)="BM" Then Goto picerr
  223.       If NOT Val(Right$(Check$,6))=987654-Exists(slika$(i)) Then Goto picerr
  224.  
  225.       CloseFile 0
  226.  
  227.     EndIf
  228.  
  229.   Next i
  230.  
  231.   CloseFile 1
  232.                                    
  233.  
  234.   ;pripravimo zaslon
  235.   Gosub zaslon
  236.  
  237.  
  238. .info:
  239.   retry=2           ;zaceli bomo novo igro
  240.   Use BitMap 0
  241.   BitMapOutput 0
  242.   ShowBitMap 0
  243.  
  244.   Cls
  245.  
  246.   LoadPalette 1,"gfx/logo.iff"
  247.   Use Palette 1
  248.   LoadIFF "gfx/logo.iff",0
  249.   VWait 100
  250.   Fade{}
  251.  
  252.   Cls
  253.  
  254.   LoadPalette 1,"gfx/title.iff"
  255.   Use Palette 1
  256.   LoadIFF "gfx/title.iff",0
  257.   VWait 100
  258.   Fade{}
  259.  
  260.   StartMedModule 0
  261.   SetMedMask 15
  262.  
  263.  
  264. .menu:
  265.  
  266.   Use BitMap 0
  267.   Cls
  268.   ShowBitMap 0
  269.  
  270.   LoadPalette 1,"gfx/menu.iff"
  271.   Use Palette 1
  272.   LoadIFF "gfx/menu.iff",0
  273.  
  274.   FlushEvents
  275.   Repeat
  276.     nwev.l=WaitEvent  ;pocakajmo dogodek
  277.     If nwev=$8        ;klik miske?
  278.       If RectsHit(WMouseX,WMouseY,1,1,64,61,186,18) ;start new game?
  279.         Fade{}
  280.         stopnja=0
  281.         StopMed
  282.         Goto mainloop
  283.       EndIf
  284.       If RectsHit(WMouseX,WMouseY,1,1,30,88,260,18) ;password
  285.         Fade{}
  286.         Gosub password
  287.         Fade{}
  288.         StopMed
  289.         Goto mainloop
  290.       EndIf
  291.       If RectsHit(WMouseX,WMouseY,1,1,103,114,117,18) ;options
  292.         Fade{}
  293.         Gosub options
  294.       EndIf
  295.       If RectsHit(WMouseX,WMouseY,1,1,115,142,92,18) ;about
  296.         Fade{}
  297.         Goto about
  298.       EndIf
  299.       If RectsHit(WMouseX,WMouseY,1,1,80,168,156,18) ;quit
  300.         Fade{}
  301.         StopMed
  302.         Gosub savecfg
  303.         End
  304.       EndIf
  305.     EndIf
  306.   Until False
  307.  
  308.  
  309. .playsfx:
  310.  
  311.   Statement PlaySFX{num.b,ch.b}
  312.     SHARED hold.b, cursnd.b, dolzvok.b(), Mus
  313.     If Mus=True
  314.       If hold=0
  315.         cursnd=num
  316.         Sound num,8
  317.         hold=dolzvok(num)
  318.       Else
  319.         If num>=cursnd
  320.           cursnd=num
  321.           Sound num,8
  322.           hold=dolzvok(num)
  323.         EndIf
  324.       EndIf
  325.     Else
  326.       Sound num,ch
  327.     EndIf
  328.   End Statement
  329.  
  330.  
  331. .mainloop:
  332.  
  333.   ;prikazimo stopnjo
  334.   Gosub stopnja
  335.  
  336.   ;se nekaj zacetnih vrednosti
  337.   bit.b=1          ;aktualni bitmap
  338.   cev.b=0          ;ali je kaj v cevi
  339.   cas=0            ;cas do naslednje dovoljene operacije
  340.   changen.b=0      ;sprva se ni sprememb na zogici
  341.   changeo.b=2      ;spremembe na semaforju so
  342.   changec.b=2      ;prav tako na krizu
  343.   hold.b=0         ;trenutno ni zv. ucinka
  344.   cursnd.b=0       ;slisimo tudi ucinke najnizje prioritete
  345.  
  346.   For i=1 To #maxzog
  347.     zoga(i)\obstoj=0 ;unicimo vse zogice
  348.   Next i
  349.   Gosub sledi    ;priklici zogico
  350.   Colour 5,0     ;pisali bomo z modro
  351.   Format "##0"   ;in sicer takole
  352.  
  353.   If Mus=True
  354.     StartMedModule 2
  355.     SetMedMask 7
  356.   EndIf
  357.  
  358.   Repeat
  359.     FlushEvents
  360.     done.b=1       ;stopnjo bomo mogoce koncali
  361.     igra.l=igra-1  ;tempus fugit.. ;)
  362.     ritem.b=ritem-1
  363.     If bonus>0
  364.       bonus=bonus-1
  365.     EndIf
  366.  
  367.     bit=1-bit    ;zamenjamo bitmap
  368.     UnBuffer bit ;spraznimo zaslon
  369.     Use BitMap bit
  370.     BitMapOutput bit
  371.  
  372.     Gosub miska
  373.  
  374.     USEPATH zoga(i)      ;povecajmo preglednost
  375.  
  376.     For i=1 To #maxzog   ;preverimo vse zogice
  377.  
  378.       If \obstoj=1 AND \teleport=0      ;ce zoga obstoja
  379.  
  380.         Gosub element    ;preverimo posebnosti elementa
  381.  
  382.         If \teleport=0
  383.           \x=\x+\dx        ;jo premaknemo
  384.           \y=\y+\dy
  385.  
  386.           If \y=#zacy      ;ce je se vedno v cevi
  387.             Gosub zoga_cev
  388.           Else             ;ce je v cevi ni vec
  389.             Gosub zoga_tel ;ali sme zoga v teleport
  390.             Gosub zoga_trk ;ali trci s kako drugo zogo
  391.             Gosub zoga_rev ;preverimo, ali pade v revolver
  392.           EndIf
  393.  
  394.         EndIf
  395.  
  396.       EndIf
  397.  
  398.     Next i
  399.  
  400.     krizc=krizc-1
  401.     Gosub cev              ;kako je s cevjo
  402.     Gosub kriz             ;napolnimo kriz?
  403.  
  404.     ;ali smo kaj storili
  405.     USEPATH element(x.b,y.b)   ;povecajmo preglednost
  406.     If cas<1               ;ali ze smemo operirati
  407.       Gosub klik_vrti      ;hocemo vrteti?
  408.       Gosub klik_zoga      ;ali smo kliknili na zogico
  409.     EndIf
  410.     cas=cas-1              ;kmalu bomo zopet operirali
  411.     Gosub avto             ;atomatsko vrtenje
  412.  
  413.     Gosub revolverji       ;preglejmo revolverje
  414.     Gosub pano             ;uredimo pano
  415.     Gosub neosnovni        ;narisimo drugi del sestavljenih elementov
  416.  
  417.     ShowBitMap bit    ;prikazimo narisano
  418.     VWait                  ;pocakajmo uskladitev
  419.  
  420.  
  421.     ;ali je igre konec
  422.     If vcevi=5 OR igra=0
  423.       VWait 50
  424.       StopMed
  425.       If retry>0
  426.         retry=retry-1
  427.         Goto mainloop
  428.       Else
  429.         Goto the_end
  430.       EndIf
  431.     EndIf
  432.  
  433.     If done=1
  434.       VWait 50
  435.       StopMed
  436.       stopnja=stopnja+1
  437.       If stopnja<entries
  438.         Goto mainloop
  439.       Else
  440.         Goto done
  441.       EndIf
  442.     EndIf
  443.  
  444.     If RawStatus($19)      ;premor
  445.       CNIF #ecs=1
  446.         InitPalette 1,64
  447.       CELSE
  448.         InitPalette 1,256
  449.       CEND
  450.       FadePalette 0,1,0.5
  451.       Use Palette 1
  452.       SetMedVolume 32
  453.       Repeat
  454.         nwev.l=WaitEvent
  455.       Until nwev=$8        ;klik miske?
  456.       Use Palette 0
  457.       Free Palette 1
  458.       SetMedVolume 64
  459.     EndIf
  460.  
  461.   Until RawStatus($45)
  462.  
  463.   VWait 10
  464.   StopMed
  465.   If retry>0
  466.     retry=retry-1
  467.     Goto mainloop
  468.   Else
  469.     Goto the_end
  470.   EndIf
  471.  
  472.  
  473. .load_levels:
  474.  
  475.   If ReadFile(0,"lvl/"+levelset$+".dat")  ;nalozimo podatke o stopnjah
  476.     FileInput 0
  477.     entries=Edit(5)          ;koliko stopenj je v datoteki
  478.     Dim lvldat(entries-1,5),lvlnm$(entries-1)
  479.     For i=0 To entries-1
  480.       lvlnm$(i)=Edit$(40)
  481.       For j=0 To 5
  482.         lvldat(i,j)=Edit(5)  ;podatki
  483.       Next j
  484.       chcksm=Edit(5)         ;kontrolna vsota
  485.       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))
  486.         Goto levelerr                  ;preverimo kontrolno vsoto
  487.       EndIf
  488.       If (lvldat(i,0)<50) OR (lvldat(i,0)>999)
  489.         Goto levelerr                  ;obseg casa
  490.       EndIf
  491.       If (lvldat(i,1)<1) OR (lvldat(i,1)>10)
  492.         Goto levelerr                  ;obseg sprehodov zoge
  493.       EndIf
  494.       If (lvldat(i,2)<0) OR (lvldat(i,2)>5)
  495.         Goto levelerr                  ;obseg stevila predpisanih barv
  496.       EndIf
  497.       If (lvldat(i,3)<0) OR (lvldat(i,3)>120)
  498.         Goto levelerr                  ;obseg intervala med krizi
  499.       EndIf
  500.       If (lvldat(i,4)<0) OR (lvldat(i,4)>120)
  501.         Goto levelerr                  ;obseg bonus casa
  502.       EndIf
  503.       If (lvldat(i,5)<0) OR (lvldat(i,5)>5)
  504.         Goto levelerr                  ;obseg joker zogic
  505.       EndIf
  506.     Next i
  507.     CloseFile 0
  508.   Else
  509.     Goto levelerr
  510.   EndIf
  511.  
  512.   Dim lvlmap.b(9,6,entries-1) ;nalozimo izgled stopenj
  513.  
  514.   If ReadFile(0,"lvl/"+levelset$+".map")
  515.     ReadMem 0,&lvlmap(0,0,0),entries*70
  516.     CloseFile 0
  517.   Else
  518.     Goto levelerr
  519.   EndIf
  520.  
  521.   Return
  522.  
  523.  
  524. .zaslon:
  525.  
  526. CNIF #ecs=1
  527.   BitMap 0,320,256,6 : Buffer 0,16384
  528.   BitMap 1,320,256,6 : Buffer 1,16384
  529.   ScreenTags 0,"BallMaster",#_Width,320,#_Height,256,#_Depth,6,#_BitMap,Addr BitMap(0),#_Exclusive,True,#_DisplayID,$80
  530. CELSE
  531.   BitMap 0,320,256,8 : Buffer 0,16384
  532.   BitMap 1,320,256,8 : Buffer 1,16384
  533.   ScreenTags 0,"BallMaster",#_Width,320,#_Height,256,#_Depth,8,#_BitMap,Addr BitMap(0),#_Exclusive,True
  534. CEND
  535.   Window 0,0,0,320,256,$1800,"",4,4
  536.   WPointer 47
  537.   Use Palette 0
  538.   Menus Off
  539.  
  540.   Return
  541.  
  542.  
  543. .stopnja:
  544.  
  545.   FlushBuffer 0
  546.   FlushBuffer 1
  547.   Use BitMap 1
  548.   BitMapOutput 1
  549.  
  550.   teleport(0)=0
  551.   teleport(3)=0
  552.   whleft=0      ;prestej revolverje
  553.   changewl=2    ;to napisi na pano
  554.   Cls
  555.   For i=2 To #sirina-1
  556.     Block 6,(i-1)*32,0 ;narisimo cev (srednji del)
  557.   Next i
  558.   Block 48,0,0         ;narisimo cev (zacetni del)
  559.   Block 49,288,0       ;narisimo cev (koncni del)
  560.   For j=1 To #visina
  561.     For i=1 To #sirina
  562.       element(i,j)\tip=lvlmap(i-1,j-1,stopnja) ;preberimo element
  563.       Select element(i,j)\tip+1 ;dolocimo lastnosti (1-zaprto,0-odprto)
  564.         Case 1
  565.           element(i,j)\a=1,1,1,1,0,0,0
  566.         Case 2
  567.           element(i,j)\a=1,0,1,0,0,0,0
  568.         Case 3
  569.           element(i,j)\a=0,1,0,1,0,0,0
  570.         Case 4
  571.           element(i,j)\a=0,0,0,0,0,0,0
  572.           whleft=whleft+1
  573.         Case 5
  574.           element(i,j)\a=0,0,0,0,0,0,0
  575.           whleft=whleft+1
  576.         Case 6
  577.           element(i,j)\a=0,0,0,0,0,0,0
  578.         Case 7
  579.           element(i,j)\a=0,0,1,1,0,0,0
  580.         Case 8
  581.           element(i,j)\a=1,0,0,1,0,0,0
  582.         Case 9
  583.           element(i,j)\a=1,1,0,0,0,0,0
  584.         Case 10
  585.           element(i,j)\a=0,1,1,0,0,0,0
  586.         Case 11
  587.           element(i,j)\a=1,0,1,0,0,0,0
  588.         Case 12
  589.           element(i,j)\a=0,1,0,1,0,0,0
  590.         Case 13
  591.           element(i,j)\a=1,0,1,0,0,0,0
  592.         Case 14
  593.           element(i,j)\a=0,1,0,1,0,0,0
  594.         Case 15
  595.           element(i,j)\a=1,0,1,0,0,0,0
  596.         Case 16
  597.           element(i,j)\a=0,1,0,1,0,0,0
  598.         Case 17
  599.           element(i,j)\a=1,0,1,0,0,0,0
  600.         Case 18
  601.           element(i,j)\a=0,1,0,1,0,0,0
  602.         Case 19
  603.           element(i,j)\a=1,0,1,0,0,0,0
  604.         Case 20
  605.           element(i,j)\a=0,1,0,1,0,0,0
  606.         Case 21
  607.           element(i,j)\a=1,0,1,0,0,0,0
  608.         Case 22
  609.           element(i,j)\a=0,1,0,1,0,0,0
  610.         Case 23
  611.           element(i,j)\a=1,0,1,0,0,0,0
  612.         Case 24
  613.           element(i,j)\a=0,1,0,1,0,0,0
  614.         Case 25
  615.           element(i,j)\a=1,0,1,0,0,0,0
  616.         Case 26
  617.           element(i,j)\a=0,1,0,1,0,0,0
  618.         Case 27
  619.           element(i,j)\a=1,0,1,0,0,0,0
  620.         Case 28
  621.           element(i,j)\a=0,1,0,1,0,0,0
  622.         Case 29
  623.           element(i,j)\a=1,0,1,0,0,0,0
  624.         Case 30
  625.           element(i,j)\a=0,1,0,1,0,0,0
  626.         Case 31
  627.           element(i,j)\a=0,0,0,0,0,0,0
  628.         Case 32
  629.           element(i,j)\a=0,0,0,0,0,0,0
  630.           whleft=whleft+1
  631.         Case 33
  632.           element(i,j)\a=0,0,0,0,0,0,0
  633.           whleft=whleft+1
  634.       End Select
  635.       If element(i,j)\tip<10 OR element(i,j)\tip>29 ;ce je element osnoven
  636.         If element (i,j)\tip<4
  637.           Block element(i,j)\tip+#zamik,(i-1)*#vel,(j*#vel)-16
  638.         Else
  639.           If element(i,j)\tip=30
  640.             Block 50,(i-1)*#vel,(j*#vel)-16
  641.             If teleport(0)=0
  642.               teleport(0)=i+(j-1)*10
  643.               teleport(1)=i
  644.               teleport(2)=j
  645.             Else
  646.               teleport(1)=i-teleport(1)
  647.               teleport(2)=j-teleport(2)
  648.             EndIf
  649.           EndIf
  650.           If element(i,j)\tip>30
  651.             Block 10,(i-1)*#vel,(j*#vel)-16
  652.           EndIf
  653.           If element(i,j)\tip<10
  654.             Block element(i,j)\tip+#zamik-1,(i-1)*#vel,(j*#vel)-16 ;narisimo
  655.           EndIf
  656.         EndIf
  657.       Else                                    ;sicer
  658.         If element(i,j)\tip MOD 2 = 0             ;ce je sod
  659.           Block 1+#zamik,(i-1)*#vel,(j*#vel)-16 ;narisemo vod. cev
  660.         Else                                  ;sicer
  661.           Block 2+#zamik,(i-1)*#vel,(j*#vel)-16 ;narisemo nav. cev
  662.         EndIf
  663.         If element(i,j)\tip<14
  664.           Blit element(i,j)\tip+25,i*32-22,j*32-6
  665.         Else
  666.           Blit (element(i,j)\tip)/2+32,i*32-22,j*32-6
  667.         EndIf
  668.       EndIf
  669.     Next i
  670.   Next j
  671.   Block 17,0,240      ;narisimo se pano
  672.  
  673.   igra=lvldat(stopnja,0)*50+2      ;uredimo cas
  674.   konst=lvldat(stopnja,1)          ;preberimo stevilo obhodov zoge
  675.   sem=lvldat(stopnja,2)            ;stevilo predpisanih barv
  676.   For i=1 To sem
  677.     order(i)=Rnd(4)+1 ;napolnimo semafor
  678.   Next i
  679.   krizcas=lvldat(stopnja,3)        ;preberimo cas kriza
  680.   krizc=1
  681.   If krizcas>0
  682.     For i=1 To 4
  683.       kriz(i)=Rnd(4)+1  ;napolnimo kriz (ce je treba)
  684.     Next i
  685.   EndIf
  686.   bonus=lvldat(stopnja,4)*50       ;preberimo bonus
  687.   bonusmax.w=bonus
  688.   If bonus=0
  689.     Box 201,253,236,254,1
  690.   Else
  691.     Box 201,253,236,254,5
  692.   EndIf
  693.   joker=lvldat(stopnja,5)          ;kaj pa verjetnost jokerja
  694.   ime$=lvlnm$(stopnja)             ;in ime stopnje
  695.   ritem=50                         ;postavimo cas za vrtenje revolverjev
  696.  
  697.   Gosub level_info
  698.   CopyBitMap 1,0
  699.  
  700.   Return
  701.  
  702.  
  703. .miska:
  704.  
  705.   misx.w=SMouseX            ;spravimo miskine koordinate
  706.   misy.w=SMouseY
  707.   If misx>319 Then misx=319  ;poskrbimo, da koordinate niso
  708.   If misx<0 Then misx=0      ;zunaj zaslona
  709.   If misy>235 Then misy=235
  710.   If misy<0 Then misy=0
  711.   x.b=Int(misx/#vel)+1      ;prevedimo to v polje
  712.   y.b=Int((misy-16)/#vel)+1
  713.  
  714.   Return
  715.  
  716.  
  717. .element:
  718.  
  719.   USEPATH zoga(i)
  720.   elx.b=Int(\x/#vel)+1
  721.   ely.b=Int((\y-16)/#vel)+1
  722.   If \x MOD 32=11 AND (\y-16) MOD 32=11
  723.     Select element(elx,ely)\tip
  724.       Case 6
  725.         If \dx=-#hitrost
  726.           \dx=0
  727.           \dy=-#hitrost
  728.         Else
  729.           If \dy=#hitrost
  730.             \dy=0
  731.             \dx=#hitrost
  732.           EndIf
  733.         EndIf
  734.       Case 7
  735.         If \dx=-#hitrost
  736.           \dx=0
  737.           \dy=#hitrost
  738.         Else
  739.           If \dy=-#hitrost
  740.             \dy=0
  741.             \dx=#hitrost
  742.           EndIf
  743.         EndIf
  744.       Case 8
  745.         If \dx=#hitrost
  746.           \dx=0
  747.           \dy=#hitrost
  748.         Else
  749.           If \dy=-#hitrost
  750.             \dy=0
  751.             \dx=-#hitrost
  752.           EndIf
  753.         EndIf
  754.       Case 9
  755.         If \dx=#hitrost
  756.           \dx=0
  757.           \dy=-#hitrost
  758.         Else
  759.           If \dy=#hitrost
  760.             \dy=0
  761.             \dx=-#hitrost
  762.           EndIf
  763.         EndIf
  764.       Case 10
  765.         If \dx=-#hitrost
  766.           \dx=#hitrost
  767.           If Snd=True Then PlaySFX{2,4}
  768.         EndIf
  769.       Case 11
  770.         If \dy=-#hitrost
  771.           \dy=#hitrost
  772.           If Snd=True Then PlaySFX{2,4}
  773.         EndIf
  774.       Case 12
  775.         If \dx=#hitrost
  776.           \dx=-#hitrost
  777.           If Snd=True Then PlaySFX{2,4}
  778.         EndIf
  779.       Case 13
  780.         If \dy=#hitrost
  781.           \dy=-#hitrost
  782.           If Snd=True Then PlaySFX{2,4}
  783.         EndIf
  784.       Case 14
  785.         If NOT (\barva=1 OR \barva=5)
  786.           \dx=-\dx
  787.           If Snd=True Then PlaySFX{2,4}
  788.         EndIf
  789.       Case 15
  790.         If NOT (\barva=1 OR \barva=5)
  791.           \dy=-\dy
  792.           If Snd=True Then PlaySFX{2,4}
  793.         EndIf
  794.       Case 16
  795.         If NOT (\barva=2 OR \barva=5)
  796.           \dx=-\dx
  797.           If Snd=True Then PlaySFX{2,4}
  798.         EndIf
  799.       Case 17
  800.         If NOT (\barva=2 OR \barva=5)
  801.           \dy=-\dy
  802.           If Snd=True Then PlaySFX{2,4}
  803.         EndIf
  804.       Case 18
  805.         If NOT (\barva=3 OR \barva=5)
  806.           \dx=-\dx
  807.           If Snd=True Then PlaySFX{2,4}
  808.         EndIf
  809.       Case 19
  810.         If NOT (\barva=3 OR \barva=5)
  811.           \dy=-\dy
  812.           If Snd=True Then PlaySFX{2,4}
  813.         EndIf
  814.       Case 20
  815.         If NOT (\barva=4 OR \barva=5)
  816.           \dx=-\dx
  817.           If Snd=True Then PlaySFX{2,4}
  818.         EndIf
  819.       Case 21
  820.         If NOT (\barva=4 OR \barva=5)
  821.           \dy=-\dy
  822.           If Snd=True Then PlaySFX{2,4}
  823.         EndIf
  824.       Case 22
  825.         If \barva<5
  826.           \barva=1
  827.         EndIf
  828.         If Snd=True Then PlaySFX{3,8}
  829.       Case 23
  830.         If \barva<5
  831.           \barva=1
  832.         EndIf
  833.         If Snd=True Then PlaySFX{3,8}
  834.       Case 24
  835.         If \barva<5
  836.           \barva=2
  837.         EndIf
  838.         If Snd=True Then PlaySFX{3,8}
  839.       Case 25
  840.         If \barva<5
  841.           \barva=2
  842.         EndIf
  843.         If Snd=True Then PlaySFX{3,8}
  844.       Case 26
  845.         If \barva<5
  846.           \barva=3
  847.         EndIf
  848.         If Snd=True Then PlaySFX{3,8}
  849.       Case 27
  850.         If \barva<5
  851.           \barva=3
  852.         EndIf
  853.         If Snd=True Then PlaySFX{3,8}
  854.       Case 28
  855.         If \barva<5
  856.           \barva=4
  857.         EndIf
  858.         If Snd=True Then PlaySFX{3,8}
  859.       Case 29
  860.         If \barva<5
  861.           \barva=4
  862.         EndIf
  863.         If Snd=True Then PlaySFX{3,8}
  864.     End Select
  865.   EndIf
  866.   If element(elx,ely)\tip>9 AND element(elx,ely)\tip<30
  867.     element(elx,ely)\draw=1
  868.   EndIf
  869.   If element(elx,ely)\tip=30
  870.     If \x MOD 32=1 OR \x MOD 32=21 OR (\y-16) MOD 32=1 OR (\y-16) MOD 32=21
  871.        If teleport(3)=0
  872.          \teleport=1
  873.          teleport(3)=1
  874.          If Snd=True Then PlaySFX{4,8}
  875.        Else
  876.          teleport(3)=0
  877.        EndIf
  878.     EndIf
  879.   EndIf
  880.  
  881.   Return
  882.  
  883.  
  884. .zoga_cev:
  885.  
  886.   USEPATH zoga(i)
  887.   ;preverimo, ce se je zaletela
  888.   If \x<0 OR \x>319-#premer
  889.     \dx=-\dx    ;spremenimo smer
  890.     \x=\x+2*\dx ;in popravimo polozaj
  891.   EndIf
  892.  
  893.   ;ali bo padla v revolver
  894.   If \x MOD #vel=#sredina AND element(\x/#vel+1,1)\a=0 AND element(\x/#vel+1,1)\rot=0
  895.     element(\x/#vel+1,1)\a=\barva ;revolver se napolni
  896.     element(\x/#vel+1,1)\draw=2
  897.     \obstoj=0 ;zogice ni vec
  898.     cev=0 ;cev je prazna
  899.     If Snd=True Then PlaySFX{0,1}
  900.   EndIf
  901.  
  902.   Return
  903.  
  904.  
  905. .zoga_trk:
  906.  
  907.   USEPATH zoga(i)
  908.   For j=i+1 To #maxzog
  909.     If zoga(j)\obstoj=1 AND (i>j OR j>i)
  910.       If \dx=-zoga(j)\dx OR \dy=-zoga(j)\dy       ;trk na ravnem
  911.         If RectsHit(\x,\y,10,10,zoga(j)\x,zoga(j)\y,10,10)=-1
  912.           \dx=-\dx : \dy=-\dy       ;spremeni smer
  913.           \x=\x+\dx : \y=\y+\dy ;popravi pozicijo
  914.           zoga(j)\dx=-zoga(j)\dx    ;tudi drugi zogi se smer spremeni
  915.           zoga(j)\dy=-zoga(j)\dy
  916.           zoga(j)\y=zoga(j)\y+zoga(j)\dy
  917.           zoga(j)\x=zoga(j)\x+zoga(j)\dx
  918.           If Snd=True Then PlaySFX{2,4}
  919.         EndIf
  920.       Else                                        ;trk v ovinku
  921.         If RectsHit(\x+2,\y+2,6,6,zoga(j)\x+2,zoga(j)\y+2,6,6)=-1
  922.           \dx=-\dx : \dy=-\dy       ;spremeni smer
  923.           \x=\x+\dx : \y=\y+\dy ;popravi pozicijo
  924.           zoga(j)\dx=-zoga(j)\dx    ;tudi drugi zogi se smer spremeni
  925.           zoga(j)\dy=-zoga(j)\dy
  926.           zoga(j)\y=zoga(j)\y+zoga(j)\dy
  927.           zoga(j)\x=zoga(j)\x+zoga(j)\dx
  928.           If Snd=True Then PlaySFX{2,4}
  929.         EndIf
  930.       EndIf
  931.     EndIf
  932.   Next j
  933.  
  934.   Return
  935.  
  936.  
  937. .zoga_tel
  938.  
  939.   USEPATH zoga(i)
  940.  
  941.   If \dy=-#hitrost AND element(\x/32+1,(\y-16)/32+1)\tip=30
  942.     If teleport(3)=1
  943.       \dy=-dy
  944.       \y=\y+2*\dy
  945.       If Snd=True Then PlaySFX{2,4}
  946.     EndIf
  947.   EndIf
  948.  
  949.   If \dx=#hitrost AND element((\x+9)/32+1,\y/32+1)\tip=30
  950.     If teleport(3)=1
  951.       \dx=-\dx
  952.       \x=\x+2*\dx
  953.       If Snd=True Then PlaySFX{2,4}
  954.     EndIf
  955.   EndIf
  956.  
  957.   If \dy=#hitrost AND element(\x/32+1,(\y-7)/32+1)\tip=30
  958.     If teleport(3)=1
  959.       \dy=-\dy
  960.       \y=\y-2*\dy
  961.       If Snd=True Then PlaySFX{2,4}
  962.     EndIf
  963.   EndIf
  964.  
  965.   If \dx=-#hitrost AND element(\x/32+1,\y/32+1)\tip=30
  966.     If teleport(3)=1
  967.       \dx=-\dx
  968.       \x=\x+2*\dx
  969.       If Snd=True Then PlaySFX{2,4}
  970.     EndIf
  971.   EndIf
  972.  
  973.   Return
  974.  
  975.  
  976. .zoga_rev:
  977.  
  978.   USEPATH zoga (i)
  979.   ;ce gre gor
  980.   If \dy=-#hitrost
  981.     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
  982.  
  983.       ;v revolverju je prostor in se ne vrti
  984.       If element(\x/32+1,(\y-16)/32+1)\c=0 AND element(\x/32+1,(\y-16)/32+1)\rot=0
  985.         element(\x/32+1,(\y-16)/32+1)\c=\barva ;zoga ga zasede
  986.         element(\x/32+1,(\y-16)/32+1)\draw=2
  987.         cas=#odmor                              ;ne smemo operirati
  988.         \obstoj=0                              ;sama pa izgine
  989.         If Snd=True Then PlaySFX{0,1}
  990.       Else                                     ;ali pa ga ni
  991.         \dy=-\dy                               ;zogica se odbije
  992.         \y=\y+2*\dy                            ;in spremeni polozaj
  993.         If Snd=True Then PlaySFX{2,4}
  994.       EndIf
  995.  
  996.     EndIf
  997.  
  998.   EndIf
  999.  
  1000.   ;ce gre desno
  1001.   If \dx=#hitrost
  1002.     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
  1003.  
  1004.       ;v revolverju je prostor
  1005.       If element((\x+9)/32+1,\y/32+1)\d=0 AND element((\x+9)/32+1,\y/32+1)\rot=0
  1006.         element((\x+9)/32+1,\y/32+1)\d=\barva  ;zoga ga zasede
  1007.         element((\x+9)/32+1,\y/32+1)\draw=2
  1008.         cas=#odmor                              ;ne smemo operirati
  1009.         \obstoj=0                              ;sama pa izgine
  1010.         If Snd=True Then PlaySFX{0,1}
  1011.       Else                                     ;ali pa ga ni
  1012.         \dx=-\dx                               ;zogica se odbije
  1013.         \x=\x+2*\dx                            ;in spremeni polozaj
  1014.         If Snd=True Then PlaySFX{2,4}
  1015.       EndIf
  1016.  
  1017.     EndIf
  1018.  
  1019.   EndIf
  1020.  
  1021.   ;ce gre dol
  1022.   If \dy=#hitrost
  1023.     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
  1024.  
  1025.       ;v revolverju je prostor
  1026.       If element(\x/32+1,(\y-7)/32+1)\a=0 AND element(\x/32+1,(\y-7)/32+1)\rot=0
  1027.         element(\x/32+1,(\y-7)/32+1)\a=\barva  ;zoga ga zasede
  1028.         element(\x/32+1,(\y-7)/32+1)\draw=2
  1029.         cas=#odmor                              ;ne smemo operirati
  1030.         \obstoj=0                              ;sama pa izgine
  1031.         If Snd=True Then PlaySFX{0,1}
  1032.       Else                                     ;ali pa ga ni
  1033.         \dy=-\dy                               ;zogica se odbije
  1034.         \y=\y+2*\dy                            ;in spremeni polozaj
  1035.         If Snd=True Then PlaySFX{2,4}
  1036.       EndIf
  1037.  
  1038.     EndIf
  1039.  
  1040.   EndIf
  1041.  
  1042.   ;ce gre levo
  1043.   If \dx=-#hitrost
  1044.     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
  1045.  
  1046.       ;v revolverju je prostor
  1047.       If element(\x/32+1,\y/32+1)\b=0 AND element(\x/32+1,\y/32+1)\rot=0
  1048.         element(\x/32+1,\y/32+1)\b=\barva      ;zoga ga zasede
  1049.         element(\x/32+1,\y/32+1)\draw=2
  1050.         cas=#odmor                              ;ne smemo operirati
  1051.         \obstoj=0                              ;sama pa izgine
  1052.         If Snd=True Then PlaySFX{0,1}
  1053.       Else                                     ;ali pa ga ni
  1054.         \dx=-\dx                               ;zogica se odbije
  1055.         \x=\x+2*\dx                            ;in spremeni polozaj
  1056.         If Snd=True Then PlaySFX{2,4}
  1057.       EndIf
  1058.  
  1059.     EndIf
  1060.  
  1061.   EndIf
  1062.  
  1063.   Return
  1064.  
  1065.  
  1066. .cev:
  1067.  
  1068.   USEPATH zoga(i)
  1069.   If cev=0 ;ce ni nic v cevi
  1070.     i=0
  1071.     ;poiscimo nezasedeno zogico
  1072.     Repeat
  1073.       i=i+1
  1074.     Until \obstoj=0
  1075.     ;naredimo novo zogico
  1076.     \x=#zacx,#zacy,sledi,1,-#hitrost,0,0
  1077.     Gosub sledi     ;napovemo naslednjo
  1078.     changen=2       ;pano se je spremenil
  1079.     vcevi=314      ;zogica je sel prisla
  1080.     const=konst    ;kako hitro bo tekel cas zogice
  1081.     Box 5,2,314,3,1 : Use BitMap 1-bit
  1082.     Box 5,2,314,3,1 : Use BitMap bit
  1083.     cev=1 ;cev je zdaj polna
  1084.   EndIf
  1085.  
  1086.   Return
  1087.  
  1088.  
  1089. .kriz:
  1090.  
  1091.   If krizc=1
  1092.     For i=1 To 4
  1093.       kriz(i)=Rnd(4)+1
  1094.     Next i
  1095.     bonus=bonusmax
  1096.     If bonus=0
  1097.       t=1
  1098.     Else
  1099.       t=5
  1100.     EndIf
  1101.     Box 201,253,236,254,t : Use BitMap 1-bit
  1102.     Box 201,253,236,254,t : Use BitMap bit
  1103.     changec=2
  1104.   EndIf
  1105.  
  1106.   Return
  1107.  
  1108.  
  1109. .klik_vrti:
  1110.  
  1111.   USEPATH element(x,y)
  1112.   If Joyb(0)=2 AND \tip=3
  1113.     t=\a:\a=\d:\d=\c:\c=\b:\b=t ;zavrtimo
  1114.     \rot=3
  1115.     cas=#odmor                  ;nastavimo premor
  1116.     If Snd=True Then PlaySFX{1,2}    ;pa se zvok
  1117.   EndIf
  1118.   If Joyb(0)=2 AND \tip=4
  1119.     t=\a:\a=\b:\b=\c:\c=\d:\d=t
  1120.     \rot=3
  1121.     cas=#odmor
  1122.     If Snd=True Then PlaySFX{1,2}
  1123.   EndIf
  1124.  
  1125.   Return
  1126.  
  1127.  
  1128. .klik_zoga:
  1129.  
  1130.   USEPATH element(x,y)
  1131.   If Joyb(0)=1 AND (\tip=3 OR \tip=4 OR \tip>30)
  1132.  
  1133.     ;zogica je zgoraj
  1134.     If \a>0 AND RectsHit(x*32-21,y*32-15,10,10,misx,misy,1,1)=-1
  1135.       If y>1 AND element(x,y-1)\c=0  ;ce ima prostor
  1136.         ok=1                         ;kontrolna spremenljivka
  1137.         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
  1138.           element(x,y-1)\c=\a        ;ga napolnimo
  1139.           element(x,y-1)\draw=2
  1140.         Else                         ;kot kaze je nekaksna cev
  1141.           i=0
  1142.           Repeat                     ;poiscimo prazno zogico
  1143.             i=i+1
  1144.           Until zoga(i)\obstoj=0
  1145.           For j=1 To #maxzog
  1146.             If zoga(j)\obstoj=1 AND (i>j OR j>i) ;ali trci z drugo zogo
  1147.               ok=ok+RectsHit(zoga(j)\x,zoga(j)\y,10,10,x*32-21,y*32-28,10,10)
  1148.             EndIf
  1149.           Next j
  1150.           If ok=1                    ;ce trka ni bilo
  1151.             zoga(i)\x=x*32-21,y*32-26,\a,1,0,-#hitrost ;naredimo novo
  1152.           EndIf
  1153.         EndIf
  1154.         If ok=1
  1155.           \a=0:cas=#odmor               ;na koncu se je znebimo
  1156.           \draw=2
  1157.           If Snd=True Then PlaySFX{0,1}
  1158.         EndIf
  1159.       EndIf
  1160.     EndIf
  1161.  
  1162.     ;zogica je desno
  1163.     If \b>0 AND RectsHit(x*32-11,y*32-5,10,10,misx,misy,1,1)=-1
  1164.       If x<10 AND element(x+1,y)\d=0 ;ce ima prostor
  1165.         ok=1                         ;kontrolna spremenljivka
  1166.         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
  1167.           element(x+1,y)\d=\b        ;ga napolnimo
  1168.           element(x+1,y)\draw=2
  1169.         Else                         ;kot kaze je nekaksna cev
  1170.           i=0
  1171.           Repeat                     ;poiscimo prazno zogico
  1172.             i=i+1
  1173.           Until zoga(i)\obstoj=0
  1174.           For j=1 To #maxzog
  1175.             If zoga(j)\obstoj=1 AND (i>j OR j>i) ;ali trci z drugo zogo
  1176.               ok=ok+RectsHit(zoga(j)\x,zoga(j)\y,10,10,x*32+2,y*32-5,10,10)
  1177.             EndIf
  1178.           Next j
  1179.           If ok=1                  ;ce trka ni bilo
  1180.             zoga(i)\x=x*32,y*32-5,\b,1,#hitrost,0     ;naredimo novo
  1181.           EndIf
  1182.         EndIf
  1183.         If ok=1
  1184.           \b=0:cas=#odmor               ;na koncu se je znebimo
  1185.           \draw=2
  1186.           If Snd=True Then PlaySFX{0,1}
  1187.         EndIf
  1188.       EndIf
  1189.     EndIf
  1190.  
  1191.     ;zogica je spodaj
  1192.     If \c>0 AND RectsHit(x*32-21,y*32+5,10,10,misx,misy,1,1)=-1
  1193.       If y<7 AND element (x,y+1)\a=0 ;ce ima prostor
  1194.         ok=1                         ;kontrolna spremenljivka
  1195.         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
  1196.           element(x,y+1)\a=\c        ;ga napolnimo
  1197.           element(x,y+1)\draw=2
  1198.         Else                         ;kot kaze je nekaksna cev
  1199.           i=0
  1200.           Repeat                     ;poiscimo prazno zogico
  1201.             i=i+1
  1202.           Until zoga(i)\obstoj=0
  1203.           For j=1 To #maxzog
  1204.             If zoga(j)\obstoj=1 AND (i>j OR j>i) ;ali trci z drugo zogo
  1205.               ok=ok+RectsHit(zoga(j)\x,zoga(j)\y,10,10,x*32-21,y*32+18,10,10)
  1206.             EndIf
  1207.           Next j
  1208.           If ok=1                  ;ce trka ni bilo
  1209.             zoga(i)\x=x*32-21,y*32+16,\c,1,0,#hitrost ;naredimo novo
  1210.           EndIf
  1211.         EndIf
  1212.         If ok=1
  1213.           \c=0:cas=#odmor               ;na koncu se je znebimo
  1214.           \draw=2
  1215.           If Snd=True Then PlaySFX{0,1}
  1216.         EndIf
  1217.       EndIf
  1218.     EndIf
  1219.  
  1220.     ;zogica je levo
  1221.     If \d>0 AND RectsHit(x*32-31,y*32-5,10,10,misx,misy,1,1)=-1
  1222.       If x>1 AND element (x-1,y)\b=0 ;ce ima prostor
  1223.         ok=1                         ;kontrolna spremenljivka
  1224.         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
  1225.           element(x-1,y)\b=\d        ;ga napolnimo
  1226.           element(x-1,y)\draw=2
  1227.         Else                         ;kot kaze je nekaksna cev
  1228.           i=0
  1229.           Repeat                     ;poiscimo prazno zogico
  1230.             i=i+1
  1231.           Until zoga(i)\obstoj=0
  1232.           For j=1 To #maxzog
  1233.             If zoga(j)\obstoj=1 AND (i>j OR j>i) ;ali trci z drugo zogo
  1234.               ok=ok+RectsHit(zoga(j)\x,zoga(j)\y,10,10,x*32-44,y*32-5,10,10)
  1235.             EndIf
  1236.           Next j
  1237.           If ok=1                  ;ce trka ni bilo
  1238.             zoga(i)\x=x*32-42,y*32-5,\d,1,-#hitrost,0 ;naredimo novo
  1239.           EndIf
  1240.         EndIf
  1241.         If ok=1
  1242.           \d=0:cas=#odmor               ;na koncu se je znebimo
  1243.           \draw=2
  1244.           If Snd=True Then PlaySFX{0,1}
  1245.         EndIf
  1246.       EndIf
  1247.     EndIf
  1248.  
  1249.   EndIf
  1250.  
  1251.   Return
  1252.  
  1253.  
  1254. .avto:
  1255.  
  1256.   USEPATH element(i,j)
  1257.   If ritem<1                    ;avto revolverji
  1258.     ritem=50
  1259.     For i=1 To 10
  1260.       For j=1 To 7
  1261.         If \tip=31
  1262.           t=\a:\a=\d:\d=\c:\c=\b:\b=t
  1263.           \rot=3
  1264.           If Snd=True Then PlaySFX{1,2}
  1265.         EndIf
  1266.         If \tip=32
  1267.           t=\a:\a=\b:\b=\c:\c=\d:\d=t
  1268.           \rot=3
  1269.           If Snd=True Then PlaySFX{1,2}
  1270.         EndIf
  1271.       Next j
  1272.     Next i
  1273.   EndIf
  1274.  
  1275.   Return
  1276.  
  1277.  
  1278. .revolverji:
  1279.  
  1280.   USEPATH element(x,y)
  1281.   For x=1 To #sirina
  1282.     For y=1 To #visina
  1283.       If \tip=3 OR \tip=4 OR \tip=31 OR \tip=32
  1284.         If \rot=0          ;ce se revolver ne vrti vec
  1285.           If Pro=False OR \ok=0
  1286.             If kriz(1)=0 ;ce ni predpisane kombinacije
  1287.               If \a>0 AND \b>0 AND \c>0 AND \d>0 ;ce so vse luknje polne
  1288.                 If \a<5        ;poiscimo barvo
  1289.                   a=\a
  1290.                 Else
  1291.                   If \b<5
  1292.                     a=\b
  1293.                   Else
  1294.                     If \c<5
  1295.                       a=\c
  1296.                     Else
  1297.                       a=\d
  1298.                     EndIf
  1299.                   EndIf
  1300.                 EndIf
  1301.                 If (\a=a OR \a=5) AND (\b=a OR \b=5) AND (\c=a OR \c=5) AND (\d=a OR \d=5)
  1302.                   If order(1)=0
  1303.                     If \ok=0
  1304.                       whleft=whleft-1 ;en manj do konca
  1305.                       changewl=2
  1306.                     EndIf
  1307.                     \a=0,0,0,0,1,2 ;ce ni semaforja jih enostavno zbrisemo
  1308.                     If Snd=True Then PlaySFX{5,15}
  1309.                   Else
  1310.                     If order(1)=a OR a=5
  1311.                       If \ok=0
  1312.                         whleft=whleft-1 ;en manj do konca
  1313.                         changewl=2
  1314.                       EndIf
  1315.                       \a=0,0,0,0,1,2 ;ce se s semaforjem ujema, jih zbrisemo
  1316.                       For i=1 To 4
  1317.                         order(i)=order(i+1) ;semafor premaknemo
  1318.                       Next i
  1319.                       order(5)=0; zadnjega spraznimo
  1320.                       changeo=2
  1321.                       If Snd=True Then PlaySFX{5,15}
  1322.                     EndIf
  1323.                   EndIf
  1324.                 EndIf
  1325.               EndIf
  1326.             Else ; ce pa kombinacija je
  1327.               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
  1328.                 If \ok=0
  1329.                   whleft=whleft-1  ;en manj do konca
  1330.                   changewl=2
  1331.                 EndIf
  1332.                 \a=0,0,0,0,1,2        ;zbrisemo revolver
  1333.                 If Snd=True Then PlaySFX{5,15}
  1334.                 For i=1 To 4
  1335.                   kriz(i)=0           ;spraznimo kriz
  1336.                 Next i
  1337.                 krizc=krizcas*50
  1338.                 igra=igra+bonus       ;dodamo bonus cas
  1339.                 bonus=2
  1340.                 changec=2             ;ukazemo spremembo
  1341.                 Box 201,253,236,254,1 : Use BitMap 1-bit ; pocistimo
  1342.                 Box 201,253,236,254,1 : Use BitMap bit   ; merilec
  1343.               EndIf
  1344.             EndIf
  1345.           EndIf
  1346.         EndIf
  1347.         If \draw>0
  1348.           \draw=\draw-1
  1349.           Blit 10,(x-1)*32,y*32-16
  1350.           If \a>0
  1351.             Blit \a,x*32-21,y*32-15 ;nato narisemo zogice v njih
  1352.           EndIf
  1353.           If \b>0
  1354.             Blit \b,x*32-11,y*32-5
  1355.           EndIf
  1356.           If \c>0
  1357.             Blit \c,x*32-21,y*32+5
  1358.           EndIf
  1359.           If \d>0
  1360.             Blit \d,x*32-31,y*32-5
  1361.           EndIf
  1362.           If \ok=1
  1363.             Blit 16,x*32-18,y*32-2                  ;prizgemo zeleno lucko
  1364.           EndIf
  1365.         EndIf
  1366.         If \ok=0 Then done=0
  1367.       EndIf
  1368.     Next y
  1369.   Next x
  1370.  
  1371.   For x=1 To 10
  1372.     For y=1 To 7
  1373.       If \rot=1
  1374.         \draw=2
  1375.         \rot=0
  1376.         If \tip=3 OR \tip=31
  1377.           Blit 69,(x-1)*32,(y-1)*32+16
  1378.           If \a>0
  1379.             Blit \a,x*32-25,y*32-14
  1380.           EndIf
  1381.           If \b>0
  1382.             Blit \b,x*32-12,y*32-9
  1383.           EndIf
  1384.           If \c>0
  1385.             Blit \c,x*32-17,y*32+4
  1386.           EndIf
  1387.           If \d>0
  1388.             Blit \d,x*32-30,y*32-1
  1389.           EndIf
  1390.         EndIf
  1391.         If \tip=4 OR \tip=32
  1392.           Blit 67,(x-1)*32,(y-1)*32+16
  1393.           If \d>0
  1394.             Blit \d,x*32-30,y*32-9
  1395.           EndIf
  1396.           If \a>0
  1397.             Blit \a,x*32-17,y*32-14
  1398.           EndIf
  1399.           If \b>0
  1400.             Blit \b,x*32-12,y*32-1
  1401.           EndIf
  1402.           If \c>0
  1403.             Blit \c,x*32-25,y*32+4
  1404.           EndIf
  1405.         EndIf
  1406.         If \ok=1
  1407.           Blit 16,x*32-18,y*32-2
  1408.         EndIf
  1409.       EndIf
  1410.       If \rot=2
  1411.         \rot=1
  1412.         Blit 68,(x-1)*32,(y-1)*32+16
  1413.         If \tip=3 OR \tip=31
  1414.           If \b>0
  1415.             Blit \b,x*32-14,y*32-12
  1416.           EndIf
  1417.           If \c>0
  1418.             Blit \c,x*32-14,y*32+2
  1419.           EndIf
  1420.           If \d>0
  1421.             Blit \d,x*32-28,y*32+2
  1422.           EndIf
  1423.           If \a>0
  1424.             Blit \a,x*32-28,y*32-12
  1425.           EndIf
  1426.         EndIf
  1427.         If \tip=4 OR \tip=32
  1428.           If \a>0
  1429.             Blit \a,x*32-14,y*32-12
  1430.           EndIf
  1431.           If \b>0
  1432.             Blit \b,x*32-14,y*32+2
  1433.           EndIf
  1434.           If \c>0
  1435.             Blit \c,x*32-28,y*32+2
  1436.           EndIf
  1437.           If \d>0
  1438.             Blit \d,x*32-28,y*32-12
  1439.           EndIf
  1440.         EndIf
  1441.         If \ok=1
  1442.           Blit 16,x*32-18,y*32-2
  1443.         EndIf
  1444.       EndIf
  1445.       If \rot=3
  1446.         \rot=2
  1447.         If \tip=3 OR \tip=31
  1448.           Blit 67,(x-1)*32,(y-1)*32+16
  1449.           If \a>0
  1450.             Blit \a,x*32-30,y*32-9
  1451.           EndIf
  1452.           If \b>0
  1453.             Blit \b,x*32-17,y*32-14
  1454.           EndIf
  1455.           If \c>0
  1456.             Blit \c,x*32-12,y*32-1
  1457.           EndIf
  1458.           If \d>0
  1459.             Blit \d,x*32-25,y*32+4
  1460.           EndIf
  1461.         EndIf
  1462.         If \tip=4 OR \tip=32
  1463.           Blit 69,(x-1)*32,(y-1)*32+16
  1464.           If \d>0
  1465.             Blit \d,x*32-25,y*32-14
  1466.           EndIf
  1467.           If \a>0
  1468.             Blit \a,x*32-12,y*32-9
  1469.           EndIf
  1470.           If \b>0
  1471.             Blit \b,x*32-17,y*32+4
  1472.           EndIf
  1473.           If \c>0
  1474.             Blit \c,x*32-30,y*32-1
  1475.           EndIf
  1476.         EndIf
  1477.         If \ok=1
  1478.           Blit 16,x*32-18,y*32-2
  1479.         EndIf
  1480.       EndIf
  1481.     Next y
  1482.   Next x
  1483.  
  1484.  
  1485.   Return
  1486.  
  1487.  
  1488. .neosnovni:
  1489.  
  1490.   USEPATH element(x,y)
  1491.   For x=1 To #sirina
  1492.     For y=1 To #visina
  1493.       If \draw=1 AND \tip>9 AND \tip<30
  1494.         If \tip<14
  1495.           Blit \tip+25,x*32-22,y*32-6
  1496.         Else
  1497.           Blit (element(x,y)\tip)/2+32,x*32-22,y*32-6
  1498.         EndIf
  1499.         \draw=0
  1500.       EndIf
  1501.     Next y
  1502.   Next x
  1503.  
  1504.   Return
  1505.  
  1506.  
  1507. .pano:
  1508.  
  1509.   If igra MOD 50=0 OR igra MOD 50=1
  1510.     Format "##0"
  1511.     Locate 4,30.5
  1512.     Print Int(igra/50)      ;cas
  1513.   EndIf
  1514.   If changewl>0             ;preostali revolverji
  1515.     changewl=changewl-1
  1516.     Format "#0"
  1517.     Locate 11,30.5
  1518.     Print whleft
  1519.   EndIf
  1520.   If changen>0
  1521.     changen=changen-1
  1522.     Blit Int(sledi),306,243 ;naslednja zoga
  1523.   EndIf
  1524.   If changeo>0
  1525.     changeo=changeo-1
  1526.     For i=1 To 5
  1527.       Blit order(i),133+i*11,243 ;semafor
  1528.     Next i
  1529.   EndIf
  1530.   If changec>0
  1531.     changec=changec-1
  1532.     If kriz(1)=0
  1533.       Blit 18,239,241
  1534.     Else
  1535.       Blit kriz(1)+18,242,242
  1536.       Blit kriz(2)+22,248,244
  1537.       Blit kriz(3)+26,242,249
  1538.       Blit kriz(4)+30,240,244
  1539.     EndIf
  1540.   EndIf
  1541.   const=const-1
  1542.   If const=0            ;ce se cas premakne
  1543.     const=konst         ;popravimo premor
  1544.     vcevi=vcevi-1       ;crtica se podaljsa
  1545.   EndIf
  1546.   Box vcevi,2,Min(313,vcevi+2),3,5   ;narisimo crtico
  1547.   If bonus>0
  1548.     Box 235-Int((bonusmax-bonus)/bonusmax*35),253,Min(236,237-Int((bonusmax-bonus)/bonusmax*35)),254,1 ;narisimo bonus
  1549.   EndIf
  1550.  
  1551.   ;poskrbimo le se za risanje zogic
  1552.   For i=1 To #maxzog
  1553.     If zoga(i)\obstoj=1
  1554.       If zoga(i)\teleport=0
  1555.         BBlit bit,zoga(i)\barva,zoga(i)\x,zoga(i)\y
  1556.       Else
  1557.         xkoor=(teleport(0)-1) MOD 10
  1558.         ykoor=Int((teleport(0)-1) / 10)
  1559.         BBlit bit,51,xkoor*32+14,ykoor*32+30
  1560.         BBlit bit,51,(xkoor+teleport(1))*32+14,(ykoor+teleport(2))*32+30
  1561.         Select zoga(i)\teleport
  1562.           Case 1
  1563.             BBlit bit,51+zoga(i)\barva,zoga(i)\x,zoga(i)\y
  1564.           Case 2
  1565.             BBlit bit,56+zoga(i)\barva,zoga(i)\x,zoga(i)\y
  1566.           Case 3
  1567.             BBlit bit,61+zoga(i)\barva,zoga(i)\x,zoga(i)\y
  1568.           Case 4
  1569.             elx.b=Int(zoga(i)\x/#vel)+1
  1570.             ely.b=Int((zoga(i)\y-16)/#vel)+1
  1571.             If elx + (ely-1)*10=teleport(0)
  1572.               zoga(i)\x=zoga(i)\x+teleport(1)*32+zoga(i)\dx*20
  1573.               zoga(i)\y=zoga(i)\y+teleport(2)*32+zoga(i)\dy*20
  1574.             Else
  1575.               zoga(i)\x=zoga(i)\x-teleport(1)*32+zoga(i)\dx*20
  1576.               zoga(i)\y=zoga(i)\y-teleport(2)*32+zoga(i)\dy*20
  1577.             EndIf
  1578.           Case 5
  1579.             BBlit bit,61+zoga(i)\barva,zoga(i)\x,zoga(i)\y
  1580.           Case 6
  1581.             BBlit bit,56+zoga(i)\barva,zoga(i)\x,zoga(i)\y
  1582.           Case 7
  1583.             BBlit bit,51+zoga(i)\barva,zoga(i)\x,zoga(i)\y
  1584.           Case 8
  1585.             BBlit bit,zoga(i)\barva,zoga(i)\x,zoga(i)\y
  1586.         End Select
  1587.         zoga(i)\teleport=(zoga(i)\teleport+1) MOD 9
  1588.       EndIf
  1589.     EndIf
  1590.   Next i
  1591.  
  1592.   Return
  1593.  
  1594.  
  1595. .sledi:
  1596.  
  1597.   If Rnd(50)<joker
  1598.     sledi=5
  1599.   Else
  1600.     sledi=Int(Rnd(4))+1
  1601.   EndIf
  1602.  
  1603.   Return
  1604.  
  1605.  
  1606. .funkcije:
  1607.  
  1608.   Function Num{a$}     ; vrne stevilko iz crke passworda
  1609.     a=Asc("z")-Asc(a$)
  1610.     Function Return a
  1611.   End Function
  1612.  
  1613.   Function$ Ltr{a}     ; vrne crko za password iz stevilke
  1614.     a$=Chr$(Asc("z")-a)
  1615.     Function Return a$
  1616.   End Function
  1617.  
  1618.   Function$ pswd{lev}  ; izracunajmo password
  1619.     SHARED lvlnm$(), lvldat(),lvlmap() ;poberemo potr. sprem.
  1620.     fime=Len(lvlnm$(lev))         ; izracunamo vrednosti
  1621.     fcas=lvldat(lev,0)
  1622.     fsum=0
  1623.     For fi=0 To 9
  1624.       For fj=0 To 6
  1625.         fsum=fsum+lvlmap(fi,fj,lev)
  1626.       Next fj
  1627.     Next fi
  1628.     fkon=lvldat(lev,1)    ;sledi se dolocitev passworda
  1629.     a$=Ltr{fime/2}+Ltr{Int(lev/10)}+Ltr{fcas/100}+Ltr{fsum/100}+Ltr{lev MOD 10}
  1630.     a$=a$+Ltr{(fsum/5) MOD 20}+Ltr{fkon}+Ltr{(fcas/5) MOD 20}+Ltr{fsum MOD 5}
  1631.     Function Return a$
  1632.   End Function
  1633.  
  1634.   Function.l Encode{s$}
  1635.     l=Len(s$)
  1636.     For i=1 To l
  1637.       code.l=code.l+Asc(Mid$(s$,l+1-i,1))*i
  1638.     Next i
  1639.     Function Return code
  1640.   End Function
  1641.  
  1642.   Function.l Control{a.l,b.l}
  1643.     code.l=Abs(a-b)*10+a+b
  1644.     Function Return code
  1645.   End Function
  1646.  
  1647.   Function$ ChangeName{name$}
  1648.     newname$=""
  1649.     For i.b=1 To Len(name$)
  1650.       newname$=newname$+Chr$(Asc(Mid$(name$,i,1))-100+i)
  1651.     Next i
  1652.     Function Return newname$
  1653.   End Function
  1654.  
  1655.  
  1656. .level_info:
  1657.  
  1658.   Use BitMap 0
  1659.   BitMapOutput 0
  1660.   ShowBitMap 0
  1661.  
  1662.   Cls
  1663.  
  1664.   StartMedModule 1
  1665.   SetMedMask 15
  1666.  
  1667.   slikanum=Int(stopnja/10)
  1668.  
  1669.   LoadPalette 1,slika$(slikanum)
  1670.   Use Palette 1
  1671.   LoadIFF slika$(slikanum),0
  1672.   VWait 25
  1673.   SemiFade{}
  1674.  
  1675. CNIF #ecs=0
  1676.   AGARGB 255,255,255,0
  1677.   AGAPalRGB 1,255,255,255,0
  1678. CELSE
  1679.   RGB 31,15,15,0
  1680.   PalRGB 1,31,15,15,0
  1681. CEND
  1682.   FNSOutput 0,True
  1683. CNIF #ecs=0
  1684.   FNSPrefs $1,255
  1685. CELSE
  1686.   FNSPrefs $1,31
  1687. CEND
  1688.  
  1689.   FNSPrint 0,160,8,"Next Level"
  1690.   Format "00"
  1691.   FNSPrint 0,160,48,"Level "+Str$(stopnja)
  1692.   FNSPrint 0,160,72,ime$
  1693.  
  1694.   FNSPrefs $8
  1695.   FNSPrint 0,160,104,"Time available:"
  1696.   FNSPrint 0,160,136,"Retries left:"
  1697.   If stopnja MOD 5=0
  1698.     FNSPrint 0,160,168,"Password:"
  1699.   EndIf
  1700.  
  1701.   FNSPrefs $0
  1702.   Format "##0"
  1703.   FNSPrint 0,170,104,Str$(Int(igra/50))
  1704.   Format "0"
  1705.   FNSPrint 0,170,136,Str$(retry)
  1706.   If stopnja MOD 5=0
  1707.     FNSPrint 0,170,168,pswd{stopnja}
  1708.   EndIf
  1709.  
  1710.   FNSPrefs $1
  1711.   FNSPrint 0,160,216,"Click mousebutton to start"
  1712.   FNSPrefs $8
  1713.   FNSPrint 0,312,248,"(ESC to quit)"
  1714.  
  1715.   FlushEvents                 ;pobrisimo dosedanje dogodke
  1716.   Repeat
  1717.     nwev.l=WaitEvent
  1718.     If nwev=$8                ;klik miske?
  1719.       Fade{}
  1720.       Cls
  1721.       Use Palette 0
  1722.       StopMed
  1723.       Return
  1724.     EndIf
  1725.   Until nwev=$400 AND Inkey$=Chr$(27)   ;ESC?
  1726.   Fade{}
  1727.   StopMed
  1728.   Goto the_end
  1729.  
  1730.  
  1731. .the_end:
  1732.  
  1733.   Use BitMap 1
  1734.   BitMapOutput 1
  1735.   ShowBitMap 1
  1736.  
  1737.   Cls
  1738.  
  1739.   LoadPalette 1,"gfx/end.iff"
  1740.   Use Palette 1
  1741.   LoadIFF "gfx/end.iff",1
  1742.  
  1743. CNIF #ecs=0
  1744.   AGARGB 255,255,255,0
  1745.   AGAPalRGB 1,255,255,255,0
  1746. CELSE
  1747.   RGB 31,15,15,0
  1748.   PalRGB 1,31,15,15,0
  1749. CEND
  1750.   FNSOutput 1,True
  1751. CNIF #ecs=0
  1752.   FNSPrefs $1,255
  1753. CELSE
  1754.   FNSPrefs $1,31
  1755. CEND
  1756.  
  1757.   FNSPrint 0,160,220,"You LOSE!"
  1758.  
  1759.   FlushEvents
  1760.   Repeat
  1761.     nwev.l=WaitEvent
  1762.     If nwev=$8
  1763.       Fade{}
  1764.       StartMedModule 0
  1765.       SetMedMask 15
  1766.       Goto menu
  1767.     EndIf
  1768.   Until False
  1769.  
  1770.  
  1771. .done:
  1772.  
  1773.   Use BitMap 1
  1774.   BitMapOutput 1
  1775.   ShowBitMap 1
  1776.  
  1777.   Cls
  1778.  
  1779.   LoadPalette 1,"gfx/out.iff"
  1780.   Use Palette 1
  1781.   LoadIFF "gfx/out.iff",1
  1782.  
  1783. CNIF #ecs=0
  1784.   AGARGB 255,255,255,0
  1785.   AGAPalRGB 1,255,255,255,0
  1786. CELSE
  1787.   RGB 31,15,15,0
  1788.   PalRGB 1,31,15,15,0
  1789. CEND
  1790.   FNSOutput 1,True
  1791. CNIF #ecs=0
  1792.   FNSPrefs $1,255
  1793. CELSE
  1794.   FNSPrefs $1,31
  1795. CEND
  1796.  
  1797.   FNSPrint 0,160,220,"You WON!"
  1798.  
  1799.   FlushEvents
  1800.   Repeat
  1801.     nwev.l=WaitEvent
  1802.     If nwev=$8
  1803.       Fade{}
  1804.       StartMedModule 0
  1805.       SetMedMask 15
  1806.       Goto menu
  1807.     EndIf
  1808.   Until False
  1809.  
  1810.  
  1811.  
  1812. .about:
  1813.  
  1814.   Use BitMap 0
  1815.   BitMapOutput 0
  1816.   ShowBitMap 0
  1817.  
  1818.   Cls
  1819.  
  1820.   LoadPalette 1,"gfx/about.iff"
  1821.   Use Palette 1
  1822.   LoadIFF "gfx/about.iff",0
  1823.  
  1824.   VWait 100
  1825.   SemiFade{}
  1826.  
  1827. CNIF #ecs=0
  1828.   AGARGB 255,255,255,0
  1829.   AGAPalRGB 1,255,255,255,0
  1830. CELSE
  1831.   RGB 31,15,15,0
  1832.   PalRGB 1,31,15,15,0
  1833. CEND
  1834.   FNSOutput 0,True
  1835. CNIF #ecs=0
  1836.   FNSPrefs $1,255
  1837. CELSE
  1838.   FNSPrefs $1,31
  1839. CEND
  1840.  
  1841.   FNSPrint 0,160,68,"BallMaster V1.2 (29.12.2000)"
  1842.   FNSPrint 0,160,84,"(c)1998-2000 Damir Arh"
  1843.  
  1844.   FNSPrint 0,160,142,"This version of the game"
  1845.   FNSPrint 0,160,158,"is released under the GPL licence."
  1846.   FNSPrint 0,160,182,"This program is free software under the"
  1847.   FNSPrint 0,160,198,"terms of the GNU General Public Licence."
  1848.  
  1849.   FlushEvents
  1850.   Repeat
  1851.     nwev.l=WaitEvent
  1852.     If nwev=$8
  1853.       Fade{}
  1854.       Goto menu
  1855.     EndIf
  1856.   Until False
  1857.                                                                                                                               
  1858.  
  1859. .options:
  1860.  
  1861.   Use BitMap 0
  1862.   BitMapOutput 0
  1863.   ShowBitMap 0
  1864.  
  1865.   Cls
  1866.  
  1867.   LoadPalette 1,"gfx/options.iff"
  1868.   Use Palette 1
  1869.   LoadIFF "gfx/options.iff",0
  1870.   VWait 25
  1871.   SemiFade{}
  1872.  
  1873.  
  1874. options_ch:
  1875.  
  1876.   LoadIFF "gfx/options.iff",0
  1877.  
  1878. CNIF #ecs=0
  1879.   AGARGB 255,255,255,0
  1880.   AGAPalRGB 1,255,255,255,0
  1881. CELSE
  1882.   RGB 31,15,15,0
  1883.   PalRGB 1,31,15,15,0
  1884. CEND
  1885.   FNSOutput 0,True
  1886. CNIF #ecs=0
  1887.   FNSPrefs $8,255
  1888.   WColour 255,0
  1889. CELSE
  1890.   FNSPrefs $8,31
  1891.   WColour 31,0
  1892. CEND
  1893.  
  1894.  
  1895.   FNSPrint 0,160,72,"SoundFX:"
  1896.   FNSPrint 0,160,96,"Music:"
  1897.   FNSPrint 0,160,120,"Profi mode:"
  1898.   FNSPrefs $1
  1899.   FNSPrint 0,160,200,"Quit options"
  1900.  
  1901.   Use BitMap 0
  1902.   Use Window 0
  1903.   WJam 0
  1904.   WLocate 176,72
  1905.   If Snd=True
  1906.     Print " On"
  1907.   Else
  1908.     Print "Off"
  1909.   EndIf
  1910.   WLocate 176,96
  1911.   If Mus=True
  1912.     Print " On"
  1913.   Else
  1914.     Print "Off"
  1915.   EndIf
  1916.   WLocate 176,120
  1917.   If Pro=True
  1918.     Print " On"
  1919.   Else
  1920.     Print "Off"
  1921.   EndIf
  1922.  
  1923.   FlushEvents
  1924.   Repeat
  1925.     nwev.l=WaitEvent
  1926.     If nwev=$8
  1927.       If RectsHit(WMouseX,WMouseY,1,1,104,72,96,8)
  1928.         If Snd=True
  1929.           Snd=False
  1930.         Else
  1931.           Snd=True
  1932.         EndIf
  1933.         Repeat
  1934.           nwev=WaitEvent
  1935.           If nwev=$8 Then Goto options_ch
  1936.         Until False
  1937.       EndIf
  1938.       If RectsHit(WMouseX,WMouseY,1,1,122,96,78,8)
  1939.         If Mus=True
  1940.           Mus=False
  1941.         Else
  1942.           Mus=True
  1943.         EndIf
  1944.         Repeat
  1945.           nwev=WaitEvent
  1946.           If nwev=$8 Then Goto options_ch
  1947.         Until False
  1948.       EndIf
  1949.       If RectsHit(WMouseX,WMouseY,1,1,88,120,112,8)
  1950.         If Pro=True
  1951.           Pro=False
  1952.         Else
  1953.           Pro=True
  1954.         EndIf
  1955.         Repeat
  1956.           nwev=WaitEvent
  1957.           If nwev=$8 Then Goto options_ch
  1958.         Until False
  1959.       EndIf
  1960.       If RectsHit(WMouseX,WMouseY,1,1,120,200,80,8)
  1961.         Fade{}
  1962.         Goto menu
  1963.       EndIf
  1964.     EndIf
  1965.   Until False
  1966.  
  1967.  
  1968.  
  1969. .password:
  1970.  
  1971.   Use BitMap 0
  1972.   BitMapOutput 0
  1973.   ShowBitMap 0
  1974.  
  1975.   Cls
  1976.  
  1977.   LoadPalette 1,"gfx/title.iff"
  1978.   Use Palette 1
  1979.   LoadIFF "gfx/title.iff",0
  1980.  
  1981.   VWait 25
  1982.   SemiFade{}
  1983.  
  1984. CNIF #ecs=0
  1985.   AGARGB 255,255,255,0
  1986.   AGAPalRGB 1,255,255,255,0
  1987. CELSE
  1988.   RGB 31,15,15,0
  1989.   PalRGB 1,31,15,15,0
  1990. CEND
  1991.   FNSOutput 0,True
  1992. CNIF #ecs=0
  1993.   FNSPrefs $1,255
  1994. CELSE
  1995.   FNSPrefs $1,31
  1996. CEND
  1997.  
  1998.  
  1999.   FNSPrint 0,160,116,"Enter password:"
  2000.  
  2001.   Use Window 0
  2002.   CNIF #ecs=0
  2003.     WColour 255,0
  2004.   CELSE
  2005.     WColour 31,0
  2006.   CEND
  2007.   WJam 1
  2008.   WLocate 120,132
  2009.   Print "          "
  2010.   WLocate 120,132                   ; preberemo password
  2011.   pswdent$=Edit$(10)
  2012.  
  2013.   If Len(pswdent$)=9  ; preverimo dolzino
  2014.     pswdlev=Num{Mid$(pswdent$,5,1)}+Num{Mid$(pswdent$,2,1)}*10
  2015.     If (pswdlev<0) OR (pswdlev>entries-1) OR (pswdlev MOD 5)>0; ali je v obsegu
  2016.       pswdlev=0
  2017.     EndIf
  2018.     If pswd{pswdlev}=pswdent$  ;ali ustreza
  2019.       stopnja=pswdlev
  2020.     Else
  2021.       stopnja=0
  2022.     EndIf
  2023.   Else
  2024.     stopnja=0
  2025.   EndIf
  2026.  
  2027.  
  2028.   Return
  2029.  
  2030.  
  2031. .register:
  2032.  
  2033.   UserName$="GPL version"
  2034.  
  2035.   Return
  2036.  
  2037.  
  2038. .levelerr:
  2039.  
  2040.   NPrint "Level files corrupt..."
  2041.   NPrint "Game loading aborted!"
  2042.   VWait 10
  2043.   CloseFile 1
  2044.   End
  2045.  
  2046.  
  2047. .picerr:
  2048.  
  2049.   CloseFile 0
  2050.   NPrint "Can't find all the necessary pictures..."
  2051.   NPrint "Game loading aborted!"
  2052.   VWait 10
  2053.   CloseFile 1
  2054.   End
  2055.  
  2056.  
  2057. .sounderr:
  2058.  
  2059.   NPrint "Can't load sound effects..."
  2060.   NPrint "Game loading aborted!"
  2061.   VWait 10
  2062.   CloseFile 1
  2063.   End
  2064.  
  2065.  
  2066. .savecfg:
  2067.  
  2068.   If WriteFile(0,"BallMaster.cfg")
  2069.     WriteMem 0,&Snd,1
  2070.     WriteMem 0,&Mus,1
  2071.     WriteMem 0,&Pro,1
  2072.     CloseFile 0
  2073.   EndIf
  2074.  
  2075.   Return
  2076.  
  2077.  
  2078. paleta:
  2079. CNIF #ecs=1
  2080.   IncBin "ballmaster_ecs.col"
  2081. CELSE
  2082.   IncBin "ballmaster_aga.col"
  2083. CEND
  2084.  
  2085. grafika:
  2086. CNIF #ecs=1
  2087.   IncBin "ballmaster_ecs.gfx"
  2088. CELSE
  2089.   IncBin "ballmaster_aga.gfx"
  2090. CEND
  2091.  
  2092. krizec:
  2093.   IncBin "pointer.gfx"
  2094.  
  2095.  
  2096.