Active Forums > Programs

Assassins 64: Blast from the past

(1/1)

kinem:
This is a QB 64 version of the first-person shooter game that I made in QB 4.5 back in 2001. It was impressive back then simply because it was such a fast engine for QB 4.5; that's not really an issue anymore. The sprites are rather basic (no pun intended?), but this version features improved gameplay compared to the original, and a third weapon. The look of the game is otherwise the same, and most of the code is unchanged.


--- Code: QB64: ---'1PSA64-2.BAS by Dr. Jacques Mallah (jackmallah@yahoo.com)'Compile with QB64DECLARE SUB endit () : DECLARE SUB onscreen () : DECLARE SUB paintsprites ()DECLARE SUB medkit.etc () : DECLARE SUB showhealth () : DECLARE SUB badguys ()DECLARE SUB yourmove () : DECLARE SUB time () : DECLARE SUB yourshot ()DECLARE SUB crashtest (bx!, by!, vx!, vy!) : DECLARE FUNCTION atan2! (y!, x!)DECLARE SUB showbadguy (b%) : DECLARE SUB showbadshot (x%) : DECLARE SUB showurshot (x%)DECLARE SUB raycast () : DECLARE SUB btexture (xx%, dd%, bcc%, c%, bcc2%)DECLARE SUB putcircle (x%, y%, R%, col%, circdis!) : DECLARE SUB showmed (b%)DECLARE SUB putbox (x1!, y1%, x2!, y2%, col%, boxdis!): declare sub readmap()DECLARE SUB intro () : DECLARE SUB maketables () : DECLARE SUB makeworld ()DECLARE SUB hLINE (x1%, x2%, y%, c%) : DECLARE SUB vline (x%, yt%, yb%, c%), keys()declare function lsight%(b%): ntx% = 7: sizey% = 30: sizex% = 60: shift = 49Dim kbmatrix%(128), odd%(319)Dim fmap%(sizex% - 1, sizey% - 1), wdis(319), testin%(ntx%, 63, 63), dsfc(319)Dim cmap%(sizex% - 1, sizey% - 1), sb1%(159, 199), st(1800), ct(1800), hicol%(255)Dim map%(sizex% - 1, sizey% - 1), tant(1800), xb%(1800), yb%(1800), sb2%(160 * 192 + 1)Dim lowcol%(-128 To 127), bicol%(255), atx%(319), ammo%(2), oammo%(2), stt(1800), ctt(1800)Call readmap: c% = nmeds% + nammo% - 1: ReDim med%(c%), scmed(c%), mx(c%), my(c%)ReDim medis(c%), medx(c%), medy(c%), dis(nspr%), spord%(nspr%), disi%(nspr%)ReDim sht(nshots%), shosht%(nshots%), shtx(nshots%), shty(nshots%), vshx(nshots%), vshy(nshots%)ReDim shtang%(nshots%), shtdis(nshots%), dela%(nshots%), shtht%(nshots%), plasma%(nshots%)ReDim bgh%(nbguysm1%), bgx(nbguysm1%), bgy(nbguysm1%), robo%(nbguysm1%)ReDim x(nbguysm1%), y(nbguysm1%), vbx(nbguysm1%), vby(nbguysm1%)ReDim scbg(nbguysm1%), bgang%(nbguysm1%), bgsht(nbguysm1%), lastx(nbguysm1%), lasty(nbguysm1%)ReDim bgshosht%(nbguysm1%), bgshtx(nbguysm1%), bgshty(nbguysm1%)ReDim bgvshx(nbguysm1%), bgvshy(nbguysm1%), bgshtdis(nbguysm1%)ReDim bgdela%(nbguysm1%), bgshtht%(nbguysm1%), active%(nbguysm1%): _FullScreen: delta.t = .1Call intro: maketables: makeworld: Get (0, 8)-(319, 199), sb2%() main: raycast: keys: yourshot: time: yourmove: badguys: showhealth: medkit.etcCall paintsprites: onscreen: endit: GoTo main spritedata:Data 0,6,2,1,0,4,"" 'Map: each character (>"0") is a color or texture'0 is empty space.  Outer walls must not contain any 0's, ?'s, or r's'1, 2, 3, 4, 5, 6, 7, 8, 9, :, ;, <, +, >, @, A are wall textures'4 is the map, A is the rainbow'? is an ice block "door"'r is random: 50% chance of ice, else texture @ '. = empty, B = bad guy, R = robot, M = medkit, L = ammo, P = the President / playermapdata:Data "666666667546C66666666666666666666666666666666666666666666666"Data "6.R..?.......6....M6L..................RR?................L6"Data "6....1.......A.....?...................BB3................M6"Data "6....1.......@.....6662?266666662526666666666664?766666666?6"Data "6....1.......?.....6.....................6.................6"Data "6....1.......>.....6.....................?.................6"Data "6....1.......=.....6.....................6.................1"Data "6....?.......<.....666666666444666666666?6.................1"Data "6....2.......;.....6.........1...........6.......BBBB......1"Data "6....2.......:.....6..BBBB...2......B....?.................6"Data "6....2.......9.....6..BBBB...3...........6.................6"Data "6....2.......8.....6.........4...........6.................6"Data "6....?.......7.....6.........A777777777776666664?76666666666"Data "6....3.......6.....6.......................................6"Data "6....3.......5.....6.......................................6"Data "6....3.......4.....7.......................................6"Data "6....?.......3.....6.......................................6"Data "6....4BBB....2..R..6.......................................6"Data "6....4BBB....1LMMM612?45633?333333333333?33336.............6"Data "6....4BBB....6657666.....6...................6.............6"Data "6....4BBB....?.LLL.6.....6...................6.............6"Data "6....4BBB....?.MMM.6.....6.......BBB.........?.............6"Data "6....555555555555556.....r...................6.............6"Data "6.........?.....M..6.....6...................6666666466666?6"Data "6.........r........6.....6AAAAAAA?AAAAAAAAAA46.............3"Data "6.........r........A.........................6.............4"Data "6..B......r........A..BBBB...................?.............1"Data "6.........r.....P..A.........................6...RRRR......2"Data "6.........r.....L..A.............LLLLMMMM....6.............6"Data "6155555555555556AAA66666666666666AAA666656666666666656666666" Rem $STATICFunction atan2 (y, x)    If x = 0 Then        If y > 0 Then atan2 = 90 Else If y < 0 Then atan2 = 270    ElseIf x > 0 Then        atan2 = (Atn(y / x) * 57.2958 + 360) Mod 360    Else        atan2 = (Atn(y / x) * 57.2958 + 180)    End IfEnd Function Sub badguys    Shared nbguysm1%, testin%(), bgx(), bgy(), delta.t, bgh%(), dis()    Shared px, py, bx, by, vx, vy, fdt, scbg(), bgang%(), x(), y(), fram%, ph%    Shared bgsht(), bgshosht%(), bgvshx(), bgvshy(), ct(), st(), bgshtdis()    Shared inx%, iny%, map%(), fmap%(), bsa%, bgshtx(), bgshty(), bgdela%()    Shared bgshtht%(), nbguys%, vbx(), vby(), snd%, kills%, robo%(), active%(), lastx(), lasty()     For x% = 0 To nbguysm1%    testin%(4, Int(bgx(x%)) + 2, Int(bgy(x%)) + 19) = 0: Next     'bad guys: Note: I want to add some AI!    damp = .8 ^ fdt: sqrdt = Sqr(delta.t) * 6    For x% = 0 To nbguysm1%         If bgh%(x%) > 0 Then            If lsight%(x%) Then                active%(x%) = 1: lastx(x%) = bx: lasty(x%) = by            Else                If active%(x%) = 1 Then active%(x%) = 2            End If             bbgx = px - bgx(x%): bbgy = py - bgy(x%)            dis(x%) = Sqr(bbgx * bbgx + bbgy * bbgy) + .01             chase = 2 * delta.t * (1 + robo%(x%)) * -(active%(x%) > 0)            bbgx = lastx(x%) - bgx(x%): bbgy = lasty(x%) - bgy(x%)            cdis = Sqr(bbgx * bbgx + bbgy * bbgy) + .01            If active%(x%) = 2 And cdis < .3 Then active%(x%) = 0             vbx(x%) = vbx(x%) * damp + (Rnd - .5) * sqrdt + bbgx / cdis * chase            vby(x%) = vby(x%) * damp + (Rnd - .5) * sqrdt + bbgy / cdis * chase            If (px - bgx(x%)) ^ 2 + (py - bgy(x%)) ^ 2 < 1 Then                vbx(x%) = vbx(x%) - bbgx / dis(x%) * fdt                vby(x%) = vby(x%) - bbgy / dis(x%) * fdt                vx = vx + bbgx / dis(x%) * fdt                vy = vy + bbgy / dis(x%) * fdt            End If            svx% = Sgn(vbx(x%)): svy% = Sgn(vby(x%))            crashtest bgx(x%) + .15 * svx%, bgy(x%) + .15 * svy%, vbx(x%), vby(x%)            crashtest bgx(x%) - .15 * svx%, bgy(x%) + .15 * svy%, vbx(x%), vby(x%)            crashtest bgx(x%) + .15 * svx%, bgy(x%) - .15 * svy%, vbx(x%), vby(x%)            bgx(x%) = bgx(x%) + vbx(x%) * delta.t: bgy(x%) = bgy(x%) + vby(x%) * delta.t            scbg(x%) = 2 / (dis(x%) + .01)            bgang%(x%) = atan2(bgy(x%) - by, bgx(x%) - bx) * 5            delba% = (bgang%(x%) - bsa% + 1800) Mod 1800            x(x%) = delba% - scbg(x%) * 20: y(x%) = 100 - 25 * scbg(x%)             'bad guy's shot            If bgsht(x%) <= 0 And active%(x%) = 1 Then                bgsht(x%) = 20 + Rnd: bgshosht%(x%) = 1: 'create shot                bgshtx(x%) = bgx(x%): bgshty(x%) = bgy(x%)                bgsta% = (bgang%(x%) + 900) Mod 1800                bgvshx(x%) = ct(bgsta%) * 7                bgvshy(x%) = st(bgsta%) * 7            End If        End If         'bad guy's shot        If bgsht(x%) > 0 And bgshosht%(x%) Then            crashtest bgshtx(x%), bgshty(x%), bgvshx(x%), bgvshy(x%)            k% = map%(inx%, iny%)            If k% Then                bgshosht%(x%) = 0                If k% = 15 And bgsht(x%) > 0 Then                    map%(inx%, iny%) = 0                    testin%(4, inx% + 2, iny% + 19) = 0                End If            Else                bgshtx(x%) = bgshtx(x%) + bgvshx(x%) * delta.t                bgshty(x%) = bgshty(x%) + bgvshy(x%) * delta.t                bbx = bgshtx(x%) - bx: bby = bgshty(x%) - by                bgshtang% = atan2(bby, bbx) * 5                bgshtdis(x%) = Sqr(bby * bby + bbx * bbx + .01)                dis(x% + nbguys%) = bgshtdis(x%)                'fix damage test                If bgshtdis(x%) < .5 Then                    ph% = ph% - bgsht(x%) / 4 - 2.5 * (1 + robo%(x%)): bgshosht%(x%) = 0                    If snd% Then Sound 150, 1                    vx = vx + bgvshx(x%) * .05: vy = vy + bgvshy(x%) * .05                End If                'kill each other?                For y% = 0 To nbguysm1%                    If x% <> y% And bgh%(y%) > 0 Then                        bsdis = Sqr((bgshty(x%) - bgy(y%)) ^ 2 + (bgshtx(x%) - bgx(y%)) ^ 2 + .01)                        If bsdis < .5 Then                            bgh%(y%) = bgh%(y%) - bgsht(x%) / 2 - 1: bgshosht%(x%) = 0                            vbx(y%) = vbx(y%) + bgvshx(x%) * .5: vby(y%) = vby(y%) + bgvshy(x%) * .5                            If bgh%(y%) < 1 Then                                fmap%(Int(bgx(y%)), Int(bgy(y%))) = 4 + 4 * robo%(y%)                                kills% = kills% + 1: Exit For                            End If                        End If                End If: Next                bgdela%(x%) = (bgshtang% - bsa% + 1800) Mod 1800                bgshtht%(x%) = 30 / bgshtdis(x%)            End If        End If        If bgsht(x%) > 0 Then bgsht(x%) = bgsht(x%) - fdt         If fram% / 2 = fram% \ 2 Then            testin%(4, Int(px) + 2, Int(py) + 19) = 1            If bgh%(x%) > 0 Then testin%(4, Int(bgx(x%)) + 2, Int(bgy(x%)) + 19) = 4 + 4 * robo%(x%)        End If    Next x%End Sub Sub crashtest (bx, by, vx, vy): 'note vx & vy args must be byref    Shared map%(), delta.t, inx%, iny%    Static oinx%, oiny%, nallcl%, chn2%, xsign%, ysign%, k%, kx%, ky%     oinx% = Int(bx): oiny% = Int(by): nallcl% = 1    px = bx + vx * delta.t: py = by + vy * delta.t    inx% = Int(px): iny% = Int(py)    ysign% = Sgn(vy): xsign% = Sgn(vx)    chn2% = (inx% - oinx%) * xsign% + (iny% - oiny%) * ysign%    k% = map%(inx%, iny%)    If inx% = oinx% Then horz% = 1    If iny% = oiny% Then vert% = 1    If chn2% = 2 Then        ys% = (1 + ysign%) \ 2: xs% = (1 + xsign%) \ 2        kx% = map%(oinx%, iny%): ky% = map%(inx%, oiny%)        tstang% = Sgn((px - bx) * (iny% + 1 - ys% - by) - (py - by) * (inx% + 1 - xs% - bx))        tst% = xsign% * ysign% * tstang%        If tst% = 1 And k% + ky% = 0 Then nallcl% = 0        If tst% = -1 And k% + kx% = 0 Then nallcl% = 0        If ky% = 0 Then            horz% = 1        Else            vert% = 1: k% = ky%: If tst% = 1 Then iny% = oiny%        End If        If kx% Then            horz% = 1: k% = kx%: If tst% = -1 Then inx% = oinx%        Else            vert% = 1        End If    End If: If k% = 0 Then nallcl% = 0    If nallcl% Then        If horz% And vert% And ky% = 0 And kx% = 0 Then            If tst% = 1 Then horz% = 0 Else vert% = 0        End If        If vert% Then vx = 0        If horz% Then vy = 0    End IfEnd Sub Function lsight% (b%)    Shared map%(), delta.t, inx%, iny%, px, py, bgx(), bgy()    delx = bgx(b%) - px: dely = bgy(b%) - py: delmag = Sqr(delx ^ 2 + dely ^ 2)    lx = px: ly = py: delx = delx / delmag / delta.t: dely = dely / delmag / delta.t: lt% = 0    Do: crashtest lx, ly, delx, dely: lx = lx + delx * delta.t: ly = ly + dely * delta.t        lt% = lt% + 1    Loop Until map%(inx%, iny%) Or lt% >= delmag    lsight% = (map%(inx%, iny%) = 0)End Function Sub endit    Shared kills%, nbguysm1%, nbguys%, kbmatrix%(), goon%, ph%, bgh%(), snd%     If kbmatrix%(1) - 1 And ph% > 0 And kills% < nbguys% Then        goon% = 2    Else        goon% = goon% - 1    End If    If goon% = 0 Then        Locate 2, 1:        If kills% = nbguys% And ph% > 0 Then            Print "President Snore, you made it!": If snd% Then Play "mf gcfde"        Else            Print "You die"            For t% = 400 To 200 Step -20                If snd% Then Sound t%, 1                tim = Timer: Do: Loop Until Timer > tim            Next        End If        tim = Timer + .5: Do: Loop Until Timer > tim        Sleep 1: End    End IfEnd Sub Sub hLINE (x1%, x2%, y%, c%)    Shared sb1%(), hicol%(): ccc% = hicol%(c%) + c%    If x1% < 0 Then x1% = 0    If x2% > 319 Then x2% = 319    For x% = Int(x1% / 2) To Int(x2% / 2)        sb1%(x%, y%) = ccc%    NextEnd Sub Sub intro: Shared snd%, nbguys%, nrobo%    Cls: Print "By Dr. Jacques Mallah", , "Assassins Edition.64"    Print: Print "In the year 3001 AD:"    Print "You, President Sal Snore of the United Snows of Antarctica,"    Print "are trapped in the Wight House with a bunch of guys trying to kill you. "    Print "They also reprogrammed your robot bodyguard(s).": Print    Print "Luckily, you have your trusty plasma gun (press 1) and machine gun (press 2)"    Print "and plas-cannon (press 3; uses plasma gun ammo)."    Print "Hiding's not your style.  You'll show them who's the boss!"    Print "Kill 'em all to win.  ("; nbguys% - nrobo%; " guy(s) and "; nrobo%; " robot(s))": Print    Print "use arrow forward, back to move; use arrow left, right to rotate"    Print "Alt to strafe with arrow left, right"    Print "Ctrl to shoot"    Print "To fight, try getting some distance and using strafe"    Print "Try shooting out some ice blocks"    Print "pick up ";: Color 0, 2: Print "-";: Color 7, 0: Print " ammo, and ";    Color 4, 15: Print "+";: Color 7, 0: Print " medical kits when needed"    Print "After starting, press Esc to take the easy way out - suicide!"    Print "press any key to start, SPACE for no sound": Print    Print "The # at the top left corner is frames per second"    Print "The bar at the bottom is your health."    Print "j to toggle cheat mode";    i$ = Input$(1): If i$ <> " " Then snd% = 1End Sub Sub maketables    Shared st(), ct(), dsfc(), hicol%(), lowcol%(), bicol%(), atx%(), tant()    Shared xb%(), yb%(), spord%(), nspr%, stt(), ctt()    For tmp1% = 0 To 1800        st(tmp1%) = Sin(tmp1% * Atn(1) / 225): stt(tmp1%) = st(tmp1%) * 256        ct(tmp1%) = Cos(tmp1% * Atn(1) / 225): ctt(tmp1%) = ct(tmp1%) * 256    Next tmp1%    st(0) = 10 ^ -9: st(900) = 10 ^ -9: st(1800) = st(0)    stt(0) = 10 ^ -7: stt(900) = 10 ^ -7    ct(450) = 10 ^ -9: ct(1350) = 10 ^ -9    ctt(450) = 10 ^ -7: ctt(1350) = 10 ^ -7    For t% = 0 To 1800        sqct = Abs(1 / ct(t%)): sqt = Abs(1 / st(t%))        If sqt > sqct Then nn = sqct * 255 Else nn = sqt * 255        xb%(t%) = ct(t%) * nn: yb%(t%) = st(t%) * nn    tant(t%) = st(t%) / ct(t%): Next    yb%(0) = 0: yb%(900) = 0    xb%(450) = 0: xb%(1350) = 0    For x% = 0 To 319        atx%(x%) = Atn((x% - 160) * 3.14159 / 900) * 900 / 3.14159        dsfc(x%) = 100 / Abs(ct((atx%(x%) + 1800) Mod 1800))    Next    For c% = 0 To 255        hicol%(c%) = &H100 * (c% + &H100 * (c% > &H7F))        lowcol%(c% - 128) = c% - 128 - &H100 * ((c% - 128) < 0)        bicol%(c%) = &H100 * (c% + &H100 * (c% > &H7F)) + c%    Next    For x% = 0 To nspr%: spord%(x%) = x%: NextEnd Sub Sub readmap    Shared fmap%(), sizex%, sizey%, testin%(), hicol%(), cmap%(), map%(), ntx%    Shared ph%, nbguysm1%, bgh%(), bgy(), bgx(), oldtim, nmeds%, medx(), medy()    Shared nshots%, med%(), ammo%(), weap$, px, py, sa, nmeds%, nammo%, robo%()    Shared maxshots%, nbguys%, nshots%, nspr%, nbguyst2%, nrobo%    Shared scmed(), mx(), my(), medis()    Shared F0%, F1%, F2%, F3%, F4%, F5%, bg$    DefInt N    Randomize Timer: nmeds% = 0: nammo% = 0: px = 17.5: py = 27.5: sa = 1190    Read F0%, F1%, F2%, F3%, F4%, F5%, bg$: nb = 0     For y = 0 To sizey% - 1: Read i$: For x = 0 To sizex% - 1        ii$ = Mid$(i$, x + 1, 1): map%(x, y) = Asc(ii$) - 48        If ii$ = "." Then map%(x, y) = 0            If ii$ = "B" Or ii$ = "R" Then nb = nb + 1: If ii$ = "R" Then nrobo% = nrobo% + 1            If map%(x, y) = 66 Then map%(x, y) = 16 + (Rnd < .5)            If map%(x, y) < 0 Then map%(x, y) = map%(x, y) + 256            If y = 0 Or x = 0 Or y = sizey% - 1 Or x = sizex% - 1 Then                If map%(x, y) = 0 Then map%(x, y) = 18                If map%(x, y) = 15 Then map%(x, y) = 14            End If            If ii$ = "M" Then nmeds% = nmeds% + 1            If ii$ = "L" Then nammo% = nammo% + 1            If ii$ = "P" Then px = x + .5: py = y + .5: map%(x, y) = 0    Next: Next     maxshots% = 9: nbguys% = nb: nbguysm1% = nbguys% - 1: nbguyst2% = nbguys% * 2    nshots% = maxshots%: nspr% = maxshots% + nbguyst2% + nmeds% + nammo%End Sub  Sub makeworld    Shared fmap%(), sizex%, sizey%, testin%(), hicol%(), cmap%(), map%(), ntx%    Shared ph%, nbguysm1%, bgh%(), bgy(), bgx(), oldtim, nmeds%, medx(), medy()    Shared nshots%, med%(), ammo%(), weap$, px, py, sa, nmeds%, nammo%, robo%()    Shared maxshots%, nbguys%, nshots%, nspr%, snd%    Shared scmed(), mx(), my(), medis()    Shared F0%, F1%, F2%, F3%, F4%, F5%, bg$    DefInt N, T, X-Y    Screen 13: nb = 0: nm = 0: nam = nmeds%: If snd% Then Play "mb"    nshots% = 1: weap$ = " plasma gun": ammo%(0) = 24: ammo%(1) = 200     For y = 1 To sizey% - 2: For x = 1 To sizex% - 2         If map%(x, y) = 18 Then map%(x, y) = 0: bgx(nb) = x + .5: bgy(nb) = y + .5: nb = nb + 1            If map%(x, y) = 34 Then                map%(x, y) = 0: bgx(nb) = x + .5: bgy(nb) = y + .5: robo%(nb) = 1: nb = nb + 1            End If            If map%(x, y) = Asc("M") - 48 Then                medx(nm) = x + .5: medy(nm) = y + .5: map%(x, y) = 0: med%(nm) = 1: nm = nm + 1 'meds            End If            If map%(x, y) = Asc("L") - 48 Then                medx(nam) = x + .5: medy(nam) = y + .5: map%(x, y) = 0: med%(nam) = 1: nam = nam + 1 'ammo            End If     Next: Next     For t = 0 To ntx%: For x = 0 To 63: For y = 0 To 63        testin%(t, x, y) = (t * 14 + Sqr((x - 32) ^ 2 + (y - 32 - Rnd * t) ^ 2)) Mod 256        testin%(t, x, y) = testin%(t, x, y) + hicol%(t + 1 + (Rnd < .1))    Next: Next: Next     For x = 2 To 61: For y = 19 To 48    testin%(4, x, y) = map%(x - 2, y - 19): Next: Next    For x = 0 To 59: For y = 0 To 29: fmap%(x, y) = ((x + y) Mod 16) + 128        If map%(x, y) = 15 Then fmap%(x, y) = 15            Next: Next: For x = 16 To 18: For y = 26 To 28    fmap%(x, y) = 208: Next: Next    fmap%(39, 15) = -7: fmap%(24, 10) = -2: fmap%(17, 25) = 0    For x = 20 To 35: fmap%(x, 25) = 20 - x: Next     For x = 0 To 59: For y = 0 To 29: cmap%(x, y) = 26        If x / 2 = x \ 2 Or y / 2 = y \ 2 Then cmap%(x, y) = 27            If x / 2 = x \ 2 And y / 2 = y \ 2 Then cmap%(x, y) = 15            Next: Next: For x = 16 To 18: For y = 26 To 28    cmap%(x, y) = 208: Next: Next: cmap%(17, 27) = 15     Color 16: Print "Abandon": Print "all dope"    Print "Your ad": Print "  here:": Print " $100": Print " Call"    Print " 1-800-": Print " EATS": Print "  ???": Print " QB 64"    Print " I  $": Print: Print " Wight": Print " House": Print " HIT"    Print: Print " Who's": Print "da man?": Print " Please": Print "recycle"    Print "   JM": For x = 0 To 63: For y = 0 To 15        If Point(x, y) Then testin%(1, x, y + 1) = 15            If Point(x, y + 16) Then testin%(5, x, y + 8) = 0            If Point(x, y + 32) Then testin%(5, x, y + 24) = 0            If Point(x, y + 48) Then testin%(5, x, y + 40) = 0            If Point(x, y + 64) Then testin%(6, x, y + 32) = 7            If Point(x, y + 80) Then testin%(2, x, y + 1) = 4            If Point(x, y + 96) Then testin%(4, x, y + 1) = 15            If Point(x, y + 112) And y < 8 Then testin%(5, x, y + 56) = 0            If Point(x, y + 128) Then testin%(3, x, y + 48) = 1            If Point(x, y + 144) Then testin%(0, x, y + 48) = 6            If Point(x, y + 160) Then testin%(7, x, y + 32) = 9    Next: Next: Color 15    For x = 0 To 63: For y = 0 To 63        t = 15: If (Rnd * 60 > y) Then t = 24 + Rnd * 6            testin%(7, x, y) = (testin%(7, x, y) And &HFF) + hicol%(t)    Next: Next     ph% = 100: For x% = 0 To nbguysm1%: bgh%(x%) = 100: If robo%(x%) Then bgh%(x%) = 1250        If bgx(x%) = 0 Then            randloc:            bgx(x%) = Int(Rnd * (sizex% - 1) + 1) + .5            bgy(x%) = Int(Rnd * (sizey% - 1) + 1) + .5            If map%(Int(bgx(x%)), Int(bgy(x%))) GoTo randloc        End If    Next: oldtim = Timer End Sub DefSng T, X-YSub medkit.etc: 'medkits and ammo boxes    Shared nmeds%, medis(), nbguyst2%, maxshots%, medx(), medy(), scmed(), dis()    Shared mx(), my(), ph%, bx, by, bgx(), bgy(), bgh%(), med%(), nbguysm1%, bsa%    Shared ammo%(), nammo%, robo%()     For x% = 0 To nmeds% + nammo% - 1        If med%(x%) Then            medis(x%) = Sqr((bx - medx(x%)) ^ 2 + (by - medy(x%)) ^ 2)            dis(x% + nbguyst2% + maxshots% + 1) = medis(x%)            scmed(x%) = 3 / (dis(x% + nbguyst2% + maxshots% + 1) + .01)            bgang% = atan2(medy(x%) - by, medx(x%) - bx) * 5            delba% = (bgang% - bsa% + 1800) Mod 1800            mx(x%) = delba% - scmed(x%) * 10: my(x%) = 100 + 15 * scmed(x%)            If medis(x%) < .36 Then                If x% < nmeds% And ph% < 95 Then                    med%(x%) = 0: ph% = ph% + 35: If ph% > 98 Then ph% = 98                End If                If x% >= nmeds% Then                    med%(x%) = 0: ammo%(0) = ammo%(0) + 16: ammo%(1) = ammo%(1) + 100                End If            End If            For y% = 0 To nbguysm1%                If bgh%(y%) > 0 And robo%(y%) = 0 Then                    bsdis = (bgx(y%) - medx(x%)) * (bgx(y%) - medx(x%)) + (bgy(y%) - medy(x%)) * (bgy(y%) - medy(x%))                    If med%(x%) And bsdis < .6 And bgh%(y%) < 95 And y% <> 8 And x% < nmeds% Then                        med%(x%) = 0: bgh%(y%) = bgh%(y%) + 35: If bgh%(y%) > 98 Then bgh%(y%) = 98                    End If            End If: Next    End If: Next End Sub Sub onscreen    Shared bitex%, fire, sb1%(), mg%, omg%, weap$, ammo%(), oammo%(), sb2%()    Shared kills%, okills%, oofram%, ofram%     bitex% = 1: t% = (fire > 0) * 15: hLINE 155, 166, 100, -t%    vline 160, 96, 104, 15 + t%: bitex% = 0     'draw on screen    Wait &H3DA, 8: 'wait for screen refresh     For x% = 0 To 159: For y% = 8 To 199        sb2%(2 + x% + 160 * (y% - 8)) = sb1%(x%, y%)    Next: Next    Put (0, 8), sb2%(), PSet      If mg% <> omg% Or kills% > okills% Or ammo%(mg% And 1) <> oammo%(mg% And 1) Then        Locate 1, 10: Print weap$;        Print Using " ####"; ammo%(mg% And 1);        Print Using " ammo ### "; kills%;: Print "kill";        If kills% <> 1 Then Print "s"; Else Print " ";        omg% = mg%: okills% = kills%: oammo%(mg% And 1) = ammo%(mg% And 1)    End If    If oofram% <> ofram% Then        Locate 1, 1: Print Using "### fps"; ofram%;: oofram% = ofram%    End If End Sub Sub paintsprites    Shared nspr%, spord%(), dis(), nbguyst2%, nbguys%, maxshots%, disi%()     'This uses the painter's algorithm with an exchange sort to show sprites    For x% = 0 To nspr%: disi%(spord%(x%)) = dis(spord%(x%)) * 512: Next    For x% = 0 To nspr% - 1: For y% = x% + 1 To nspr%        If disi%(spord%(y%)) > disi%(spord%(x%)) Then Swap spord%(x%), spord%(y%)        Next: Next: For xx% = 0 To nspr%        If spord%(xx%) < nbguys% Then            showbadguy spord%(xx%)        ElseIf spord%(xx%) < nbguyst2% Then            showbadshot spord%(xx%) - nbguys%        ElseIf spord%(xx%) < nbguyst2% + maxshots% + 1 Then            showurshot spord%(xx%) - nbguyst2%        Else            showmed spord%(xx%) - nbguyst2% - maxshots% - 1    End If: Next xx% End Sub Sub putbox (x1, y1%, x2, y2%, col%, boxdis)    Shared wdis()    For x% = x1 To x2        If x% >= 0 And x% < 320 Then            If boxdis < wdis(x%) Then vline x%, y1%, y2%, col%        End If    NextEnd Sub Sub putcircle (x%, y%, R%, col%, circdis)    Shared wdis()    xb% = x% - R% + 1: xt% = x% + R% - 1    If xb% > -1 And xb% < 320 Then        If circdis < wdis(xb%) Then showc% = 1    End If    If xt% > -1 And xt% < 320 Then        If circdis < wdis(xt%) Then showc% = showc% + 1    End If    If showc% = 1 Then        For xx% = xb% To xt%            If xx% > -1 And xx% < 320 Then                If circdis < wdis(xx%) Then                    shthtx% = R% * Sqr(1 - (xx% - x%) * (xx% - x%) / R% / R%) * .8                    vline xx%, y% - shthtx%, y% + shthtx%, col%                End If            End If        Next    ElseIf showc% = 2 Then        For xx% = xb% To xt%            shthtx% = R% * Sqr(1 - (xx% - x%) * (xx% - x%) / R% / R%) * .8            vline xx%, y% - shthtx%, y% + shthtx%, col%        Next    End IfEnd Sub Sub raycast    Shared wdis(), odd%(), st(), ct(), dsfc(), atx%(), hicol%(), testin%()    Shared map%(), fmap%(), cmap%(), bicol%(), sb1%(), ntx%, gm%, xb%(), yb%()    Shared sizex%, sizey%, lowcol%(), bx, by, efa%, px, py, bsa%, sa, stt(), ctt()    bx = px: by = py: efa% = (sa + 1960) Mod 1800: bsa% = sa    bxx% = bx * 256: byy% = by * 256: TIMR = Timer * 10: nttx% = 2 * ntx% + 1    sizexf% = sizex% * 256: sizeyf% = sizey% * 256     For x% = 0 To 319        t% = (efa% + atx%(x%) + 1800) Mod 1800: xx% = x% \ 2         If xx% = x% \ 2 Then            rxx% = bxx%: ryy% = byy%: oinx% = rxx% \ 256: oiny% = ryy% \ 256            inx% = oinx%: iny% = oiny%: ysign% = Sgn(yb%(t%)): xsign% = Sgn(xb%(t%))            ys% = (1 - ysign%) \ 2: xs% = (1 - xsign%) \ 2            yss& = ys% * 256 - byy%: xss& = xs% * 256 - bxx%             'find dis & col            oldi: Do: rxx% = rxx% + xb%(t%): ryy% = ryy% + yb%(t%)                oinx% = inx%: oiny% = iny%                inx% = rxx% \ &H100: iny% = ryy% \ &H100                k% = map%(inx%, iny%)                chn2% = (inx% - oinx%) * xsign% + (iny% - oiny%) * ysign%            Loop Until chn2% = 2 Or k%            If chn2% = 2 Then                kx% = map%(oinx%, iny%)                ky% = map%(inx%, oiny%)                If k% + kx% + ky% = 0 GoTo oldi                tst% = xsign% * ysign% * Sgn((rxx% - bxx%) * (iny% * 256 + yss&) - (ryy% - byy%) * (inx% * 256 + xss&))                If (tst% = 1 And k% + ky% = 0) Or (tst% <= 0 And k% + kx% = 0) GoTo oldi            End If            horz% = 0: If inx% = (rxx% - xb%(t%)) \ &H100 Then horz% = chn2% And 1             If chn2% = 2 Then                If tst% > 0 Then                    If ky% Then k% = ky%: iny% = oiny% Else horz% = 1                Else                    If kx% Then horz% = 1: k% = kx%: inx% = oinx%                End If            End If        End If         If horz% Then            wdis(x%) = (iny% * 256 + yss&) / stt(t%)            If t% > 1780 Or t% < 20 Or (t% > 880 And t% < 920) Then                dis = (inx% * 256 + xss&) / ctt(t%): If dis > wdis(x%) Then wdis(x%) = dis            End If            xfrac = bx + wdis(x%) * ct(t%)            bcc% = Int((xfrac - Int(xfrac)) * 63.9): If ys% = 0 Then bcc% = 63 - bcc%        Else            wdis(x%) = (inx% * 256 + xss&) / ctt(t%)            If (t% > 1330 And t% < 1370) Or (t% > 430 And t% < 470) Then                dis = (iny% * 256 + yss&) / stt(t%): If dis > wdis(x%) Then wdis(x%) = dis            End If            xfrac = by + wdis(x%) * st(t%)            bcc% = Int((xfrac - Int(xfrac)) * 63.9): If xs% Then bcc% = 63 - bcc%        End If         dd% = dsfc(x%) / wdis(x%): odd%(x%) = dd%         'load view to buffer        If x% And 1 Then            afx% = ctt(t%) * dsfc(x%): afy% = stt(t%) * dsfc(x%): yt% = dd% + 1            fixfloor:            If yt% < 92 Then                fcxp% = (bxx% + afx% \ yt%): fcyp% = (byy% + afy% \ yt%)                If fcxp% <= 0 Or fcyp% <= 0 Or fcxp% >= sizexf% Or fcyp% >= sizeyf% Then                    sb1%(xx%, yt% + 99) = 0: sb1%(xx%, 100 - yt%) = 0: yt% = yt% + 1: GoTo fixfloor                End If            End If            For y% = yt% To 92                fcxp% = (bxx% + afx% \ y%): fcx% = fcxp% \ &H100                fcyp% = (byy% + afy% \ y%): fcy% = fcyp% \ &H100                flor% = fmap%(fcx%, fcy%)                If flor% > 0 Then                    sb1%(xx%, y% + 99) = bicol%(flor%)                ElseIf flor% >= -ntx% Then                    sb1%(xx%, y% + 99) = (testin%(-flor%, (fcxp% \ 4) And &H3F, (fcyp% \ 4) And &H3F) And &HFF) + hicol%(testin%(-flor%, (fcxp% \ 4) And &H3F, (fcyp% \ 4) And &H3F) And &HFF)                Else                    flor% = -flor% - ntx% - 1                    fcxp% = (fcxp% \ 4) And &H3F: fcyp% = (fcyp% \ 4) And &H3F                    tst% = (testin%(flor%, fcxp%, fcyp%) And &HFF00)                    sb1%(xx%, y% + 99) = lowcol%((testin%(flor%, fcxp%, fcyp%) And &HFF00) \ 256) + tst%                End If                sb1%(xx%, 100 - y%) = bicol%(cmap%(fcx%, fcy%))            Next        End If        If k% = nttx% + 1 Then k% = 0        If k% > nttx% Then            kx% = k%: If k% = 17 Then kx% = Int(TIMR + xfrac * 40) And &HFF            yb% = 99 + dd%: If yb% > 191 Then yb% = 191            yt% = 100 - dd%: If yt% < 8 Then yt% = 8            If x% And 1 Then                For y% = yt% To yb%: sb1%(xx%, y%) = (sb1%(xx%, y%) And &HFF) + hicol%(kx%): Next            Else                For y% = yt% To yb%: sb1%(xx%, y%) = (sb1%(xx%, y%) And &HFF00) + kx%: Next            End If        ElseIf x% And 1 Then            If dd% > 31 Then                hmd% = 100 - dd%: df% = (dd% + 4) \ 32: dof& = dd%: kx% = k% - ntx% - 1                For yfrac% = 0 To 63: yt% = hmd% + (yfrac% * dof&) \ &H20: yb% = yt% + df%                    If yt% < 8 Then yt% = 8                    If yb% > &HBF Then yb% = &HBF                    If k% <= ntx% Then                        tst% = hicol%(testin%(k%, bcc%, yfrac%) And &HFF) + (testin%(k%, obcc%, yfrac%) And &HFF)                    Else                        tst% = (testin%(kx%, bcc%, yfrac%) And &HFF00) + lowcol%((testin%(kx%, obcc%, yfrac%) And &HFF00) \ 256)                    End If                For y% = yt% To yb%: sb1%(xx%, y%) = tst%: Next: Next            Else                yb% = 2 * dd% - 1: hmd% = 100 - dd%                If k% <= ntx% Then                    For y% = hmd% To 99 + dd%: yfrac% = ((y% - hmd%) * 63) \ yb%                        sb1%(xx%, y%) = hicol%(testin%(k%, bcc%, yfrac%) And &HFF) + (testin%(k%, obcc%, yfrac%) And &HFF)                    Next                Else                    kx% = k% - ntx% - 1                    For y% = hmd% To 99 + dd%: yfrac% = ((y% - hmd%) * 63) \ yb%                        sb1%(xx%, y%) = (testin%(kx%, bcc%, yfrac%) And &HFF00) + lowcol%((testin%(kx%, obcc%, yfrac%) And &HFF00) \ 256)                    Next                End If            End If        End If    obcc% = bcc%: NextEnd Sub Sub showbadguy (b%)    Shared bgh%(), scbg(), x(), y(), dis(), F0%, F1%, F2%, F3%, F4%, F5%, wdis(), robo%(), active%()    If bgh%(b%) > 0 Then         If x(b%) >= 0 And x(b%) <= 319 Then            If dis(b%) < wdis(x(b%)) Then showb% = 1: 'active%(b%) = 1        End If        xt% = x(b%) + scbg(b%) * 40        If xt% >= 0 And xt% < 320 Then            If dis(b%) < wdis(xt%) Then showb% = 1: 'active%(b%) = 1        End If        If showb% Then            If robo%(b%) Then F1% = 7            putbox x(b%) + scbg(b%) * 16, y(b%) + 0, x(b%) + scbg(b%) * 24, y(b%) + scbg(b%) * 2, F0%, dis(b%)            putbox x(b%) + scbg(b%) * 15, y(b%) + scbg(b%) * 2, x(b%) + scbg(b%) * 25, y(b%) + scbg(b%) * 10, F1%, dis(b%)            putbox x(b%) + scbg(b%) * 10, y(b%) + scbg(b%) * 10, x(b%) + scbg(b%) * 30, y(b%) + scbg(b%) * 40, b%, dis(b%)            putbox x(b%), y(b%) + scbg(b%) * 11, x(b%) + scbg(b%) * 10, y(b%) + scbg(b%) * 20, b%, dis(b%)            putbox x(b%) + scbg(b%) * 30, y(b%) + scbg(b%) * 11, x(b%) + scbg(b%) * 40, y(b%) + scbg(b%) * 20, b%, dis(b%)            putbox x(b%), y(b%) + scbg(b%) * 20, x(b%) + scbg(b%) * 5, y(b%) + scbg(b%) * 40, b%, dis(b%)            putbox x(b%) + scbg(b%) * 35, y(b%) + scbg(b%) * 20, x(b%) + scbg(b%) * 40, y(b%) + scbg(b%) * 40, b%, dis(b%)            putbox x(b%) + scbg(b%) * 10, y(b%) + scbg(b%) * 40, x(b%) + scbg(b%) * 18, y(b%) + scbg(b%) * 70, F3%, dis(b%)            putbox x(b%) + scbg(b%) * 22, y(b%) + scbg(b%) * 40, x(b%) + scbg(b%) * 30, y(b%) + scbg(b%) * 70, F3%, dis(b%)            putbox x(b%) + scbg(b%) * 18, y(b%) + scbg(b%) * 40, x(b%) + scbg(b%) * 22, y(b%) + scbg(b%) * 50, F3%, dis(b%)            putbox x(b%) + scbg(b%) * 7, y(b%) + scbg(b%) * 70, x(b%) + scbg(b%) * 18, y(b%) + scbg(b%) * 75, F4%, dis(b%)            putbox x(b%) + scbg(b%) * 22, y(b%) + scbg(b%) * 70, x(b%) + scbg(b%) * 33, y(b%) + scbg(b%) * 75, F4%, dis(b%)            putbox x(b%) + scbg(b%) * 5, y(b%) + scbg(b%) * 35, x(b%) + scbg(b%) * 15, y(b%) + scbg(b%) * 40, F1%, dis(b%)            putbox x(b%) + scbg(b%) * 25, y(b%) + scbg(b%) * 35, x(b%) + scbg(b%) * 35, y(b%) + scbg(b%) * 40, F1%, dis(b%)            putbox x(b%) + scbg(b%) * 15, y(b%) + scbg(b%) * 25, x(b%) + scbg(b%) * 25, y(b%) + scbg(b%) * 35, F5%, dis(b%)            putbox x(b%) + scbg(b%) * 16, y(b%) + scbg(b%) * 3, x(b%) + scbg(b%) * 18, y(b%) + scbg(b%) * 4, 0, dis(b%)            putbox x(b%) + scbg(b%) * 22, y(b%) + scbg(b%) * 3, x(b%) + scbg(b%) * 24, y(b%) + scbg(b%) * 4, 0, dis(b%)            putbox x(b%) + scbg(b%) * 16, y(b%) + scbg(b%) * 4, x(b%) + scbg(b%) * 18, y(b%) + scbg(b%) * 4, 7, dis(b%)            putbox x(b%) + scbg(b%) * 22, y(b%) + scbg(b%) * 4, x(b%) + scbg(b%) * 24, y(b%) + scbg(b%) * 4, 7, dis(b%)            putbox x(b%) + scbg(b%) * 17, y(b%) + scbg(b%) * 4, x(b%) + scbg(b%) * 17, y(b%) + scbg(b%) * 4, 0, dis(b%)            putbox x(b%) + scbg(b%) * 23, y(b%) + scbg(b%) * 4, x(b%) + scbg(b%) * 23, y(b%) + scbg(b%) * 4, 0, dis(b%)            putbox x(b%) + scbg(b%) * 20, y(b%) + scbg(b%) * 5, x(b%) + scbg(b%) * 20, y(b%) + scbg(b%) * 6, 114, dis(b%)            putbox x(b%) + scbg(b%) * 18, y(b%) + scbg(b%) * 8, x(b%) + scbg(b%) * 22, y(b%) + scbg(b%) * 8, 4, dis(b%)            F1% = 6        End If    End IfEnd Sub Sub showbadshot (x%)    Shared bgsht(), bgshosht%(), bgdela%(), bgshtht%(), bgshtdis(), robo%()    If bgsht(x%) > 0 And bgshosht%(x%) Then        putcircle bgdela%(x%), 100, bgshtht%(x%), 4 + robo%(x%), bgshtdis(x%)    End IfEnd Sub Sub showhealth    Shared gm%, ogm%, ph%, oph%    If gm% Then ph% = 100    If ph% - oph% Or gm% - ogm% Then        For y% = 194 To 199            hLINE 0, 319 * ph% / 100, y%, 1 + 14 * gm%            hLINE 319 * ph% / 100 + 1, 319, y%, 4        Next: ogm% = gm%: oph% = ph%    End IfEnd Sub Sub showmed (b%)    Shared med%(), scmed(), mx(), my(), medis(), nmeds%    '    Print b%, nmeds%    If med%(b%) Then        c% = (b% < nmeds%)        putbox mx(b%) + 0, my(b%) + 0, mx(b%) + scmed(b%) * 20, my(b%) + scmed(b%) * 20, 2 - 13 * c%, medis(b%)        putbox mx(b%) + scmed(b%) * 8, my(b%) + scmed(b%) * 3, mx(b%) + scmed(b%) * 13, my(b%) + scmed(b%) * 17, 2 - 2 * c%, medis(b%)        putbox mx(b%) + scmed(b%) * 3, my(b%) + scmed(b%) * 8, mx(b%) + scmed(b%) * 17, my(b%) + scmed(b%) * 13, -4 * c%, medis(b%)    End IfEnd Sub Sub showurshot (x%)    Shared mg%, fb%, sht(), shosht%(), dela%(), shtdis(), shtht%(), plasma%()    If plasma%(x%) = 0 And sht(x%) > 0 And shosht%(x%) Then putcircle dela%(x%), 100 + 30 / shtdis(x%), shtht%(x%) / 3 + 1, 0, shtdis(x%)    If plasma%(x%) = 1 And sht(x%) > 0 And shosht%(x%) Then putcircle dela%(x%), 100 + 10 / shtdis(x%), shtht%(x%) * 1.5, 13, shtdis(x%)End Sub Sub time    Shared ofram%, delta.t, fdt, kbmatrix%(), gm%, fram%    Static oldtimer&, oldtim, afram%, godit     fram% = fram% + 1    If Int(Timer) - oldtimer& Then        ofram% = fram%: fram% = 0: oldtimer& = Int(Timer)    End If     afram% = afram% + 1    If oldtim <> Timer Then        delta.t = delta.t * .8 + (Timer - oldtim) * .2 / afram%        oldtim = Timer: afram% = 0        If delta.t > .1 Or delta.t < 0 Then delta.t = .1        fdt = 14 * delta.t    End If     If kbmatrix%(36) And Timer > godit Then        If gm% Then gm% = 0 Else gm% = 1: 'cheat mode        godit = (Timer + 1) Mod 86400    End If End Sub Sub vline (x%, yt%, yb%, c%)    Static y%, xx%    Shared sb1%(), hicol%(), odd%(), bicol%(), bitex%: xx% = x% \ 2    If yt% < 8 Then yt% = 8    If yb% > 191 Then yb% = 191    If bitex% Then        For y% = yt% To yb%: sb1%(xx%, y%) = bicol%(c%): Next    ElseIf x% And 1 Then        For y% = yt% To yb%        sb1%(xx%, y%) = (sb1%(xx%, y%) And &HFF) + hicol%(c%): Next    Else        For y% = yt% To yb%: sb1%(xx%, y%) = (sb1%(xx%, y%) And &HFF00) + c%: Next    End IfEnd Sub Sub yourmove    Shared kbmatrix%(), ct(), st(), efa%, shift, delta.t, fdt    Shared px, py, sa, va, vx, vy, testin%(), bx, by    If kbmatrix%(56) Then        If kbmatrix%(77) Then            vx = vx + ct((efa% + 450) Mod 1800) * shift * delta.t            vy = vy + st((efa% + 450) Mod 1800) * shift * delta.t        End If        If kbmatrix%(75) Then            vx = vx + ct((efa% + 1350) Mod 1800) * shift * delta.t            vy = vy + st((efa% + 1350) Mod 1800) * shift * delta.t        End If    Else        If kbmatrix%(77) Then va = va + shift * 90 * delta.t        If kbmatrix%(75) Then va = va - shift * 90 * delta.t    End If    If kbmatrix%(72) Then        vx = vx + ct(efa%) * shift * delta.t        vy = vy + st(efa%) * shift * delta.t    End If    If kbmatrix%(80) Then        vx = vx - ct(efa%) * shift * delta.t        vy = vy - st(efa%) * shift * delta.t    End If    svx% = Sgn(vx): svy% = Sgn(vy)    crashtest px + .15 * svx%, py + .15 * svy%, vx, vy    crashtest px - .15 * svx%, py + .15 * svy%, vx, vy    crashtest px + .15 * svx%, py - .15 * svy%, vx, vy    px = px + vx * delta.t: py = py + vy * delta.t    sa = (sa + va * delta.t) Mod 1800    damp = 2 ^ -fdt    vx = vx * damp: vy = vy * damp: va = va * damp    testin%(4, Int(bx) + 2, Int(by) + 19) = 0End Sub Sub yourshot    Shared kbmatrix%(), nshots%, weap$, sht(), ammo%(), shosht%(), bx, by, mg%    Shared fdt, delta.t, snd%, fb%, ct(), st(), vshx(), vshy(), maxshots%    Shared sizex%, sizey%, shtx(), shty(), map%(), inx%, iny%, testin%()    Shared shtang%(), shtdis(), dis(), dela%(), shtht%(), fmap%(), efa%, sa, plasma%()    Shared nbguys%, nbguysm1%, bgh%(), bgx(), bgy(), vbx(), vby(), fire, kills%, robo%()    Static kk%     If fire > 0 Then fire = fire - fdt * nshots%     If kbmatrix%(2) Then mg% = 0: kk% = 0: nshots% = 1: weap$ = " plasma gun"    If kbmatrix%(3) Then mg% = 1: nshots% = 10: weap$ = "machine gun"    If kbmatrix%(4) Then mg% = 2: nshots% = 10: weap$ = "plas-cannon"     If kbmatrix%(29) And fire <= 0 And sht(kk%) <= 0 And ammo%(mg% And 1) > 0 Then        sht(kk%) = 20: shosht%(kk%) = 1: ammo%(mg% And 1) = ammo%(mg% And 1) - 1: 'create shot        shtx(kk%) = bx: shty(kk%) = by: fire = 18: If snd% Then Sound 200, 1        vshx(kk%) = ct(efa%) * 10: vshy(kk%) = st(efa%) * 10        plasma%(kk%) = 1 - (mg% And 1)        kk% = kk% + 1: If kk% = nshots% Then kk% = 0    End If     For x% = 0 To maxshots%        If shtx(x%) < 1 Or shtx(x%) > sizex% - 1 Or shty(x%) < 0 Or shty(x%) > sizey% - 1 Then shosht%(x%) = 0        If sht(x%) > 0 Then sht(x%) = sht(x%) - fdt        If sht(x%) > 0 And shosht%(x%) Then            crashtest shtx(x%), shty(x%), vshx(x%), vshy(x%)            k% = map%(inx%, iny%)            If k% Then shosht%(x%) = 0            shtx(x%) = shtx(x%) + vshx(x%) * delta.t: shty(x%) = shty(x%) + vshy(x%) * delta.t            If k% = 15 And sht(x%) > 0 Then                map%(inx%, iny%) = 0                testin%(4, inx% + 2, iny% + 19) = 0            End If             shtang%(x%) = atan2(shty(x%) - by, shtx(x%) - bx) * 5            shtdis(x%) = Sqr((shty(x%) - by) ^ 2 + (shtx(x%) - bx) ^ 2 + .01)            dis(x% + nbguys% * 2) = shtdis(x%)            dela%(x%) = (shtang%(x%) - sa + 1800) Mod 1800            shtht%(x%) = 30 / shtdis(x%)             'damage test            For y% = 0 To nbguysm1%                bsdis = (shty(x%) - bgy(y%)) * (shty(x%) - bgy(y%)) + (shtx(x%) - bgx(y%)) * (shtx(x%) - bgx(y%))                If bsdis < .36 And bgh%(y%) > 0 Then                    If bsdis < .16 Then bgh%(y%) = bgh%(y%) - sht(x%) / 2 - 5: shosht%(x%) = 0                    'vbx(y%) = vbx(y%) + vshx(x%) * .1: vby(y%) = vby(y%) + vshy(x%) * .1                    If plasma%(x%) Then                        bgh%(y%) = bgh%(y%) - sht(x%) * 1.5 - 50: shosht%(x%) = 0                        'vbx(y%) = vbx(y%) + vshx(x%) * .5: vby(y%) = vby(y%) + vshy(x%) * .5                    End If                    If bgh%(y%) < 1 Then                        fmap%(Int(bgx(y%)), Int(bgy(y%))) = 4 + 4 * robo%(y%): kills% = kills% + 1                        If snd% Then Sound 180, 5                    End If            End If: Next    End If: Next    'If sht(0) < 0 Then fb% = 0 End Sub Sub keys    Shared kbmatrix%()    i% = Inp(96): i$ = InKey$: kbmatrix%(i% And 127) = -(i% < 128)End Sub 

Navigation

[0] Message Index

Go to full version