home *** CD-ROM | disk | FTP | other *** search
/ Amiga Games Extra 1996 May / Amiga_Games_Extra_CD_5-96.bin / spiele / publicdomain / hunt / source / hunt.b < prev    next >
Text File  |  1996-01-29  |  11KB  |  392 lines

  1. {*************************************
  2. name:         Hunt
  3. genre:        strategy action
  4. players:      2 (parallel)
  5. progr. lang.: ACE 2.35
  6. language:     English
  7. status:       Freeware
  8. author:       Malte Schreiber
  9.               Schulring 38
  10.               D-41812 Erkelenz
  11.               Germany
  12. *************************************}
  13. randomize timer
  14. defint a-z,_
  15.  
  16. shortint p  'current player (0 or 1)
  17. dim laby$(200) size 201,v$(1,3,3) size 2,tv$(1,3,3) size 2'v$ = view(p,x,y)
  18. dim x(1),y(1),TrX(9),TrY(9)  'TrX/TrY = transporter coordinates
  19. dim TL$(1) size 2, TR$(1) size 2, FW$(1) size 2, MS$(1) size 2
  20. dim MI$(1) size 2, SH$(1) size 2
  21. dim keys(1),energy(1),mines(1),xR(1),yR(1)
  22. string Key_pressed$ size 2
  23. string t$ size 75 'temporary
  24. string f$ size 2
  25. shortint different  'Dungeon altered since last call?
  26.  
  27. rem *******************************SUBs******************************
  28. sub shortint othpl(p)   'other player
  29.   if p = 0 then othpl = 1 else othpl = 0
  30. end sub
  31.  
  32. sub showValues(p)
  33.   shared keys,energy,mines
  34.   locate 17
  35.   color 1,0
  36.   prints tab(2+p*24);"keys:  ";str$(keys(p))  ;" "
  37.   prints tab(2+p*24);"energy:";str$(energy(p));" "
  38.   prints tab(2+p*24);"mines: ";str$(mines(p)) ;" "
  39. end sub
  40.  
  41. sub viewfield(p)
  42.   shared laby$,v$,tv$,xR,yR,x,y,different, t$
  43.   different = 0
  44.   for tx = 1 to 3
  45.     for ty = 1 to 3
  46.       case
  47.         xR(p) = 1: t2x=x(p)+ty   : t2y=y(p)+tx-2
  48.         xR(p) =-1: t2x=x(p)-ty   : t2y=y(p)-tx+2
  49.         yR(p) = 1: t2x=x(p)-tx+2 : t2y=y(p)+ty
  50.         yR(p) =-1: t2x=x(p)+tx-2 : t2y=y(p)-ty
  51.       end case
  52.       v$(p,tx,ty) = mid$(Laby$(t2y),t2x,1)
  53.       if t2x = x(othpl(p)) and t2y = y(othpl(p)) then v$(p,tx,ty) = "!"
  54.       if v$(p,tx,ty) <> tv$(p,tx,ty) then different = -1
  55.       tv$(p,tx,ty) = v$(p,tx,ty)
  56.     next
  57.   next
  58.   if v$(p,2,1) = "*" or v$(p,2,1) = "&" or v$(p,2,1) = "!" then
  59.     v$(p,1,3) = " ": v$(p,2,3) = " ": v$(p,3,3) = " ": v$(p,1,2) = " "
  60.     v$(p,2,2) = " ": v$(p,3,2) = " ": v$(p,1,1) = " ": v$(p,3,1) = " "
  61.   end if
  62.   if v$(p,2,2) = "*" or v$(p,2,2) = "&" or v$(p,2,2) = "!" then
  63.     v$(p,2,3) = " "
  64.     if v$(p,1,2) = "*" or v$(p,1,2) = "&" or v$(p,1,2) = "!" then v$(p,1,3)~
  65.      = " "
  66.     if v$(p,3,2) = "*" or v$(p,3,2) = "&" or v$(p,3,2) = "!" then v$(p,3,3)~
  67.      = " "
  68.   end if
  69. end sub
  70.  
  71.  
  72. sub show3D(p)
  73.   shared v$
  74.   ShiftX = p*192
  75.  
  76.   'basic graphic
  77.   line (11+ShiftX,11)-(107+ShiftX,107),5,bf  'paint grey
  78.   color 1,0
  79.   area(10+ShiftX,51):area(108+ShiftX,51):area(108+ShiftX,67):area(10+ShiftX,67)
  80.   areafill  'background black
  81.  
  82.   line (10+ShiftX,10)-(108+ShiftX,108),1:line (108+ShiftX,10)-(10+ShiftX,108),1
  83.  
  84.   line (10+ShiftX,42)-(108+ShiftX,42),1:line (10+ShiftX,76)-(108+ShiftX,76),1
  85.   line (10+ShiftX,30)-(108+ShiftX,30),1:line (10+ShiftX,88)-(108+ShiftX,88),1
  86.  
  87.   if v$(p,1,3) = "*" or v$(p,1,3) = "&" or v$(p,1,3) = "!" then
  88.     if v$(p,1,3) = "&" then color 7 else color 4
  89.     if v$(p,1,3) = "!" then color 2
  90.     area(11+ShiftX,43):area(41+ShiftX,43):area(50+ShiftX,51)
  91.     area(50+ShiftX,67):area(41+ShiftX,75):area(11+ShiftX,75)
  92.     areafill
  93.     line (42+ShiftX,42)-(42+ShiftX,76),1
  94.   end if
  95.   if v$(p,3,3) = "*" or v$(p,3,3) = "&" or v$(p,3,3) = "!" then
  96.     if v$(p,3,3) = "&" then color 7 else color 4
  97.     if v$(p,3,3) = "!" then color 2
  98.     area(68+ShiftX,51):area(76+ShiftX,43):area(107+ShiftX,43)
  99.     area(107+ShiftX,75):area(77+ShiftX,75):area(68+ShiftX,67)
  100.     areafill
  101.     line (76+ShiftX,42)-(76+ShiftX,76),1
  102.   end if
  103.   if v$(p,2,3) = "*" or v$(p,2,3) = "&" or v$(p,2,3) = "!" then
  104.     if v$(p,2,3) = "&" then color 7 else color 4
  105.     if v$(p,2,3) = "!" then color 2
  106.     area(43+ShiftX,43):area(75+ShiftX,43):area(75+ShiftX,75):area(43+ShiftX,75)
  107.     areafill
  108.     line (42+ShiftX,42)-(42+ShiftX,76),1:line (76+ShiftX,42)-(76+ShiftX,76),1
  109.   end if
  110.  
  111.   if v$(p,1,2) = "*" or v$(p,1,2) = "&" or v$(p,1,2) = "!" then
  112.     if v$(p,1,2) = "&" then color 7 else color 4
  113.     if v$(p,1,2) = "!" then color 2
  114.     area(11+ShiftX,31):area(30+ShiftX,31):area(41+ShiftX,42)
  115.     area(41+ShiftX,76):area(30+ShiftX,87):area(11+ShiftX,87)
  116.     areafill
  117.     line (30+ShiftX,30)-(30+ShiftX,88),1:line (42+ShiftX,76)-(42+ShiftX,42),1
  118.   end if
  119.   if v$(p,3,2) = "*" or v$(p,3,2) = "&" or v$(p,3,2) = "!" then
  120.     if v$(p,3,2) = "&" then color 7 else color 4
  121.     if v$(p,3,2) = "!" then color 2
  122.     area(107+ShiftX,87):area(107+ShiftX,31):area(88+ShiftX,31)
  123.     area(77+ShiftX,42):area(77+ShiftX,76):area(88+ShiftX,87)
  124.     areafill
  125.     line (88+ShiftX,88)-(88+ShiftX,30),1:line (76+ShiftX,76)-(76+ShiftX,42),1
  126.   end if
  127.   if v$(p,2,2) = "*" or v$(p,2,2) = "&" or v$(p,2,2) = "!" then
  128.     if v$(p,2,2) = "&" then color 7 else color 4
  129.     if v$(p,2,2) = "!" then color 2
  130.     area(31+ShiftX,31):area(87+ShiftX,31):area(87+ShiftX,87)
  131.     area(31+ShiftX,87)
  132.     areafill
  133.     line (30+ShiftX,30)-(30+ShiftX,88),1:line (88+ShiftX,30)-(88+ShiftX,88),1
  134.   end if
  135.  
  136.   if v$(p,1,1) = "*" or v$(p,1,1) = "&" or v$(p,1,1) = "!" then
  137.     if v$(p,1,1) = "&" then color 7 else color 4
  138.     if v$(p,1,1) = "!" then color 2
  139.     area(11+ShiftX,12):area(29+ShiftX,30):area(29+ShiftX,88)
  140.     area(11+ShiftX,106)
  141.     areafill
  142.     line (30+ShiftX,30)-(30+ShiftX,88),1
  143.   end if
  144.   if v$(p,3,1) = "*" or v$(p,3,1) = "&" or v$(p,3,1) = "!" then
  145.     if v$(p,3,1) = "&" then color 7 else color 4
  146.     if v$(p,3,1) = "!" then color 2
  147.     area(107+ShiftX,106):area(89+ShiftX,88):area(89+ShiftX,30)
  148.     area(107+ShiftX,12)
  149.     areafill
  150.     line (88+ShiftX,30)-(88+ShiftX,88),1
  151.   end if
  152.   if v$(p,2,1) = "*" or v$(p,2,1) = "&" or v$(p,2,1) = "!" then
  153.     if v$(p,2,1) = "&" then color 7 else color 4
  154.     if v$(p,2,1) = "!" then color 2
  155.     area(11+ShiftX,11):area(107+ShiftX,11):area(107+ShiftX,107)
  156.     area(11+ShiftX,107)
  157.     areafill
  158.   end if
  159.  
  160.   color 6,5
  161.   locate 13
  162.   prints tab(8+p*24);
  163.   t$ = v$(p,2,1)
  164.   if t$ = "$" or t$ = "§" or t$ = "-" or t$ = "%" then prints t$
  165.   if val(t$) > 0 then prints "T"
  166. end sub
  167.  
  168. sub showdir(p)
  169.   shared xR,yR
  170.   locate 1
  171.   color 3,0
  172.   prints tab(8+p*24);
  173.   case
  174.     yR(p) =-1: prints "N"
  175.     yR(p) = 1: prints "S"
  176.     xR(p) =-1: prints "W"
  177.     xR(p) = 1: prints "E"
  178.   end case
  179. end sub
  180.  
  181. rem *********** Tastenbelegung laden *******************
  182. open "I",#1,"Hunt.keys"
  183. for p = 0 to 1
  184.   TL$(p) = input$(1,#1)
  185.   TR$(p) = input$(1,#1)
  186.   FW$(p) = input$(1,#1)
  187.   SH$(p) = input$(1,#1)
  188.   MI$(p) = input$(1,#1)
  189. next
  190. close #1
  191.  
  192. rem **********************  screen, window and menu ********************
  193. screen 1,320,256,3,1
  194. window 1,"Hunt",(0,0)-(320,256),4,1
  195. palette 0,.7,.7,.7  :palette 1,0,0,0         :palette 2,.1,.3,.1
  196. palette 3,.3,.43,.8 :palette 5,.15,.15,.15
  197. palette 4,.3,0,.23  :palette 6,.5,.5,.1 :palette 7,.3,.2,.1
  198.  
  199. menu 1,0,1,"Menu"
  200. menu 1,1,1,"About   ","A"
  201. menu 1,2,1,"New game","N"
  202. menu 1,3,0,"---------------"
  203. menu 1,4,1,"Quit    ","Q"
  204. on menu gosub menuevent
  205. menu on
  206.  
  207. rem *********************** load level ****************************
  208. Again:
  209.   open "I",#1,filebox$("SELECT A LEVEL!","levels")
  210.   line input #1,t$
  211.   if t$ <> "#HUNT LEVEL FILE" then close #1:goto again
  212.   input #1,rows
  213.   for t = 1 to rows
  214.     line input #1,Laby$(t)
  215.   next
  216.   for p = 0 to 1
  217.     input #1,x(p),y(p),mines(p),keys(p),energy(p),t$
  218.     case
  219.       t$ = "N": xR(p) = 0 : yR(p) =-1
  220.       t$ = "S": xR(p) = 0 : yR(p) = 1
  221.       t$ = "E": xR(p) = 1 : yR(p) = 0
  222.       t$ = "W": xR(p) =-1 : yR(p) = 0
  223.     end case
  224.   next
  225.  
  226.   for t = 1 to 9
  227.     input #1,TrX(t),TrY(t)
  228.   next
  229.  
  230.   cls
  231.   repeat
  232.     line input #1,t$
  233.     color 1,0
  234.     prints t$
  235.     if csrlin > 28 then
  236.       color 3,0
  237.       prints "Press SPACE to continue"
  238.       Key_pressed$ = ""
  239.       repeat
  240.         sleep
  241.         Key_pressed$ = inkey$
  242.       until Key_pressed$ = " "
  243.       cls
  244.     end if
  245.   until eof(1)
  246.   close #1
  247.   color 3,0
  248.   prints "Press SPACE to start game"
  249.   Key_pressed$ = ""
  250.   repeat
  251.     sleep
  252.     Key_pressed$ = inkey$
  253.   until Key_pressed$ = " "
  254.   cls
  255.  
  256.  
  257. rem ************ draw basic graphic *************
  258. line (10,10)-(108,108),1,b
  259. line (202,10)-(300,108),1,b
  260.  
  261. for p = 0 to 1
  262.   showdir(p)
  263.   viewfield(p)
  264.   show3D(p)
  265.   showValues(p)
  266. next
  267.  
  268. dead = -1
  269. rem *****************  M A I N   L O O P  ********************
  270. repeat
  271.   Key_pressed$ = ""
  272.   repeat
  273.     sleep
  274.     Key_pressed$ = inkey$
  275.   until Key_pressed$ <> "" or dead <> -1  'falls New game im Menu aufgerufen
  276.   for t = 0 to 1
  277.     if Key_pressed$=FW$(t) or Key_pressed$=TR$(t) or Key_pressed$=TL$(t) or~
  278.      Key_pressed$=MS$(t) or Key_pressed$=MI$(t) or Key_pressed$=SH$(t) then~
  279.      p = t
  280.   next
  281.   f$ = Mid$(Laby$(y(p)),x(p),1)
  282.   if Key_pressed$ = FW$(p) then
  283.     tf$ = mid$(Laby$(y(p)+yR(p)),x(p)+xR(p),1)
  284.     if tf$ <> "*" and not (tf$ = "&" and keys(p) = 0) and not~
  285.      (x(p)+xR(p) = x(othpl(p)) and y(p)+yR(p) = y(othpl(p))) then
  286.       f$ = tf$
  287.       x(p) = x(p) + xR(p)
  288.       y(p) = y(p) + yR(p)
  289.       if f$ = "&" or f$ = "%" or f$ = "$" or f$= "§" or f$ = "#" then
  290.         if F$ = "&" then keys(p) = keys(p)-1
  291.         if F$ = "%" then mines(p) = mines(p)+1
  292.         if F$ = "§" then keys(p) = keys(p)+1
  293.         if f$ = "$" then energy(p) = energy(p)+10
  294.         if F$ = "#" then
  295.           energy(p) = energy(p)-int(15+rnd*10)
  296.           beep
  297.           if energy(p) <= 0 then dead = p
  298.         end if
  299.         showValues(p)
  300.         f$ = " "
  301.       end if
  302.       if val(F$) > 0 then
  303.         x(p) = TrX(VAL(F$))
  304.         y(p) = TrY(VAL(F$))
  305.         f$ = mid$(Laby$(y(p)),x(p),1)
  306.       end if
  307.       viewfield(p)
  308.       show3D(p)
  309.       viewfield(othpl(p))
  310.       if different then call show3D(othpl(p))
  311.     end if
  312.   end if
  313.   if Key_pressed$ = TL$(p) or Key_pressed$ = TR$(p) then
  314.     case
  315.       xR(p) = 1: xR(p) = 0:yR(p) = 1
  316.       xR(p) =-1: xR(p) = 0:yR(p) =-1
  317.       yR(p) = 1: xR(p) =-1:yR(p) = 0
  318.       yR(p) =-1: xR(p) = 1:yR(p) = 0
  319.     end case
  320.     if Key_pressed$ = TL$(p) then xR(p) = -1*xR(p):yR(p) = -1*yR(p)
  321.     showdir(p)
  322.     viewfield(p)
  323.     show3D(p)
  324.   end if
  325.   if Key_pressed$ = MI$(p) and mines(p) > 0 and val(f$) = 0 then
  326.     mines(p) = mines(p)-1
  327.     f$ = "#"
  328.     showValues(p)
  329.   end if
  330.   if Key_pressed$ = SH$(p) then
  331.     showValues(p)
  332.     tx = x(p)
  333.     ty = y(p)
  334.     t = 0
  335.     Treffer = 0
  336.     repeat
  337.       tx = tx + xR(p)
  338.       ty = ty + yR(p)
  339.       t = t + 1
  340.       if x(othpl(p)) = tx and y(othpl(p)) = ty then
  341.         t = int(30+rnd*10-t*.2)
  342.         if t > 0 then
  343.           energy(othpl(p)) = energy(othpl(p))-t
  344.           if energy(othpl(p)) <= 0 then dead = othpl(p)
  345.           showValues(othpl(p))
  346.           beep
  347.         end if
  348.         Treffer = -1
  349.       end if
  350.       if mid$(Laby$(ty),tx,1) = "*" or mid$(Laby$(ty),tx,1) = "&" then
  351.         Treffer = -1
  352.       end if
  353.     until Treffer or dead <> -1
  354.   end if
  355.   Laby$(y(p)) = left$(Laby$(y(p)),x(p)-1)+f$+mid$(Laby$(y(p)),x(p)+1)
  356. until dead <> -1
  357.  
  358. color 1,0
  359. cls
  360. if dead = 2 then
  361.   prints "Both players are destroyed."
  362. else
  363.   prints "Player";dead+1;"is destroyed!!!"
  364.   prints "Congratulations, player";str$(othpl(dead)+1);"!"
  365. end if
  366. goto Again
  367.  
  368.  
  369.  
  370.  
  371. MenuEvent:
  372.   if Menu(0) = 1 then
  373.     if Menu(1) = 1 then
  374.       msgbox "© 1996 Malte Schreiber (Freeware).","Continue"
  375.     end if
  376.     if Menu(1) = 2 then
  377.       if msgbox("Stop this game?","Yes","No") then dead = 2
  378.     end if
  379.     if Menu(1) = 4 then
  380.       if msgbox("Do you REALLY wanna quit?!!","Yes","No") then
  381.         window close 1
  382.         screen close 1
  383.         close #1
  384.         stop
  385.       end if
  386.     end if
  387.   end if
  388.   return
  389.  
  390.  
  391.  
  392.