at any time to end the game."
+ PRINT
+ PRINT , , "Good Luck!"
+ PRINT : PRINT
+ DO
+ INPUT "Difficulty 1 (hard) to 3 (easy) ==> "; Difficulty
+ LOOP UNTIL Difficulty >= 1 AND Difficulty <= 3
+END SUB
+SUB NextColor
+ CurColor = CurColor + 1
+ IF CurColor = 8 THEN CurColor = 9
+ IF CurColor > 15 THEN CurColor = 1
+ COLOR CurColor
+END SUB
+SUB Pause
+ FOR j = 1 TO Difficulty
+ T! = TIMER
+ WHILE T! = TIMER: WEND
+ NEXT j
+END SUB
+SUB Score
+ Turns = Turns - 1
+ COLOR 7
+ LOCATE 12, 30
+ IF Turns = 1 THEN
+ LastWord$ = "turn!"
+ ELSE
+ LastWord$ = "turns!"
+ END IF
+ PRINT "You made"; Turns; LastWord$
+ FOR i = 1 TO 4
+ FOR j = 1 TO 4
+ SOUND Note(j), Duration
+ NEXT j
+ NEXT i
+ FOR i = 1 TO 10
+ Pause
+ NEXT i
+END SUB
+SUB Setup
+ Crash = FALSE
+ Done = FALSE
+ Turns = 0
+ CLS
+ NextColor
+ FOR x = 1 TO 80
+ LOCATE 1, x
+ PRINT DrawChar$;
+ NEXT x
+ SOUND Note(1), Duration
+ NextColor
+
+ FOR y = 1 TO 25
+ LOCATE y, 80
+ PRINT DrawChar$;
+ NEXT y
+ SOUND Note(2), Duration
+ NextColor
+
+ FOR x = 79 TO 1 STEP -1
+ LOCATE 25, x
+ PRINT DrawChar$;
+ NEXT x
+ SOUND Note(3), Duration
+ NextColor
+
+ FOR y = 24 TO 3 STEP -1
+ LOCATE y, 1
+ PRINT DrawChar$;
+ NEXT y
+ SOUND Note(4), Duration
+ NextColor
+
+ TopLimit = 3: RightLimit = 80
+ BottomLimit = 25: LeftLimit = 1
+
+ k$ = INKEY$
+ IF LEN(k$) THEN Done = (ASC(k$) = ESC)
+END SUB
+
diff --git a/samples/curve-smoother/img/screenshot.png b/samples/curve-smoother/img/screenshot.png
new file mode 100644
index 00000000..4376938c
Binary files /dev/null and b/samples/curve-smoother/img/screenshot.png differ
diff --git a/samples/curve-smoother/index.md b/samples/curve-smoother/index.md
new file mode 100644
index 00000000..050ff005
--- /dev/null
+++ b/samples/curve-smoother/index.md
@@ -0,0 +1,32 @@
+[Home](https://qb64.com) • [News](../../news.md) • [GitHub](../../github.md) • [Wiki](../../wiki.md) • [Samples](../../samples.md) • [Media](../../media.md) • [Community](../../community.md) • [Rolodex](../../rolodex.md) • [More...](../../more.md)
+
+## SAMPLE: CURVE SMOOTHER
+
+![screenshot.png](img/screenshot.png)
+
+### Authors
+
+[🐝 STxAxTIC](../stxaxtic.md) [🐝 Fellippe Heitor](../fellippe-heitor.md)
+
+### Description
+
+```text
+This program demonstrates (i) linear interpolation to create a curve between points, (ii) a relaxation algorithm to "smooth over" a curve to remove sharp edges, and (iii) plotting with anti-aliasing.
+```
+
+### QBjs
+
+> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
+
+* [LOAD "curve-smoother.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/curve-smoother/src/curve-smoother.bas)
+* [RUN "curve-smoother.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/curve-smoother/src/curve-smoother.bas)
+* [PLAY "curve-smoother.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/curve-smoother/src/curve-smoother.bas)
+
+### File(s)
+
+* [curve-smoother.bas](src/curve-smoother.bas)
+
+🔗 [curve](../curve.md), [interpolation](../interpolation.md)
+
+
+Reference: [qb64forum](https://qb64forum.alephc.xyz/index.php?topic=184.0)
diff --git a/samples/curve-smoother/src/curve-smoother.bas b/samples/curve-smoother/src/curve-smoother.bas
new file mode 100644
index 00000000..0468bf15
--- /dev/null
+++ b/samples/curve-smoother/src/curve-smoother.bas
@@ -0,0 +1,311 @@
+'_OE
+
+Do Until _ScreenExists: Loop
+_Title "If these curves were smoother they'd steal your wife."
+
+' Hardware
+Screen _NewImage(800, 600, 32)
+_ScreenMove (_DesktopWidth \ 2 - _Width \ 2) - 3, (_DesktopHeight \ 2 - _Height \ 2) - 29
+
+' Meta
+Randomize Timer
+
+' Data structures
+Type Vector
+ x As Double
+ y As Double
+End Type
+
+' Object type
+Type Object
+ Elements As Integer
+ Shade As _Unsigned Long
+End Type
+
+' Object storage
+Dim Shared Shape(300) As Object
+Dim Shared PointChain(300, 500) As Vector
+Dim Shared TempChain(300, 500) As Vector
+Dim Shared ShapeCount As Integer
+Dim Shared SelectedShape As Integer
+
+Dim Shared MasterDraw As String
+
+' Initialize
+ShapeCount = 0
+
+' Main loop
+Do
+ Locate 1, 1: Print ShapeCount
+ Call UserInput
+ Call Graphics
+ _Limit 120
+Loop
+
+System
+
+Sub UserInput
+ TheReturn = 0
+ ' Keyboard input
+ kk = _KeyHit
+ Select Case kk
+ Case 32
+ Do: Loop Until _KeyHit
+ While _MouseInput: Wend
+ _KeyClear
+ Call NewMouseShape(7.5, 400, 15)
+ Cls
+ Case Asc("e"), Asc("E")
+ Open "Curves" + LTrim$(RTrim$(Str$(Int(Timer)))) + ".txt" For Output As #1
+ Print #1, MasterDraw
+ Close #1
+ End Select
+ If (kk) Then
+ _KeyClear
+ End If
+End Sub
+
+Sub Graphics
+ Dim k As Integer
+ Dim x1 As Double
+ Dim x2 As Double
+ Dim y1 As Double
+ Dim y2 As Double
+ MasterDraw = ""
+ Line (0, 0)-(_Width, _Height), _RGBA(0, 0, 0, 255), BF
+ Call cPrintstring(16 * 17, "PRESS SPACE and then drag MOUSE 1 to draw a new shape.")
+ For k = 1 To ShapeCount
+ z$ = "c" + Str$(Shape(k).Shade) + " "
+ For i = 1 To Shape(k).Elements - 1
+ x1 = PointChain(k, i).x
+ y1 = PointChain(k, i).y
+ x2 = PointChain(k, i + 1).x
+ y2 = PointChain(k, i + 1).y
+ Call lineSmooth(x1, y1, x2, y2, Shape(k).Shade)
+
+ ''''
+ '' Fellippe, this was it ...
+ 'dr = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
+ 'ang = (180 / 3.1416 * Atn((y2 - y1) / (x2 - x1)))
+ 'If (x2 < x1) Then
+ ' ang = 180 + ang
+ 'End If
+ 'z$ = z$ + "TA " + Str$(ang - 90) + " U" + Str$(dr) + " "
+ ''''
+ Next
+ ' Make a point to get DRAW started.
+ 'Call cPset(PointChain(k, 1).x, PointChain(k, 1).y, Shape(k).Shade)
+ ' Draw replaces CLine.
+ 'MasterDraw = MasterDraw + z$ + "___"
+ 'Draw z$
+ Next
+ _Display
+End Sub
+
+Sub NewMouseShape (rawresolution As Double, targetpoints As Integer, smoothiterations As Integer)
+ ShapeCount = ShapeCount + 1
+ numpoints = 0
+ xold = 999 ^ 999
+ yold = 999 ^ 999
+ Do
+ Do While _MouseInput
+ x = _MouseX
+ y = _MouseY
+ If (x > 0) And (x < _Width) And (y > 0) And (y < _Height) Then
+ If _MouseButton(1) Then
+ x = x - (_Width / 2)
+ y = -y + (_Height / 2)
+ delta = Sqr((x - xold) ^ 2 + (y - yold) ^ 2)
+ If (delta > rawresolution) And (numpoints < targetpoints - 1) Then
+ numpoints = numpoints + 1
+ PointChain(ShapeCount, numpoints).x = x
+ PointChain(ShapeCount, numpoints).y = y
+ Call cPset(x, y, _RGB(0, 255, 255))
+ xold = x
+ yold = y
+ End If
+ End If
+ End If
+ Loop
+ _Display
+ Loop Until Not _MouseButton(1) And (numpoints > 1)
+
+ Do While (numpoints < targetpoints)
+ rad2max = -1
+ kmax = -1
+ For k = 1 To numpoints - 1
+ xfac = PointChain(ShapeCount, k).x - PointChain(ShapeCount, k + 1).x
+ yfac = PointChain(ShapeCount, k).y - PointChain(ShapeCount, k + 1).y
+ rad2 = xfac ^ 2 + yfac ^ 2
+ If rad2 > rad2max Then
+ kmax = k
+ rad2max = rad2
+ End If
+ Next
+ For j = numpoints To kmax + 1 Step -1
+ PointChain(ShapeCount, j + 1).x = PointChain(ShapeCount, j).x
+ PointChain(ShapeCount, j + 1).y = PointChain(ShapeCount, j).y
+ Next
+ PointChain(ShapeCount, kmax + 1).x = (1 / 2) * (PointChain(ShapeCount, kmax).x + PointChain(ShapeCount, kmax + 2).x)
+ PointChain(ShapeCount, kmax + 1).y = (1 / 2) * (PointChain(ShapeCount, kmax).y + PointChain(ShapeCount, kmax + 2).y)
+ numpoints = numpoints + 1
+ Loop
+
+ For j = 1 To smoothiterations
+ For k = 2 To numpoints - 1
+ TempChain(ShapeCount, k).x = (1 / 2) * (PointChain(ShapeCount, k - 1).x + PointChain(ShapeCount, k + 1).x)
+ TempChain(ShapeCount, k).y = (1 / 2) * (PointChain(ShapeCount, k - 1).y + PointChain(ShapeCount, k + 1).y)
+ Next
+ For k = 2 To numpoints - 1
+ PointChain(ShapeCount, k).x = TempChain(ShapeCount, k).x
+ PointChain(ShapeCount, k).y = TempChain(ShapeCount, k).y
+ Next
+ Next
+
+ Shape(ShapeCount).Elements = numpoints
+ Shape(ShapeCount).Shade = _RGB(100 + Int(Rnd * 155), 100 + Int(Rnd * 155), 100 + Int(Rnd * 155))
+ SelectedShape = ShapeCount
+End Sub
+
+Sub cPset (x1 As Double, y1 As Double, col As _Unsigned Long)
+ PSet (_Width / 2 + x1, -y1 + _Height / 2), col
+End Sub
+
+Sub cLine (x1 As Double, y1 As Double, x2 As Double, y2 As Double, col As _Unsigned Long)
+ Line (_Width / 2 + x1, -y1 + _Height / 2)-(_Width / 2 + x2 - 0, -y2 + _Height / 2 + 0), col
+End Sub
+
+Sub cPrintstring (y, a As String)
+ _PrintString (_Width / 2 - (Len(a) * 8) / 2, -y + _Height / 2), a
+End Sub
+
+Sub lineSmooth (x0, y0, x1, y1, c As _Unsigned Long)
+ 'Credit: FellippeHeitor qb64.org (2020)
+ ' Adapted from https://en.wikipedia.org/w/index.php?title=Xiaolin_Wu%27s_line_algorithm&oldid=852445548
+ 'Edit: Correction to alpha channel (2020-11-20)
+
+ Dim plX As Integer, plY As Integer, plI
+
+ Dim steep As _Byte
+ steep = Abs(y1 - y0) > Abs(x1 - x0)
+
+ If steep Then
+ Swap x0, y0
+ Swap x1, y1
+ End If
+
+ If x0 > x1 Then
+ Swap x0, x1
+ Swap y0, y1
+ End If
+
+ Dim dx, dy, gradient
+ dx = x1 - x0
+ dy = y1 - y0
+ gradient = dy / dx
+
+ If dx = 0 Then
+ gradient = 1
+ End If
+
+ 'handle first endpoint
+ Dim xend, yend, xgap, xpxl1, ypxl1
+ xend = _Round(x0)
+ yend = y0 + gradient * (xend - x0)
+ xgap = (1 - ((x0 + .5) - Int(x0 + .5)))
+ xpxl1 = xend 'this will be used in the main loop
+ ypxl1 = Int(yend)
+ If steep Then
+ plX = ypxl1
+ plY = xpxl1
+ plI = (1 - (yend - Int(yend))) * xgap
+ GoSub plot
+
+ plX = ypxl1 + 1
+ plY = xpxl1
+ plI = (yend - Int(yend)) * xgap
+ GoSub plot
+ Else
+ plX = xpxl1
+ plY = ypxl1
+ plI = (1 - (yend - Int(yend))) * xgap
+ GoSub plot
+
+ plX = xpxl1
+ plY = ypxl1 + 1
+ plI = (yend - Int(yend)) * xgap
+ GoSub plot
+ End If
+
+ Dim intery
+ intery = yend + gradient 'first y-intersection for the main loop
+
+ 'handle second endpoint
+ Dim xpxl2, ypxl2
+ xend = _Round(x1)
+ yend = y1 + gradient * (xend - x1)
+ xgap = ((x1 + .5) - Int(x1 + .5))
+ xpxl2 = xend 'this will be used in the main loop
+ ypxl2 = Int(yend)
+ If steep Then
+ plX = ypxl2
+ plY = xpxl2
+ plI = (1 - (yend - Int(yend))) * xgap
+ GoSub plot
+
+ plX = ypxl2 + 1
+ plY = xpxl2
+ plI = (yend - Int(yend)) * xgap
+ GoSub plot
+ Else
+ plX = xpxl2
+ plY = ypxl2
+ plI = (1 - (yend - Int(yend))) * xgap
+ GoSub plot
+
+ plX = xpxl2
+ plY = ypxl2 + 1
+ plI = (yend - Int(yend)) * xgap
+ GoSub plot
+ End If
+
+ 'main loop
+ Dim x
+ If steep Then
+ For x = xpxl1 + 1 To xpxl2 - 1
+ plX = Int(intery)
+ plY = x
+ plI = (1 - (intery - Int(intery)))
+ GoSub plot
+
+ plX = Int(intery) + 1
+ plY = x
+ plI = (intery - Int(intery))
+ GoSub plot
+
+ intery = intery + gradient
+ Next
+ Else
+ For x = xpxl1 + 1 To xpxl2 - 1
+ plX = x
+ plY = Int(intery)
+ plI = (1 - (intery - Int(intery)))
+ GoSub plot
+
+ plX = x
+ plY = Int(intery) + 1
+ plI = (intery - Int(intery))
+ GoSub plot
+
+ intery = intery + gradient
+ Next
+ End If
+
+ Exit Sub
+
+ plot:
+ ' Change to regular PSET for standard coordinate orientation.
+ Call cPset(plX, plY, _RGB32(_Red32(c), _Green32(c), _Blue32(c), plI * _Alpha32(c)))
+ Return
+End Sub
+
diff --git a/samples/curve.md b/samples/curve.md
new file mode 100644
index 00000000..e8a5f474
--- /dev/null
+++ b/samples/curve.md
@@ -0,0 +1,9 @@
+[Home](https://qb64.com) • [News](../news.md) • [GitHub](../github.md) • [Wiki](../wiki.md) • [Samples](../samples.md) • [Media](../media.md) • [Community](../community.md) • [Rolodex](../rolodex.md) • [More...](../more.md)
+
+## SAMPLES: CURVE
+
+**[Curve Smoother](curve-smoother/index.md)**
+
+[🐝 STxAxTIC](stxaxtic.md) [🐝 Fellippe Heitor](fellippe-heitor.md) 🔗 [curve](curve.md), [interpolation](interpolation.md)
+
+This program demonstrates (i) linear interpolation to create a curve between points, (ii) a relax...
diff --git a/samples/cyperium.md b/samples/cyperium.md
index dec19369..215af02d 100644
--- a/samples/cyperium.md
+++ b/samples/cyperium.md
@@ -2,6 +2,12 @@
## SAMPLES BY CYPERIUM
+**[Plasma Effect](plasma-effect/index.md)**
+
+[🐝 Cyperium](cyperium.md) 🔗 [graphics](graphics.md), [plasma](plasma.md)
+
+Use the left mousebutton to draw a line, change color with the right mousebutton, the middle mous...
+
**[Space64](space64/index.md)**
[🐝 Cyperium](cyperium.md) 🔗 [game](game.md), [space shooter](space-shooter.md)
diff --git a/samples/danilin.md b/samples/danilin.md
new file mode 100644
index 00000000..105cc16b
--- /dev/null
+++ b/samples/danilin.md
@@ -0,0 +1,9 @@
+[Home](https://qb64.com) • [News](../news.md) • [GitHub](../github.md) • [Wiki](../wiki.md) • [Samples](../samples.md) • [Media](../media.md) • [Community](../community.md) • [Rolodex](../rolodex.md) • [More...](../more.md)
+
+## SAMPLES BY DANILIN
+
+**[Relief 3D](relief-3d/index.md)**
+
+[🐝 Danilin](danilin.md) 🔗 [graphics](graphics.md), [isometric](isometric.md)
+
+Isometric 3D demo.
diff --git a/samples/darokin/index.md b/samples/darokin/index.md
index fe186602..ad710d46 100644
--- a/samples/darokin/index.md
+++ b/samples/darokin/index.md
@@ -18,9 +18,9 @@ Created by QB community member darokin.
> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
-* [LOAD "darokin.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?src=https://qb64.com/samples/darokin/src/darokin.bas)
-* [RUN "darokin.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?mode=auto&src=https://qb64.com/samples/darokin/src/darokin.bas)
-* [PLAY "darokin.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?mode=play&src=https://qb64.com/samples/darokin/src/darokin.bas)
+* [LOAD "darokin.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/darokin/src/darokin.bas)
+* [RUN "darokin.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/darokin/src/darokin.bas)
+* [PLAY "darokin.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/darokin/src/darokin.bas)
### File(s)
diff --git a/samples/data-management.md b/samples/data-management.md
index 8d8a26fd..405b88aa 100644
--- a/samples/data-management.md
+++ b/samples/data-management.md
@@ -8,12 +8,30 @@
Money manager by Microsoft.
-**[Phone](phone/index.md)**
+**[MS Phone](ms-phone/index.md)**
[🐝 Microsoft](microsoft.md) 🔗 [data management](data-management.md)
Simple phone directory by Microsoft.
+**[Names](names/index.md)**
+
+[🐝 David Bannon](david-bannon.md) 🔗 [data management](data-management.md), [dos world](dos-world.md)
+
+' NAMES.BAS by David Bannon ' Copyright (C) 1992 DOS Resource Guide ' Published in Issue #6, N...
+
+**[Phone](phone/index.md)**
+
+[🐝 Hardin Brothers](hardin-brothers.md) 🔗 [data management](data-management.md), [dos world](dos-world.md)
+
+' ' PHONE.BAS by Hardin Brothers ' Copyright (C) 1992 DOS Resource Guide ' Published in Issue ...
+
+**[QB-NVentory](qb-nventory/index.md)**
+
+[🐝 Nathan Thomas](nathan-thomas.md) 🔗 [data management](data-management.md)
+
+# qbasic-nventory (i)nventory manager written in qbasic! This is a personal software project fro...
+
**[QCards](qcards/index.md)**
[🐝 Microsoft](microsoft.md) 🔗 [data management](data-management.md)
diff --git a/samples/dav.md b/samples/dav.md
index ac44a5d1..0615b880 100644
--- a/samples/dav.md
+++ b/samples/dav.md
@@ -7,3 +7,9 @@
[🐝 Dav](dav.md) 🔗 [game](game.md), [puzzle](puzzle.md)
'================ 'PIPES.BAS v1.0 '================ 'Connect the pipes puzzle game 'Coded by ...
+
+**[XE Hex Editor](xe-hex-editor/index.md)**
+
+[🐝 Dav](dav.md) 🔗 [editor](editor.md), [hex](hex.md)
+
+'============ 'XE.BAS v1.10 '============ 'A simple Binary File (HEX) editor. 'Coded by Dav on AU...
diff --git a/samples/david-bannon.md b/samples/david-bannon.md
new file mode 100644
index 00000000..d0514878
--- /dev/null
+++ b/samples/david-bannon.md
@@ -0,0 +1,9 @@
+[Home](https://qb64.com) • [News](../news.md) • [GitHub](../github.md) • [Wiki](../wiki.md) • [Samples](../samples.md) • [Media](../media.md) • [Community](../community.md) • [Rolodex](../rolodex.md) • [More...](../more.md)
+
+## SAMPLES BY DAVID BANNON
+
+**[Names](names/index.md)**
+
+[🐝 David Bannon](david-bannon.md) 🔗 [data management](data-management.md), [dos world](dos-world.md)
+
+' NAMES.BAS by David Bannon ' Copyright (C) 1992 DOS Resource Guide ' Published in Issue #6, N...
diff --git a/samples/david-ferrier.md b/samples/david-ferrier.md
new file mode 100644
index 00000000..b383b919
--- /dev/null
+++ b/samples/david-ferrier.md
@@ -0,0 +1,9 @@
+[Home](https://qb64.com) • [News](../news.md) • [GitHub](../github.md) • [Wiki](../wiki.md) • [Samples](../samples.md) • [Media](../media.md) • [Community](../community.md) • [Rolodex](../rolodex.md) • [More...](../more.md)
+
+## SAMPLES BY DAVID FERRIER
+
+**[Saver](saver/index.md)**
+
+[🐝 David Ferrier](david-ferrier.md) 🔗 [screensaver](screensaver.md), [dos world](dos-world.md)
+
+1 ' SAVER.BAS by David Ferrier 2 ' Copyright (C) 1992 DOS Resource Guide 3 ' Published in Issu...
diff --git a/samples/dec-to-frac/img/screenshot.png b/samples/dec-to-frac/img/screenshot.png
new file mode 100644
index 00000000..ad6d9b09
Binary files /dev/null and b/samples/dec-to-frac/img/screenshot.png differ
diff --git a/samples/dec-to-frac/index.md b/samples/dec-to-frac/index.md
new file mode 100644
index 00000000..2ac44eae
--- /dev/null
+++ b/samples/dec-to-frac/index.md
@@ -0,0 +1,63 @@
+[Home](https://qb64.com) • [News](../../news.md) • [GitHub](../../github.md) • [Wiki](../../wiki.md) • [Samples](../../samples.md) • [Media](../../media.md) • [Community](../../community.md) • [Rolodex](../../rolodex.md) • [More...](../../more.md)
+
+## SAMPLE: DEC TO FRAC
+
+![screenshot.png](img/screenshot.png)
+
+### Author
+
+[🐝 A&A De Pasquale](../a&a-de-pasquale.md)
+
+### Description
+
+```text
+' DEC_FRAC.BAS - Fraction/Decimal conversion functions
+' and sample program
+
+' by Antonio and Alfonso De Pasquale
+' Copyright (C) 1993 DOS Resource Guide
+' Published in Issue #10, July 1993, page 46
+
+==============================================================================
+
+--------------
+ DEC_FRAC.BAS
+--------------
+SYSTEM REQUIREMENTS:
+The version of QBasic that comes with DOS 5 or later, or Microsoft Quick Basic
+4.x.
+
+WHAT DEC_FRAC.BAS DOES:
+This program converts decimals to fractions and fractions to decimals.
+
+USING DEC_FRAC.BAS:
+To load the program in QBasic, type QBASIC DEC_FRAC.BAS (using path names if
+necessary) at the DOS prompt. Then run the program by selecting the Start
+option in QBasic's Run menu, or press Shift-F5. The screen will clear, then a
+menu will ask if you want to convert a decimal to a fraction or a fraction to
+a decimal.
+
+If you select decimal to fraction, you'll then be prompted to enter a number.
+Entering .4, for instance, yields the fractional conversion, 2/5. Entering
+.125 produces the fractional equivalent, 1/8.
+
+For fraction to decimal conversions, you enter fractions using the slash. For
+example, entering 3/7 gives a decimal answer of .4285714
+
+For further details on DEC_FRAC.BAS, see "Fraction Maker" (DRG #10, July 1993,
+page 45).
+```
+
+### QBjs
+
+> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
+
+* [LOAD "dec_frac.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/dec-to-frac/src/dec_frac.bas)
+* [RUN "dec_frac.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/dec-to-frac/src/dec_frac.bas)
+* [PLAY "dec_frac.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/dec-to-frac/src/dec_frac.bas)
+
+### File(s)
+
+* [dec_frac.bas](src/dec_frac.bas)
+
+🔗 [math](../math.md), [dos world](../dos-world.md)
diff --git a/samples/dec-to-frac/src/dec_frac.bas b/samples/dec-to-frac/src/dec_frac.bas
new file mode 100644
index 00000000..b843e8e0
--- /dev/null
+++ b/samples/dec-to-frac/src/dec_frac.bas
@@ -0,0 +1,123 @@
+' DEC_FRAC.BAS - Fraction/Decimal conversion functions
+' and sample program
+
+' by Antonio and Alfonso De Pasquale
+' Copyright (C) 1993 DOS Resource Guide
+' Published in Issue #10, July 1993, page 46
+
+DECLARE FUNCTION DecToFrac$ (decimal)
+DECLARE FUNCTION FracToDec (fraction$)
+
+MAIN:
+Cls: Locate 1, 25: Print "Fraction/Decimal Converter"
+Locate 2, 21: Print "by Antonio and Alfonso De Pasquale"
+Locate 3, 1: For x = 1 To 79: Print "=";: Next x
+Locate 5, 1: Print "Please select one of the following choices:"
+Locate 7, 10: Print "[D]ecimal to Fraction"
+Locate 8, 10: Print "[F]raction to Decimal"
+Locate 9, 10: Print "[Q]uit Program"
+
+Do
+ Locate 11, 1: Print Space$(79)
+ Locate 11, 1: Input "Please enter your choice (D/F/Q): ", choice$
+ choice$ = UCase$(Left$(choice$, 1))
+Loop Until choice$ = "D" Or choice$ = "F" Or choice$ = "Q"
+
+CONVERT:
+Select Case choice$
+ Case "Q"
+ Cls: End
+
+ Case "D"
+ Locate 13, 1: Print Space$(79)
+ Locate 13, 1: Input "Please enter a decimal value: ", decimal$
+ decimal = Val(decimal$)
+ If decimal = 0 Or Int(decimal) = decimal Then GoTo CONVERT
+ fraction$ = DecToFrac$(decimal)
+ Locate 16, 1: Print "The Decimal "; decimal; " is equal to the fraction; "; fraction$; ""
+
+ Case "F"
+ Locate 13, 1: Print Space$(79)
+ Locate 13, 1: Input "Please enter a fractional value: ", fraction$
+ fl$ = fraction$: fl$ = fl$ + " ": fl = InStr(1, fl$, "/")
+ If Val(fraction$) = 0 Or fl = 0 Then GoTo CONVERT
+ If (Mid$(fl$, fl - 1, 1) = " ") Or (Mid$(fl$, fl + 1, 1) = " ") Then GoTo CONVERT
+ decimal = FracToDec(fraction$)
+ Locate 16, 1: Print "The fraction "; fraction$; " is equal to the decimal "; decimal
+
+End Select
+
+Locate 19, 1: Print "Press Enter to continue";
+Do: Loop Until InKey$ = Chr$(13)
+GoTo MAIN
+End
+
+'*********************************************************
+'
+' ACTUAL CONVERSION FUNCTIONS BEGIN HERE
+'
+'*********************************************************
+
+Function DecToFrac$ (decimal)
+
+ decimal$ = Str$(decimal)
+ index = InStr(decimal$, ".")
+
+ If index = 1 Then
+ decimal$ = "0" + decimal$
+ index = index + 1
+ End If
+
+ whole$ = Left$(decimal$, index - 1)
+ dec$ = Mid$(decimal$, index, 10)
+
+ If Val(whole$) = 0 Then
+ whole$ = ""
+ End If
+
+ dec = Val(dec$)
+ dec = Int(dec * 1000 + .5)
+
+ num = dec
+ den = 1000
+
+ For pass = 0 To 3
+ For index = 10 To 1 Step -1
+ If (num / index = Int(num / index)) And (den / index) = Int(den / index) Then
+ num = (num / index)
+ den = (den / index)
+ End If
+ Next index
+ Next pass
+
+ fraction$ = whole$ + Str$(num) + "/" + Mid$(Str$(den), 2)
+ DecToFrac$ = fraction$
+
+End Function
+
+Function FracToDec (fraction$)
+
+ decimal = 0
+ dp = 0
+
+ index = InStr(fraction$, Chr$(32))
+
+ If index = 0 Then
+ f$ = fraction$
+ Else
+ whole$ = Left$(fraction$, index)
+ f$ = Mid$(fraction$, index + 1, 10)
+ End If
+
+ index = InStr(f$, "/")
+ num = Val(Left$(f$, index - 1))
+ den = Val(Mid$(f$, index + 1))
+
+ dp = num / den
+ decimal = Abs(Val(whole$)) + dp
+ If Left$(fraction$, 1) = "-" Then decimal = (-decimal)
+ If Left$(fraction$, 1) = "-" And decimal > 0 Then decimal = (-decimal)
+ FracToDec = decimal
+
+End Function
+
diff --git a/samples/diamond-pong/img/screenshot.png b/samples/diamond-pong/img/screenshot.png
new file mode 100644
index 00000000..6e523c10
Binary files /dev/null and b/samples/diamond-pong/img/screenshot.png differ
diff --git a/samples/diamond-pong/index.md b/samples/diamond-pong/index.md
new file mode 100644
index 00000000..e432e47a
--- /dev/null
+++ b/samples/diamond-pong/index.md
@@ -0,0 +1,74 @@
+[Home](https://qb64.com) • [News](../../news.md) • [GitHub](../../github.md) • [Wiki](../../wiki.md) • [Samples](../../samples.md) • [Media](../../media.md) • [Community](../../community.md) • [Rolodex](../../rolodex.md) • [More...](../../more.md)
+
+## SAMPLE: DIAMOND PONG
+
+![screenshot.png](img/screenshot.png)
+
+### Author
+
+[🐝 John Wolfskill](../john-wolfskill.md)
+
+### Description
+
+```text
+' Diamond Pong
+' by
+' John Wolfskill
+'
+' Copyright (C) 1993 DOS Resource Guide
+' Published in Issue #9, May 1993
+'
+' Requires IBM PC with CGA, EGA or VGA color monitor
+' A joystick is optional (recommended)
+
+==============================================================================
+
+-----------
+ DPONG.BAS
+-----------
+SYSTEM REQUIREMENTS:
+The version of QBasic that comes with DOS 5 or later, or Microsoft Quick Basic
+4.x. A joystick is optional.
+
+WHAT DPONG.BAS DOES:
+The object of this spin-off of the perennial favorite, Pong, is to score as
+many points as possible while propelling a bouncing diamond-shaped pong
+through goals located at opposite ends of the playing field.
+
+USING DPONG.BAS:
+To load the program in QBasic, type QBASIC DPONG.BAS (using path names if
+necessary) at the DOS prompt. Then run the program by selecting the Start
+option in QBasic's Run menu, or press Shift-F5. When the program starts, you
+are prompted for the type of monitor you use. Press the 1 key for VGA or the 2
+key for CGA or EGA. Next, select the appropriate input device, pressing 1 for
+the keyboard and 2 for the joystick.
+
+When the diamond-shaped pong appears, you have two minutes to rack up points.
+Although the games starts out easy, it becomes more difficult as your score
+increases: Walls, bumpers, and other impediments spring up to make play more
+challenging. Each time you score a point, you are rewarded with 15 seconds of
+extra playing time.
+
+To control the speed of your paddle, press the P key to decrease the speed and
+Shift-P to increase it. The S key and Shift-S control the speed of the pong in
+similar fashion. If yours is a relatively slow PC (or you're using the
+keyboard for input), you may need to adjust the paddle and pong speeds until
+the game feels comfortable.
+
+For further details on DPONG.BAS, see "Diamond Pong" (DRG #9, May 1993, page
+53) and "A Games the Thing" (DRG #9, May 1993, page 59).
+```
+
+### QBjs
+
+> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
+
+* [LOAD "dpong.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/diamond-pong/src/dpong.bas)
+* [RUN "dpong.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/diamond-pong/src/dpong.bas)
+* [PLAY "dpong.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/diamond-pong/src/dpong.bas)
+
+### File(s)
+
+* [dpong.bas](src/dpong.bas)
+
+🔗 [game](../game.md), [pong](../pong.md), [dos world](../dos-world.md)
diff --git a/samples/diamond-pong/src/dpong.bas b/samples/diamond-pong/src/dpong.bas
new file mode 100644
index 00000000..a35e8b38
--- /dev/null
+++ b/samples/diamond-pong/src/dpong.bas
@@ -0,0 +1,310 @@
+ ' Diamond Pong
+ ' by
+ ' John Wolfskill
+ '
+ ' Copyright (C) 1993 DOS Resource Guide
+ ' Published in Issue #9, May 1993
+ '
+ ' Requires IBM PC with CGA, EGA or VGA color monitor
+ ' A joystick is optional (recommended)
+ '
+ ' -- Program Initialization --
+ DEFINT A-Z
+ GOSUB PROMPT
+ INPUT "Select color monitor: <1> VGA <2> CGA, EGA Monitor"; VGA
+ GOSUB PROMPT
+ INPUT "Input device is <1> Keyboard <2> Joystick"; IDEV
+
+ IF IDEV = 2 THEN
+ CX = 30: CY = 30 ' default joystick calibration values
+ GOSUB PROMPT
+ INPUT "Do you want to calibrate the joystick (Y/N)"; YN$
+ IF UCASE$(YN$) = "Y" THEN GOSUB CALIBRATE
+ END IF
+
+ DIM PONG(1000) ' array to hold pong
+ DIM PADDLE(1000) ' array to hold paddle
+ '--- Paddle movement strings ---
+ L$ = CHR$(0) + CHR$(75): R$ = CHR$(0) + CHR$(77)
+ U$ = CHR$(0) + CHR$(72): D$ = CHR$(0) + CHR$(80)
+ DL$ = CHR$(0) + CHR$(79): UR$ = CHR$(0) + CHR$(73)
+ DR$ = CHR$(0) + CHR$(81): UL$ = CHR$(0) + CHR$(71)
+ ' -- Data for pong diamond --
+ DATA 60,60,66,66,60,72,54,66
+ CLICKS = 240 ' 240 seconds. Initial time allocation
+ PINCR = 4 ' default paddle speed (1-20)
+ TINC = 3 ' default pong speed (1-20)
+ IF VGA = 1 THEN SCREEN 13 ELSE SCREEN 1 ' set video mode
+ '-- Set up playfield --
+ WX = 20 ' left edge of pong table
+ WY = 20 ' top edge pong table
+ WX1 = 300 ' right edge of pong table
+ WY1 = 180 ' bottom edge of pong table
+ MIDY = 20 + (WY1 - WY) / 2 ' middle top (x) of pong table
+ MIDX = 20 + (WX1 - WX) / 2 ' middle top (y) of pong table
+ START! = TIMER ' reset game timer
+ '-----
+DO
+ CLS
+ BS = INT(((50 - 20) + 1) * RND + 20) ' random bumper size
+ GOSUB DRAWTABLE ' draw the pong table
+ '-- Setup the pong --
+ REDIM X(4), Y(4) ' arrays hold pong hotspots
+ RESTORE ' reset data pointer
+
+ FOR J = 1 TO 4
+ READ X(J) ' store the default pong hotspots
+ READ Y(J)
+ NEXT
+
+ PSET (X(1), Y(1)), 1 ' set the pong position
+ DRAW "F6G6H6E6BD2P14,1" ' draw it
+ GET (X(4), Y(1))-(X(2), Y(3)), PONG ' snapshot the pong
+ LINE (X(4), Y(1))-(X(2), Y(3)), 0, BF ' then erase it
+ X = X(4): Y = Y(1) ' set inital pong position
+ CDEEP = (Y(3) - Y(1)) + 1 ' pong depth
+ CWIDE = (X(2) - X(4)) + 1 ' pong width
+ '-- Setup the paddle --
+ PADX = 160: PADY = 100 ' initial paddle position
+ GOSUB MAKEPAD ' draw the paddle
+ GOSUB DISPLAY ' print parmeters
+ PINGX = TINC: PINGY = TINC ' initial pong movement
+ ' ------ Main processing loop -------
+DO
+ X$ = INKEY$
+
+ IF LEN(X$) THEN
+ IF LEN(X$) = 2 THEN GOSUB MOVEPADDLE ' check keyboard
+ IF X$ = "P" THEN IF PINCR < 20 THEN PINCR = PINCR + 1 ' faster paddle
+ IF X$ = "p" THEN IF PINCR > 1 THEN PINCR = PINCR - 1 ' slower paddle
+ IF X$ = "S" THEN IF TINC < 20 THEN TINC = TINC + 1 ' faster pong
+ IF X$ = "s" THEN IF TINC > 1 THEN TINC = TINC - 1 ' slower pong
+ GOSUB DISPLAY
+ END IF
+
+ IF X(2) > WX1 OR X(4) < WX THEN 'check for a goal
+ IF Y(1) > MIDY - 15 AND Y(3) < MIDY + 15 THEN
+ SCORE = SCORE + 1 ' increment score
+ START! = START! + 10 ' add bonus 10 secs as reward
+ SOUND 200, 1: SOUND 400, 1 ' make a happy sound!!
+ SOUND 600, 1: SOUND 800, 1 '
+ EXIT DO
+ END IF
+ END IF
+
+ GOSUB MOVEPONG ' move the pong
+ GOSUB COLLIDE ' check for collision
+ CURTIME! = TIMER ' get current time
+ ETIME! = CURTIME! - START! ' subtract to get elapsed time
+ IF ETIME! > 240 THEN EXITGAME = 1: EXIT DO ' time's up
+ LOCATE 25, 31: PRINT "TIME:"; 240 - INT(ETIME!);
+ LOOP
+
+ IF EXITGAME THEN
+ EXITGAME = 0
+ CLS : LOCATE 12, 17: PRINT "GAME OVER"
+ LOCATE 13, 13: PRINT "Final score "; SCORE;
+ LOCATE 14, 12: INPUT " Play again (Y/N)"; YN$
+ IF UCASE$(YN$) = "N" THEN EXIT DO
+ SCORE = 0: CLICKS = 240: START! = TIMER ' reset values for new game
+ END IF
+
+LOOP
+'---- End the game --
+CLS : END
+'---------
+MOVEPONG:
+ SEED = INT(((5 - (-5)) + 1) * RND(1) + (-5)) ' random bounce angle seed
+
+ IF X < WX THEN ' pong hit left wall
+ X(4) = WX: X(3) = WX + 6 ' reset pong hotspots
+ X(2) = WX + 12: X(1) = WX + 6
+ X = WX ' reset pong coordinates
+ PINGX = TINC: SOUND 1000, 1 ' make it bounce away
+ PINGY = TINC + SEED ' SEED creates pseudo-random bounce
+ END IF
+
+ IF X + CWIDE > WX1 THEN 'pong hit right wall
+ X(4) = WX1 - 12: X(3) = WX1 - 6 ' reset pong hotspots
+ X(2) = WX1: X(1) = WX1 - 6
+ X = WX1 - CWIDE ' reset pong x coordinate
+ PINGX = -TINC: SOUND 1000, 1 ' make it bounce away
+ PINGY = -TINC - SEED ' SEED creates pseudo-random bounce
+ END IF
+
+ IF Y < WY THEN ' pong hit top wall
+ Y(4) = WY + 6: Y(3) = WY + 12 ' reset pong hotspots
+ Y(2) = WY + 6: Y(1) = WY
+ Y = WY ' and pong y coordinate
+ PINGY = TINC: SOUND 1000, 1 ' make it bounce away
+ PINGX = -TINC + SEED ' SEED creates psuedo-random bounce
+ END IF
+
+ IF Y + CDEEP > WY1 THEN ' pong hit bottom wall
+ Y(4) = WY1 - 6: Y(3) = WY1 ' reset hotspots
+ Y(2) = WY1 - 6: Y(1) = WY1 - 12
+ Y = WY1 - CDEEP ' and pong y coordinate
+ PINGY = -TINC: SOUND 1000, 1 ' make it bounce away
+ PINGX = TINC - SEED ' SEED creates puedo-random bonce
+ END IF
+
+ FOR J = 1 TO 4 ' update all hotspot coordinates
+ X(J) = X(J) + PINGX
+ Y(J) = Y(J) + PINGY
+ NEXT
+
+ PUT (X, Y), PONG, XOR ' print the pong
+
+
+ IF IDEV = 2 THEN ' if joystick in use
+ AA = STICK(0): BB = STICK(1) ' get x,y coordinates
+ DG = 0 ' set the activity flag
+ IF AA < CX - 8 AND BB > CY - 8 THEN X$ = DL$: DG = 1' move down and left
+ IF AA > CX + 8 AND BB < CY - 8 THEN X$ = UR$: DG = 1' move up and right
+ IF AA > CX + 8 AND BB > CY + 8 THEN X$ = DR$: DG = 1' move down and right
+ IF AA < CX - 8 AND BB < CY - 8 THEN X$ = UL$: DG = 1' move up and left
+
+ IF DG = 0 THEN
+ IF AA < CX - 8 THEN X$ = L$: DG = 1 ' move left
+ IF AA > CX + 8 THEN X$ = R$: DG = 1 ' move right
+ IF BB < CY - 8 THEN X$ = U$: DG = 1 ' move up
+ IF BB > CY + 8 THEN X$ = D$: DG = 1 ' move down
+ END IF
+
+ IF DG THEN GOSUB MOVEPADDLE ' move the paddle
+ ELSE
+ GOSUB SWAIT ' if no joystick, a small time delay
+ END IF
+
+ PUT (X, Y), PONG, XOR ' erase the pong
+ IF HIT THEN HIT = 0: TINC = TTINC ' reset pong accelerator flag
+
+ IF IDEV = 2 THEN ' if joystick installed
+ GOSUB MOVEPADDLE ' move the paddle
+ ELSE
+ GOSUB SWAIT ' create a small time delay
+ END IF
+
+ X = X + PINGX ' move x coordinate of pong
+ Y = Y + PINGY ' move y coordinate of pong
+ RETURN
+'--- Print paddle/pong speed and score --
+DISPLAY:
+ LOCATE 25, 1: PRINT "SCORE:"; : PRINT USING "##"; SCORE;
+ LOCATE 25, 11: PRINT "PD:"; : PRINT USING "##"; TINC;
+ LOCATE 25, 21: PRINT "AD:"; : PRINT USING "##"; PINCR;
+ RETURN
+'-- Print the paddle --
+PP:
+ PUT (PADX, PADY), PADDLE, XOR ' print the paddle
+ RETURN
+'-- Check paddle bounds and erase it --
+PP1:
+ IF PADY + PDEEP > WY1 THEN PADY = WY1 - PDEEP ' keep paddle in bounds
+ IF PADY < WY THEN PADY = WY
+ IF PADX + PWIDE > WX1 THEN PADX = WX1 - PWIDE
+ IF PADX < WX THEN PADX = WX
+ PUT (PADX, PADY), PADDLE, XOR ' erase the paddle
+ RETURN
+'-- Move the paddle --
+MOVEPADDLE:
+ GOSUB PP
+ IF X$ = D$ THEN PADY = PADY + PINCR: PADY1 = PADY1 + PINCR
+ IF X$ = U$ THEN PADY = PADY - PINCR: PADY1 = PADY1 - PINCR
+ IF X$ = L$ THEN PADX = PADX - PINCR: PADX1 = PADX1 - PINCR
+ IF X$ = R$ THEN PADX = PADX + PINCR: PADX1 = PADX1 + PINCR
+ IF X$ = UR$ THEN PADX = PADX + PINCR: PADY = PADY - PINCR
+ IF X$ = UL$ THEN PADX = PADX - PINCR: PADY = PADY - PINCR
+ IF X$ = DR$ THEN PADX = PADX + PINCR: PADY = PADY + PINCR
+ IF X$ = DL$ THEN PADX = PADX - PINCR: PADY = PADY + PINCR
+ GOSUB PP1
+ RETURN
+'-- Draw the playing field --
+DRAWTABLE:
+ LINE (WX - 1, WY - 1)-(WX1 + 1, WY1 + 1), 2, B ' draw the playfield
+ LINE (WX1 + 1, MIDY - 15)-(WX1 + 1, MIDY + 15), 0, B ' right goal
+ LINE (WX - 1, MIDY - 15)-(WX - 1, MIDY + 15), 0, B ' left goal
+
+ IF SCORE > 1 THEN
+ LINE (MIDX - 3, WY)-(MIDX + 3, WY + (BS)), 3, BF ' top bumper
+ LINE (MIDX - 4, WY + (BS))-(MIDX + 4, WY + (BS)), 3, B ' top bumper rail
+ END IF
+
+ IF SCORE > 2 THEN
+ LINE (MIDX - 16, WY1)-(MIDX - 10, WY1 - (BS)), 3, BF ' btm bumper
+ LINE (MIDX - 17, WY1 - (BS))-(MIDX - 9, WY1 - (BS)), 3, B ' btm bumper rail
+ END IF
+
+ IF SCORE > 3 THEN
+ CIRCLE (MIDX + 50, MIDY - 20), 10, 3 'left round bumper
+ PAINT (MIDX + 50, MIDY - 20), 3, 3
+ END IF
+
+ IF SCORE > 4 THEN
+ CIRCLE (MIDX - 50, MIDY + 20), 10, 3 ' right round bumper
+ PAINT (MIDX - 50, MIDY + 20), 3, 3
+ END IF
+
+ IF SCORE > 8 THEN
+ LINE (WX1 - 32, MIDY - 5)-(WX1 - 22, MIDY + 5), 3, BF ' right goal block
+ END IF
+
+ IF SCORE > 10 THEN
+ LINE (WX + 32, MIDY - 5)-(WX + 22, MIDY + 5), 3, BF ' left goal block
+ END IF
+
+ RETURN
+
+'-- Create a short time delay to control XOR flashing --
+SWAIT:
+ T! = TIMER: WHILE T! = TIMER: WEND: RETURN
+'--- Check for a collision between color 3 objects and the pong --
+COLLIDE:
+ SIDE = 0 ' reset collision flag
+
+ FOR J = 1 TO 4
+ IF POINT(X(J), Y(J)) = 3 THEN ' is the pixel under hotspot color 3 ?
+ SIDE = J ' collision on this side!
+ SOUND 2000, 1 ' sound the collision alert
+ EXIT FOR ' abandon ship
+ END IF
+ NEXT
+
+ IF SIDE THEN
+ TTINC = TINC ' save the old pong speed
+ TINC = INT(((12 - 5) + 1) * RND(1) + 5) ' random pong accelerator
+ HIT = 1 ' set the accelerator flag
+ END IF
+
+ IF SIDE = 1 THEN PINGX = 0: PINGY = TINC ' collison top side
+ IF SIDE = 2 THEN PINGX = -TINC: PINGY = 0 ' collision right side
+ IF SIDE = 3 THEN PINGX = 0: PINGY = -TINC ' collsion bottom side
+ IF SIDE = 4 THEN PINGX = TINC: PINGY = 0 ' collsion left side
+ RETURN
+'-- Create the paddle --
+MAKEPAD:
+ PADX1 = PADX + 4: PADY1 = PADY + 18 ' paddle coordinates
+ PWIDE = (PADX1 - PADX) + 1 ' paddle width
+ PDEEP = (PADY1 - PADY) + 1 ' paddle depth
+ LINE (PADX, PADY)-(PADX1, PADY1), 3, BF ' create the paddle
+ GET (PADX, PADY)-(PADX1, PADY1), PADDLE ' snapshot the paddle
+ LINE (PADX, PADY)-(PADX1, PADY1), 0, BF ' then erase it
+ PUT (PADX, PADY), PADDLE, XOR ' place it on the screen
+ RETURN
+'---- Erase the screen --
+PROMPT:
+ CLS : LOCATE 12, 12 ' prepare to display the prompt
+ RETURN
+'-- Calibrate the joystick --
+CALIBRATE:
+ GOSUB PROMPT
+ PRINT "Please center the joystick lever. Press ";
+ DO
+ X$ = INKEY$
+ IF X$ = CHR$(13) THEN
+ CX = STICK(0): CY = STICK(1) ' read joystick centerline values
+ RETURN
+ END IF
+ LOOP
+
+
diff --git a/samples/didris/img/screenshot.png b/samples/didris/img/screenshot.png
new file mode 100644
index 00000000..8a3d41c3
Binary files /dev/null and b/samples/didris/img/screenshot.png differ
diff --git a/samples/didris/index.md b/samples/didris/index.md
new file mode 100644
index 00000000..298b5aae
--- /dev/null
+++ b/samples/didris/index.md
@@ -0,0 +1,33 @@
+[Home](https://qb64.com) • [News](../../news.md) • [GitHub](../../github.md) • [Wiki](../../wiki.md) • [Samples](../../samples.md) • [Media](../../media.md) • [Community](../../community.md) • [Rolodex](../../rolodex.md) • [More...](../../more.md)
+
+## SAMPLE: DIDRIS
+
+![screenshot.png](img/screenshot.png)
+
+### Author
+
+[🐝 Dietmar Moritz](../dietmar-moritz.md)
+
+### Description
+
+```text
+'________________________This_is_the_unbelievable
+'________ÜÜÜ___ÜÜ_________ÜÜÜ____________ÜÜ
+'_______Û___Û_ßÜÜß_______Û___Û__________ßÜÜß_________________________Ü__Ü
+'_______Û___Û__ÜÜ________Û___Û__ÜÜÜ_ÜÜ___ÜÜ____ÜÜÜÜ________________Üß_Üß__Ü
+'__Üßßßß____Û_Û__Û__Üßßßß____Û_Û___ß__Û_Û__Û_Üß____ßÜ__________ÜÜ_ÜÜ____Üß
+'_Û_________Û_Û__Û_Û_________Û_Û___Üßß__Û__Û_ßÜ__ßÜÜß_________ÛÜ_ÛÜ_Û
+'_Û_________Û_Û__Û_Û_________Û_Û__Û_____Û__Û_ÜßßÜ__ßÜ__Üßßßßßß____ßß
+'_ßÜ________Û_Û__Û_ßÜ________Û_Û__Û_____Û__Û_ßÜ____Üß__Û______________ÜßßÜ
+'___ßßßßßßßß___ßß____ßßßßßßßß___ßß_______ßß____ßßßß_____ßßßßßÛ______Ü___Üß
+'______________________________________ver_2.2_______________ßÜÜÜÜÜß__Ü__Û
+'__________________________________by_Dietmar_Moritz_________Û_________ßß
+'____________________________________________________________ßÜÜÜÜÜÜ
+```
+
+### File(s)
+
+* [didris.bas](src/didris.bas)
+* [didris.zip](src/didris.zip)
+
+🔗 [game](../game.md), [tetris](../tetris.md)
diff --git a/samples/didris/src/didris.bas b/samples/didris/src/didris.bas
new file mode 100644
index 00000000..62ad01d5
--- /dev/null
+++ b/samples/didris/src/didris.bas
@@ -0,0 +1,2614 @@
+' This is the unbelievable
+'
+'
+'
+'
+'
+'
+'
+'
+' ver 2.2
+' by Dietmar Moritz
+'
+'
+' I started this program in summer '97 and finished November '98.
+'
+' I've done this with Quick Basic 4.5, but you can also run it under QBasic!
+' I still have some good ideas for this game, but I wanted to write a game
+' which I can compile in only one EXE-File, so I shortened the source code.
+' Maybe I will write a new, much more bigger DIDRIS for Quick Basic 4.5 only!
+' ---------------------------------------------------------------------------
+' Please do NOT run this program under Windows!!!
+' It's not as fast as in good old DOS!!!
+' I also recommend Quick Basic 4.5!!!
+' ---------------------------------------------------------------------------
+' Please read the READ ME!!!
+' ---------------------------------------------------------------------------
+' If you want to e-mail me: didi@forfree.at
+' or: didi_op@hotmail.com
+' ---------------------------------------------------------------------------
+' Have fun!!! :-)
+
+' a740g: QB64 changes
+' - Replaced Play(x) on/off with Timer(2) on/off (seems to work mostly). There are some sideeffects. :(
+' - Added delays wherever animations are too fast
+' - Using QB64 defined _pi
+
+$Resize:Smooth
+_FullScreen _SquarePixels , _Smooth
+
+Dim Shared bst(1 To 41, 1 To 10, 1 To 10)
+Dim Shared buch(1 To 5, 1 To 19, 1 To 19) As Integer
+
+Dim Shared bomb As Integer
+Dim Shared nextbomb As Integer
+
+Dim Shared hf1(1 To 14, 2 To 14) As Integer
+Dim Shared hf2(1 To 14, 2 To 14) As Integer
+Dim Shared helion As Integer
+Dim Shared blowheli As Integer
+Dim Shared helix As Integer
+Dim Shared heliy As Integer
+Dim Shared helilt
+Dim Shared rotor As Integer
+
+Dim Shared leiter(1 To 14, 1 To 14) As Integer
+
+Dim Shared tropfen(1 To 14, 1 To 14) As Integer
+
+Dim Shared boom(1 To 14, 1 To 14) As Integer
+
+Dim Shared para(1 To 14, 1 To 14) As Integer
+Dim Shared paraon
+
+Dim Shared maxfeld(1 To 14, 1 To 28) As Integer
+Dim Shared bc As Integer
+Dim Shared maxframe As Integer
+Dim Shared maxstill As Integer
+
+Const linienpunkte = 15
+
+Const maxacid = 100
+Const acidplus = 4
+Dim Shared acid As Integer
+Dim Shared showallacid As Integer
+
+Const belegt% = 1
+Const Frei% = 0
+Const maxlinie = 4
+
+Const fb = 12
+Const fh = 23
+Const bg = 14
+
+Dim Shared maxposx As Integer
+Dim Shared maxposy As Integer
+Dim Shared maxlt
+
+Dim Shared feld%(-1 To fb + 3, -1 To fh + 2)
+Dim Shared farb%(-1 To fb + 3, -1 To fh + 2)
+Dim Shared blockx%(4)
+Dim Shared blocky%(4)
+
+Const Musikanzahl = 3
+Dim Shared Musiklaenge(Musikanzahl) As Integer
+Dim Shared Musik$(50, Musikanzahl)
+Dim Shared Musikstueck%
+Dim Shared musi%
+Dim Shared nomusik
+
+Dim Shared punkte As Integer
+Dim Shared Linienweg As Integer
+Dim Shared Level As Integer
+
+Dim Shared nstr%
+
+Dim Shared endeundaus
+
+Dim Shared hoho%(4)
+
+Dim Shared already As Integer
+
+Dim Shared yn(1 To 4) As Integer
+For I = 1 To 4
+ yn(I) = 1
+Next I
+
+getsprites
+
+init
+init.ffont
+
+
+Randomize Timer
+
+Do
+
+ Screen 12
+
+ Cls
+ If already = 0 Then
+ Intro
+ Cls
+ Titel
+ Cls
+ End If
+
+ menu
+ main
+
+ Palette
+ Color
+ clear.var
+ already = 1
+Loop
+
+keine:
+h = 1
+Resume Next
+
+
+
+hinter:
+If musi% < Musiklaenge(Musikstueck%) Then
+ musi% = musi% + 1
+Else
+ musi% = 1:
+ m% = Musikstueck%
+ Do
+ Musikstueck% = Int(Rnd * (Musikanzahl)) + 1
+ Loop Until Musikstueck% <> m%
+ Play "mb p1"
+End If
+Play "mb" + Musik$(musi%, Musikstueck%)
+Return
+
+'Fallschirm
+Data ,,,,2,2,1,1,2,2,,,,
+Data ,,2,2,1,2,2,2,2,1,2,2,,
+Data 1,2,2,2,2,1,2,2,1,2,2,2,2,1
+Data 2,1,2,2,,,,,,2,2,2,1,2
+Data 2,2,1,7,,,,,,,7,1,2,2
+Data 7,,,7,,,,,,,7,,,7
+Data ,7,,,7,,,,,7,,,7,
+Data ,7,,,7,,,,,7,,,7,
+Data ,,7,,,7,,,7,,,7,,
+Data ,,7,,,7,,,7,,,7,,
+Data ,,,7,,7,,,7,,7,,,
+Data ,,,7,,,7,7,,,7,,,
+Data ,,,,7,,7,7,,7,,,,
+Data ,,,,7,,7,7,,7,,,,
+
+'Explosion
+Data 4,,,,,,4,4,,,,,4,4
+Data 4,4,,,,4,4,4,4,,,4,4,4
+Data 4,4,4,,,4,12,12,4,4,4,4,4,4
+Data 4,4,4,4,4,4,12,12,12,12,12,12,4,
+Data ,4,4,12,12,12,12,12,14,14,12,12,4,
+Data ,,4,12,14,14,14,14,14,14,14,12,4,4
+Data ,4,4,12,12,14,14,14,14,12,12,12,12,4
+Data ,4,12,12,14,14,14,14,14,14,12,12,4,4
+Data 4,4,12,12,12,14,14,14,14,14,12,4,4,
+Data 4,12,12,12,14,14,12,12,14,14,12,4,,
+Data 4,4,4,12,12,12,12,12,12,12,12,4,,
+Data ,,4,12,12,4,4,4,4,12,12,4,4,
+Data ,4,4,12,4,4,,,4,4,4,4,4,4
+Data ,4,4,4,4,,,,,4,,,4,4
+
+'Tropfen
+Data ,,,,,,1,,,,,,,
+Data ,,,,,,1,1,,,,,,
+Data ,,,,,,1,1,1,,,,,
+Data ,,,,,,1,2,1,,,,,
+Data ,,,,,1,1,2,1,1,,,,
+Data ,,,,,1,2,2,2,1,,,,
+Data ,,,,1,1,2,10,2,1,1,,,
+Data ,,,1,1,2,2,10,2,2,1,,,
+Data ,,1,1,2,2,3,10,10,2,1,1,,
+Data ,,1,2,2,3,10,10,10,2,2,1,,
+Data ,,1,2,2,10,10,10,10,2,2,1,,
+Data ,,1,1,2,2,10,10,2,2,1,,,
+Data ,,,1,1,2,2,2,2,1,1,,,
+Data ,,,,1,1,1,1,1,1,,,,
+
+'Leiter
+Data ,6,,,,,,,,,,6,,
+Data ,6,,,,,,,,,6,6,,
+Data 6,7,6,6,6,6,6,6,6,6,7,,,
+Data 6,6,,,,,,,,,6,6,,
+Data ,6,,,,,,,,,,6,,
+Data ,7,6,6,6,6,6,6,6,6,6,7,,
+Data ,6,,,,,,,,,,6,,
+Data ,6,,,,,,,,,,6,,
+Data ,6,,,,,,,,,,6,,
+Data 6,7,6,6,6,6,6,6,6,6,6,7,,
+Data 6,,,,,,,,,,6,,,
+Data 6,,,,,,,,,,6,,,
+Data 6,7,6,6,6,6,6,6,6,6,7,6,,
+Data ,6,,,,,,,,,,6,,
+
+'max
+Data ,,,,,8,8,8,8,,,,,
+Data ,,,,8,8,8,8,8,8,,,,
+Data ,,,,,12,9,9,12,,,,,
+Data ,,,,,12,12,12,12,,,,,
+Data ,,,,,,12,12,,,,,,
+Data ,,,,2,2,2,8,7,2,,,,
+Data ,,,8,2,8,2,2,2,2,7,,,
+Data ,,2,7,,7,8,2,2,,8,2,,
+Data ,,13,,,2,2,7,8,,,13,,
+Data ,,,,,8,2,2,2,,,,,
+Data ,,,,,7,2,8,2,,,,,
+Data ,,,,8,2,,,7,2,,,,
+Data ,,,,7,2,,,2,8,,,,
+Data ,,,6,6,6,,,6,6,6,,,
+
+Data ,,,,,8,8,8,8,,,,,
+Data ,,,,8,8,8,8,8,8,,,,
+Data ,,,,,12,9,9,12,,,,,
+Data ,,13,,,12,12,12,12,,,13,,
+Data ,,2,7,,,12,12,,,8,2,,
+Data ,,,8,2,2,2,8,7,2,7,,,
+Data ,,,8,2,8,2,2,2,2,,,,
+Data ,,,,,7,8,2,2,,,,,
+Data ,,,,,2,2,7,8,,,,,
+Data ,,,,,8,2,2,2,,,,,
+Data ,,,,,7,2,8,2,,,,,
+Data ,,,,8,2,,,7,2,,,,
+Data ,,,,7,2,,,2,8,,,,
+Data ,,,6,6,6,,,6,6,6,,,
+
+'heli
+Data ,,,,,,,,,,,,,,,15,15,,,,,,,,,,,
+Data ,,,,,,,,,,,,,,4,4,4,4,4,4,4,4,,,,,,
+Data 2,4,,,,,,,,,,,4,4,4,4,4,4,4,4,4,4,1,1,,,,
+Data 4,4,7,,,,,,,,,,4,4,4,4,4,,,,4,4,1,1,1,,,
+Data 4,7,7,7,,,,,,,,4,4,4,4,4,4,,,,4,4,4,1,1,1,,
+Data 7,7,8,7,7,,,,,,,4,4,4,4,4,4,,,,4,4,4,1,1,1,,
+Data 4,7,7,7,4,4,4,4,4,4,4,4,4,4,4,4,4,,,,,4,4,4,1,1,,
+Data 4,4,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,,,,,4,4,4,4,4,,
+Data ,,,,,,,,,,,4,4,4,4,4,4,,,,,4,4,8,8,8,8,8
+Data ,,,,,,,,,,,,4,4,4,4,4,4,4,4,4,4,4,4,4,4,,
+Data ,,,,,,,,,,,,,4,4,4,4,4,4,4,4,4,4,4,4,,,
+Data ,,,,,,,,,,,,,,,4,,,,,,,4,,,,8,
+Data ,,,,,,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+
+'Font
+Data 1,1,1,1,,,1,,,1,,1,1,1,,,1,,,1,1,1,1,1,,,1,1,1,,1,,,,,1,,,,,1,,,,1,,1,1,1,
+Data 1,1,1,1,,,1,,,1,,1,,,1,,1,,,1,1,1,1,1,,1,1,1,1,1,1,,,,,1,1,1,1,,1,,,,,1,1,1,1,1
+Data 1,,,,1,1,1,,,1,1,,1,,1,1,,,1,1,1,,,,1,,1,1,1,,1,,,,1,1,,,,1,1,,,,1,,1,1,1,
+Data 1,1,1,1,,1,,,,1,1,1,1,1,,1,,,,,1,,,,,,1,1,1,,1,,,,1,1,,1,,1,1,,,1,1,,1,1,1,1
+Data 1,1,1,1,,1,,,,1,1,1,1,1,,1,,,1,,1,,,,1,,1,1,1,1,1,,,,,,1,1,1,,,,,,1,1,1,1,1,
+Data 1,1,1,1,1,,,1,,,,,1,,,,,1,,,,,1,,,1,,,,1,1,,,,1,1,,,,1,1,,,,1,,1,1,1,
+Data 1,,,,1,,1,,1,,,,1,,,,,1,,,,,1,,,,1,1,1,,1,,,1,1,1,,1,,1,1,1,,,1,,1,1,1,
+Data ,,1,,,,1,1,,,,,1,,,,,1,,,,1,1,1,,,1,1,1,,1,,,,1,,,1,1,,,1,,,,1,1,1,1,1
+Data 1,1,1,1,,,,,,1,,1,1,1,,,,,,1,1,1,1,1,,,,,1,,,,1,1,,,1,,1,,1,1,1,1,1,,,,1,
+Data 1,1,1,1,,1,,,,,1,1,1,1,,,,,,1,1,1,1,1,,,1,1,1,,1,,,,,1,1,1,1,,1,,,,1,,1,1,1,
+Data 1,1,1,1,1,,,,,1,,,,1,,,,1,,,,,1,,,,1,1,1,,1,,,,1,,1,1,1,,1,,,,1,,1,1,1,
+Data ,1,1,1,,1,,,,1,,1,1,1,1,,,,,1,,1,1,1,,,,,,,,1,,,,,,,,,,1,,,,,,,,
+Data ,,,,,,,,,,1,1,1,1,,,,,,,,,,,
+
+'READY
+Data 7,3,13,,3,,12,,3,,12,,3,,11,,5,,10,,5,,10,,5,,9,,7,,9,5,2,,x,,2,,7,6,3,,6,,9,,6,,9,,6,,9,,5,,11,,4,,11,,4,,11,,4,,11,,2,2,13,2,2,10,6,,10,2,4,,12,,3,,13,,2,
+Data 13,,2,,x,,,,x,,,,x,,,,x,,,,x,,,,x,,,,x,,,,x,,,,13,2,,,13,,2,,12,,3,,10,2,4,,9,,5,,11,5,3,12,4,,12,,3,,2,10,4,,,,x,,,,x,,,,x,,,,x,,,,x,,2,8
+Data 6,,10,,5,,2,8,6,,,,x,,,,x,,,,x,,,,x,,,,x,,2,10,4,,12,,,2,x,,3,7,9,,7,2,7,,9,,6,,10,,5,,10,,5,,10,,5,,10,,5,,9,,6,,7,2,7,,4,3,9,,3,,12,,3,,12,,4,,11,,5,
+Data 10,,6,,9,,7,,8,,8,,7,,9,,4,2,11,4,3,,9,,5,,,,7,,,,4,,2,,5,,2,,5,,,,5,,,,6,,2,,3,,2,,7,,,,3,,,,8,,2,,,,2,,9,,2,,2,,11,,3,,13,,,,x,,,,x,,,,x,,,,x,,,,x,,,,x,,,,x,,,,x,,,,7,7,3,7
+
+Data "T240l8n38n39n40l4n48l8n40l4n48l8n40l4n48p64p64l8n48n50"
+Data "l8n51n52n48n50l4n52l8n47l4n50l3n48l8n38n39"
+Data "l8n40l4n48l8n40l4n48l8n40l4n48p64p64l8n45n43n42l8n45"
+Data "l8n48l4n52l8n50l8n48l8n45l3n50l8n38n39n40l4n48"
+Data "l8n40l4n48l8n40l4n48p64p64l8n48n50n51n52n48n50"
+Data "l4n52l8n47l4n50n48p64l8n48n50n52n48n50l4n52"
+Data "l8n48n50n48n52n48l8n50l4n52l8n48n50n48"
+Data "l8n52n48n50l4n52l8n47l4n50l4n48p64l8n40l8n41l8n42"
+Data "l4n43l8n45l4n43l8n40l8n41l8n42l4n43l8n45l4n43l8n52"
+Data "l8n48l8n43l8n45l8n47l8n48l8n50l8n52l8n50l8n48l8n50"
+Data "l4n43p64l8n43l8n40l8n41l4n43l8n45l4n43l8n40l8n41l8n42"
+Data "l4n43l8n45l8n43p64l8n43l8n45l8n46l8n47l8n47p64l4n47l8n45"
+Data "l8n42l8n38l4n43"
+Data "MUSIKENDE"
+
+Data "T110l6n35l16n36l3n38l16n35l8n33l16n35l2n31l6n35l16n35"
+Data "l6n33l16n31l3n28l16n28l6n35l16n35l2n33l6n35l16n36l3n38"
+Data "l16n35l8n33l16n35l2n31l6n35l16n35l6n33l16n31l3n28l16n28"
+Data "l6n35l16n35l2n33l6n35l16n36l3n38l16n35l8n33l16n35l2n31"
+Data "l6n35l16n35l6n33l16n31l3n28l16n28l6n35l16n35l2n33l6n35"
+Data "l16n36l3n38l16n35l8n33l16n35l2n31l6n35l16n35l6n33l16n31"
+Data "l3n28l16n28l6n35l16n35l2n33p64p64l5n38l5n38l5n38l6n38l16n40"
+Data "l6n33l16n33l6n33l16n33l2n33l6n33l16n33l6n33l16n33l2n33"
+Data "l6n31l16n31l6n31l16n31l2n31l5n38l5n38l5n38l6n38l16n40"
+Data "l6n33l16n33l6n33l16n33l2n33l6n33l16n33l6n33l16n33l2n33"
+Data "l6n31l16n31l6n31l16n31l2n31"
+Data "MUSIKENDE"
+
+Data "T220MSl3n40l8n40l4n43l4n47l4n46n46l2n42l4n33l4n33"
+Data "l4n33n33n35n35l2n35l3n40l8n40l4n43l4n47l4n49"
+Data "l4n49n46n49n51n48n43n45l2n47l8n47n45"
+Data "l8n43n42l2n40l4n31l7n43l8n47l4n52n52n51n54"
+Data "l2n52l4n31l8n43l8n47l4n52l4n52n51n54l2n52l8n47"
+Data "l8n45n43n42l3n40l8n40l4n43n47n46n46l2n42"
+Data "l4n33n33n33n33n35n35l2n35l3n40l8n40l4n43"
+Data "l4n47n49n49n46n49n51n48n43n45l2n47l8n47n45n43n42l2n40"
+Data "l4n31l7n43l8n47l4n52n52n51n54l2n52l4n31l8n43"
+Data "l8n47l4n52n52n51n54l2n52l8n47n45n43n42"
+Data "MUSIKENDE"
+
+Sub acidrain
+ maxar = fb
+ Dim ar(maxar) As Integer
+ Dim armax(maxar) As Integer
+ For x% = 1 To fb
+ For y% = 1 To fh - 1
+ If feld%(x%, y%) = belegt% Then Exit For
+ Next y%
+ armax(x%) = y%
+ If feld%(x%, y%) = belegt% Then
+ feld%(x%, y%) = Frei%
+ farb%(x%, y%) = 0
+ End If
+ Next x%
+ For I% = 1 To maxar
+ ar(I%) = Int(Rnd * (3)) - 3
+ Next I%
+ Do
+ For I% = 1 To maxar
+ If ar(I%) < armax(I%) Then
+ ar(I%) = ar(I%) + 1
+ kastl I%, ar(I%), 33
+ End If
+ Next I%
+ t = Timer
+ Do
+ Loop Until Timer >= t + .15
+ For I% = 1 To maxar
+ kastl I%, ar(I%), 0
+ Next I%
+ chk = 0
+ For I% = 1 To maxar
+ If ar(I%) >= armax(I%) Then chk = chk + 1
+ Next I%
+ If chk = maxar Then Exit Do
+ Loop
+ nichtganzalles
+ If yn(4) = 1 Then
+ acid = 0
+ show.acidometer
+ End If
+End Sub
+
+Sub alles
+
+ For x% = -480 To 640 Step 20
+ For I% = 0 To 2
+ Line (x% + I%, 0)-(x% + 480 + I%, 480), 8
+ Line (x% - I%, 0)-(x% + 480 - I%, 480), 7
+ Line (x% - I% + 480, 0)-(x% - I%, 480), 7
+ Line (x% + 480 + I%, 0)-(x% + I%, 480), 8
+ Next I%
+ Next x%
+
+ Line (320 + 1 - fb * bg / 2, 240 + 1 - fh * bg / 2 + bg)-(321 - 1 + fb * bg / 2, 240 - 1 + fh * bg / 2 + 1 + bg), 0, BF
+
+ x1% = ((320 - fb * bg / 2) + ((-4) * bg) + 1)
+ y1% = ((240 - fh * bg / 2) + ((1) * bg) + 1)
+ x2% = ((320 - fb * bg / 2 - 1) + ((-1) * bg) + 1)
+ y2% = ((240 - fh * bg / 2) + (5) * bg)
+ Line (x1%, y1%)-(x2%, y2%), 0, BF
+ Line (x1% - 1, y1% - 1)-(x2% + 1, y2% + 1), 2, B
+
+ Color 8
+ u = 10
+
+ Draw "c1 bm190,70 u40 r 20 F30 d10 l30 u10 r13 h17 l3 d27 l13"
+ Paint (191, 68), 2, 1
+ Draw "c1 bm250,70 u40 r13 d40 l13"
+ Paint (253, 68), 2, 1
+ Draw "c1 bm275,70 u40 r 20 F30 d10 l30 u10 r13 h17 l3 d27 l13"
+ Paint (277, 68), 2, 1
+ Draw "c1 bm335,70 u40 r22"
+ Line -Step(20, 15), 1
+ Line -Step(-16, 10), 1
+ Draw "f15 l13 h12 u7"
+ Line -Step(9, -6), 1
+ Line -Step(-8, -5), 1
+ Draw "l4 d30 l12"
+ Paint (337, 68), 2, 1
+ Draw "c1 bm385,70 u40 r13 d40 l13"
+ Paint (387, 68), 2, 1
+ Draw "c1 bm410,70 u10 r23 e5 l27 u15 e10 r30 d10 l23 g5 r27 d15 g10 l30"
+ Paint (413, 68), 2, 1
+
+ Tasten
+ Punktezahl
+ nichtganzalles
+
+ If yn(4) = 1 Then
+ Color 11
+ Locate 26, 10: Print "Acid-O-Meter"
+ showallacid = 1
+ show.acidometer
+ showallacid = 0
+ End If
+
+ If yn(3) = 1 Then
+ Line (220, 440)-(420, 470), 0, BF
+ Line (220, 440)-(420, 470), 15, B
+ show.font2 "BODY-COUNT:", 2, 0, 1, 235, 448
+ show.bodycount
+ End If
+
+End Sub
+
+Sub ausis
+ 'TODO
+ Timer Off
+ If Play(1) <> 0 Then Beep
+
+ showpoints
+ showhiscore
+
+ endeundaus = 1
+End Sub
+
+Sub ausss
+ show.verynicegraphic
+
+ Screen 0
+ Color 1, 4
+ Print "Freeware by Dietmar Moritz"
+ Print
+ Color 2, 0
+ Print "Thanks for playing"
+ Color 15, 0
+ Print
+ Print " / / / / / /"
+ Print " _/ _/ __/ /__/"
+ Print " // // / /_//_/"
+ Print " // //"
+ Print " // // // //_/"
+ Print " / / // ///"
+ Print " /___/ /_/ /____/ /_/ /_/ /_/ /____/ ";
+ Color 3
+ Print " v2.2"
+ Print Spc(67); "(22.11.98)"
+ Color 8, 0
+ For y% = 2 To 25
+ For x% = 1 To 80
+ If Screen(y%, x%) = 179 Then Locate y%, x%: Print ""
+ If Screen(y%, x%) = Asc("/") Then Locate y%, x%: Print "/"
+ If Screen(y%, x%) = Asc("_") Then Locate y%, x%: Print "_"
+ Next x%
+ Next y%
+ End
+End Sub
+
+Sub clear.var
+
+ bomb = 0
+ nextbomb = 0
+
+ helion = 0
+ blowheli = 0
+ helix = 0
+ heliy = 0
+ helilt = 0
+ rotor = 0
+ bc = 0
+ maxframe = 0
+ maxstill = 0
+
+ acid = 0
+ showallacid = 0
+
+ maxposx = 0
+ maxposy = 0
+ maxlt = 0
+
+ For x% = -1 To fb + 3
+ For y% = -1 To fh + 2
+ feld%(x%, y%) = 0
+ farb%(x%, y%) = 0
+ Next y%
+ Next x%
+
+ punkte = 0
+ Linienweg = 0
+ Level = 0
+
+ nstr% = 0
+
+ endeundaus = 0
+End Sub
+
+Sub drehen (struktur%)
+ Select Case struktur%
+ Case 1
+ If (blockx%(2) + 1 = blockx%(1)) And (feld%(blockx%(1) + 1, blocky%(1)) <> belegt%) Then
+ blockx%(3) = blockx%(3) - 1: blocky%(3) = blocky%(2)
+ blockx%(2) = blockx%(4): blocky%(2) = blocky%(4)
+ blockx%(4) = blockx%(1) + 1: blocky%(4) = blocky%(1)
+ HE = 1
+ End If
+ If (blockx%(4) + 1 = blockx%(1)) And (feld%(blockx%(1), blocky%(1) - 1) <> belegt%) Then
+ blockx%(3) = blockx%(2): blocky%(3) = blocky%(2)
+ blockx%(2) = blockx%(4): blocky%(2) = blocky%(4)
+ blockx%(4) = blockx%(1): blocky%(4) = blocky%(1) - 1
+ End If
+ If (blockx%(1) + 1 = blockx%(2)) And (feld%(blockx%(1) - 1, blocky%(1)) <> belegt%) Then
+ blockx%(3) = blockx%(2): blocky%(3) = blocky%(2)
+ blockx%(2) = blockx%(4): blocky%(2) = blocky%(4)
+ blockx%(4) = blockx%(1) - 1: blocky%(4) = blocky%(1)
+ End If
+ If (HE <> 1) And (blockx%(3) + 1 = blockx%(1)) And (feld%(blockx%(1), blocky%(1) + 1) <> belegt%) Then
+ blockx%(3) = blockx%(2): blocky%(3) = blocky%(2)
+ blockx%(2) = blockx%(4): blocky%(2) = blocky%(4)
+ blockx%(4) = blockx%(1): blocky%(4) = blocky%(1) + 1
+ End If
+ Case 3
+ If (blocky%(3) + 1 = blocky%(1)) And (feld%(blockx%(1), blocky%(4)) <> belegt%) And (feld%(blockx%(1) - 1, blocky%(4)) <> belegt%) Then
+ blockx%(4) = blockx%(1)
+ blockx%(3) = blockx%(1) - 1: blocky%(3) = blocky%(4)
+ HE = 1
+ End If
+ If (HE <> 1) And (blocky%(3) - 1 = blocky%(1)) And (feld%(blockx%(1), blocky%(2) - 1) <> belegt%) And (feld%(blockx%(2), blocky%(4)) <> belegt%) Then
+ blockx%(4) = blockx%(2)
+ blockx%(3) = blockx%(1): blocky%(3) = blocky%(1) - 1
+ End If
+ Case 4
+ If (blocky%(3) + 1 = blocky%(1)) And (feld%(blockx%(2), blocky%(4)) <> belegt%) And (feld%(blockx%(2) + 1, blocky%(4)) <> belegt%) Then
+ blockx%(4) = blockx%(2)
+ blockx%(3) = blockx%(2) + 1: blocky%(3) = blocky%(4)
+ HE = 1
+ End If
+ If (HE <> 1) And (blocky%(3) - 1 = blocky%(1)) And (feld%(blockx%(2), blocky%(2) - 1) <> belegt%) And (feld%(blockx%(1), blocky%(4)) <> belegt%) Then
+ blockx%(4) = blockx%(1)
+ blockx%(3) = blockx%(2): blocky%(3) = blocky%(1) - 1
+ End If
+ Case 5
+ If (blocky%(2) + 1 = blocky%(1)) And (feld%(blockx%(3), blocky%(1)) <> belegt%) And (feld%(blockx%(3), blocky%(1) + 1) <> belegt%) And (feld%(blockx%(1) - 1, blocky%(1)) <> belegt%) Then
+ blockx%(2) = blockx%(3): blocky%(2) = blocky%(1)
+ blocky%(3) = blocky%(4)
+ blockx%(4) = blockx%(4) - 1: blocky%(4) = blocky%(1)
+ HE = 1
+ End If
+ If (HE <> 1) And (blockx%(2) - 1 = blockx%(1)) And (feld%(blockx%(1), blocky%(3)) <> belegt%) And (feld%(blockx%(4), blocky%(3)) <> belegt%) And (feld%(blockx%(1), blocky%(1) - 1) <> belegt%) Then
+ blockx%(2) = blockx%(1): blocky%(2) = blocky%(3)
+ blockx%(3) = blockx%(4)
+ blockx%(4) = blockx%(1): blocky%(4) = blocky%(1) - 1
+ HE = 1
+ End If
+ If (HE <> 1) And (blocky%(2) - 1 = blocky%(1)) And (feld%(blockx%(3), blocky%(1)) <> belegt%) And (feld%(blockx%(2) + 1, blocky%(1)) <> belegt%) And (feld%(blockx%(3), blocky%(4)) <> belegt%) Then
+ blockx%(2) = blockx%(3): blocky%(2) = blocky%(1)
+ blocky%(3) = blocky%(4)
+ blockx%(4) = blockx%(4) + 1: blocky%(4) = blocky%(1)
+ HE = 1
+ End If
+ If (HE <> 1) And (blockx%(2) + 1 = blockx%(1)) And (feld%(blockx%(1), blocky%(3)) <> belegt%) And (feld%(blockx%(4), blocky%(3)) <> belegt%) And (feld%(blockx%(1), blocky%(1) + 1) <> belegt%) Then
+ blockx%(2) = blockx%(1): blocky%(2) = blocky%(3)
+ blockx%(3) = blockx%(4)
+ blockx%(4) = blockx%(1): blocky%(4) = blocky%(1) + 1
+ HE = 1
+ End If
+ Case 6
+ If (blocky%(2) + 1 = blocky%(1)) And (feld%(blockx%(3), blocky%(1)) <> belegt%) And (feld%(blockx%(3), blocky%(4)) <> belegt%) And (feld%(blockx%(1) + 1, blocky%(1)) <> belegt%) Then
+ blockx%(2) = blockx%(3) + 2: blocky%(2) = blocky%(1)
+ blockx%(3) = blockx%(2)
+ blockx%(4) = blockx%(4) - 1: blocky%(4) = blocky%(1)
+ HE = 1
+ End If
+ If (HE <> 1) And (blockx%(2) - 1 = blockx%(1)) And (feld%(blockx%(1), blocky%(3)) <> belegt%) And (feld%(blockx%(3), blocky%(2) + 1) <> belegt%) And (feld%(blockx%(1), blocky%(1) + 1) <> belegt%) Then
+ blockx%(2) = blockx%(1): blocky%(2) = blocky%(1) + 1
+ blocky%(3) = blocky%(2)
+ blockx%(4) = blockx%(1): blocky%(4) = blocky%(1) - 1
+ HE = 1
+ End If
+ If (HE <> 1) And (blocky%(2) - 1 = blocky%(1)) And (feld%(blockx%(3), blocky%(1)) <> belegt%) And (feld%(blockx%(2) - 1, blocky%(1)) <> belegt%) And (feld%(blockx%(2) - 1, blocky%(2)) <> belegt%) Then
+ blockx%(2) = blockx%(2) - 1: blocky%(2) = blocky%(1)
+ blockx%(3) = blockx%(2)
+ blockx%(4) = blockx%(4) + 1: blocky%(4) = blocky%(1)
+ HE = 1
+ End If
+ If (HE <> 1) And (blockx%(2) + 1 = blockx%(1)) And (feld%(blockx%(1), blocky%(3)) <> belegt%) And (feld%(blockx%(2), blocky%(2) - 1) <> belegt%) And (feld%(blockx%(1), blocky%(1) - 1) <> belegt%) Then
+ blockx%(2) = blockx%(1): blocky%(2) = blocky%(2) - 1
+ blocky%(3) = blocky%(2)
+ blockx%(4) = blockx%(1): blocky%(4) = blocky%(1) + 1
+ HE = 1
+ End If
+ Case 7
+ If (blocky%(2) + 1 = blocky%(1)) And (feld%(blockx%(1) - 1, blocky%(1)) <> belegt%) And (feld%(blockx%(1) + 1, blocky%(1)) <> belegt%) And (feld%(blockx%(1) + 2, blocky%(1)) <> belegt%) Then
+ For I% = 2 To 4
+ blocky%(I%) = blocky%(1)
+ Next I%
+ blockx%(2) = blockx%(1) - 1
+ blockx%(3) = blockx%(1) + 1
+ blockx%(4) = blockx%(1) + 2
+ HE = 1
+ End If
+ If (HE <> 1) And (blockx%(2) + 1 = blockx%(1)) And (feld%(blockx%(1), blocky%(1) - 1) <> belegt%) And (feld%(blockx%(1), blocky%(1) + 1) <> belegt%) And (feld%(blockx%(1), blocky%(1) + 2) <> belegt%) Then
+ For I% = 2 To 4
+ blockx%(I%) = blockx%(1)
+ Next I%
+ blocky%(2) = blocky%(1) - 1
+ blocky%(3) = blocky%(1) + 1
+ blocky%(4) = blocky%(1) + 2
+ End If
+ End Select
+End Sub
+
+Function fax (x, z, zx, zz)
+ fax = (zx * z - zz * x) / (z - zz)
+End Function
+
+Function fay (y, z, zy, zz)
+ fay = (zy * z - zz * y) / (z - zz)
+End Function
+
+Sub fire (x%, y%)
+ Do
+ If InKey$ <> "" Then Exit Do
+ ax% = x%
+ ay% = y%
+ select.case oldi%, ax%, ay%
+ If Point(ax%, ay%) <> 10 Then
+ For I% = 1 To 9
+ ax% = x%
+ ay% = y%
+ select.case I%, ax%, ay%
+ If I% = 9 Then Exit Do
+ If Point(ax%, ay%) = 10 Then Exit For
+ Next I%
+ Else
+ I% = oldi%
+ End If
+
+ oldi% = I%
+ x% = ax%
+ y% = ay%
+ PSet (x%, y%), 4
+ For w = 0 To 2 * _Pi Step .8
+ For I% = 1 To 4
+ If Point(x% + Sin(w) * I%, y% + Cos(w) * I%) = 0 Then
+ PSet (x% + Sin(w) * I%, y% + Cos(w) * I%), 4
+ End If
+ Next I%
+ Next w
+ Select Case Int(Rnd * (1))
+ Case 0: Color 0
+ End Select
+ If InKey$ <> "" Then Exit Do
+ PSet (x%, y%)
+ For w = 0 To 2 * _Pi Step .8
+ For I% = 1 To 4
+ If Point(x% + Sin(w) * I%, y% + Cos(w) * I%) = 4 Then
+ PSet (x% + Sin(w) * I%, y% + Cos(w) * I%), 0
+ End If
+ Next I%
+ Next w
+ _Limit 60
+ Loop
+ Line (265, 200)-Step(120, 50), 0, BF
+End Sub
+
+Sub getsprites
+ For I% = 1 To 6
+ For y% = 1 To 14
+ For x% = 1 To 14
+ Read a
+ Select Case I%
+ Case 1: If a = 2 Then a = 15
+ para(x%, y%) = a
+ Case 2: boom(x%, y%) = a
+ Case 3: tropfen(x%, y%) = a
+ Case 4: leiter(x%, y%) = a
+ Case 5: If a = 2 Then a = 10
+ maxfeld(x%, y%) = a
+ Case 6: If a = 2 Then a = 10
+ maxfeld(x%, y% + 14) = a
+ End Select
+ Next x%
+ Next y%
+ Next I%
+
+ For y% = 2 To 14
+ For x% = 1 To 28
+ Read a
+ If a = 4 Then a = Int(Rnd * (2)) * 8 + 2
+ If x% < 15 Then
+ hf1(x%, y%) = a
+ Else
+ hf2(x% - 14, y%) = a
+ End If
+ Next x%
+ Next y%
+End Sub
+
+Sub gettaste (z$, posit%, max)
+ Do
+ z$ = InKey$
+ Loop Until z$ <> ""
+ Select Case Right$(z$, 1)
+ Case "8", "H": If posit% > 1 Then posit% = posit% - 1
+ Case "2", "P": If posit% < max Then posit% = posit% + 1
+ End Select
+End Sub
+
+Sub grey
+ setgrey 1, 4
+ setgrey 2, 24
+ setgrey 3, 28
+ setgrey 4, 12
+ setgrey 5, 17
+ setgrey 6, 24
+ setgrey 7, 41
+ setgrey 8, 20
+ setgrey 9, 25
+ setgrey 10, 45
+ setgrey 11, 49
+ setgrey 12, 33
+ setgrey 13, 37
+ setgrey 14, 57
+ setgrey 15, 62
+End Sub
+
+Sub heli
+ show.heli 0
+
+ I% = Int(Rnd * (9)) - 1
+ ii% = Int(Rnd * (9)) - 1
+
+ If I% >= 2 Then
+ If maxposx <= helix Then
+ I% = -1
+ Else
+ I% = 1
+ End If
+ If maxposx = helix + 1 Then I% = 0
+ End If
+
+ If ii% >= 2 Then
+ If maxposy > heliy Then
+ ii% = 1
+ Else
+ ii% = -1
+ End If
+ If maxposy = heliy - 1 Then ii% = 0
+ End If
+
+
+ chk1% = 1
+ chk2% = 1
+
+ For u% = 1 To 4
+ If blockx%(u%) = helix + I% And blocky%(u%) = heliy Then chk1% = 0
+ If blockx%(u%) = helix + I% + 1 And blocky%(u%) = heliy Then chk1% = 0
+ If blockx%(u%) = helix And blocky%(u%) = heliy + ii% Then chk2% = 0
+ If blockx%(u%) = helix + 1 And blocky%(u%) = heliy + ii% Then chk2% = 0
+ Next u%
+
+ If feld%(helix + I%, heliy) = Frei% And chk1% And feld%(helix + I% + 1, heliy) = Frei% Then
+ helix = helix + I%
+ End If
+
+ If feld%(helix, heliy + ii%) = Frei% And chk2% And feld%(helix + 1, heliy + ii%) = Frei% Then
+ heliy = heliy + ii%
+ End If
+
+
+ If helix = 0 Then maxposx = 2
+ If helix + 1 >= fb + 1 Then helix = fb - 1
+
+ If heliy = 0 Then heliy = 1
+ If heliy = fh Then heliy = fh - 1
+
+ helilt = Timer
+ show.heli 1
+
+ If helix + 1 = maxposx And heliy + 1 = maxposy Then heligetsmax
+End Sub
+
+Sub heligetsmax
+ x1% = ((320 - fb * bg / 2) + ((helix) * bg) + 1)
+ y1% = ((240 - fh * bg / 2) + ((heliy + 1) * bg) + 1)
+
+ For u% = 1 To 4
+ kastl blockx%(u%), blocky%(u%), 0
+ Next u%
+
+ kastl maxposx, maxposy, 0
+ maxframe = 2
+ kastl maxposx, maxposy, 55
+
+ For y% = 1 To 14
+ For x% = 1 To 14
+ If leiter(x%, y%) > 0 Then PSet (x% + x1% - 1, y% + y1% - 1), leiter(x%, y%)
+ Next x%
+ Next y%
+
+ t = Timer
+ Do
+ Loop Until Timer >= t + 2
+
+ kastl helix + 1, heliy + 1, 0
+ For y% = 1 To 14
+ For x% = 1 To 14
+ If leiter(x%, y%) > 0 Then PSet (x% + x1% - 1, y% + y1% - 1), leiter(x%, y%)
+ Next x%
+ Next y%
+
+ t = Timer
+ Do
+ Loop Until Timer >= t + 1
+
+ kastl maxposx, maxposy, 0
+
+ Do
+
+ t = Timer
+ Do
+ Loop Until Timer >= t + .2
+
+ show.heli 0
+ heliy = heliy - 1
+ If heliy = 0 Then helion = 0: bc = bc - 1: nichtganzalles: killmax: Exit Do
+ show.heli 1
+
+ Loop
+
+ punkte = punkte - 100
+ If punkte < 0 Then punkte = 0
+ Punktezahl
+End Sub
+
+Sub init
+
+ For I% = 2 To 5
+ GoSub ini
+ Next I%
+
+ For I% = 14 To 21
+ GoSub ini
+ Next I%
+
+ I% = 25
+ GoSub ini
+
+ For I% = 30 To 41
+ GoSub ini
+ Next I%
+
+ Exit Sub
+
+ ini:
+
+ For y% = 1 To 5
+ For x% = 1 To 5
+ Read a
+ bst(I%, x%, y%) = a
+ Next x%
+ Next y%
+ Return
+
+End Sub
+
+Sub init.ffont
+ I% = 1
+ x% = 1
+ y% = 1
+ u% = 1
+ a = 1
+
+ Do
+ Read aa$
+
+ If aa$ = "x" Then aa$ = "14"
+ If aa$ = "" Then aa$ = "1"
+
+ If a Then
+ a = 0
+ Else
+ a = 1
+ End If
+
+ num = Val(aa$)
+
+ For k = u% To (u% + num - 1)
+ x% = x% + 1
+ If x% = 19 Then x% = 2: y% = y% + 1
+ If y% = 20 Then y% = 1: I% = I% + 1: x% = 2
+
+ buch(I%, x%, y%) = a
+
+ Next k
+
+ u% = k
+
+ If k >= 1616 Then Exit Do
+
+ Loop
+
+
+ For I% = 1 To 5
+ buch(I%, 19, 19) = 1
+ buch(I%, 1, 19) = 1
+ Next I%
+
+End Sub
+
+Sub Intro
+ If InKey$ = Chr$(27) Then Exit Sub
+ Sleep 1
+ Dim d(5) As String
+ Dim I(5) As String
+ Dim dx(1) As Single
+ Dim dy(1) As Single
+ Dim ix(1) As Single
+ Dim iy(1) As Single
+ dx(0) = 1
+ dy(0) = 1
+ dx(1) = 80 - 6
+ dy(1) = 1
+ ix(0) = 1
+ iy(0) = 23
+ ix(1) = 80 - 4
+ iy(1) = 23
+ d(0) = "DDDDDD"
+ d(1) = "DD DD"
+ d(2) = "DD DD"
+ d(3) = "DD DD"
+ d(4) = "DD DD"
+ d(5) = "DDDDDD"
+ I(0) = "IIII"
+ I(1) = " II"
+ I(2) = " II"
+ I(3) = " II"
+ I(4) = " II"
+ I(5) = "IIII"
+ Do
+ Color 0
+ For u% = 0 To 5
+ Locate Int(dy(0)) + u%, Int(dx(0)): Print d(u%)
+ Locate Int(dy(1)) + u%, Int(dx(1)): Print d(u%)
+ Locate Int(iy(0)) + u%, Int(ix(0)): Print I(u%)
+ Locate Int(iy(1)) + u%, Int(ix(1)): Print I(u%)
+ Next u%
+ If dy(0) < 12 Then dy(0) = dy(0) + 1: dx(0) = dx(0) + 2
+ If iy(0) > 12 Then iy(0) = iy(0) - 1: ix(0) = ix(0) + 3
+ If dy(1) < 12 Then dy(1) = dy(1) + 1: dx(1) = dx(1) - 2.75
+ If iy(1) > 12 Then iy(1) = iy(1) - 1: ix(1) = ix(1) - 2
+ Color 15
+ For u% = 0 To 5
+ Locate Int(dy(0)) + u%, Int(dx(0)): Print d(u%)
+ Locate Int(dy(1)) + u%, Int(dx(1)): Print d(u%)
+ Locate Int(iy(0)) + u%, Int(ix(0)): Print I(u%)
+ Locate Int(iy(1)) + u%, Int(ix(1)): Print I(u%)
+ Next u%
+ t = Timer
+ Do
+ If InKey$ = Chr$(27) Then Exit Sub
+ Loop Until Timer >= t + .08
+ Loop Until iy(1) = 12
+ setpal 14, 0, 0, 0
+ Color 14
+
+ Line (171, 172)-Step(43, 0)
+ Line (171, 172)-Step(0, 100)
+ Line -Step(43, 0)
+ r = 20
+ Circle (214, 192), 20, , 0, _Pi / 2
+ Circle (214, 252), 20, , _Pi * 3 / 2, 0
+ Line (234, 192)-Step(0, 60)
+
+ Line (193, 192)-Step(12, 0)
+ Line (193, 192)-Step(0, 61)
+ Line -Step(12, 0)
+ Circle (205, 200), 8, , 0, _Pi / 2
+ Circle (205, 245), 8, , _Pi * 3 / 2.1, 0
+ Line (213, 200)-Step(0, 45)
+
+ If InKey$ = Chr$(27) Then Exit Sub
+
+ Line (331, 172)-Step(43, 0)
+ Line (331, 172)-Step(0, 100)
+ Line -Step(43, 0)
+ Circle (374, 192), 20, , 0, _Pi / 2
+ Circle (374, 252), 20, , _Pi * 3 / 2, 0
+ Line (394, 192)-Step(0, 60)
+
+ Line (353, 192)-Step(12, 0)
+ Line (353, 192)-Step(0, 61)
+ Line -Step(12, 0)
+ Circle (365, 200), 8, , 0, _Pi / 2
+ Circle (365, 245), 8, , _Pi * 3 / 2.1, 0
+ Line (373, 200)-Step(0, 45)
+
+ If InKey$ = Chr$(27) Then Exit Sub
+
+ Line (261, 172)-Step(37, 0)
+ Line (261, 172)-Step(0, 19)
+ Line (298, 172)-Step(0, 19)
+ Line (261, 191)-Step(7, 0)
+ Line (298, 191)-Step(-7, 0)
+ Line (268, 191)-Step(0, 62)
+ Line (291, 191)-Step(0, 62)
+ Line (268, 253)-Step(-7, 0)
+ Line (291, 253)-Step(7, 0)
+ Line (261, 253)-Step(0, 19)
+ Line (298, 253)-Step(0, 19)
+ Line -Step(-37, 0)
+
+ If InKey$ = Chr$(27) Then Exit Sub
+
+ Line (421, 172)-Step(37, 0)
+ Line (421, 172)-Step(0, 19)
+ Line (458, 172)-Step(0, 19)
+ Line (421, 191)-Step(7, 0)
+ Line (458, 191)-Step(-7, 0)
+ Line (428, 191)-Step(0, 62)
+ Line (451, 191)-Step(0, 62)
+ Line (428, 253)-Step(-7, 0)
+ Line (451, 253)-Step(7, 0)
+ Line (421, 253)-Step(0, 19)
+ Line (458, 253)-Step(0, 19)
+ Line -Step(-37, 0)
+
+ t = Timer
+ Do
+ If InKey$ = Chr$(27) Then Exit Sub
+ Loop Until Timer >= t + 2
+
+ For w = 0 To _Pi / 2 Step .05
+ setpal 14, Abs(Sin(w) * 63), Abs(Sin(w) * 63), 0
+ Wait &H3DA, 8
+ If InKey$ = Chr$(27) Then Exit Sub
+ Next w
+
+ t = Timer
+ Do
+ If InKey$ = Chr$(27) Then Exit Sub
+ Loop Until Timer >= t + 1
+
+ For w = 0 To _Pi / 2 Step .1
+ If InKey$ = Chr$(27) Then Exit Sub
+ setpal 0, Abs(Sin(w) * 63), Abs(Sin(w) * 63), Abs(Sin(w) * 63)
+ Wait &H3DA, 8
+ Next w
+
+ t = Timer
+ Do
+ If InKey$ = Chr$(27) Then Exit Sub
+ Loop Until Timer >= t + .3
+
+ setpal 2, 0, 63 / 2, 0
+ Paint (173, 173), 2, 14
+ Paint (333, 173), 2, 14
+ Paint (263, 173), 2, 14
+ Paint (423, 173), 2, 14
+ setpal 0, 0, 0, 0
+
+ t = Timer
+ Do
+ If InKey$ = Chr$(27) Then Exit Sub
+ Loop Until Timer >= t + 1
+ setpal 1, 0, 0, 0
+
+ Color 0
+ Locate 23, 36: Print "PRESENTS"
+
+ Color 1
+
+ show.font "PRESENTS", 4, 0, 1, 220, 360
+
+ w = 1.0472
+ h = 0
+ t = Timer
+ Do
+ w = w + .04
+ setpal 14, Abs(Sin(w) * 63), Abs(Sin(w) * 63), 0
+ setpal 2, 0, Abs(Cos(w) * 63), 0
+ Wait &H3DA, 8
+ If w > 8 And h < 50 Then
+ If h Mod 5 = 0 Then Print
+ h = h + 1
+ End If
+ If w >= _Pi * 2 * 2 Then
+ setpal 1, 0, 0, Abs(Sin(w / 3) * 50) + 13
+ Else
+ setpal 5, 0, 0, Abs(Sin(w / 3) * 50) + 13
+ End If
+ _Limit 60
+ Loop Until InKey$ <> "" Or Timer >= t + 15
+
+ For ii% = 0 To 20
+ For y% = 50 To 400 Step 20
+ For x% = 170 To 500 Step 20
+ Line (x% + ii%, y%)-(x%, y% + ii%), 0
+ Line (x% - ii% + 20, y% + 20)-(x% + 20, y% - ii% + 20), 0
+ Next x%
+ Next y%
+ Wait &H3DA, 8
+ Next ii%
+
+End Sub
+
+Sub kastl (kastlx%, kastly%, farbe%)
+
+ If farbe% = 7 Then farbe% = 8
+ If farbe% >= 9 And farbe% <= 15 Then farbe% = farbe% - 8
+
+ farbe2% = farbe% + 8
+ If farbe% = 8 Then: farbe2% = 7
+
+ If farbe% > 0 And farbe% <> 55 Then
+ If maxposx = kastlx% And maxposy = kastly% Then
+ killmax
+ End If
+ End If
+
+ If helion And farbe% > 0 Then
+ If (helix = kastlx% And heliy = kastly%) Or (helix + 1 = kastlx% And heliy = kastly%) Then
+ killheli
+ End If
+ End If
+
+ If kastly% > 0 Then
+ x1% = ((320 - fb * bg / 2) + ((kastlx% - 1) * bg) + 1)
+ y1% = ((240 - fh * bg / 2) + ((kastly%) * bg) + 1)
+
+ x2% = ((320 - fb * bg / 2 - 1) + ((kastlx%) * bg) + 1)
+ y2% = ((240 - fh * bg / 2) + (kastly% + 1) * bg)
+
+ If farbe% = 0 Then
+
+ Line (x1%, y1%)-(x2%, y2%), farbe%, BF
+ Else
+
+ If farbe% = 20 Then
+ Circle (x1% + bg / 2 - .5, y2% - bg / 3), bg / 3, 8, _Pi, 0
+ Line (x1% + bg / 6, y2% - bg / 3)-Step(0, -bg / 3), 8
+ Line (x2% - bg / 6 + 1, y2% - bg / 3)-Step(0, -bg / 3), 8
+ Line -Step(-bg * 2 / 3, 0), 8
+ Line (x1% + bg / 2 - .5, y1%)-Step(0, bg / 5), 8
+ Line (x1% + bg / 6, y1%)-(x2% - bg / 6 + 1, y1%), 8
+ Paint (x1% + bg / 2, y1% + bg / 2), 4, 8
+ Circle (x1% + bg / 2 - .5, y2% - bg / 3), bg / 3.5, 12, 3 * _Pi / 2 + .3, 2 * _Pi
+ Else
+
+ If farbe% = 44 Then
+ For y% = 1 To 14
+ For x% = 1 To 14
+ If boom(x%, y%) > 0 Then PSet (x% + x1% - 1, y% + y1% - 1), boom(x%, y%)
+ Next x%
+ Next y%
+
+ Else
+
+ If farbe% = 33 Then
+ For y% = 1 To 14
+ For x% = 1 To 14
+ PSet (x% + x1% - 1, y% + y1% - 1), tropfen(x%, y%)
+ Next x%
+ Next y%
+
+ Else
+
+ If farbe% = 55 Then
+
+ If maxframe = 1 Then
+ For y% = 1 To 14
+ For x% = 1 To 14
+ If maxfeld(x%, y%) > 0 Then PSet (x% + x1% - 1, y% + y1% - 1), maxfeld(x%, y%)
+ Next x%
+ Next y%
+
+ Else
+
+ For y% = 1 To 14
+ For x% = 1 To 14
+ If maxfeld(x%, y% + 14) > 0 Then PSet (x% + x1% - 1, y% + y1% - 1), maxfeld(x%, y% + 14)
+ Next x%
+ Next y%
+
+ If paraon And feld%(maxposx, maxposy - 1) = Frei% And maxposy > 1 Then
+ For y% = 1 To 14
+ For x% = 1 To 14
+ If para(x%, y%) > 0 Then PSet (x% + x1% - 1, y% + y1% - 15), para(x%, y%)
+ Next x%
+ Next y%
+ End If
+
+
+ End If
+
+ Else
+
+ in% = bg / 5
+
+ Line (x1%, y1%)-(x2%, y2%), farbe%, BF
+ Line (x1% + in%, y1% + in%)-(x2% - in%, y2% - in%), farbe2%, BF
+ Line (x1%, y1%)-(x1% + in%, y1% + in%), farbe2%
+ Line (x2%, y2%)-(x2% - in%, y2% - in%), farbe2%
+ Line (x2%, y1%)-(x2% - in%, y1% + in%), farbe2%
+ Line (x1%, y2%)-(x1% + in%, y2% - in%), farbe2%
+ End If
+ End If
+ End If
+ End If
+ End If
+ End If
+
+End Sub
+
+Sub killheli
+
+ helion = 0
+ kastl helix, heliy, 44
+ kastl helix + 1, heliy, 44
+
+ blowheli = 1
+End Sub
+
+Sub killmax
+ kastl maxposx, maxposy, 0
+ If paraon Then kastl maxposx, maxposy - 1, 0
+
+ If maxposx >= fb / 2 Then
+ maxposx = maxposx - 5
+ Else
+ maxposx = maxposx + 5
+ End If
+
+ maxposy = 1
+
+ bc = bc + 1
+ punkte = punkte + 2
+ show.bodycount
+ Punktezahl
+ paraon = 1
+End Sub
+
+Sub main
+ Screen 12
+ Palette
+ Color
+
+ If yn(1) = 2 Then
+ nomusik = 1
+ Else
+ nomusik = 0
+ End If
+
+ If yn(3) = 1 Then
+ maxposx = Int(fb / 2)
+ maxposy = fh
+ maxlt = Timer
+ Else
+ maxposx = 0
+ maxposy = 0
+ End If
+
+
+
+ verzug = .35
+ verzugplus = .025
+
+ 'Level = 1
+
+
+ Def Seg = 64
+ Poke 23, 32
+ Def Seg
+
+ For I% = 0 To fh + 1
+ feld%(0, I%) = belegt%
+ feld%(fb + 1, I%) = belegt%
+ Next I%
+
+ For I% = 0 To fb
+ feld%(I%, fh + 1) = belegt%
+ Next I%
+
+
+ alles
+
+ nstr% = Int(Rnd * (7)) + 1
+
+ show.ffont "DCABE", 10, 273, 220
+ z$ = Input$(1)
+ fire 273, 220 + 19
+
+ Musikladen
+
+ ' a740g: 2 seconds seems to be working ok
+ On Timer(2) GoSub hinter
+ Timer On
+
+ nextbomb = Int(Rnd * (30)) + 8
+
+ helix = Int(fb / 2)
+
+ Do
+
+ If yn(2) = 1 Then nextbomb = nextbomb - 1
+
+ struktur% = nstr%
+ nstr% = Int(Rnd * (7)) + 1
+ If nextbomb = 0 Then nstr% = 99: nextbomb = Int(Rnd * (30)) + 8
+ strukturstart nstr%
+ If endeundaus = 1 Then Exit Sub
+ nextes
+
+ If struktur% = 99 Then bomb = 1
+ strukturstart struktur%
+ If endeundaus = 1 Then Exit Sub
+ farbe% = Int(Rnd * (15)) + 1
+ If bomb Then farbe% = 20
+
+
+ Do
+ show.stone farbe%
+ t = Timer
+ Do
+
+ a$ = InKey$
+
+
+ If a$ <> "" Then
+ show.stone 0
+ If a$ <> "" Then woswasi = 0
+ Select Case a$
+ Case Chr$(0) + "K", "4"
+ k% = 0
+ For i1% = 1 To 4
+ If feld%(blockx%(i1%) - 1, blocky%(i1%)) <> belegt% Then k% = k% + 1
+ Next i1%
+ If k% = 4 Then
+ For i2% = 1 To 4
+ blockx%(i2%) = blockx%(i2%) - 1
+ Next i2%
+ End If
+ Case Chr$(0) + "M", "6"
+ k% = 0
+ For i3% = 1 To 4
+ If feld%(blockx%(i3%) + 1, blocky%(i3%)) <> belegt% Then k% = k% + 1
+ Next i3%
+ If k% = 4 Then
+ For i4% = 1 To 4
+ blockx%(i4%) = blockx%(i4%) + 1
+ Next i4%
+ End If
+ Case Chr$(0) + "P", "5": t = t - 1
+ Case Chr$(0) + "D": Screen 0
+ ' TODO
+ Timer Off
+ Print "C:\DOS>"
+ Do
+ Locate 1, 8, 1
+ Loop While InKey$ = ""
+ Screen 12
+ alles
+ 'PLAY ON
+ Case Chr$(0) + Chr$(133): Screen 0
+ ' TODO
+ Timer Off
+ Shell
+ Screen 12
+ alles
+ 'PLAY ON
+ Case "s", "S"
+ Timer Off
+ Case "m", "M"
+ Timer On
+ Case Chr$(13), Chr$(0) + "H", "8", "+": drehen struktur%
+ Case Chr$(27): ausis: If endeundaus = 1 Then Exit Sub
+ Case "P", "p": grey: a$ = Input$(1): Palette
+ Case Chr$(0) + Chr$(59)
+ ' TODO
+ Timer Off
+ show.helpscreen
+ alles
+ Case "1", "2", "3", "4", "5", "6", "7", "8", "9"
+ If Val(a$) <= Musikanzahl Then
+ musi% = 0
+ Musikstueck% = Val(a$)
+ End If
+ Case "0": woswasi = verzug - .01
+ Case " ": If acid >= maxacid Then acidrain
+ Case "t": End
+ End Select
+
+ show.stone farbe%
+ End If
+ meanwhile
+
+
+ Loop Until Timer >= t + verzug - woswasi
+
+ check% = 0
+ For m% = 1 To 4
+ If feld%(blockx%(m%), blocky%(m%) + 1) = belegt% Then check% = 1: Exit For
+ Next m%
+
+ If check% = 1 Then Exit Do
+
+ show.stone 0
+ For i6% = 1 To 4
+ blocky%(i6%) = blocky%(i6%) + 1
+ Next i6%
+
+ Loop
+
+ woswasi = 0
+
+ If yn(4) = 1 Then
+ If acid <= maxacid Then acid = acid + acidplus
+ show.acidometer
+ punkte = punkte + 1
+ Punktezahl
+ End If
+
+ check% = 0
+ For i7% = 1 To 4
+ farb%(blockx%(i7%), blocky%(i7%)) = farbe%
+ feld%(blockx%(i7%), blocky%(i7%)) = belegt%
+ Next i7%
+
+ reichweite = Int(Rnd * (3)) + 1 'Bombe knallt auf
+
+ If bomb Then
+ bomb = 0
+ For y% = -reichweite + blocky%(1) To reichweite + blocky%(1)
+ For x% = -reichweite + blockx%(1) To reichweite + blockx%(1)
+ If x% > 0 And x% <= fb And y% <= fh Then
+ feld%(x%, y%) = Frei%
+ farb%(x%, y%) = 0
+ kastl x%, y%, 44
+ End If
+ Next x%
+ Next y%
+
+ t = Timer
+ Do
+ Loop Until Timer >= t + .3
+
+ For y% = -reichweite + blocky%(1) To reichweite + blocky%(1)
+ For x% = -reichweite + blockx%(1) To reichweite + blockx%(1)
+ If x% > 0 And x% <= fb And y% <= fh Then
+ kastl x%, y%, 0
+ End If
+ Next x%
+ Next y%
+
+ End If
+
+ For I% = 1 To 4
+ hoho%(I%) = 0
+ Next I%
+ j% = 0
+
+ For y% = 1 To fh
+ For x% = 1 To fb
+ If feld%(x%, y%) = Frei% Then Exit For
+ If x% = fb Then
+
+ For I% = 1 To fb
+ kastl I%, y%, 0
+ Next I%
+ j% = j% + 1
+ hoho%(j%) = y%
+ End If
+ Next x%
+ Next y%
+
+ If j% > 0 Then
+ tim = Timer: Do: Loop Until Timer >= tim + .1
+
+ For l% = 1 To j%
+ For I% = 1 To fb
+ kastl I%, hoho%(l%), 15
+ Next I%
+ Next l%
+
+ tim = Timer: Do: Loop Until Timer >= tim + .5
+
+
+
+ For l% = 1 To j%
+ For iy% = hoho%(l%) To 2 Step -1
+ For ix% = 1 To fb
+ feld%(ix%, iy%) = feld%(ix%, iy% - 1)
+ farb%(ix%, iy%) = farb%(ix%, iy% - 1)
+ Next ix%
+ Next iy%
+ Next l%
+
+ check% = j%
+ Linienweg = Linienweg + j%
+
+ punkte = punkte + linienpunkte * j%
+
+
+ If Int(Linienweg / 10) <> Int((Linienweg - j%) / 10) Then
+ Level = Level + 1
+ verzug = verzug - verzugplus
+ End If
+
+ nichtganzalles
+
+ End If
+
+
+ If check% > 0 Then
+ punkte = punkte + (check% - 1) * (linienpunkte / 4 * 3)
+ Punktezahl
+ End If
+
+ _Limit 60
+ Loop
+
+End Sub
+
+Sub meanwhile
+
+ If Timer >= helilt + .2 And yn(3) = 1 Then
+
+ If helion Then
+ heli
+ Else
+ If Int(Rnd * (40)) = 5 And blowheli = 0 Then
+ helion = 1
+ heliy = 1
+ If heliy <= 1 Then heliy = 1
+ show.heli 1
+
+ helilt = Timer
+ Else
+ helilt = Timer
+
+ End If
+ End If
+
+ End If
+
+ If Timer >= maxlt + .1 And yn(3) = 1 Then
+
+ If paraon Then kastl maxposx, maxposy - 1, farb%(maxposx, maxposy - 1)
+ kastl maxposx, maxposy, farb%(maxposx, maxposy)
+
+ I% = Int(Rnd * (3)) - 1
+ If I% = 0 Then m = maxstill
+
+ chk1% = 1
+ chk2% = 1
+ chk3% = 1
+
+ For u% = 1 To 4
+ If blockx%(u%) = maxposx And blocky%(u%) = maxposy + 1 Then chk1% = 0
+ If blockx%(u%) = maxposx + I% And blocky%(u%) = maxposy Then chk2% = 0
+ If blockx%(u%) = maxposx + I% And blocky%(u%) = maxposy - 1 Then chk3% = 0
+ Next u%
+
+ If feld%(maxposx, maxposy + 1) = Frei% And chk1% Then
+ maxposy = maxposy + 1
+ maxframe = 2
+ maxstill = 0
+ If feld%(maxposx, maxposy + 1) = Frei% And feld%(maxposx, maxposy + 2) = Frei% And maxposy < fh Then paraon = 1
+ Else
+
+ paraon = 0
+ maxframe = 1
+
+ If feld%(maxposx + I%, maxposy) = Frei% And chk2% Then
+ maxposx = maxposx + I%
+ maxstill = 0
+ Else
+ If feld%(maxposx + I%, maxposy - 1) = Frei% And chk3% Then
+ maxposx = maxposx + I%
+ maxposy = maxposy - 1
+ maxstill = 0
+ Else
+ maxstill = maxstill + 1
+ End If
+ End If
+
+ End If
+
+ If maxposx = 0 Then maxposx = 2
+ If maxposx = fb + 1 Then maxposx = fb - 1
+
+ If maxstill > 15 Then
+ If maxframe = 1 Then
+ maxframe = 2
+ Else
+ maxframe = 1
+ End If
+ maxstill = 15
+ End If
+
+ If I% = 0 Then maxstill = m
+
+ kastl maxposx, maxposy, 55
+ maxlt = Timer
+ End If
+
+ If blowheli > 0 Then
+ kastl helix, heliy, 44
+ kastl helix + 1, heliy, 44
+ blowheli = blowheli + 1
+ End If
+
+ If blowheli = 200 Then
+ blowheli = 0
+ chk1% = 1
+ chk2% = 1
+
+ If chk1% Then kastl helix, heliy, farb%(helix, heliy)
+ If chk2% Then kastl helix + 1, heliy, farb%(helix + 1, heliy)
+
+ helix = Int(Rnd * (fb - 1)) + 1
+ If helix >= (fb / 2) Then
+ helix = 1
+ Else
+ helix = fb - 1
+ End If
+ End If
+End Sub
+
+Sub menu
+ Dim s$(5)
+
+ posit% = 1
+
+ show.menu
+
+ s$(1) = " START "
+ s$(2) = " SETUP "
+ s$(3) = " READ ME "
+ s$(4) = " HIGHSCORE "
+ s$(5) = " END "
+
+ Do
+ Color 5, 0
+ For I% = 1 To 5
+ Locate 16 + I%, 33: Print " "; s$(I%); " "
+ Next I%
+
+ Color 11, 9
+
+ Locate 16 + posit%, 33: Print "["; s$(posit%); "]"
+
+ gettaste z$, posit%, 5
+ Select Case z$
+ Case Chr$(13), " ", "5"
+ Select Case posit%
+ Case 1: Exit Sub
+ Case 2: setup
+ Case 3: show.helpscreen: show.menu
+ Case 4: score = 0: Screen 12: showhiscore: show.menu
+ Case 5: ausss
+ End Select
+ Case Chr$(27): ausss
+ End Select
+ Loop
+End Sub
+
+
+Sub Musikladen
+ If already = 0 Then
+ For I% = 1 To Musikanzahl
+
+ x% = 0
+ Do
+ x% = x% + 1
+ Read a$
+ Musik$(x%, I%) = a$
+ If Musik$(x%, I%) = "MUSIKENDE" Then Exit Do
+ Loop
+ Musiklaenge(I%) = x% - 1
+ Next I%
+ End If
+
+ Musikstueck% = Int(Rnd * (Musikanzahl)) + 1
+ musi% = 1
+ If nomusik = 0 Then Play "mb" + Musik$(musi%, Musikstueck%)
+End Sub
+
+
+Sub nextes
+ For y% = 1 To 4
+ For x% = 0 To 2
+ kastl x% - 3, y%, 0
+ kastl x% - 3, y%, 9
+ Next x%
+ Next y%
+
+ If nstr% = 99 Then
+ kastl blockx%(1) - fb / 2 - 3, 2, 20
+ Else
+
+ For I% = 1 To 4
+ kastl blockx%(I%) - fb / 2 - 3, blocky%(I%), 10
+ Next I%
+
+ End If
+End Sub
+
+Sub nichtganzalles
+ For I% = 0 To maxlinie - 1
+ Line (320 - I% - fb * bg / 2, 240 - I% - fh * bg / 2 + bg)-(321 + I% + fb * bg / 2, 240 + I% + fh * bg / 2 + 1 + bg), Int(Rnd * (15)) + 1, B
+ Next I%
+
+ For x% = 1 To fb
+ For y% = 1 To fh
+ kastl x%, y%, farb%(x%, y%)
+ Next y%
+ Next x%
+
+ If yn(4) = 1 Then
+ show.acidometer
+ End If
+End Sub
+
+Sub Punktezahl
+ Locate 10, 10: Color 2: Print "Points..";
+ Color 9: Print Str$(punkte)
+ Locate 12, 10: Color 14: Print "Lines...";
+ Color 11: Print Linienweg
+ Locate 14, 10: Color 4: Print "LEVEL...";
+ Color 8: Print Level
+End Sub
+
+Sub select.case (I%, ax%, ay%)
+ Select Case I%
+ Case 1: ax% = ax% + 1
+ Case 2: ax% = ax% - 1
+ Case 3: ay% = ay% + 1
+ Case 4: ay% = ay% - 1
+ Case 5: ax% = ax% - 1: ay% = ay% + 1
+ Case 6: ax% = ax% + 1: ay% = ay% - 1
+ Case 7: ax% = ax% - 1: ay% = ay% - 1
+ Case 8: ax% = ax% + 1: ay% = ay% + 1
+ End Select
+End Sub
+
+Sub setgrey (nr, value)
+ setpal nr, value, value, value
+End Sub
+
+Sub setpal (nr, r, g, B)
+ Out &H3C8, nr
+ Out &H3C9, r
+ Out &H3C9, g
+ Out &H3C9, B
+End Sub
+
+Sub setup
+
+ Color 5, 0
+ For I% = 1 To 5
+ Locate 16 + I%, 33: Print " "
+ Next I%
+
+ max = 4
+
+ Dim p(1 To max, 2) As String
+
+ p(1, 0) = " MUSIC "
+ p(2, 0) = " BOMBS "
+ p(3, 0) = " ARMY "
+ p(4, 0) = " ACIDRAIN "
+
+ p(1, 1) = "YES"
+ p(2, 1) = " OF COURSE"
+ p(3, 1) = " WAY COOL"
+ p(4, 1) = " YEP"
+
+ p(1, 2) = " NO"
+ p(2, 2) = "BETTER NOT"
+ p(3, 2) = "NO CHANCE"
+ p(4, 2) = "NOPE"
+
+ positi% = 1
+
+ Do
+
+ For I% = 1 To max
+ Color 5, 0
+ Locate 16 + I%, 29: Print " "; p(I%, 0); " "
+ If yn(I%) = 1 Then Color 2, 0 Else Color 4, 0
+ Locate 16 + I%, 51 - Len(p(I%, yn(I%))): Print " "; p(I%, yn(I%)); " "
+ Next I%
+
+ Color 5, 0
+ Locate 18 + max, 37: Print " BACK "
+
+ Color 11, 9
+ If positi% = max + 1 Then
+ Locate 18 + max, 37: Print "[ BACK ]"
+ Else
+ Locate 16 + positi%, 29: Print "["; p(positi%, 0); "]"
+ End If
+
+ gettaste z$, positi%, max + 1
+ Select Case z$
+ Case Chr$(13), " ", "5"
+ If positi% = max + 1 Then
+ Exit Do
+ Else
+ yn(positi%) = yn(positi%) + 1
+ If yn(positi%) = 3 Then yn(positi%) = 1
+ End If
+ Case Chr$(27): Exit Do
+ End Select
+ Loop
+
+ For I% = 1 To max
+ Color 0, 0
+ Locate 16 + I%, 29: Print " "; p(I%, 0); " "
+ Locate 16 + I%, 51 - Len(p(I%, yn(I%))): Print " "; p(I%, yn(I%)); " "
+ Next I%
+
+ Locate 18 + max, 37: Print " BACK "
+End Sub
+
+Sub show.acidometer
+ x1% = ((320 - fb * bg / 2) + ((-3) * bg) + 1)
+ x2% = ((320 - fb * bg / 2 - 1) + ((-1) * bg) + 1)
+ y2% = ((240 - fh * bg / 2) + (fh + 1) * bg)
+ y1% = y2% - maxacid
+
+
+ If acid <= maxacid Or showallacid Then
+
+ Line (x1% - 1, y1% - 1)-(x2% + 1, y2% + 1), 4, B
+ Line (x1% - 2, y1% - 2)-(x2% + 2, y2% + 2), 4, B
+
+ If acid = 0 Or showallacid Then Line (x1%, y1%)-(x2%, y2%), 0, BF
+ If acid > 0 And acid <= maxacid Then
+ Line (x1%, y2% - acid + 1)-(x2%, y2% - acid + 1 + acidplus), 1, BF
+ End If
+
+ If showallacid Then
+ If acid < maxacid Then
+ Line (x1%, y2%)-(x2%, y2% - acid + 1), 1, BF
+ Else
+ Line (x1%, y2%)-(x2%, y1%), 1, BF
+ End If
+ End If
+
+ If acid = maxacid Or (acid > maxacid And showallacid) Then
+ Line (x1% - 1, y1% - 1)-(x2% + 1, y2% + 1), 2, B
+ Line (x1% - 2, y1% - 2)-(x2% + 2, y2% + 2), 2, B
+ End If
+
+ End If
+
+
+
+End Sub
+
+Sub show.bodycount
+ show.font2 Str$(bc), 2, 0, 2, 360, 448
+End Sub
+
+Sub show.ffont (word$, fa, ax, ay)
+
+ For I% = 1 To Len(word$)
+ a$ = Mid$(word$, I%, 1)
+ nr% = Asc(a$) - 64
+
+ If nr% > 0 And nr% < 27 Then
+ For y% = 1 To 19
+ For x% = 1 To 19
+ If buch(nr%, x%, y%) = 1 Then
+ PSet (x% + ax + (I% - 1) * 19, y% + ay), fa
+ End If
+ Next x%
+ Next y%
+ End If
+
+ Next I%
+
+End Sub
+
+Sub show.font (word$, scale, bgc, fgc, xa, ya)
+ For I% = 1 To Len(word$)
+ nr = Asc(UCase$(Mid$(word$, I%, 1))) - 64
+ If nr >= 1 And nr <= 26 Then
+
+ For y% = 1 To 5
+ For x% = 1 To 5
+
+ ax = ((I% - 1) * scale * 6 + (x% - 1) * scale + xa)
+ ay = ((y% - 1) * scale * 3 / 2 + ya)
+
+ If bst(nr, x%, y%) Then
+ col = fgc
+ Else
+ col = bgc
+ End If
+ Line (ax, ay)-Step(scale / 4, scale * 3 / 8), col, BF
+ Next x%
+ Next y%
+
+ End If
+ Next I%
+End Sub
+
+Sub show.font2 (word$, scale, bgc, fgc, xa, ya)
+
+ For I% = 1 To Len(word$)
+ nr = Asc(UCase$(Mid$(word$, I%, 1))) - 64
+
+ If Val((Mid$(word$, I%, 1))) > 0 Then
+ nr = Val((Mid$(word$, I%, 1))) + 30
+ End If
+
+ If Mid$(word$, I%, 1) = "0" Then nr = 30
+ If Mid$(word$, I%, 1) = ":" Then nr = 40
+ If Mid$(word$, I%, 1) = "-" Then nr = 41
+
+ If nr >= 1 And nr <= 41 Then
+ For y% = 1 To 5
+ For x% = 1 To 5
+
+ ax = ((I% - 1) * scale * 6 + (x% - 1) * scale + xa)
+ ay = ((y% - 1) * scale * 3 / 2 + ya)
+
+ If bst(nr, x%, y%) Then
+ col = fgc
+ Else
+ col = bgc
+ End If
+ Line (ax, ay)-Step(scale * 2 / 3, scale), col, BF
+ Next x%
+ Next y%
+
+ End If
+ Next I%
+End Sub
+
+Sub show.heli (farbe%)
+ If farbe% Then
+ x1% = ((320 - fb * bg / 2) + ((helix - 1) * bg) + 1)
+ y1% = ((240 - fh * bg / 2) + ((heliy) * bg) + 1)
+
+ For y% = 2 To 14
+ For x% = 1 To 14
+ If hf1(x%, y%) > 0 Then
+ PSet (x% + x1% - 1, y% + y1% - 1), hf1(x%, y%)
+ End If
+ If hf2(x%, y%) > 0 Then
+ PSet (x% + x1% + 13, y% + y1% - 1), hf2(x%, y%)
+ End If
+ Next x%
+ Next y%
+
+ If rotor Then
+ Line (x1% + 3, y1%)-Step(12, 0), 8
+ Line -Step(12, 0), 7
+ rotor = 0
+ Else
+ Line (x1% + 3, y1%)-Step(12, 0), 7
+ Line -Step(12, 0), 8
+ rotor = 1
+ End If
+
+
+ Else
+ kastl helix, heliy, farb%(helix, heliy)
+ kastl helix + 1, heliy, farb%(helix + 1, heliy)
+ End If
+End Sub
+
+Sub show.helpscreen
+ Screen 13
+
+ Color 1
+ For I = 1 To 255
+ setpal I, 0, 0, 0
+ Next I
+
+ Locate 3, 1
+ Print "Try to catch the soldier who's jumping"
+ Print
+ Print " around before the AH-64D Apache gets "
+ Print
+ Print Space$(14) + "him!!!!!!!"
+ Locate 11, 2
+ Print "If the ACID-O-METER is full press the"
+ Print
+ Print " SPACE BAR to activate an acidrain"
+ Print
+ Print " which will eat away the highest stones."
+ Locate 19, 1
+ Print "Sometimes you can control a falling bomb"
+ Print
+ Print " with which you can destroy some stones."
+ Locate 24, 1
+
+ GoSub action
+
+ setpal 1, 0, 0, 0
+ Color 1
+
+ u$ = ""
+ For I% = 1 To 9
+ u$ = u$ + " " + Chr$(1) + " " + Chr$(2)
+ Next I%
+ u$ = u$ + " " + Chr$(1)
+
+ Print
+ Print u$
+ Print
+ Print " If you think that this program is not"
+ Print
+ Print " so bad, then please please please"
+ Print
+ Print " write a postcard or a letter to me!!"
+ Print
+ Print " I would be very happy! :-)"
+ Print
+ Print u$
+ Print: Print
+ Print " ͻ"
+ Print " Dietmar MORITZ "
+ Print " Ungargasse 43 "
+ Print " 7350 Oberpullendorf "
+ Print " A U S T R I A "
+ Print " E U R O P E "
+ Print " ͼ"
+
+ GoSub action
+ Screen 12
+ Exit Sub
+
+ action:
+ For y% = 0 To 200
+ For x% = 0 To 320
+ If Point(x%, y%) <> 0 Then
+ c = Sqr((x% - 160) ^ 2 + (y% - 100) ^ 2)
+ PSet (x%, y%), c
+ End If
+ Next x%
+ Next y%
+
+ Do
+ w = w + .01
+ For u = 1 To 255
+ I = u / 35
+ r = Abs(Sin(w + I + 4 * _Pi / 3) ^ 2 * 63)
+ g = Abs(Sin(w + I + 2 * _Pi / 3) ^ 2 * 63)
+ B = Abs(Sin(w + I) ^ 2 * 63)
+ setpal u, r, g, B
+ Next u
+ _Limit 60
+ Loop Until InKey$ <> ""
+ Return
+
+ Screen 12
+End Sub
+
+Sub show.menu
+ Screen 0
+ Cls
+
+ Locate 3, 13
+ Color 1
+ Print " t h e u n b e l i e v a b l e Ŀ"
+
+ Print
+
+ Color 2, 0
+
+ Locate 5, 15: Print " "
+ Locate 6, 15: Print " "
+ Locate 7, 15: Print " "
+ Locate 8, 15: Print " "
+ Color 2, 0
+ Locate 9, 15: Print " "
+ Locate 10, 15: Print " "
+ Locate 11, 15: Print " "
+ Locate 12, 15: Print " "
+ Print: Color 1, 0
+ Print Spc(12); " "
+
+End Sub
+
+Sub show.stone (farbe%)
+ For I% = 1 To 4
+ kastl blockx%(I%), blocky%(I%), farbe%
+ farb%(blockx%(I%), blocky%(I%)) = farbe%
+ Next I%
+End Sub
+
+Sub show.verynicegraphic
+
+ Screen 13
+
+ fa = 14
+ ast = 5
+ smooth = 70
+ v = .01
+
+ Dim w As Double
+ w = 1
+ For u = 0 To 255
+ I = u / 81
+ r = Abs(Sin(w + I + 4 * _Pi / 3) * 63)
+ g = Abs(Sin(w + I + 2 * _Pi / 3) * 63)
+ B = Abs(Sin(w + I) * 63)
+
+ setpal u, r, g, B
+
+ Next u
+ Color 1
+ Locate 15, 8: Print "Programming:"
+ Locate 16, 20: Print "Dietmar Moritz"
+ Locate 18, 8: Print "Testing:"
+ Locate 19, 20: Print "Dietmar Moritz"
+ Locate 21, 8: Print "Graphics:"
+ Locate 22, 20: Print "Dietmar Moritz"
+
+ Draw "c251"
+ Color 251
+
+ Draw "bm20,80 u40 r 20 F30 d10 l30 u10 r13 h17 l3 d27 l13"
+ Paint (23, 78), 252, 251
+
+ Draw "c251 bm80,80 u40 r13 d40 l13"
+ Paint (83, 78), 252, 251
+
+ Draw "c251 bm105,80 u40 r 20 F30 d10 l30 u10 r13 h17 l3 d27 l13"
+ Paint (108, 78), 252, 251
+
+ Draw "c251 bm165,80 u40 r22"
+ Line -Step(20, 15), 251
+ Line -Step(-16, 10), 251
+ Draw "f15 l13 h12 u7"
+ Line -Step(9, -6), 251
+ Line -Step(-8, -5), 251
+ Draw "l4 d30 l12"
+ Paint (167, 78), 252, 251
+
+ Draw "c251 bm215,80 u40 r13 d40 l13"
+ Paint (220, 78), 252, 251
+
+ Draw "c251 bm240,80 u10 r23 e5 l27 u15 e10 r30 d10 l23 g5 r27 d15 g10 l30"
+ Paint (243, 78), 252, 251
+
+
+ For y% = 0 To 200
+ For x% = 0 To 160
+ a = Sqr(((x% - 160)) ^ 2 + (y% - 100) ^ 2)
+
+ If x% <> 160 Then
+ w = Atn((y% - 100) / (x% - 160))
+ Else
+ w = Atn((y% - 100) / (.1))
+ End If
+
+ c = Sin(a / fa) ^ 2 * smooth + (w * ast) * 81.5
+ c = c Mod 256
+
+ If InKey$ = Chr$(27) Then Screen 12: Exit Sub
+
+ Select Case Point(x%, y%)
+ Case 251: PSet (x%, y%), c + 128
+ Case 252: PSet (x%, y%), c + 80
+ Case 1: PSet (x%, y%), c + 50
+ Case Else: PSet (x%, y%), c
+ End Select
+
+ If x% < 160 Then
+ Select Case Point(320 - x%, 200 - y%)
+ Case 251: PSet (320 - x%, 200 - y%), c + 128
+ Case 252: PSet (320 - x%, 200 - y%), c + 80
+ Case 1: PSet (320 - x%, 200 - y%), c + 50
+ Case Else: PSet (320 - x%, 200 - y%), c
+ End Select
+ End If
+
+ Next x%
+ Next y%
+
+ w = 1
+ Do
+ w = w + v
+ For u = 0 To 255
+ I = u / 81
+ r = Abs(Sin(w + I + 4 * _Pi / 3) * 63)
+ g = Abs(Sin(w + I + 2 * _Pi / 3) * 63)
+ B = Abs(Sin(w + I) * 63)
+ setpal u, r, g, B
+ Next u
+ _Limit 60
+ Loop Until InKey$ <> ""
+
+ Screen 12
+End Sub
+
+Sub showhiscore
+ Palette
+ Dim n$(10)
+ Dim s(10)
+ Cls
+
+ score = punkte
+
+ On Error GoTo keine
+
+ Open "I", #1, "didris.hsc"
+
+ If h = 0 Then
+
+ For I% = 1 To 10
+ If EOF(1) Then GoTo weiter
+ Input #1, n$(I%)
+ Input #1, s(I%)
+ Next I%
+ End If
+
+ weiter:
+ Close #1
+
+ Color 6
+ setpal 6, 10, 43, 63
+ For I% = 1 To 10
+ If score > s(I%) Then
+ Locate 10, 30: Input "Name: ", name$
+ If Len(name$) > 12 Then name$ = Left$(name$, 12)
+ If name$ = "" Then name$ = "anonymous"
+ For u% = 9 To I% Step -1
+ n$(u% + 1) = n$(u%)
+ s(u% + 1) = s(u%)
+ Next u%
+ n$(I%) = name$
+ s(I%) = score
+ position% = I%
+ Exit For
+ End If
+ Next I%
+
+ Cls
+
+ For I = 0 To 15
+ setpal I, 0, 0, 0
+ Next I
+
+ For x% = 0 To 82
+ For y% = 0 To 82
+ c = Int(Rnd * (5)) + 1
+ PSet (x%, y%), c
+ Next y%
+ Next x%
+
+ For x% = 0 To 80
+ For y% = 0 To 80
+ c = Point(x%, y%) + Point(x% + 1, y%) + Point(x%, y% + 1) + Point(x% - 1, y%) + Point(x%, y% - 1)
+ PSet (x%, y%), c / 5
+ Next y%
+ Next x%
+
+ Dim hh(2000) As Integer
+ Get (1, 1)-(80, 80), hh()
+
+ For y% = 0 To 480 Step 80
+ For x% = 0 To 640 Step 80
+ Put (x%, y%), hh(), PSet
+ Next x%
+ Next y%
+
+ ax = 177
+ ay = 50
+ bx = 390 + Int(Len(Str$(s(1))) / 2) * 9 * 2
+ by = 430
+
+ Line (ax, ay)-(bx, by), 0, BF
+ Line (ax, ay)-(bx, by), 7, B
+
+ setpal 0, 20, 20, 20
+ setpal 1, 0, 0, 20
+ setpal 2, 0, 0, 31
+ setpal 3, 0, 0, 42
+ setpal 4, 0, 0, 53
+ setpal 5, 0, 0, 63
+ setpal 7, 20, 20, 20
+ setpal 8, 22, 22, 22
+ setpal 9, 18, 18, 18
+ setpal 10, 16, 16, 16
+ setpal 11, 24, 24, 24
+ setpal 12, 10, 10, 10
+ setpal 13, 5, 5, 5
+ setpal 15, 0, 0, 0
+
+ Color 7
+
+ Line (171, 44)-(bx + 6, 44)
+ Line -(bx, ay)
+ Line (171, 44)-(171, 436)
+ Line -(ax, by)
+ Paint (175, ay), 11, 7
+ Line (ax, ay)-(171, 44)
+
+ Line (171, 436)-(bx + 6, 436)
+ Line -(bx + 6, 44)
+ Paint (bx + 2, by), 12, 7
+ Line (bx + 6, 436)-(bx, by), 13
+
+ Line (171, 44)-(bx + 6, 436), 15, B
+
+ Color 6
+ setpal 6, 10, 43, 63
+ For I% = 1 To 10
+ Locate I% * 2 + 6, 30
+ If s(I%) > 0 Then
+ Print n$(I%), s(I%)
+ End If
+ Next I%
+
+ Locate 5, 25 + Int(Len(Str$(s(1))) / 2)
+ Color 1: Print "-";
+ Color 2: Print "=";
+ Color 3: Print " H I ";
+ Color 4: Print "G H ";
+ Color 5: Print "S ";
+ Color 4: Print "C O ";
+ Color 3: Print "R E ";
+ Color 2: Print "=";
+ Color 1: Print "-";
+
+ If position% > 0 Then
+ Locate position% * 2 + 6, 30
+ Color 14
+ Print name$, punkte
+ End If
+
+ For I% = 1 To 100
+ x% = Int(Rnd * (bx - ax)) + ax
+ y% = Int(Rnd * (by - ay)) + ay
+ c% = Int(Rnd * (5)) + 8
+ For u% = 1 To 20
+ x% = Int(Rnd * (3)) + x% - 1
+ y% = Int(Rnd * (3)) + y% - 1
+ If Point(x%, y%) = 0 Then PSet (x%, y%), c%
+ Next u%
+ Next I%
+
+ Open "O", #1, "didris.hsc"
+ For I% = 1 To 10
+ Print #1, n$(I%)
+ Print #1, s(I%)
+ Next I%
+ Close #1
+
+ Do
+ x = x + .01
+ c1 = Abs(Int(Sin(x) * 63))
+ c2 = Abs(Int(Sin(x + 2 * _Pi / 3) * 63))
+ c3 = Abs(Int(Sin(x + 4 * _Pi / 3) * 63))
+ setpal 14, c1, c2, c3
+ Wait &H3DA, 8
+ Loop Until InKey$ <> ""
+
+End Sub
+
+Sub showpoints
+ For I% = 2 To 0 Step -1
+ Line (320 - (130 + I% * 10), 240 - (50 + I% * 10))-(320 + (130 + I% * 10), 190 + (50 + I% * 10)), I% + 11, BF
+ Line (320 - 120, 240 - 40)-(320 + 120, 190 + 40), 0, BF
+ Next I%
+ Color 14
+ Locate 14, 40 - Int((7 + Len(Str$(punkte))) / 2)
+ Print "SCORE: " + Str$(punkte)
+
+ Do
+ x = x + .009
+ c1 = Abs(Int(Sin(x) * 63))
+ c2 = Abs(Int(Sin(x + 2 * _Pi / 3) * 63)) * 256
+ c3 = Abs(Int(Sin(x + 4 * _Pi / 3) * 63)) * 256 ^ 2
+ Palette 11, c1 + c2
+ Palette 12, c1 + c3
+ Palette 13, c2 + c3
+ Palette 14, c1 + c2 + c3
+ Loop Until InKey$ = Chr$(13)
+End Sub
+
+Sub strukturstart (struktur%)
+ Select Case struktur%
+ Case 1
+ blockx%(1) = Int(fb / 2) + 1
+ blocky%(1) = 2
+ blockx%(2) = blockx%(1)
+ blocky%(2) = 1
+ blockx%(3) = blockx%(1) - 1
+ blocky%(3) = 2
+ blockx%(4) = blockx%(1) + 1
+ blocky%(4) = 2
+ Case 2
+ blockx%(1) = Int(fb / 2)
+ blocky%(1) = 1
+ blockx%(2) = blockx%(1)
+ blocky%(2) = 2
+ blockx%(3) = blockx%(1) + 1
+ blocky%(3) = 1
+ blockx%(4) = blockx%(1) + 1
+ blocky%(4) = 2
+ Case 3
+ blockx%(1) = Int(fb / 2) + 1
+ blocky%(1) = 1
+ blockx%(2) = blockx%(1) + 1
+ blocky%(2) = 1
+ blockx%(3) = blockx%(1) - 1
+ blocky%(3) = 2
+ blockx%(4) = blockx%(1)
+ blocky%(4) = 2
+ Case 4
+ blockx%(1) = Int(fb / 2)
+ blocky%(1) = 1
+ blockx%(2) = blockx%(1) + 1
+ blocky%(2) = 1
+ blockx%(3) = blockx%(2) + 1
+ blocky%(3) = 2
+ blockx%(4) = blockx%(2)
+ blocky%(4) = 2
+ Case 5
+ blockx%(1) = Int(fb / 2)
+ blocky%(1) = 2
+ blockx%(2) = blockx%(1)
+ blocky%(2) = 1
+ blockx%(3) = blockx%(1) + 1
+ blocky%(3) = 1
+ blockx%(4) = blockx%(1)
+ blocky%(4) = 3
+ Case 6
+ blockx%(1) = Int(fb / 2) + 1
+ blocky%(1) = 2
+ blockx%(2) = blockx%(1)
+ blocky%(2) = 1
+ blockx%(3) = blockx%(1) - 1
+ blocky%(3) = 1
+ blockx%(4) = blockx%(1)
+ blocky%(4) = 3
+ Case 7
+ blockx%(1) = Int(fb / 2) + 1
+ blocky%(1) = 2
+ blockx%(2) = blockx%(1)
+ blocky%(2) = 1
+ blockx%(3) = blockx%(1)
+ blocky%(3) = 3
+ blockx%(4) = blockx%(1)
+ blocky%(4) = 4
+ Case 99
+ blockx%(1) = Int(fb / 2) + 1
+ blocky%(1) = 1
+ blockx%(2) = blockx%(1)
+ blocky%(2) = 1
+ blockx%(3) = blockx%(1)
+ blocky%(3) = 1
+ blockx%(4) = blockx%(1)
+ blocky%(4) = 1
+ End Select
+
+ For I% = 1 To 4
+ If feld%(blockx%(I%), blocky%(I%)) = belegt% Then
+ farb% = Int(Rnd * (15)) + 1
+ For i2% = 1 To 4
+ kastl blockx%(i2%), blocky%(i2%), farb%
+ Next i2%
+ ausis
+ Exit Sub
+ End If
+ Next I%
+End Sub
+
+Sub Tasten
+ Dim a$(15)
+ a$(1) = "Left......... Left "
+ a$(2) = "Right........ Right "
+ a$(3) = "Rotate....... Up / Enter"
+ a$(4) = "Drop......... Down / 0 "
+ a$(5) = "Acidrain..... Space bar "
+ a$(7) = "Music on/off. m / s"
+ a$(8) = "Music #1..... 1 "
+ a$(9) = "Music #2..... 2 "
+ a$(10) = "Music #3..... 3 "
+ a$(12) = "Info......... F1 "
+ a$(13) = "Pause........ p "
+ a$(14) = "Boss Key..... F10"
+ a$(15) = "End.......... ESC"
+
+
+ If yn(1) = 2 Then
+ For I% = 7 To 10
+ a$(I%) = a$(I% + 5)
+ a$(I% + 5) = ""
+ Next I%
+ End If
+
+ If yn(4) = 2 Then
+ For I% = 5 To 14
+ a$(I%) = a$(I% + 1)
+ a$(15) = ""
+ Next I%
+ End If
+
+ For I% = 1 To 15
+ For x% = 1 To Len(a$(I%)) Step 2
+ Locate 7 + I%, 54 + x%: Color Int(Rnd * (15)) + 1: Print Mid$(a$(I%), x%, 2)
+ Next x%
+ Next I%
+End Sub
+
+Sub Titel
+ Palette
+ a$ = "DIDI's"
+ B$ = "DIDRIS"
+ c$ = "1 9 9 8"
+
+ zx = 320
+ zy = 240
+ zz = 60
+ h = 5
+ f = 5
+ ff = 0
+ fff = 100
+
+ For ii% = 1 To 3
+ Select Case ii%
+ Case 1: xx$ = a$
+ Case 2: xx$ = B$
+ Case 3: xx$ = c$
+ End Select
+ Locate 1, 1: Print xx$ + " "
+ For y% = 1 To 15
+ For I% = 1 To Len(xx$) * 8
+ If Point(I%, y%) > 0 Then
+ farb% = Int(Rnd * (15)) + 1
+ Line (fax(320 - Len(xx$) * 20 + I% * 40 / 8, 0, zx, zz), fay(y% * f - ff + ii% * fff, 0, zy, zz))-(fax(320 - Len(xx$) * 20 + I% * 40 / 8, h, zx, zz), fay(y% * f - ff + ii% * fff, h, zy, zz)), farb%
+ End If
+ Next I%
+ Next y%
+ Next ii%
+ Locate 1, 1: Print " "
+ t = Timer
+ Do
+ x = x + .01
+ c1 = Abs(Int(Sin(x) * 63))
+ c2 = Abs(Int(Sin(x + 2 * _Pi / 3) * 63)) * 256
+ c3 = Abs(Int(Sin(x + 4 * _Pi / 3) * 63)) * 256 ^ 2
+ c4 = Abs(Int(Cos(x) * 63))
+ c5 = Abs(Int(Cos(x + 2 * _Pi / 3) * 63)) * 256
+ c6 = Abs(Int(Cos(x + 4 * _Pi / 3) * 63)) * 256 ^ 2
+ Palette 7, c4 + c5
+ Palette 8, c4 + c6
+ Palette 9, c5 + c6
+ Palette 10, c4 + c5 + c6
+ Palette 11, c1 + c2
+ Palette 12, c1 + c3
+ Palette 13, c2 + c3
+ Palette 14, c1 + c2 + c3
+ z$ = InKey$
+ _Limit 60
+ Loop Until z$ <> "" Or Timer >= t + 15
+ If UCase$(z$) = "M" Then yn(1) = 2
+
+ Dim verz(3000)
+
+ fa = 40
+ fa2 = 2
+ t = Timer
+ Do
+ x = Int(Rnd * (530 - fa)) + 100
+ y = Int(Rnd * (370 - fa)) + 70
+ Get (x, y)-(x + fa, y + fa), verz()
+ Put (x, y + fa2), verz(), PSet
+ z$ = InKey$
+ Wait &H3DA, 8
+ Loop Until z$ <> "" Or Timer >= t + 20
+
+ If UCase$(z$) = "M" Then yn(1) = 2
+
+ Palette
+End Sub
+
diff --git a/samples/didris/src/didris.zip b/samples/didris/src/didris.zip
new file mode 100644
index 00000000..58e6ca9c
Binary files /dev/null and b/samples/didris/src/didris.zip differ
diff --git a/samples/dietmar-moritz.md b/samples/dietmar-moritz.md
new file mode 100644
index 00000000..e180db16
--- /dev/null
+++ b/samples/dietmar-moritz.md
@@ -0,0 +1,9 @@
+[Home](https://qb64.com) • [News](../news.md) • [GitHub](../github.md) • [Wiki](../wiki.md) • [Samples](../samples.md) • [Media](../media.md) • [Community](../community.md) • [Rolodex](../rolodex.md) • [More...](../more.md)
+
+## SAMPLES BY DIETMAR MORITZ
+
+**[Didris](didris/index.md)**
+
+[🐝 Dietmar Moritz](dietmar-moritz.md) 🔗 [game](game.md), [tetris](tetris.md)
+
+'________________________This_is_the_unbelievable '________ÜÜÜ___ÜÜ_________ÜÜÜ____________ÜÜ '__...
diff --git a/samples/dos-world.md b/samples/dos-world.md
new file mode 100644
index 00000000..2cb9b52e
--- /dev/null
+++ b/samples/dos-world.md
@@ -0,0 +1,87 @@
+[Home](https://qb64.com) • [News](../news.md) • [GitHub](../github.md) • [Wiki](../wiki.md) • [Samples](../samples.md) • [Media](../media.md) • [Community](../community.md) • [Rolodex](../rolodex.md) • [More...](../more.md)
+
+## SAMPLES: DOS WORLD
+
+**[Bar Demo](bar-demo/index.md)**
+
+[🐝 Douglas Park](douglas-park.md) 🔗 [tui](tui.md), [dos world](dos-world.md)
+
+' BARDEMO.BAS ' by Douglas Park ' Copyright (C) 1995 DOS World Magazine ' Published in Issue #19,...
+
+**[Calc](calc/index.md)**
+
+[🐝 William Loughner](william-loughner.md) 🔗 [calculator](calculator.md), [dos world](dos-world.md)
+
+' CALC.BAS ' by William Loughner ' Copyright (c) 1994 DOS Resource Guide ' Published i...
+
+**[Calendar](calendar/index.md)**
+
+[🐝 A&A De Pasquale](a&a-de-pasquale.md) 🔗 [calendar](calendar.md), [pdf](pdf.md), [dos world](dos-world.md)
+
+' Antonio & Alfonso De Pasquale ' Copyright (C) 1993 DOS Resource Guide ' Published in Issue #8, ...
+
+**[Colors](colors/index.md)**
+
+[🐝 Hardin Brothers](hardin-brothers.md) 🔗 [color picker](color-picker.md), [dos world](dos-world.md)
+
+' COLORS.BAS ' Copyright (c) 1993 DOS Resource Guide ' Published in Issue #12, November 199...
+
+**[Cram](cram/index.md)**
+
+[🐝 Hardin Brothers](hardin-brothers.md) 🔗 [game](game.md), [dos world](dos-world.md)
+
+'CRAM! ' by Hardin Brothers ' ' Copyright (C) 1993 DOS Resource Guide ' Published in Issue ...
+
+**[Dec to Frac](dec-to-frac/index.md)**
+
+[🐝 A&A De Pasquale](a&a-de-pasquale.md) 🔗 [math](math.md), [dos world](dos-world.md)
+
+' DEC_FRAC.BAS - Fraction/Decimal conversion functions ' and sample program ' b...
+
+**[Diamond Pong](diamond-pong/index.md)**
+
+[🐝 John Wolfskill](john-wolfskill.md) 🔗 [game](game.md), [pong](pong.md), [dos world](dos-world.md)
+
+' Diamond Pong ' by ' John Wol...
+
+**[Hangman](hangman/index.md)**
+
+[🐝 A&A De Pasquale](a&a-de-pasquale.md) 🔗 [game](game.md), [hangman](hangman.md), [dos world](dos-world.md)
+
+' HANGMAN.BAS by Antonio & Alfonso De Pasquale ' Copyright (C) 1993, 1994 DOS Resource Guide ' ...
+
+**[Letter Blast](letter-blast/index.md)**
+
+[🐝 A&A De Pasquale](a&a-de-pasquale.md) 🔗 [game](game.md), [letter](letter.md), [dos world](dos-world.md)
+
+' LETBLAST.BAS - Shoot the falling letters! ' by Antonio & Alfonso De Pasquale ' ' Copyr...
+
+**[Loan Amortization](loan-amortization/index.md)**
+
+[🐝 Alan Zeichick](alan-zeichick.md) 🔗 [finance](finance.md), [dos world](dos-world.md)
+
+' Loan amortization program ' Alan Zeichick, March 16, 1993 ' Copyright (c) 1993 DOS Resource Gui...
+
+**[Measure](measure/index.md)**
+
+[🐝 A&A De Pasquale](a&a-de-pasquale.md) 🔗 [measure](measure.md), [dos world](dos-world.md)
+
+' MEASURE.BAS - A program for performing measurement conversions ' by Antonio & Alfonso De P...
+
+**[Names](names/index.md)**
+
+[🐝 David Bannon](david-bannon.md) 🔗 [data management](data-management.md), [dos world](dos-world.md)
+
+' NAMES.BAS by David Bannon ' Copyright (C) 1992 DOS Resource Guide ' Published in Issue #6, N...
+
+**[Phone](phone/index.md)**
+
+[🐝 Hardin Brothers](hardin-brothers.md) 🔗 [data management](data-management.md), [dos world](dos-world.md)
+
+' ' PHONE.BAS by Hardin Brothers ' Copyright (C) 1992 DOS Resource Guide ' Published in Issue ...
+
+**[Saver](saver/index.md)**
+
+[🐝 David Ferrier](david-ferrier.md) 🔗 [screensaver](screensaver.md), [dos world](dos-world.md)
+
+1 ' SAVER.BAS by David Ferrier 2 ' Copyright (C) 1992 DOS Resource Guide 3 ' Published in Issu...
diff --git a/samples/double-pendulum/img/screenshot.png b/samples/double-pendulum/img/screenshot.png
new file mode 100644
index 00000000..cdb10a2d
Binary files /dev/null and b/samples/double-pendulum/img/screenshot.png differ
diff --git a/samples/double-pendulum/index.md b/samples/double-pendulum/index.md
new file mode 100644
index 00000000..8b201061
--- /dev/null
+++ b/samples/double-pendulum/index.md
@@ -0,0 +1,25 @@
+[Home](https://qb64.com) • [News](../../news.md) • [GitHub](../../github.md) • [Wiki](../../wiki.md) • [Samples](../../samples.md) • [Media](../../media.md) • [Community](../../community.md) • [Rolodex](../../rolodex.md) • [More...](../../more.md)
+
+## SAMPLE: DOUBLE PENDULUM
+
+![screenshot.png](img/screenshot.png)
+
+### Description
+
+```text
+Simulated double pendulum with damping.
+```
+
+### QBjs
+
+> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
+
+* [LOAD "double-pendulum.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/double-pendulum/src/double-pendulum.bas)
+* [RUN "double-pendulum.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/double-pendulum/src/double-pendulum.bas)
+* [PLAY "double-pendulum.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/double-pendulum/src/double-pendulum.bas)
+
+### File(s)
+
+* [double-pendulum.bas](src/double-pendulum.bas)
+
+🔗 [physics](../physics.md), [pendulum](../pendulum.md)
diff --git a/samples/double-pendulum/src/double-pendulum.bas b/samples/double-pendulum/src/double-pendulum.bas
new file mode 100644
index 00000000..f133013b
--- /dev/null
+++ b/samples/double-pendulum/src/double-pendulum.bas
@@ -0,0 +1,164 @@
+DefDbl A-Z: DefInt I-J, N
+n = 5: nn = 0
+Dim x(n), xx(n), f(n), c(4, n)
+nextone:
+Screen 0: Cls
+_FullScreen
+' option here to get the x-scale NOT magnified as in popular modern monitors
+GoSub graphics
+GoSub startup
+
+agn:
+Cls
+Line (0, -a)-(0, a), 8
+ph = -a * Cos(w * x(5))
+Circle (0, ph), .025, 12: Paint (0, ph), 12
+X1 = Sin(xx(1))
+X2 = -Cos(xx(1)) + ph
+X3 = Sin(xx(1)) + Sin(xx(3))
+X4 = -Cos(xx(1)) - Cos(xx(3)) + ph
+Line (0, ph)-(X1, X2), 12
+Circle (X1, X2), .05, 9: Paint (X1, X2), 9
+Line (X1, X2)-(X3, X4), 12
+Circle (X3, X4), .05, 9: Paint (X3, X4), 9
+_Delay .001
+GoSub Runge
+t = t + h
+Locate 21, 6: Print CSng(t)
+a$ = InKey$: If a$ = "" Then GoTo agn Else GoTo nextone
+
+Equations:
+Q = x(3) - x(1)
+c = Cos(Q)
+s = Sin(Q)
+P = c * s
+D = 1# - m * c ^ 2#
+g = (1# + a * w ^ 2# * Cos(w * x(5)))
+g1 = g * Sin(x(1))
+g3 = g * Sin(x(3))
+x22 = x(2) ^ 2#
+x42 = x(4) ^ 2#
+f(1) = x(2)
+f(2) = -k * x(2) + (m * (x42 * s + x22 * P + g3 * c) - g1) / D
+f(3) = x(4)
+f(4) = -k * x(4) + (-x22 * s - m * x42 * P - g3 + g1 * c) / D
+f(5) = 1#
+Locate 7, 5: Print x(1)
+Locate 8, 5: Print x(2)
+Locate 9, 5: Print x(3)
+Locate 10, 5: Print x(4)
+Locate 11, 5: Print x(5)
+_Display
+Return
+
+Runge:
+For i = 1 To n: x(i) = xx(i): Next
+GoSub Equations
+For i = 1 To n: c(1, i) = h * f(i): Next
+For i = 1 To n: x(i) = xx(i) + c(1, i) / 2#: Next
+GoSub Equations
+For i = 1 To n: c(2, i) = h * f(i): Next
+For i = 1 To n: x(i) = xx(i) + c(2, i) / 2#: Next
+GoSub Equations
+For i = 1 To n: c(3, i) = h * f(i): Next
+For i = 1 To n: x(i) = xx(i) + c(3, i): Next
+GoSub Equations
+For i = 1 To n: c(4, i) = h * f(i): Next
+For i = 1 To n
+ xx(i) = xx(i) + (c(1, i) + 2# * c(2, i) + 2# * c(3, i) + c(4, i)) / 6#
+Next
+Return
+
+graphics:
+Cls: Screen 9
+Paint (1, 1), 9
+View (220, 17)-(595, 330), 0, 14
+Window (-3.6, -2.4)-(3.6, 2.8)
+Locate 21, 2: Print "Time"
+Return
+
+startup:
+k = .1#: m = .1#: xx(2) = 0: xx(4) = 0
+'nn = 2
+Select Case nn
+
+ Case O
+ k = .05#: m = .1#: xx(2) = 0: xx(4) = 0: xx(1) = .4: xx(3) = -.2
+ Print "viscous damping k=0.05"
+ Case 1
+ k = 0#: m = .1#: xx(2) = 0: xx(4) = 0: xx(1) = 0: xx(3) = 3.1428
+ Locate 5, 2
+ Print " no viscous damping "
+ Case 2
+ a = .2: w = 10: xx(1) = 3.1: xx(3) = 1 'stable yet semi-hanging
+ Locate 3, 1
+ Print "stable yet top-hanging"
+ Case 3
+ a = .1: w = 3.696#: xx(1) = .01: xx(3) = .01: m = .5# 'fast mode
+ Locate 3, 1
+ Print " fast-pump mode "
+ Case 4
+ a = .1: w = 1.55#: xx(1) = .01: xx(3) = .01: m = .5#: k = .03# 'slow mode
+ Locate 3, 1
+ Print " slow-pump mode "
+ Case 5
+ a = .1: w = 1.55#: xx(1) = .1: xx(3) = .2: m = .5# 'k=.1 too much for slow
+ Locate 3, 1
+ Print " damping k=0.1 is too "
+ Locate 4, 1
+ Print " much for slow mode "
+ Case 6
+ a = .1: w = 2: xx(1) = .32: xx(3) = .32 'goes to down-hanging
+ Locate 4, 1
+ Print " goes to down-hanging "
+ Case 7
+ a = .1: w = 2: xx(1) = 1: xx(3) = -1 'stable fast swing
+ Locate 3, 2
+ Print " stable fast swing "
+ Case 8
+ a = .25: w = 2: xx(1) = 1.5: xx(3) = -1.5 'stable fast swing
+ Locate 3, 2
+ Print " stable fast swing "
+ Case 9
+ a = .25#: w = 2#: xx(1) = 1: xx(3) = -1: x(2) = 5: x(4) = 5: k = .05 'whirling
+ Locate 3, 2
+ Print " whirling dervrish "
+ Case 10
+ m = .5#: k = .2#: xx(1) = 2.5: xx(3) = 1.9: a = .1: w = 25 'a<.3;w>1.85/a
+ Locate 3, 2
+ Print " Indian Rope Trick! "
+ Case 11
+ m = .5#: k = .2#: xx(1) = 2.6: xx(3) = -3.1: a = .1: w = 25 'a<.3;w>1.85/a
+ Locate 3, 3
+ Print " teeter-totter "
+ Case 12
+ m = .5#: k = .2#: xx(1) = 3.1: xx(3) = 3.2: a = .04: w = 25 'collapse 1
+ Locate 3, 4
+ Print " surprise! "
+ Case 13
+ m = .5#: k = .2#: xx(1) = 3.1: xx(3) = 3.2: a = .15#: w = 25 'collapse 2
+ Locate 3, 2
+ Print " this IS demo 13! "
+ Case 14
+ m = .5#: k = .2#: xx(1) = 3.05#: xx(3) = 3.25#: a = .11#: w = 25 'a<.3;w>1.85/a
+ Case Is > 15
+ Screen 0: Cls: Print "Only maths and physics types live in a LINEAR delusion"
+ Print " where you can uncook eggs and correct errors!": End
+End Select
+If nn > 1 Then
+ Locate 5, 4
+ Print " damping k=";: Print Using "#.##"; k
+Else
+ Locate 3, 3
+ Print " A double pendulum"
+ Locate 4, 3
+ Print " swinging with "
+End If
+Locate 25, 1: Print "press any key for next demo";
+'IF nn < 0 THEN LOCATE 12, 2: INPUT "a,w"; a, w
+t = 0#: xx(5) = 0#
+'IF nn > 0 THEN LOCATE 14, 2: INPUT "ang1,ang2"; xx(1), xx(3)
+h = .005#
+nn = nn + 1
+Return
+
diff --git a/samples/douglas-park.md b/samples/douglas-park.md
new file mode 100644
index 00000000..78d9efe8
--- /dev/null
+++ b/samples/douglas-park.md
@@ -0,0 +1,9 @@
+[Home](https://qb64.com) • [News](../news.md) • [GitHub](../github.md) • [Wiki](../wiki.md) • [Samples](../samples.md) • [Media](../media.md) • [Community](../community.md) • [Rolodex](../rolodex.md) • [More...](../more.md)
+
+## SAMPLES BY DOUGLAS PARK
+
+**[Bar Demo](bar-demo/index.md)**
+
+[🐝 Douglas Park](douglas-park.md) 🔗 [tui](tui.md), [dos world](dos-world.md)
+
+' BARDEMO.BAS ' by Douglas Park ' Copyright (C) 1995 DOS World Magazine ' Published in Issue #19,...
diff --git a/samples/draw.md b/samples/draw.md
new file mode 100644
index 00000000..0d4cc686
--- /dev/null
+++ b/samples/draw.md
@@ -0,0 +1,9 @@
+[Home](https://qb64.com) • [News](../news.md) • [GitHub](../github.md) • [Wiki](../wiki.md) • [Samples](../samples.md) • [Media](../media.md) • [Community](../community.md) • [Rolodex](../rolodex.md) • [More...](../more.md)
+
+## SAMPLES: DRAW
+
+**[Lucid Drawing](lucid-drawing/index.md)**
+
+[🐝 Lucid](lucid.md) 🔗 [2d](2d.md), [draw](draw.md)
+
+Drawing program by Lucid.
diff --git a/samples/drawing.md b/samples/drawing.md
index ca8d25e7..6228b26b 100644
--- a/samples/drawing.md
+++ b/samples/drawing.md
@@ -8,6 +8,12 @@
A Graphics/Animation utility by Bob Seguin. NOTE: This game requires graphics files created by a...
+**[Kaleidoscope Doodler](kaleidoscope-doodler/index.md)**
+
+[🐝 qbguy](qbguy.md) 🔗 [art](art.md), [drawing](drawing.md)
+
+Left-click to draw, right click or middle click to clear screen, escape to quit.
+
**[QBAscii](qbascii/index.md)**
[🐝 Jeremy Munn](jeremy-munn.md) 🔗 [drawing](drawing.md), [ascii](ascii.md)
diff --git a/samples/dropping-balls/index.md b/samples/dropping-balls/index.md
index f56240d8..3234c05e 100644
--- a/samples/dropping-balls/index.md
+++ b/samples/dropping-balls/index.md
@@ -18,9 +18,9 @@ Dropping Balls an attempt to build a pile by adjusting drop rate, elasticity, an
> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
-* [LOAD "droppingballs.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?src=https://qb64.com/samples/dropping-balls/src/droppingballs.bas)
-* [RUN "droppingballs.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?mode=auto&src=https://qb64.com/samples/dropping-balls/src/droppingballs.bas)
-* [PLAY "droppingballs.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?mode=play&src=https://qb64.com/samples/dropping-balls/src/droppingballs.bas)
+* [LOAD "droppingballs.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/dropping-balls/src/droppingballs.bas)
+* [RUN "droppingballs.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/dropping-balls/src/droppingballs.bas)
+* [PLAY "droppingballs.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/dropping-balls/src/droppingballs.bas)
### File(s)
diff --git a/samples/editor.md b/samples/editor.md
new file mode 100644
index 00000000..15435c68
--- /dev/null
+++ b/samples/editor.md
@@ -0,0 +1,9 @@
+[Home](https://qb64.com) • [News](../news.md) • [GitHub](../github.md) • [Wiki](../wiki.md) • [Samples](../samples.md) • [Media](../media.md) • [Community](../community.md) • [Rolodex](../rolodex.md) • [More...](../more.md)
+
+## SAMPLES: EDITOR
+
+**[XE Hex Editor](xe-hex-editor/index.md)**
+
+[🐝 Dav](dav.md) 🔗 [editor](editor.md), [hex](hex.md)
+
+'============ 'XE.BAS v1.10 '============ 'A simple Binary File (HEX) editor. 'Coded by Dav on AU...
diff --git a/samples/eliza.md b/samples/eliza.md
new file mode 100644
index 00000000..b4ea8519
--- /dev/null
+++ b/samples/eliza.md
@@ -0,0 +1,9 @@
+[Home](https://qb64.com) • [News](../news.md) • [GitHub](../github.md) • [Wiki](../wiki.md) • [Samples](../samples.md) • [Media](../media.md) • [Community](../community.md) • [Rolodex](../rolodex.md) • [More...](../more.md)
+
+## SAMPLES: ELIZA
+
+**[Eliza](eliza/index.md)**
+
+[🐝 *missing*](author-missing.md) 🔗 [ai](ai.md), [eliza](eliza.md)
+
+The original chatbot, Eliza.
diff --git a/samples/eliza/img/screenshot.png b/samples/eliza/img/screenshot.png
new file mode 100644
index 00000000..5bdc57bc
Binary files /dev/null and b/samples/eliza/img/screenshot.png differ
diff --git a/samples/eliza/index.md b/samples/eliza/index.md
new file mode 100644
index 00000000..1531128d
--- /dev/null
+++ b/samples/eliza/index.md
@@ -0,0 +1,19 @@
+[Home](https://qb64.com) • [News](../../news.md) • [GitHub](../../github.md) • [Wiki](../../wiki.md) • [Samples](../../samples.md) • [Media](../../media.md) • [Community](../../community.md) • [Rolodex](../../rolodex.md) • [More...](../../more.md)
+
+## SAMPLE: ELIZA
+
+![screenshot.png](img/screenshot.png)
+
+### Description
+
+```text
+The original chatbot, Eliza.
+```
+
+### File(s)
+
+* [eliza.bas](src/eliza.bas)
+* [eliza.zip](src/eliza.zip)
+* [p36-weizenabaum.pdf](src/p36-weizenabaum.pdf)
+
+🔗 [ai](../ai.md), [eliza](../eliza.md)
diff --git a/samples/eliza/src/eliza.bas b/samples/eliza/src/eliza.bas
new file mode 100644
index 00000000..83c24ddc
--- /dev/null
+++ b/samples/eliza/src/eliza.bas
@@ -0,0 +1,249 @@
+' Modified 2021 by wfbarnes for QB64 compiler.
+
+'1 KEY OFF: CLS
+'4 CLS
+'5 PRINT TAB(16) + "**************************"
+'10 PRINT TAB(26) + "ELIZA"
+'20 PRINT TAB(20) + "CREATIVE COMPUTING"
+'30 PRINT TAB(18) + "MORRISTOWN, NEW JERSEY": PRINT
+'40 PRINT TAB(19) + "ADAPTED FOR IBM PC BY"
+'50 PRINT TAB(20) + "PATRICIA DANIELSON AND PAUL HASHFIELD"
+'52 PRINT TAB(21) + "BE SURE THAT THE CAPS LOCK IS ON"
+'53 PRINT: PRINT TAB(16) + "PLEASE DON'T USE COMMAS OR PERIODS IN YOUR INPUTS": PRINT
+'55 PRINT TAB(16) + "*************************"
+'60 PRINT: PRINT: PRINT
+'80 REM*****INITIALIZATION**********
+100 Dim Shared S(36), R(36), N(36)
+105 Dim Shared KEYWORD$(36), WORDIN$(7), WORDOUT$(7), REPLIES$(112)
+Dim Shared N1, N2, N3
+Dim L, X
+110 N1 = 36: N2 = 14: N3 = 112
+112 For X = 1 To N1: Read KEYWORD$(X): Next X
+114 For X = 1 To N2 / 2: Read WORDIN$(X): Read WORDOUT$(X): Next X
+116 For X = 1 To N3: Read REPLIES$(X): Next X
+130 For X = 1 To N1
+ 140 Read S(X), L: R(X) = S(X): N(X) = S(X) + L - 1
+150 Next X
+'160 PRINT "HI! I'M ELIZA. WHAT'S YOUR PROBLEM?"
+
+1000 Rem *******************************
+1010 Rem *****PROGRAM DATA FOLLOWS******
+1020 Rem *******************************
+1030 Rem *********KEYWORDS**************
+1049 Rem *******************************
+1050 Data "CAN YOU ","CAN I ","YOU ARE ","YOU'RE ","I DON'T ","I FEEL "
+1060 Data "WHY DON'T YOU ","WHY CAN'T I ","ARE YOU ","I CAN'T ","I AM ","I'M "
+1070 Data "YOU ","I WANT ","WHAT ","HOW ","WHO ","WHERE ","WHEN ","WHY "
+1080 Data "NAME ","CAUSE ","SORRY ","DREAM ","HELLO ","HI ","MAYBE "
+1090 Data "NO","YOUR ","ALWAYS ","THINK ","ALIKE ","YES ","FRIEND "
+1100 Data "COMPUTER","NOKEYFOUND"
+1200 Rem *********************************
+1210 Rem ***STRING DATA FOR CONJUGATIONS**
+1220 Rem *********************************
+1230 Data " ARE "," AM "," WERE "," WAS "," YOU "," I "," YOUR"," MY "
+1235 Data " I'VE "," YOU'VE "," I'M "," YOU'RE "
+1240 Data " ME "," YOU "
+1300 Rem ******************************
+1310 Rem *********REPLIES**************
+1320 Rem ******************************
+1330 Data "DON'T YOU BELIEVE THAT I CAN*"
+1340 Data "PERHAPS YOU WOULD LIKE TO BE LIKE ME*"
+1350 Data "YOU WANT ME TO BE ABLE TO*"
+1360 Data "PERHAPS YOU DON'T WANT TO*"
+1365 Data "DO YOU WANT TO BE ABLE TO*"
+1370 Data "WHAT MAKES YOU THINK I AM*"
+1380 Data "DOES IT PLEASE YOU TO BELIEVE I AM*"
+1390 Data "PERHAPS YOU WOULD LIKE TO BE*"
+1400 Data "DO YOU SOMETIMES WISH YOU WERE*"
+1410 Data "DON'T YOU REALLY*"
+1420 Data "WHY DON'T YOU*"
+1430 Data "DO YOU WISH TO BE ABLE TO*"
+1440 Data "DOES THAT TROUBLE YOU*"
+1450 Data "DO YOU OFTEN FEEL*"
+1460 Data "DO YOU OFTEN FEEL*"
+1470 Data "DO YOU ENJOY FEELING*"
+1480 Data "DO YOU REALLY BELIEVE I DON'T*"
+1490 Data "PERHAPS IN GOOD TIME I WILL*"
+1500 Data "DO YOU WANT ME TO*"
+1510 Data "DO YOU THINK YOU SHOULD BE ABLE TO*"
+1520 Data "WHY CAN'T YOU*"
+1530 Data "WHY ARE YOU INTERESTED IN WHETHER OR NOT I AM*"
+1540 Data "WOULD YOU PREFER IF I WERE NOT*"
+1550 Data "PERHAPS IN YOUR FANTASIES I AM*"
+1560 Data "HOW DO YOU KNOW YOU CAN'T*"
+1570 Data "HAVE YOU TRIED?"
+1580 Data "PERHAPS YOU CAN NOW*"
+1590 Data "DID YOU COME TO ME BECAUSE YOU ARE*"
+1600 Data "HOW LONG HAVE YOU BEEN*"
+1610 Data "DO YOU BELIEVE IT IS NORMAL TO BE*"
+1620 Data "DO YOU ENJOY BEING*"
+1630 Data "WE WERE DISCUSSING YOU--NOT ME."
+1640 Data "OH, I*"
+1650 Data "YOU'RE NOT REALLY TALKING ABOUT ME, ARE YOU?"
+1660 Data "WHAT WOULD IT MEAN TO YOU IF YOU GOT*"
+1670 Data "WHY DO YOU WANT*"
+1680 Data "SUPPOSE YOU SOON GOT*"
+1690 Data "WHAT IF YOU NEVER GOT*"
+1700 Data "I SOMETIMES ALSO WANT*"
+1710 Data "WHY DO YOU ASK?"
+1720 Data "DOES THAT QUESTION INTEREST YOU?"
+1730 Data "WHAT ANSWER WOULD PLEASE YOU THE MOST?"
+1740 Data "WHAT DO YOU THINK?"
+1750 Data "ARE SUCH QUESTIONS ON YOUR MIND OFTEN?"
+1760 Data "WHAT IS IT THAT YOU REALLY WANT TO KNOW?"
+1770 Data "HAVE YOU ASKED ANYONE ELSE?"
+1780 Data "HAVE YOU ASKED SUCH QUESTIONS BEFORE?"
+1790 Data "WHAT ELSE COMES TO MIND WHEN YOU ASK THAT?"
+1800 Data "NAMES DON'T INTEREST ME."
+1810 Data "I DON'T CARE ABOUT NAMES --PLEASE GO ON."
+1820 Data "IS THAT THE REAL REASON?"
+1830 Data "DON'T ANY OTHER REASONS COME TO MIND?"
+1840 Data "DOES THAT REASON EXPLAIN ANYTHING ELSE?"
+1850 Data "WHAT OTHER REASONS MIGHT THERE BE?"
+1860 Data "PLEASE DON'T APOLOGIZE!"
+1870 Data "APOLOGIES ARE NOT NECESSARY."
+1880 Data "WHAT FEELINGS DO YOU HAVE WHEN YOU APOLOGIZE?"
+1890 Data "DON'T BE SO DEFENSIVE!"
+1900 Data "WHAT DOES THAT DREAM SUGGEST TO YOU?"
+1910 Data "DO YOU DREAM OFTEN?"
+1920 Data "WHAT PERSONS APPEAR IN YOUR DREAMS?"
+1930 Data "ARE YOU DISTURBED BY YOUR DREAMS?"
+1940 Data "HOW DO YOU DO ...PLEASE STATE YOUR PROBLEM."
+1950 Data "YOU DON'T SEEM QUITE CERTAIN."
+1960 Data "WHY THE UNCERTAIN TONE?"
+1970 Data "CAN'T YOU BE MORE POSITIVE?"
+1980 Data "YOU AREN'T SURE?"
+1990 Data "DON'T YOU KNOW?"
+2000 Data "ARE YOU SAYING NO JUST TO BE NEGATIVE?"
+2010 Data "YOU ARE BEING A BIT NEGATIVE."
+2020 Data "WHY NOT?"
+2030 Data "ARE YOU SURE?"
+2040 Data "WHY NO?"
+2050 Data "WHY ARE YOU CONCERNED ABOUT MY*"
+2060 Data "WHAT ABOUT YOUR OWN*"
+2070 Data "CAN YOU THINK OF A SPECIFIC EXAMPLE?"
+2080 Data "WHEN?"
+2090 Data "WHAT ARE YOU THINKING OF?"
+2100 Data "REALLY, ALWAYS?"
+2110 Data "DO YOU REALLY THINK SO?"
+2120 Data "BUT YOU ARE NOT SURE YOU*"
+2130 Data "DO YOU DOUBT YOU*"
+2140 Data "IN WHAT WAY?"
+2150 Data "WHAT RESEMBLANCE DO YOU SEE?"
+2160 Data "WHAT DOES THE SIMILARITY SUGGEST TO YOU?"
+2170 Data "WHAT OTHER CONNECTIONS DO YOU SEE?"
+2180 Data "COULD THERE REALLY BE SOME CONNECTION?"
+2190 Data "HOW?"
+2200 Data "YOU SEEM QUITE POSITIVE."
+2210 Data "ARE YOU SURE?"
+2220 Data "I SEE."
+2230 Data "I UNDERSTAND."
+2240 Data "WHY DO YOU BRING UP THE TOPIC OF FRIENDS?"
+2250 Data "DO YOUR FRIENDS WORRY YOU?"
+2260 Data "DO YOUR FRIENDS PICK ON YOU?"
+2270 Data "ARE YOU SURE YOU HAVE ANY FRIENDS?"
+2280 Data "DO YOU IMPOSE ON YOUR FRIENDS?"
+2290 Data "PERHAPS YOUR LOVE FOR FRIENDS WORRIES YOU."
+2300 Data "DO COMPUTERS WORRY YOU?"
+2310 Data "ARE YOU TALKING ABOUT ME IN PARTICULAR?"
+2320 Data "ARE YOU FRIGHTENED BY MACHINES?"
+2330 Data "WHY DO YOU MENTION COMPUTERS?"
+2340 Data "WHAT DO YOU THINK MACHINES HAVE TO DO WITH YOUR PROBLEM?"
+2350 Data "DON'T YOU THINK COMPUTERS CAN HELP PEOPLE?"
+2360 Data "WHAT IS IT ABOUT MACHINES THAT WORRIES YOU?"
+2370 Data "SAY, DO YOU HAVE ANY PSYCHOLOGICAL PROBLEMS?"
+2380 Data "WHAT DOES THAT SUGGEST TO YOU?"
+2390 Data "I SEE."
+2400 Data "I'M NOT SURE I UNDERSTAND YOU FULLY."
+2410 Data "COME COME ELUCIDATE YOUR THOUGHTS."
+2420 Data "CAN YOU ELABORATE ON THAT?"
+2430 Data "THAT IS QUITE INTERESTING."
+2500 Rem *************************
+2510 Rem *****DATA FOR FINDING RIGHT REPLIES
+2520 Rem *************************
+2530 Data 1,3,4,2,6,4,6,4,10,4,14,3,17,3,20,2,22,3,25,3
+2540 Data 28,4,28,4,32,3,35,5,40,9,40,9,40,9,40,9,40,9,40,9
+2550 Data 49,2,51,4,55,4,59,4,63,1,63,1,64,5,69,5,74,2,76,4
+2560 Data 80,3,83,7,90,3,93,6,99,7,106,6
+
+'''''
+
+Do
+ Input i$
+ Print Eliza$(i$)
+Loop Until LCase$(i$) = "exit"
+
+'''''
+
+Function Eliza$ (TheStringIn As String) Static
+ Dim TheReturn As String
+ Dim K As Integer
+ Dim L As Integer
+ Dim X As Integer
+ Dim C As String
+ Dim I As String
+ Dim F As String
+ Dim P As String
+ 170 Rem ***********************************
+ 180 Rem *******USER INPUT SECTION**********
+ 190 Rem ***********************************
+ 200 I = UCase$(TheStringIn) 'INPUT I$
+ 201 I = " " + I + " "
+ 210 Rem GET RID OF APOSTROPHES
+ 220 For L = 1 To Len(I)
+ 230 'REM IF MID$(I$,L,1)="'"THEN I$=LEFT$(I$,L-1)+RIGHT$(I$,LEN(I$)-L):GOTO 230
+ 240 If L + 4 > Len(I) Then 250
+ 241 If Mid$(I, L, 4) <> "SHUT" Then 250
+ 242 TheReturn = "O.K. IF YOU FEEL THAT WAY I'LL SHUT UP...."
+ 243 GoTo ElizaFuncExit 'END
+ 250 Next L
+ 255 If I = P Then TheReturn = "PLEASE DON'T REPEAT YOURSELF!": GoTo ElizaFuncExit
+ 260 Rem ***********************************
+ 270 Rem ********FIND KEYWORD IN I$*********
+ 280 Rem ***********************************
+ 300 For K = 1 To N1
+ 320 For L = 1 To Len(I) - Len(KEYWORD$(K)) + 1
+ 340 If Mid$(I, L, Len(KEYWORD$(K))) <> KEYWORD$(K) Then 350
+ 341 If K <> 13 Then 349
+ 342 If Mid$(I, L, Len(KEYWORD$(29))) = KEYWORD$(29) Then K = 29
+ 349 F = KEYWORD$(K): GoTo 390
+ 350 Next L
+ 360 Next K
+ 370 K = 36: GoTo 570: Rem WE DIDN'T FIND ANY KEYWORDS
+ 380 Rem ******************************************
+ 390 Rem **TAKE PART OF STRING AND CONJUGATE IT****
+ 400 Rem **USING THE LIST OF STRINGS TO BE SWAPPED*
+ 410 Rem ******************************************
+ 430 C = " " + Right$(I, Len(I) - Len(F) - L + 1) + " "
+ 440 For X = 1 To N2 / 2
+ 460 For L = 1 To Len(C)
+ 470 If L + Len(WORDIN$(X)) > Len(C) Then 510
+ 480 If Mid$(C, L, Len(WORDIN$(X))) <> WORDIN$(X) Then 510
+ 490 C = Left$(C, L - 1) + WORDOUT$(X) + Right$(C, Len(C) - L - Len(WORDIN$(X)) + 1)
+ 495 L = L + Len(WORDOUT$(X))
+ 500 GoTo 540
+ 510 If L + Len(WORDOUT$(X)) > Len(C) Then 540
+ 520 If Mid$(C, L, Len(WORDOUT$(X))) <> WORDOUT$(X) Then 540
+ 530 C = Left$(C, L - 1) + WORDIN$(X) + Right$(C, Len(C) - L - Len(WORDOUT$(X)) + 1)
+ 535 L = L + Len(WORDIN$(X))
+ 540 Next L
+ 550 Next X
+ 555 If Mid$(C, 2, 1) = " " Then C = Right$(C, Len(C) - 1): Rem ONLY 1 SPACE
+ 556 For L = 1 To Len(C)
+ 557 If Mid$(C, L, 1) = "!" Then C = Left$(C, L - 1) + Right$(C, Len(C) - L): GoTo 557
+ 558 Next L
+ 560 Rem **********************************************
+ 570 Rem **NOW USING THE KEYWORD NUMBER (K) GET REPLY**
+ 580 Rem **********************************************
+ 600 F = REPLIES$(R(K))
+ 610 R(K) = R(K) + 1: If R(K) > N(K) Then R(K) = S(K)
+ 620 If Right$(F, 1) <> "*" Then TheReturn = F: P = I: GoTo ElizaFuncExit
+ 625 If C <> " " Then 630
+ 626 TheReturn = "YOU WILL HAVE TO ELABORATE MORE FOR ME TO HELP YOU"
+ 627 GoTo ElizaFuncExit
+ 630 TheReturn = Left$(F, Len(F) - 1) + C
+ 640 P = I: GoTo ElizaFuncExit
+ ElizaFuncExit:
+ Eliza$ = TheReturn
+ 'GOTO 170
+End Function
diff --git a/samples/eliza/src/eliza.zip b/samples/eliza/src/eliza.zip
new file mode 100644
index 00000000..c9df7d34
Binary files /dev/null and b/samples/eliza/src/eliza.zip differ
diff --git a/samples/eliza/src/p36-weizenabaum.pdf b/samples/eliza/src/p36-weizenabaum.pdf
new file mode 100644
index 00000000..c41c7c48
Binary files /dev/null and b/samples/eliza/src/p36-weizenabaum.pdf differ
diff --git a/samples/ellipse-intersecting-line/index.md b/samples/ellipse-intersecting-line/index.md
index c5e0b602..d629f6c2 100644
--- a/samples/ellipse-intersecting-line/index.md
+++ b/samples/ellipse-intersecting-line/index.md
@@ -18,9 +18,9 @@
> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
-* [LOAD "ellipse-intersect-line.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?src=https://qb64.com/samples/ellipse-intersecting-line/src/ellipse-intersect-line.bas)
-* [RUN "ellipse-intersect-line.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?mode=auto&src=https://qb64.com/samples/ellipse-intersecting-line/src/ellipse-intersect-line.bas)
-* [PLAY "ellipse-intersect-line.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?mode=play&src=https://qb64.com/samples/ellipse-intersecting-line/src/ellipse-intersect-line.bas)
+* [LOAD "ellipse-intersect-line.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/ellipse-intersecting-line/src/ellipse-intersect-line.bas)
+* [RUN "ellipse-intersect-line.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/ellipse-intersecting-line/src/ellipse-intersect-line.bas)
+* [PLAY "ellipse-intersect-line.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/ellipse-intersecting-line/src/ellipse-intersect-line.bas)
### File(s)
diff --git a/samples/fellippe-heitor.md b/samples/fellippe-heitor.md
index c417016d..7b95b7f0 100644
--- a/samples/fellippe-heitor.md
+++ b/samples/fellippe-heitor.md
@@ -20,6 +20,24 @@ A Breakout clone with DXBall aspirations.
Can't Contain Me is a game developed in QB64. The pieces are trying to escape your screen and th...
+**[Cloned Shades](cloned-shades/index.md)**
+
+[🐝 Fellippe Heitor](fellippe-heitor.md) 🔗 [game](game.md)
+
+A clone of 'Shades' which was originally developed by UOVO.
+
+**[Curve Smoother](curve-smoother/index.md)**
+
+[🐝 STxAxTIC](stxaxtic.md) [🐝 Fellippe Heitor](fellippe-heitor.md) 🔗 [curve](curve.md), [interpolation](interpolation.md)
+
+This program demonstrates (i) linear interpolation to create a curve between points, (ii) a relax...
+
+**[Frostbite](frostbite/index.md)**
+
+[🐝 Fellippe Heitor](fellippe-heitor.md) 🔗 [game](game.md), [frostbite](frostbite.md)
+
+A clone of Frostbite for the Atari 2600, originally designed by Steve Cartwright and published by...
+
**[LightsOn](lightson/index.md)**
[🐝 Fellippe Heitor](fellippe-heitor.md) 🔗 [game](game.md), [lights](lights.md)
@@ -61,3 +79,9 @@ Fly across the universe on a quest for survival against alien enemy forces. Made
[🐝 Fellippe Heitor](fellippe-heitor.md) 🔗 [game](game.md), [tic tac toe rings](tic-tac-toe-rings.md)
Tic Tac Toe Rings by Fellippe Heitor.
+
+**[TUI](tui/index.md)**
+
+[🐝 Fellippe Heitor](fellippe-heitor.md) 🔗 [interface](interface.md), [tui](tui.md)
+
+Text User Interface for QB64 projects
diff --git a/samples/fibonacci-variations/index.md b/samples/fibonacci-variations/index.md
index 9ce33f62..c1375471 100644
--- a/samples/fibonacci-variations/index.md
+++ b/samples/fibonacci-variations/index.md
@@ -23,7 +23,7 @@ The Fibonacci sequence is "seeded" with the golden ratio, but what if we change
![ss2.png](img/ss2.png)
-🔗 [fibonacci](../fibonacci.md)
+🔗 [fibonacci](../fibonacci.md), [spiral](../spiral.md)
Reference: [qb64forum](https://qb64forum.alephc.xyz/index.php?topic=3370.0)
diff --git a/samples/fibonacci.md b/samples/fibonacci.md
index c9ef8c16..e44d248c 100644
--- a/samples/fibonacci.md
+++ b/samples/fibonacci.md
@@ -4,6 +4,6 @@
**[Fibonacci Variations](fibonacci-variations/index.md)**
-[🐝 STxAxTIC](stxaxtic.md) 🔗 [fibonacci](fibonacci.md)
+[🐝 STxAxTIC](stxaxtic.md) 🔗 [fibonacci](fibonacci.md), [spiral](spiral.md)
The Fibonacci sequence is "seeded" with the golden ratio, but what if we change that?
diff --git a/samples/filled-circles-and-ellipses/index.md b/samples/filled-circles-and-ellipses/index.md
index 5cc2d8b7..cdea46be 100644
--- a/samples/filled-circles-and-ellipses/index.md
+++ b/samples/filled-circles-and-ellipses/index.md
@@ -24,9 +24,9 @@ These works have been optimized for speed and respect for alpha transparency.
> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
-* [LOAD "ellipses.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?src=https://qb64.com/samples/filled-circles-and-ellipses/src/ellipses.bas)
-* [RUN "ellipses.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?mode=auto&src=https://qb64.com/samples/filled-circles-and-ellipses/src/ellipses.bas)
-* [PLAY "ellipses.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?mode=play&src=https://qb64.com/samples/filled-circles-and-ellipses/src/ellipses.bas)
+* [LOAD "ellipses.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/filled-circles-and-ellipses/src/ellipses.bas)
+* [RUN "ellipses.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/filled-circles-and-ellipses/src/ellipses.bas)
+* [PLAY "ellipses.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/filled-circles-and-ellipses/src/ellipses.bas)
### File(s)
diff --git a/samples/finance.md b/samples/finance.md
new file mode 100644
index 00000000..e0937c37
--- /dev/null
+++ b/samples/finance.md
@@ -0,0 +1,9 @@
+[Home](https://qb64.com) • [News](../news.md) • [GitHub](../github.md) • [Wiki](../wiki.md) • [Samples](../samples.md) • [Media](../media.md) • [Community](../community.md) • [Rolodex](../rolodex.md) • [More...](../more.md)
+
+## SAMPLES: FINANCE
+
+**[Loan Amortization](loan-amortization/index.md)**
+
+[🐝 Alan Zeichick](alan-zeichick.md) 🔗 [finance](finance.md), [dos world](dos-world.md)
+
+' Loan amortization program ' Alan Zeichick, March 16, 1993 ' Copyright (c) 1993 DOS Resource Gui...
diff --git a/samples/fire-13/img/screenshot.png b/samples/fire-13/img/screenshot.png
new file mode 100644
index 00000000..0825f77e
Binary files /dev/null and b/samples/fire-13/img/screenshot.png differ
diff --git a/samples/fire-13/index.md b/samples/fire-13/index.md
new file mode 100644
index 00000000..cb9317bf
--- /dev/null
+++ b/samples/fire-13/index.md
@@ -0,0 +1,25 @@
+[Home](https://qb64.com) • [News](../../news.md) • [GitHub](../../github.md) • [Wiki](../../wiki.md) • [Samples](../../samples.md) • [Media](../../media.md) • [Community](../../community.md) • [Rolodex](../../rolodex.md) • [More...](../../more.md)
+
+## SAMPLE: FIRE 13
+
+![screenshot.png](img/screenshot.png)
+
+### Description
+
+```text
+Fire dominates the lower screen.
+```
+
+### QBjs
+
+> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
+
+* [LOAD "fire.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/fire-13/src/fire.bas)
+* [RUN "fire.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/fire-13/src/fire.bas)
+* [PLAY "fire.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/fire-13/src/fire.bas)
+
+### File(s)
+
+* [fire.bas](src/fire.bas)
+
+🔗 [fire](../fire.md), [graphics](../graphics.md)
diff --git a/samples/fire-13/src/fire.bas b/samples/fire-13/src/fire.bas
new file mode 100644
index 00000000..dff7eb02
--- /dev/null
+++ b/samples/fire-13/src/fire.bas
@@ -0,0 +1,124 @@
+$NoPrefix
+DefLng A-Z
+$Resize:Smooth
+
+Screen 13
+FullScreen SquarePixels , Smooth
+
+Randomize Timer
+
+Dim Shared Buffer%(32001)
+Buffer%(0) = 320 * 8
+Buffer%(1) = 200
+
+b = 0
+g = 0
+For a = 150 To 100 Step -1
+ r = a / 5
+ set_pal a, b, g, r
+Next
+
+For a = 100 To 0 Step -1
+ g = g - 1
+ b = b - 1
+ r = r - 1
+ set_pal a, b, g, r
+Next
+
+g = 0
+For a = 150 To 255 Step 1
+
+ b = 0
+ g = g + 1
+ r = a / 5
+ If (g > 62) Then
+ g = 62
+ End If
+ set_pal a, b, g, r
+Next
+
+Do
+ l = l + 1
+ fire
+ update_screen
+
+ If (l > 1) Then
+ If b = 0 Then
+ a = a + 1
+ End If
+ If b = 1 Then
+ a = a - 1
+ End If
+ set_random_pixels a, 255
+ If (a < 50) Then
+ b = 0
+ End If
+ If (a > 200) Then
+ b = 1
+ End If
+ l = 0
+ End If
+
+Loop Until InKey$ <> ""
+
+System 0
+
+
+Sub fire
+ For y = 200 To 1 Step -1
+ For x = 1 To 320 Step 1
+ med_col = 0
+ med_col = med_col + get_pixel(x - 1, y + 1)
+ med_col = med_col + get_pixel(x + 1, y + 1)
+ med_col = med_col + get_pixel(x, y + 1)
+ med_col = med_col + get_pixel(x, y)
+ med_col = med_col + Rnd * 3
+ med_col = med_col / 4.04
+ set_pixel x, y, med_col
+ Next
+ Next
+End Sub
+
+Sub set_random_pixels (nr, col)
+ row = 201
+ For x = 1 To 320
+ set_pixel x, row, 0
+ Next
+ For a = 0 To nr
+ x = Rnd * 320
+ set_pixel x, row, col
+ set_pixel x + 1, row, col
+ set_pixel x - 1, row, col
+ Next
+End Sub
+
+Sub update_screen
+ Put (0, 0), Buffer%(), PSet
+End Sub
+
+Sub set_pixel (x%, y%, col%)
+ Def Seg = VarSeg(Buffer%(32001))
+ Poke 320& * y% + x% + 4, col%
+ Def Seg
+End Sub
+
+Function get_pixel (x%, y%)
+ Def Seg = VarSeg(Buffer%(32001))
+ get_pixel = Peek(320& * y% + x% + 4)
+ Def Seg
+End Function
+
+Sub set_pal (p, b, g, r)
+ b = CInt(b)
+ g = CInt(g)
+ r = CInt(r)
+
+ If (b > 62) Then b = 62
+ If (g > 62) Then g = 62
+ If (r > 62) Then r = 62
+ If (b < 0) Then b = 0
+ If (g < 0) Then g = 0
+ If (r < 0) Then r = 0
+ Palette p, 65536 * b + 256 * g + r
+End Sub
+
diff --git a/samples/fire-demo/img/firedemo.png b/samples/fire-demo/img/firedemo.png
new file mode 100644
index 00000000..9f9fb304
Binary files /dev/null and b/samples/fire-demo/img/firedemo.png differ
diff --git a/samples/fire-demo/index.md b/samples/fire-demo/index.md
new file mode 100644
index 00000000..dc0f1bb1
--- /dev/null
+++ b/samples/fire-demo/index.md
@@ -0,0 +1,31 @@
+[Home](https://qb64.com) • [News](../../news.md) • [GitHub](../../github.md) • [Wiki](../../wiki.md) • [Samples](../../samples.md) • [Media](../../media.md) • [Community](../../community.md) • [Rolodex](../../rolodex.md) • [More...](../../more.md)
+
+## SAMPLE: FIRE DEMO
+
+![firedemo.png](img/firedemo.png)
+
+### Author
+
+[🐝 harixxx](../harixxx.md)
+
+### Description
+
+```text
+_Title "FIRE Demo v1.0"
+'-----| by harixxx
+'-----| 6-16-2010
+```
+
+### QBjs
+
+> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
+
+* [LOAD "firedemo.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/fire-demo/src/firedemo.bas)
+* [RUN "firedemo.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/fire-demo/src/firedemo.bas)
+* [PLAY "firedemo.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/fire-demo/src/firedemo.bas)
+
+### File(s)
+
+* [firedemo.bas](src/firedemo.bas)
+
+🔗 [graphics](../graphics.md), [fire](../fire.md)
diff --git a/samples/fire-demo/src/firedemo.bas b/samples/fire-demo/src/firedemo.bas
new file mode 100644
index 00000000..7e92d5b3
--- /dev/null
+++ b/samples/fire-demo/src/firedemo.bas
@@ -0,0 +1,66 @@
+_Title "FIRE Demo v1.0"
+'-----| by harixxx
+'-----| 6-16-2010
+
+Const mx = 108
+Const my = 44
+Const sx = 3
+Const sy = 6
+Const ms$ = "QB64 : FIRE Demo v1.0 - Created by harixxx"
+
+sc = -mx
+lt = Len(ms$) * 8
+Dim ct(lt, 14), fl(mx, my)
+
+Screen _NewImage(640, 240, 256), , 1, 0
+
+Print ms$
+For i = 0 To lt - 1
+ For j = 0 To 13
+ If Point(i, j) > 0 Then
+ ct(i, j) = 64
+ ct(i, j + 1) = -64
+ ct(i + 1, j + 1) = -64
+ End If
+Next j, i
+
+Screen _NewImage(320, 240, 256), , 1, 0
+For i = 0 To 63
+ SetPal i, i, 0, 0
+ SetPal i + 64, 63, i, 0
+ SetPal i + 128, 63, 63, i
+Next
+
+'_FULLSCREEN
+_Limit 10
+Do
+ ReDim fm(mx, my)
+ sc = sc + .5
+ If sc > lt Then sc = -mx
+ For x = 0 To mx
+ For y = 0 To 14
+ cx = Int(x + sc)
+ If cx >= 0 And cx <= lt Then fm(x, y + 16) = ct(cx, y)
+ Next y, x
+ For x = 1 To mx - 1
+ fl(x, my) = Rnd * 2250 - 1000
+ For y = my - 1 To 0 Step -1
+ fl(x, y) = (fl(x - 1, y) + fl(x, y + 1) + fl(x + 1, y + 1)) \ 3 - 4
+ c = fl(x, y)
+ c = (c - 2) * -(c < 64) + c * -(c > 63) + fm(x, y)
+ c = 191 * -(c > 191) + c * -(c < 192)
+ If y < my - 4 Then Line (x * sx - sx, y * sy)-Step(sx, sy), c * -(c > 0), BF
+ Next y, x
+ _Delay .03
+ PCopy 1, 0
+Loop Until InKey$ > ""
+Sleep
+System
+
+Sub SetPal (n, r, g, b)
+ Out 968, n
+ Out 969, r
+ Out 969, g
+ Out 969, b
+END SUB
+
diff --git a/samples/fire.md b/samples/fire.md
index 37c33fbb..9c329763 100644
--- a/samples/fire.md
+++ b/samples/fire.md
@@ -2,8 +2,14 @@
## SAMPLES: FIRE
-**[Fire](fire/index.md)**
+**[Fire 13](fire-13/index.md)**
[🐝 *missing*](author-missing.md) 🔗 [fire](fire.md), [graphics](graphics.md)
Fire dominates the lower screen.
+
+**[Fire Demo](fire-demo/index.md)**
+
+[🐝 harixxx](harixxx.md) 🔗 [graphics](graphics.md), [fire](fire.md)
+
+_Title "FIRE Demo v1.0" '-----| by harixxx '-----| 6-16-2010
diff --git a/samples/flappy-bird.md b/samples/flappy-bird.md
new file mode 100644
index 00000000..2b2f7eec
--- /dev/null
+++ b/samples/flappy-bird.md
@@ -0,0 +1,9 @@
+[Home](https://qb64.com) • [News](../news.md) • [GitHub](../github.md) • [Wiki](../wiki.md) • [Samples](../samples.md) • [Media](../media.md) • [Community](../community.md) • [Rolodex](../rolodex.md) • [More...](../more.md)
+
+## SAMPLES: FLAPPY BIRD
+
+**[Flappy Bird](flappy-bird/index.md)**
+
+[🐝 Terry Ritchie](terry-ritchie.md) 🔗 [game](game.md), [flappy bird](flappy-bird.md)
+
+' ----------------------------------------------- ' QB64 FlappyBird Clone by Terry Ritchie 02/28/...
diff --git a/samples/flappy-bird/img/screenshot.png b/samples/flappy-bird/img/screenshot.png
new file mode 100644
index 00000000..15a8d521
Binary files /dev/null and b/samples/flappy-bird/img/screenshot.png differ
diff --git a/samples/flappy-bird/index.md b/samples/flappy-bird/index.md
new file mode 100644
index 00000000..93c6e3be
--- /dev/null
+++ b/samples/flappy-bird/index.md
@@ -0,0 +1,31 @@
+[Home](https://qb64.com) • [News](../../news.md) • [GitHub](../../github.md) • [Wiki](../../wiki.md) • [Samples](../../samples.md) • [Media](../../media.md) • [Community](../../community.md) • [Rolodex](../../rolodex.md) • [More...](../../more.md)
+
+## SAMPLE: FLAPPY BIRD
+
+![screenshot.png](img/screenshot.png)
+
+### Author
+
+[🐝 Terry Ritchie](../terry-ritchie.md)
+
+### Description
+
+```text
+' -----------------------------------------------
+' QB64 FlappyBird Clone by Terry Ritchie 02/28/14
+'
+' This program was created to accompany the QB64
+' Game Programming course located at:
+' http://www.qb64sourcecode.com
+'
+' You may not sell or distribute this game! It
+' was made for instructional purposes only.
+' -----------------------------------------------
+```
+
+### File(s)
+
+* [fbird.bas](src/fbird.bas)
+* [fbird.zip](src/fbird.zip)
+
+🔗 [game](../game.md), [flappy bird](../flappy-bird.md)
diff --git a/samples/flappy-bird/src/fbird.bas b/samples/flappy-bird/src/fbird.bas
new file mode 100644
index 00000000..988f6dd2
--- /dev/null
+++ b/samples/flappy-bird/src/fbird.bas
@@ -0,0 +1,783 @@
+' -----------------------------------------------
+' QB64 FlappyBird Clone by Terry Ritchie 02/28/14
+'
+' This program was created to accompany the QB64
+' Game Programming course located at:
+' http://www.qb64sourcecode.com
+'
+' You may not sell or distribute this game! It
+' was made for instructional purposes only.
+' -----------------------------------------------
+
+'--------------------------------
+'- Variable declaration section -
+'--------------------------------
+
+CONST FALSE = 0 ' boolean: truth 0
+CONST TRUE = NOT FALSE ' boolean: truth -1
+CONST LARGE = 0 ' large numbers
+CONST SMALL = 1 ' small numbers (not used in current version of game)
+CONST GOLD = 0 ' gold medal
+CONST SILVER = 1 ' silver medal
+CONST LIGHT = 0 ' light colored gold/silver medal
+CONST DARK = 1 ' dark colored gold/silver medal
+
+TYPE PARALLAX ' parallax scenery settings
+ image AS LONG ' scene image
+ x AS INTEGER ' scene image x location
+ y AS INTEGER ' scene image y location
+ frame AS INTEGER ' current parallax frame
+ fmax AS INTEGER ' maximum parallax frames allowed
+END TYPE
+
+TYPE INFLIGHT ' flappy bird inflight characterisitcs
+ y AS SINGLE ' flappy bird y location
+ yvel AS SINGLE ' flappy bird y velocity
+ flap AS INTEGER ' wing flap position
+ flapframe AS INTEGER ' wing flap frame counter
+ angle AS INTEGER ' angle of flappy bird
+END TYPE
+
+TYPE PIPE ' pipe characteristics
+ x AS INTEGER ' pipe x location
+ y AS INTEGER ' pipe y location
+END TYPE
+
+DIM Pipes(3) AS PIPE ' define 3 moving sets of pipes
+DIM Pipe&(1) ' pipe images 0=top 1=bottom
+DIM PipeImage& ' all three pipes drawn image
+DIM Birdie AS INFLIGHT ' bird flight characteristics
+DIM Scenery(4) AS PARALLAX ' define 4 moving scenes in parallax
+DIM Fbird&(8, 3) ' flapping bird images
+DIM Num&(9, 1) ' big and small numeral images
+DIM Plaque& ' medal/score plaque
+DIM FlappyBird& ' Flappy Bird title image
+DIM GameOver& ' Game Over image
+DIM GetReady& ' Get Ready image
+DIM Medal&(1, 1) ' gold/silver medal images
+DIM Finger& ' tap finger image
+DIM ScoreButton& ' score button image
+DIM ShareButton& ' share button image
+DIM StartButton& ' start button image
+DIM OKButton& ' OK button image
+DIM RateButton& ' RATE button image
+DIM MenuButton& ' MENU button image
+DIM PlayButton& ' PLAY [|>] button image
+DIM PauseButton& ' PAUSE [||] button image
+DIM HazardBar& ' Hazard bar parallax image
+DIM Clouds& ' Clouds parallax image
+DIM City& ' Cityscape parallax image
+DIM Bushes& ' Bushes parallax image
+DIM New& ' red NEW image
+DIM Clean& ' clean playing screen image
+DIM HitBird% ' boolean: TRUE if bird hits something
+DIM HighScore% ' high score
+DIM Score% ' current score
+DIM Paused% ' boolean: TRUE if game paused
+DIM Ding& ' ding sound
+DIM Flap& ' flapping sound
+DIM Smack& ' bird smack sound
+DIM Latch% ' boolean: TRUE if mouse button held down
+DIM WinX% ' stops player from exiting program at will
+
+'------------------------
+'- Main Program Section -
+'------------------------
+
+SCREEN _NEWIMAGE(432, 768, 32) ' create 432x768 game screen
+_TITLE "FlappyBird" ' give window a title
+CLS ' clear the screen
+_SCREENMOVE _MIDDLE ' move window to center of desktop
+WinX% = _EXIT ' program will handle all window close requests
+LOADASSETS ' set/load game graphics/sounds/settings
+Birdie.flap = 1 ' set initial wing position of bird
+DO ' BEGIN MAIN GAME LOOP
+ _LIMIT 60 ' 60 frames per second
+ UPDATESCENERY ' update parallaxing scenery
+ _PUTIMAGE (40, 265), FlappyBird& ' place game title on screen
+ _PUTIMAGE (350, 265), Fbird&(2, FLAPTHEBIRD%) ' place flapping bird on screen
+ IF BUTTON%(64, 535, StartButton&) THEN PLAYGAME ' if start button pressed play game
+ IF BUTTON%(248, 535, ScoreButton&) THEN SHOWSCORE ' if score button pressed show scores
+ IF BUTTON%(248, 480, RateButton&) THEN RATEGAME ' if rate button pressed bring up browser
+ _DISPLAY ' update screen with changes
+LOOP UNTIL _KEYDOWN(27) OR _EXIT ' END MAIN GAME LOOP when ESC pressed or window closed
+CLEANUP ' clean the computer's RAM before leaving
+SYSTEM ' return to Windows desktop
+
+'-------------------------------------
+'- Subroutines and Functions section -
+'-------------------------------------
+
+'----------------------------------------------------------------------------------------------------------------------
+
+FUNCTION FLAPTHEBIRD% ()
+
+'*
+'* Returns the next index value used in Fbird&() to animate the bird's
+'* flapping wings.
+'*
+
+SHARED Birdie AS INFLIGHT
+
+Birdie.flapframe = Birdie.flapframe + 1 ' increment frame counter
+IF Birdie.flapframe = 4 THEN ' hit limit?
+ Birdie.flapframe = 0 ' yes, reset frame counter
+ Birdie.flap = Birdie.flap + 1 ' increment flap counter
+ IF Birdie.flap = 4 THEN Birdie.flap = 1 ' reset flap counter when limit hit
+END IF
+FLAPTHEBIRD% = Birdie.flap ' return next index value
+
+END SUB
+
+'----------------------------------------------------------------------------------------------------------------------
+
+SUB MOVEPIPES ()
+
+'*
+'* Creates and moves the pipe images across the screen.
+'*
+
+SHARED Pipes() AS PIPE, Pipe&(), PipeImage&, Paused%, Score%, Ding&
+
+DIM p% ' counter indicating which pipe being worked on
+
+_DEST PipeImage& ' work on this image
+CLS , _RGBA32(0, 0, 0, 0) ' clear image with transparent black
+_DEST 0 ' back to work on screen
+DO ' BEGIN PIPE LOOP
+ p% = p% + 1 ' increment pipe counter
+ IF NOT Paused% THEN ' is game paused?
+ Pipes(p%).x = Pipes(p%).x - 3 ' no, move pipe to the left
+ IF Pipes(p%).x < -250 THEN ' hit lower limit?
+ Pipes(p%).x = 500 ' yes, move pipe all the way right
+ Pipes(p%).y = -(INT(RND(1) * 384) + 12) ' generate random pipe height position
+ END IF
+ IF Pipes(p%).x = 101 THEN ' is pipe crossing bird location?
+ _SNDPLAY Ding& ' play ding sound
+ Score% = Score% + 1 ' increment player score
+ END IF
+ END IF
+ IF Pipes(p%).x > -78 AND Pipes(p%).x < 432 THEN ' is pipe currently seen on screen?
+ _PUTIMAGE (Pipes(p%).x, Pipes(p%).y), Pipe&(0), PipeImage& ' place top pipe
+ _PUTIMAGE (Pipes(p%).x, Pipes(p%).y + 576), Pipe&(1), PipeImage& ' place bottom pipe
+ END IF
+LOOP UNTIL p% = 3 ' END PIPE LOOP when all pipes moved
+_PUTIMAGE (0, 0), PipeImage& ' place pipe image on screen
+
+END SUB
+
+'----------------------------------------------------------------------------------------------------------------------
+
+SUB FLYBIRDIE ()
+
+'*
+'* Controls the flight of bird on screen.
+'*
+
+SHARED Birdie AS INFLIGHT, Fbird&(), Paused%, Flap&, HitBird%, Latch%, Smack&
+
+DIM b% ' boolean: TRUE if left mouse button pressed
+DIM Angle% ' angle of bird in flight
+
+IF NOT Paused% THEN ' is game paused?
+ WHILE _MOUSEINPUT: WEND ' no, get latest mouse information
+ b% = _MOUSEBUTTON(1) ' get left mouse button status
+ IF NOT b% THEN Latch% = FALSE ' release latch if button let go
+ IF NOT HitBird% THEN ' has bird hit something?
+ IF NOT Latch% THEN ' no, has left button been release?
+ IF b% THEN ' yes, was left button pressed?
+ Birdie.yvel = -8 ' yes, reset bird y velocity
+ _SNDPLAY Flap& ' play flap sound
+ Latch% = TRUE ' remember mouse button pressed
+ END IF
+ END IF
+ END IF
+ Birdie.yvel = Birdie.yvel + .5 ' bleed off some bird y velocity
+ Birdie.y = Birdie.y + Birdie.yvel ' add velocity to bird's y direction
+ IF NOT HitBird% THEN ' has bird hit something?
+ IF Birdie.y < -6 OR Birdie.y > 549 THEN ' no, has bird hit top/bottom of screen?
+ HitBird% = TRUE ' yes, remeber bird hit something
+ _SNDPLAY Smack& ' play smack sound
+ END IF
+ END IF
+ IF Birdie.yvel < 0 THEN ' is bird heading upward?
+ Birdie.angle = 1 ' yes, set angle of bird accordingly
+ ELSE
+ Angle% = INT(Birdie.yvel * .5) + 1 ' calculate angle according to bird velocity
+ IF Angle% > 8 THEN Angle% = 8 ' keep angle within limits
+ Birdie.angle = Angle% ' set bird angle
+ END IF
+END IF
+_PUTIMAGE (100, Birdie.y), Fbird&(Birdie.angle, FLAPTHEBIRD%) ' place bird on screen
+
+END SUB
+
+'----------------------------------------------------------------------------------------------------------------------
+
+SUB UPDATESCORE ()
+
+'*
+'* Displays player's score on screen.
+'*
+
+SHARED Num&(), Score%
+
+DIM s$ ' score in string format
+DIM w% ' width of score string
+DIM x% ' x location of score digits
+DIM p% ' position counter
+
+s$ = LTRIM$(RTRIM$(STR$(Score%))) ' convert score to string
+w% = LEN(s$) * 23 ' calculate width of score
+x% = (432 - w%) \ 2 ' calculate x position of score
+FOR p% = 1 TO LEN(s$) ' cycle through each position in score string
+ _PUTIMAGE (x%, 100), Num&(ASC(MID$(s$, p%, 1)) - 48, LARGE) ' place score digit on screen
+ x% = x% + 23 ' move to next digit position
+NEXT p%
+
+END SUB
+
+'----------------------------------------------------------------------------------------------------------------------
+
+SUB READY ()
+
+'*
+'* displays instructions to the player and waits for player to start game.
+'*
+
+SHARED Fbird&(), Finger&, GetReady&
+
+DIM b% ' boolean: TRUE if left mouse button pressed
+
+DO ' BEGIN READY LOOP
+ _LIMIT 60 ' 60 frames per second
+ UPDATESCENERY ' move parallax scenery
+ _PUTIMAGE (180, 350), Finger& ' place finger instructions on screen
+ _PUTIMAGE (85, 225), GetReady& ' place get ready image on screen
+ _PUTIMAGE (100, 375), Fbird&(2, FLAPTHEBIRD%) ' place bird on screen
+ UPDATESCORE ' place score on screen
+ _DISPLAY ' update screen with changes
+ WHILE _MOUSEINPUT: WEND ' get latest mouse information
+ b% = _MOUSEBUTTON(1) ' get status of left mouse button
+ IF _EXIT THEN CLEANUP: SYSTEM ' leave game if user closes game window
+LOOP UNTIL b% ' END READY LOOP when left button pressed
+_DELAY .2 ' slight delay to allow mouse button release
+
+END SUB
+
+'----------------------------------------------------------------------------------------------------------------------
+
+SUB PLAYGAME ()
+
+'*
+'* Allows player to play the game.
+'*
+
+SHARED Pipes() AS PIPE, Birdie AS INFLIGHT, PauseButton&, PlayButton&, Paused%, HitBird%, Score%
+
+RANDOMIZE TIMER ' seed random number generator
+Score% = 0 ' reset player score
+Birdie.y = 0 ' reset bird y location
+Birdie.yvel = 0 ' reset bird y velocity
+Birdie.flap = 1 ' reset bird wing flap index
+Pipes(1).x = 500 ' reset position of first pipe
+Pipes(2).x = 749 ' reset position of second pipe
+Pipes(3).x = 998 ' reset position of third pipe
+Pipes(1).y = -(INT(RND(1) * 384) + 12) ' calculate random y position of pipe 1
+Pipes(2).y = -(INT(RND(1) * 384) + 12) ' calculate random y position of pipe 2
+Pipes(3).y = -(INT(RND(1) * 384) + 12) ' calculate random y position of pipe 3
+READY ' display instructions to player
+DO ' BEGIN GAME PLAY LOOP
+ _LIMIT 60 ' 60 frames per second
+ UPDATESCENERY ' move parallax scenery
+ MOVEPIPES ' move pipes
+ UPDATESCORE ' display player score
+ FLYBIRDIE ' move and display bird
+ CHECKFORHIT ' check for bird hits
+ IF NOT Paused% THEN ' is game paused?
+ IF BUTTON%(30, 100, PauseButton&) THEN ' no, was pause button pressed?
+ Paused% = TRUE ' yes, place game in pause state
+ END IF
+ ELSE ' no, game is not paused
+ IF BUTTON%(30, 100, PlayButton&) THEN ' was play button pressed?
+ Paused% = FALSE ' yes, take game out of pause state
+ END IF
+ END IF
+ _DISPLAY ' update screen with changes
+ IF _EXIT THEN CLEANUP: SYSTEM ' leave game if user closes game window
+LOOP UNTIL HitBird% ' END GAME PLAY LOOP if bird hits something
+DO ' BEGIN BIRD DROPPING LOOP
+ _LIMIT 60 ' 60 frames per second
+ Paused% = TRUE ' place game in paused state
+ UPDATESCENERY ' draw parallax scenery
+ MOVEPIPES ' draw pipes
+ Paused% = FALSE ' take game out of pause state
+ FLYBIRDIE ' move bird on screen
+ _DISPLAY ' update screen with changes
+ IF _EXIT THEN CLEANUP: SYSTEM ' leave game if user closes game window
+LOOP UNTIL Birdie.y >= 546 ' END BIRD DROPPING LOOP when bird hits ground
+SHOWSCORE ' display player's score plaque
+HitBird% = FALSE ' reset bird hit indicator
+
+END SUB
+
+'----------------------------------------------------------------------------------------------------------------------
+
+SUB CHECKFORHIT ()
+
+'*
+'* Detects if bird hits a pipe.
+'*
+
+SHARED Pipes() AS PIPE, Birdie AS INFLIGHT, HitBird%, Smack&
+
+DIM p% ' pipe counter
+
+FOR p% = 1 TO 3 ' cycle through all pipe positions
+ IF Pipes(p%).x <= 153 AND Pipes(p%).x >= 22 THEN ' is pipe in bird territory?
+ IF BOXCOLLISION(105, Birdie.y + 6, 43, 41, Pipes(p%).x, Pipes(p%).y, 78, 432) THEN ' collision?
+ HitBird% = TRUE ' yes, remember bird hit pipe
+ END IF
+ IF BOXCOLLISION(105, Birdie.y + 6, 43, 41, Pipes(p%).x, Pipes(p%).y + 576, 78, 432) THEN ' collision?
+ HitBird% = TRUE ' yes, remember bird hit pipe
+ END IF
+ END IF
+NEXT p%
+IF HitBird% THEN _SNDPLAY Smack& ' play smack sound if bird hit pipe
+
+END SUB
+
+'----------------------------------------------------------------------------------------------------------------------
+
+SUB RATEGAME ()
+
+'*
+'* Allows player to rate game.
+'*
+
+SHELL "http://www.qb64.net/forum/index.php?topic=11706.0" ' go to QB64 web site forum area for flappy bird
+
+END SUB
+
+'----------------------------------------------------------------------------------------------------------------------
+
+SUB SHOWSCORE ()
+
+'*
+'* Display's current and high scores on score plaque
+'*
+
+SHARED Fbird&(), Num&(), Medal&(), FlappyBird&, GameOver&, Plaque&, OKButton&, ShareButton&
+SHARED HitBird%, HighScore%, Score%, New&
+
+DIM Ok% ' boolean: TRUE if OK button pressed
+DIM Scores%(1) ' current and high scores
+DIM sc% ' current score being drawn
+DIM x% ' x location of score digits
+DIM p% ' digit position counter
+DIM ShowNew% ' boolean: TRUE if score is a new high score
+DIM s$ ' score in string format
+
+IF Score% > HighScore% THEN ' is this a new high score?
+ OPEN "fbird.sco" FOR OUTPUT AS #1 ' yes, open score file
+ PRINT #1, Score% ' save new high score
+ CLOSE #1 ' close score file
+ HighScore% = Score% ' remember new high score
+ ShowNew% = TRUE ' remember this is a new high score
+END IF
+Scores%(0) = Score% ' place score in array
+Scores%(1) = HighScore% ' place high score in array
+Ok% = FALSE ' reset OK button status indicator
+DO ' BEGIN SCORE LOOP
+ _LIMIT 60 ' 60 frames per second
+ IF HitBird% THEN ' did bird hit something?
+ _PUTIMAGE (75, 200), GameOver& ' yes, place game over image on screen
+ ELSE ' no, bird did not hit anything
+ UPDATESCENERY ' move parallax scenery
+ _PUTIMAGE (40, 200), FlappyBird& ' place flappy bird title on screen
+ _PUTIMAGE (350, 200), Fbird&(2, FLAPTHEBIRD%) ' place flapping bird on screen
+ END IF
+ _PUTIMAGE (46, 295), Plaque& ' place plaque on screen
+ SELECT CASE HighScore% ' what is range of high score?
+ CASE 25 TO 49 ' from 25 to 49
+ _PUTIMAGE (85, 360), Medal&(SILVER, LIGHT) ' display a light silver medal
+ CASE 50 TO 99 ' from 50 to 99
+ _PUTIMAGE (85, 360), Medal&(SILVER, DARK) ' display a dark silver medal
+ CASE 100 TO 199 ' from 100 to 199
+ _PUTIMAGE (85, 360), Medal&(GOLD, LIGHT) ' display a light gold medal
+ CASE IS > 199 ' from 200 and beyond
+ _PUTIMAGE (85, 360), Medal&(GOLD, DARK) ' display a dark gold medal
+ END SELECT
+ FOR sc% = 0 TO 1 ' cycle through both scores
+ s$ = LTRIM$(RTRIM$(STR$(Scores%(sc%)))) ' convert score to string
+ x% = 354 - LEN(s$) * 23 ' calculate position of score digit
+ FOR p% = 1 TO LEN(s$) ' cycle through score string
+ _PUTIMAGE (x%, 346 + sc% * 64), Num&(ASC(MID$(s$, p%, 1)) - 48, LARGE) ' place digit on plaque
+ x% = x% + 23 ' increment digit position
+ NEXT p%
+ NEXT sc%
+ IF ShowNew% THEN _PUTIMAGE (250, 382), New& ' display red new image if new high score
+ IF BUTTON%(64, 535, OKButton&) THEN Ok% = TRUE ' remember if OK button was pressed
+ IF BUTTON%(248, 535, ShareButton&) THEN ' was share button pressed?
+ SHAREPROGRAM ' yes, share program with others
+ UPDATESCENERY ' draw parallax scenery
+ MOVEPIPES ' draw pipes
+ END IF
+ _DISPLAY ' update screen with changes
+ IF _EXIT THEN CLEANUP: SYSTEM ' leave game if user closes game window
+LOOP UNTIL Ok% ' END SCORE LOOP when OK button pressed
+
+END SUB
+
+'----------------------------------------------------------------------------------------------------------------------
+
+SUB SHAREPROGRAM ()
+
+'*
+'* Allows player to share program with others
+'*
+
+SHARED Fbird&(), FlappyBird&, OKButton&
+
+DIM Message& ' composed message to player's friend(s)
+DIM Ok% ' boolean: TRUE if OK button pressed
+
+Message& = _NEWIMAGE(339, 174, 32) ' create image to hold message to player
+_CLIPBOARD$ = "I just discovered a great game! You can download it here: http:\\www.qb64sourcecode.com\fbird.exe"
+_PRINTMODE _KEEPBACKGROUND ' printed text will save background
+LINE (58, 307)-(372, 453), _RGB32(219, 218, 150), BF ' clear plaque image
+COLOR _RGB32(210, 170, 79) ' compose message to player on plaque
+_PRINTSTRING (66, 316), "The following message has been copied"
+COLOR _RGB32(82, 55, 71)
+_PRINTSTRING (65, 315), "The following message has been copied"
+COLOR _RGB32(210, 170, 79)
+_PRINTSTRING (66, 331), "to your computer's clipboard:"
+COLOR _RGB32(82, 55, 71)
+_PRINTSTRING (65, 330), "to your computer's clipboard:"
+COLOR _RGB32(210, 170, 79)
+_PRINTSTRING (66, 351), "'I just discovered a great game! You"
+COLOR _RGB32(82, 55, 71)
+_PRINTSTRING (65, 350), "'I just discovered a great game! You"
+COLOR _RGB32(210, 170, 79)
+_PRINTSTRING (66, 366), "can download it here:"
+COLOR _RGB32(82, 55, 71)
+_PRINTSTRING (65, 365), "can download it here:"
+COLOR _RGB32(210, 170, 79)
+_PRINTSTRING (66, 381), "www.qb64sourcecode.com\fbird.exe'"
+COLOR _RGB32(82, 55, 71)
+_PRINTSTRING (65, 380), "www.qb64sourcecode.com\fbird.exe'"
+COLOR _RGB32(210, 170, 79)
+_PRINTSTRING (66, 401), "Create an email for your friends and"
+COLOR _RGB32(82, 55, 71)
+_PRINTSTRING (65, 400), "Create an email for your friends and"
+COLOR _RGB32(210, 170, 79)
+_PRINTSTRING (66, 416), "paste this message into it! Go ahead,"
+COLOR _RGB32(82, 55, 71)
+_PRINTSTRING (65, 415), "paste this message into it! Go ahead,"
+COLOR _RGB32(210, 170, 79)
+_PRINTSTRING (66, 431), "do it now before you change your mind!"
+COLOR _RGB32(82, 55, 71)
+_PRINTSTRING (65, 430), "do it now before you change your mind!"
+_PUTIMAGE , _DEST, Message&, (46, 295)-(384, 468) ' place message in image
+DO ' BEGIN SHARE LOOP
+ _LIMIT 60 ' 60 frames per second
+ UPDATESCENERY ' move parallax scenery
+ _PUTIMAGE (40, 200), FlappyBird& ' place flappy bird title on screen
+ _PUTIMAGE (350, 200), Fbird&(2, FLAPTHEBIRD%) ' place flapping bird on screen
+ _PUTIMAGE (46, 295), Message& ' place message on plaque
+ IF BUTTON%(156, 535, OKButton&) THEN Ok% = TRUE ' remeber if OK button pressed
+ _DISPLAY ' update screen with changes
+ IF _EXIT THEN CLEANUP: SYSTEM ' leave game if user closes game window
+LOOP UNTIL Ok% ' END SHRE LOOP when OK button pressed
+_FREEIMAGE Message& ' message image no longer needed
+
+END SUB
+
+'----------------------------------------------------------------------------------------------------------------------
+
+FUNCTION BUTTON% (xpos%, ypos%, Image&)
+
+'*
+'* Creates a button on the screen the player can click with the mouse button.
+'*
+'* xpos% - x coordinate position of button on screen
+'* ypos% - y coordinate position of button on screen
+'* Image& - button image
+'*
+'* Returns: boolean: TRUE if button pressed
+'* FALSE if button not pressed
+'*
+
+DIM x% ' current mouse x coordinate
+DIM y% ' current mouse y coordinate
+DIM b% ' boolean: TRUE if left mouse button pressed
+
+_PUTIMAGE (xpos%, ypos%), Image& ' place button image on the screen
+WHILE _MOUSEINPUT: WEND ' get latest mouse information
+x% = _MOUSEX ' get current mouse x coordinate
+y% = _MOUSEY ' get current mouse y coordinate
+b% = _MOUSEBUTTON(1)
+IF b% THEN ' is left mouse button pressed?
+ IF x% >= xpos% THEN ' yes, is mouse x within lower limit of button?
+ IF x% <= xpos% + _WIDTH(Image&) THEN ' yes, is mouse x within upper limit of button?
+ IF y% >= ypos% THEN ' yes, is mouse y within lower limit of button?
+ IF y% <= ypos% + _HEIGHT(Image&) THEN ' yes, is mouse y within upper limit of button?
+ BUTTON% = TRUE ' yes, remember that button was clicked on
+ _DELAY .2 ' slight delay to allow button to release
+ END IF
+ END IF
+ END IF
+ END IF
+END IF
+
+END FUNCTION
+
+'----------------------------------------------------------------------------------------------------------------------
+
+SUB UPDATESCENERY ()
+
+'*
+'* Updates the moving parallax scenery
+'*
+
+SHARED Scenery() AS PARALLAX, Clean&, HazardBar&, Paused%
+
+DIM c% ' scenery index indicator
+
+_PUTIMAGE , Clean& ' clear screen with clean image
+DO ' BEGIN SCENERY LOOP
+ c% = c% + 1 ' increment index value
+ IF NOT Paused% THEN ' is game in paused state?
+ Scenery(c%).frame = Scenery(c%).frame + 1 ' no, update frame counter of current scenery
+ IF Scenery(c%).frame = Scenery(c%).fmax THEN ' frame counter hit limit?
+ Scenery(c%).frame = 0 ' yes, reset frame counter
+ Scenery(c%).x = Scenery(c%).x - 1 ' move scenery 1 pixel to left
+ IF Scenery(c%).x = -432 THEN ' scenery hit lower limit?
+ Scenery(c%).x = 0 ' yes, reset scenery to start position
+ END IF
+ END IF
+ END IF
+ _PUTIMAGE (Scenery(c%).x, Scenery(c%).y), Scenery(c%).image ' place current scenery on screen
+LOOP UNTIL c% = 3 ' END SCENERY LOOP when all scenery updated
+IF NOT Paused% THEN ' is game in paused state?
+ Scenery(4).x = Scenery(4).x - 3 ' no, move hazard bar 3 pixels to left
+ IF Scenery(4).x = -21 THEN Scenery(4).x = 0 ' reset to start position if lower limit hit
+END IF
+_PUTIMAGE (Scenery(4).x, Scenery(4).y), HazardBar& ' place hazard bar on screen
+
+END SUB
+
+'----------------------------------------------------------------------------------------------------------------------
+
+SUB LOADASSETS ()
+
+'*
+'* Loads game graphics, sounds and initial settings.
+'*
+
+SHARED Scenery() AS PARALLAX, Birdie AS INFLIGHT, Pipes() AS PIPE, Pipe&(), Fbird&()
+SHARED Num&(), Medal&(), Plaque&, FlappyBird&, GameOver&, GetReady&, Finger&
+SHARED ScoreButton&, ShareButton&, StartButton&, OKButton&, RateButton&, MenuButton&
+SHARED PlayButton&, PauseButton&, HazardBar&, Clouds&, City&, Bushes&, New&, Clean&
+SHARED HighScore%, PipeImage&, Ding&, Flap&, Smack&
+
+DIM Sheet& ' sprite sheet image
+DIM x% ' generic counter
+DIM y% ' generic counter
+DIM PipeTop& ' temporary top of pipe image
+DIM PipeTube& ' temporary pipe tube image
+
+Ding& = _SNDOPEN("fbding.ogg", "VOL,SYNC") ' load game sounds
+Flap& = _SNDOPEN("fbflap.ogg", "VOL,SYNC")
+Smack& = _SNDOPEN("fbsmack.ogg", "VOL,SYNC")
+Sheet& = _LOADIMAGE("fbsheet.png", 32) ' load sprite sheet
+FOR y% = 0 TO 2 ' cycle through bird image rows
+ FOR x% = 0 TO 7 ' cycle through bird image columns
+ Fbird&(x% + 1, y% + 1) = _NEWIMAGE(53, 53, 32) ' create image holder then get image
+ _PUTIMAGE , Sheet&, Fbird&(x% + 1, y% + 1), (x% * 53, y% * 53)-(x% * 53 + 52, y% * 53 + 52)
+ NEXT x%
+NEXT y%
+FOR x% = 0 TO 9 ' cycle trough 9 numeral images
+ Num&(x%, 0) = _NEWIMAGE(21, 30, 32) ' create image holder for big
+ Num&(x%, 1) = _NEWIMAGE(18, 21, 32) ' create image holder for small
+ _PUTIMAGE , Sheet&, Num&(x%, 0), (x% * 21, 159)-(x% * 21 + 20, 188) ' get images
+ _PUTIMAGE , Sheet&, Num&(x%, 1), (x% * 18 + 210, 159)-(x% * 18 + 227, 179)
+NEXT x%
+Plaque& = _NEWIMAGE(339, 174, 32) ' define remaining image sizes
+FlappyBird& = _NEWIMAGE(288, 66, 32)
+GameOver& = _NEWIMAGE(282, 57, 32)
+GetReady& = _NEWIMAGE(261, 66, 32)
+PipeTop& = _NEWIMAGE(78, 36, 32)
+PipeTube& = _NEWIMAGE(78, 36, 32)
+Pipe&(0) = _NEWIMAGE(78, 432, 32)
+Pipe&(1) = _NEWIMAGE(78, 432, 32)
+PipeImage& = _NEWIMAGE(432, 596, 32)
+Medal&(0, 0) = _NEWIMAGE(66, 66, 32)
+Medal&(0, 1) = _NEWIMAGE(66, 66, 32)
+Medal&(1, 0) = _NEWIMAGE(66, 66, 32)
+Medal&(1, 1) = _NEWIMAGE(66, 66, 32)
+Finger& = _NEWIMAGE(117, 147, 32)
+ScoreButton& = _NEWIMAGE(120, 42, 32)
+ShareButton& = _NEWIMAGE(120, 42, 32)
+StartButton& = _NEWIMAGE(120, 42, 32)
+OKButton& = _NEWIMAGE(120, 42, 32)
+RateButton& = _NEWIMAGE(120, 42, 32)
+MenuButton& = _NEWIMAGE(120, 42, 32)
+PlayButton& = _NEWIMAGE(39, 42, 32)
+PauseButton& = _NEWIMAGE(39, 42, 32)
+HazardBar& = _NEWIMAGE(462, 24, 32)
+Clouds& = _NEWIMAGE(864, 120, 32)
+City& = _NEWIMAGE(864, 57, 32)
+Bushes& = _NEWIMAGE(864, 27, 32)
+New& = _NEWIMAGE(48, 21, 32)
+_PUTIMAGE , Sheet&, Plaque&, (0, 189)-(338, 362) ' grab images from sprite sheet
+_PUTIMAGE , Sheet&, FlappyBird&, (0, 363)-(287, 428)
+_PUTIMAGE , Sheet&, GameOver&, (588, 246)-(869, 302)
+_PUTIMAGE , Sheet&, GetReady&, (588, 303)-(847, 368)
+_PUTIMAGE , Sheet&, Medal&(0, 0), (339, 327)-(404, 392)
+_PUTIMAGE , Sheet&, Medal&(0, 1), (405, 327)-(470, 392)
+_PUTIMAGE , Sheet&, Medal&(1, 0), (339, 261)-(404, 326)
+_PUTIMAGE , Sheet&, Medal&(1, 1), (405, 261)-(470, 326)
+_PUTIMAGE , Sheet&, Finger&, (471, 246)-(587, 392)
+_PUTIMAGE , Sheet&, ScoreButton&, (288, 417)-(407, 458)
+_PUTIMAGE , Sheet&, ShareButton&, (408, 417)-(527, 458)
+_PUTIMAGE , Sheet&, StartButton&, (528, 417)-(647, 458)
+_PUTIMAGE , Sheet&, OKButton&, (424, 204)-(543, 245)
+_PUTIMAGE , Sheet&, RateButton&, (544, 204)-(663, 245)
+_PUTIMAGE , Sheet&, MenuButton&, (664, 204)-(783, 245)
+_PUTIMAGE , Sheet&, PlayButton&, (784, 204)-(822, 245)
+_PUTIMAGE , Sheet&, PauseButton&, (823, 204)-(861, 245)
+_PUTIMAGE , Sheet&, HazardBar&, (288, 393)-(749, 416)
+_PUTIMAGE (0, 0)-(431, 119), Sheet&, Clouds&, (424, 0)-(855, 119)
+_PUTIMAGE (432, 0)-(863, 119), Sheet&, Clouds&, (424, 0)-(855, 119)
+_PUTIMAGE (0, 0)-(431, 56), Sheet&, City&, (424, 120)-(855, 176)
+_PUTIMAGE (432, 0)-(863, 56), Sheet&, City&, (424, 120)-(855, 176)
+_PUTIMAGE (0, 0)-(431, 26), Sheet&, Bushes&, (424, 177)-(855, 203)
+_PUTIMAGE (432, 0)-(863, 26), Sheet&, Bushes&, (424, 177)-(855, 203)
+_PUTIMAGE , Sheet&, New&, (289, 363)-(336, 383)
+_PUTIMAGE , Sheet&, PipeTop&, (339, 189)-(416, 224)
+_PUTIMAGE , Sheet&, PipeTube&, (339, 225)-(416, 260)
+_PUTIMAGE (0, 431)-(77, 395), PipeTop&, Pipe&(0) ' create bottom of upper tube image
+_PUTIMAGE (0, 0), PipeTop&, Pipe&(1) ' create top of lower tube image
+FOR y% = 0 TO 395 STEP 36 ' cycle through tube body of pipes
+ _PUTIMAGE (0, y% + 35)-(77, y%), PipeTube&, Pipe&(0) ' draw tube on upper pipe image
+ _PUTIMAGE (0, 36 + y%), PipeTube&, Pipe&(1) ' draw tube on lower pipe image
+NEXT y%
+_FREEIMAGE PipeTop& ' temporary image no longer needed
+_FREEIMAGE PipeTube& ' temporary image no longer needed
+_FREEIMAGE Sheet& ' sprite sheet no longer needed
+Clean& = _NEWIMAGE(432, 768, 32) ' create clean image holder
+_DEST Clean& ' work on clean image
+CLS , _RGB32(84, 192, 201) ' clear image with sky blue color
+LINE (0, 620)-(431, 767), _RGB32(219, 218, 150), BF ' create brown ground portion of image
+LINE (0, 577)-(431, 595), _RGB32(100, 224, 117), BF ' create green grass portion of image
+_DEST 0 ' back to work on screen
+Scenery(1).image = Clouds& ' set scenery parallax information
+Scenery(1).y = 457
+Scenery(1).fmax = 8
+Scenery(2).image = City&
+Scenery(2).y = 510
+Scenery(2).fmax = 4
+Scenery(3).image = Bushes&
+Scenery(3).y = 550
+Scenery(3).fmax = 2
+Scenery(4).image = HazardBar&
+Scenery(4).y = 596
+IF _FILEEXISTS("fbird.sco") THEN ' does high score file exist?
+ OPEN "fbird.sco" FOR INPUT AS #1 ' yes, open high score file
+ INPUT #1, HighScore% ' get high score from file
+ CLOSE #1 ' close high score file
+END IF
+
+END SUB
+
+'----------------------------------------------------------------------------------------------------------------------
+
+FUNCTION BOXCOLLISION% (Box1X%, Box1Y%, Box1Width%, Box1Height%, Box2X%, Box2Y%, Box2Width%, Box2Height%)
+
+'**
+'** Detects if two bounding box areas are in collision
+'**
+'** INPUT : Box1X% - upper left corner X location of bounding box 1
+'** Box1Y% - upper left corner Y location of bounding box 1
+'** Box1Width% - the width of bounding box 1
+'** Box1Height% - the height of bounding box 1
+'** Box2X% - upper left corner X location of bounding box 2
+'** Box2Y% - upper left corner Y location of bounding box 2
+'** Box2Width% - the width of bounding box 2
+'** Box2Height% - the height of bounding box 2
+'**
+'** OUTPUT: BOXCOLLISION - 0 (FALSE) for no collision, -1 (TRUE) for collision
+'**
+
+IF Box1X% <= Box2X% + Box2Width% - 1 THEN ' is box1 x within lower limit of box2 x?
+ IF Box1X% + Box1Width% - 1 >= Box2X% THEN ' yes, is box1 x within upper limit of box2 x?
+ IF Box1Y% <= Box2Y% + Box2Height% - 1 THEN ' yes, is box1 y within lower limit of box2 y?
+ IF Box1Y% + Box1Height% - 1 >= Box2Y% THEN ' yes, is box1 y within upper limit of box2 y?
+ BOXCOLLISION% = TRUE ' yes, then a collision occured, return result
+ END IF
+ END IF
+ END IF
+END IF
+
+END FUNCTION
+
+'----------------------------------------------------------------------------------------------------------------------
+
+SUB CLEANUP ()
+
+'*
+'* Removes all game assets from the computer's RAM.
+'*
+
+SHARED Fbird&(), Pipe&(), Num&(), Medal&(), Plaque&, FlappyBird&, GameOver&, GetReady&
+SHARED Finger&, ScoreButton&, ShareButton&, StartButton&, OKButton&, RateButton&
+SHARED MenuButton&, PlayButton&, PauseButton&, HazardBar&, Clouds&, City&, Bushes&
+SHARED New&, Clean&, PipeImage&, Ding&, Flap&, Smack&
+
+DIM x% ' generic counter
+DIM y% ' generic counter
+
+_SNDCLOSE Ding& ' remove game sounds from RAM
+_SNDCLOSE Flap&
+_SNDCLOSE Smack&
+FOR y% = 0 TO 2 ' cycle through bird image rows
+ FOR x% = 0 TO 7 ' cycle through bird image columns
+ _FREEIMAGE Fbird&(x% + 1, y% + 1) ' remove bird image from RAM
+ NEXT x%
+NEXT y%
+FOR x% = 0 TO 9 ' cycle trough 9 numeral images
+ _FREEIMAGE Num&(x%, 0) ' remove large numeral image from RAM
+ _FREEIMAGE Num&(x%, 1) ' remove small numeral image from RAM
+NEXT x%
+_FREEIMAGE Plaque& ' remove all remaining images from RAM
+_FREEIMAGE FlappyBird&
+_FREEIMAGE GameOver&
+_FREEIMAGE GetReady&
+_FREEIMAGE Pipe&(0)
+_FREEIMAGE Pipe&(1)
+_FREEIMAGE PipeImage&
+_FREEIMAGE Medal&(0, 0)
+_FREEIMAGE Medal&(0, 1)
+_FREEIMAGE Medal&(1, 0)
+_FREEIMAGE Medal&(1, 1)
+_FREEIMAGE Finger&
+_FREEIMAGE ScoreButton&
+_FREEIMAGE ShareButton&
+_FREEIMAGE StartButton&
+_FREEIMAGE OKButton&
+_FREEIMAGE RateButton&
+_FREEIMAGE MenuButton&
+_FREEIMAGE PlayButton&
+_FREEIMAGE PauseButton&
+_FREEIMAGE HazardBar&
+_FREEIMAGE Clouds&
+_FREEIMAGE City&
+_FREEIMAGE Bushes&
+_FREEIMAGE New&
+_FREEIMAGE Clean&
+
+END SUB
+
+'----------------------------------------------------------------------------------------------------------------------
+
diff --git a/samples/flappy-bird/src/fbird.zip b/samples/flappy-bird/src/fbird.zip
new file mode 100644
index 00000000..ad075bdd
Binary files /dev/null and b/samples/flappy-bird/src/fbird.zip differ
diff --git a/samples/floormaper/index.md b/samples/floormaper/index.md
index 0d75c234..c1f8439e 100644
--- a/samples/floormaper/index.md
+++ b/samples/floormaper/index.md
@@ -20,9 +20,9 @@ for Rel's 9 LINER contest at QBASICNEWS.COM 1/2003
> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
-* [LOAD "flrmp.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?src=https://qb64.com/samples/floormaper/src/flrmp.bas)
-* [RUN "flrmp.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?mode=auto&src=https://qb64.com/samples/floormaper/src/flrmp.bas)
-* [PLAY "flrmp.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?mode=play&src=https://qb64.com/samples/floormaper/src/flrmp.bas)
+* [LOAD "flrmp.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/floormaper/src/flrmp.bas)
+* [RUN "flrmp.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/floormaper/src/flrmp.bas)
+* [PLAY "flrmp.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/floormaper/src/flrmp.bas)
### File(s)
diff --git a/samples/four-player-pong/index.md b/samples/four-player-pong/index.md
index e0dcacc6..8a0a4604 100644
--- a/samples/four-player-pong/index.md
+++ b/samples/four-player-pong/index.md
@@ -18,9 +18,9 @@ Four-player pong game.
> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
-* [LOAD "fourpong.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?src=https://qb64.com/samples/four-player-pong/src/fourpong.bas)
-* [RUN "fourpong.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?mode=auto&src=https://qb64.com/samples/four-player-pong/src/fourpong.bas)
-* [PLAY "fourpong.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?mode=play&src=https://qb64.com/samples/four-player-pong/src/fourpong.bas)
+* [LOAD "fourpong.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/four-player-pong/src/fourpong.bas)
+* [RUN "fourpong.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/four-player-pong/src/fourpong.bas)
+* [PLAY "fourpong.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/four-player-pong/src/fourpong.bas)
### File(s)
diff --git a/samples/fractal-fern/index.md b/samples/fractal-fern/index.md
index 12f00f4e..7da8cf7e 100644
--- a/samples/fractal-fern/index.md
+++ b/samples/fractal-fern/index.md
@@ -14,9 +14,9 @@ The legendary fractal fern.
> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
-* [LOAD "frac3.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?src=https://qb64.com/samples/fractal-fern/src/frac3.bas)
-* [RUN "frac3.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?mode=auto&src=https://qb64.com/samples/fractal-fern/src/frac3.bas)
-* [PLAY "frac3.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?mode=play&src=https://qb64.com/samples/fractal-fern/src/frac3.bas)
+* [LOAD "frac3.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/fractal-fern/src/frac3.bas)
+* [RUN "frac3.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/fractal-fern/src/frac3.bas)
+* [PLAY "frac3.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/fractal-fern/src/frac3.bas)
### File(s)
diff --git a/samples/fractal.md b/samples/fractal.md
index 89214582..8ddc1a20 100644
--- a/samples/fractal.md
+++ b/samples/fractal.md
@@ -44,9 +44,15 @@ Mandelbrot animator.
public domain, uses qb64's 2d prototype
+**[Mandelbrot Spiral](mandelbrot-spiral/index.md)**
+
+[🐝 qbguy](qbguy.md) 🔗 [fractal](fractal.md), [mandelbrot](mandelbrot.md)
+
+Mandelbrot spiral by qbguy.
+
**[Mandelbrot Zoomer](mandelbrot-zoomer/index.md)**
-[🐝 *missing*](author-missing.md) 🔗 [fractal](fractal.md), [mandelbrot](mandelbrot.md)
+[🐝 Tor Myklebust](tor-myklebust.md) 🔗 [fractal](fractal.md), [mandelbrot](mandelbrot.md)
'QBDEMO (C) 2002 Tor Myklebust 'The fractal zoomer should run at 60FPS on a 500MHz machine. I d...
diff --git a/samples/fractal/index.md b/samples/fractal/index.md
index 22196a04..1cceeb20 100644
--- a/samples/fractal/index.md
+++ b/samples/fractal/index.md
@@ -42,9 +42,9 @@ Sorry, I've no idea how to do it on MacOS or Linux, any info about it from peopl
> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
-* [LOAD "fractal.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?src=https://qb64.com/samples/fractal/src/fractal.bas)
-* [RUN "fractal.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?mode=auto&src=https://qb64.com/samples/fractal/src/fractal.bas)
-* [PLAY "fractal.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5953810/index.html?mode=play&src=https://qb64.com/samples/fractal/src/fractal.bas)
+* [LOAD "fractal.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/fractal/src/fractal.bas)
+* [RUN "fractal.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/fractal/src/fractal.bas)
+* [PLAY "fractal.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/fractal/src/fractal.bas)
### File(s)
diff --git a/samples/frogger.md b/samples/frogger.md
new file mode 100644
index 00000000..d6f49cbc
--- /dev/null
+++ b/samples/frogger.md
@@ -0,0 +1,9 @@
+[Home](https://qb64.com) • [News](../news.md) • [GitHub](../github.md) • [Wiki](../wiki.md) • [Samples](../samples.md) • [Media](../media.md) • [Community](../community.md) • [Rolodex](../rolodex.md) • [More...](../more.md)
+
+## SAMPLES: FROGGER
+
+**[Frogger](frogger/index.md)**
+
+[🐝 Matt Bross](matt-bross.md) 🔗 [game](game.md), [frogger](frogger.md)
+
+Frogger game by Matt Bross.
diff --git a/samples/frogger/img/screenshot.png b/samples/frogger/img/screenshot.png
new file mode 100644
index 00000000..e2d24b3f
Binary files /dev/null and b/samples/frogger/img/screenshot.png differ
diff --git a/samples/frogger/index.md b/samples/frogger/index.md
new file mode 100644
index 00000000..900f584b
--- /dev/null
+++ b/samples/frogger/index.md
@@ -0,0 +1,29 @@
+[Home](https://qb64.com) • [News](../../news.md) • [GitHub](../../github.md) • [Wiki](../../wiki.md) • [Samples](../../samples.md) • [Media](../../media.md) • [Community](../../community.md) • [Rolodex](../../rolodex.md) • [More...](../../more.md)
+
+## SAMPLE: FROGGER
+
+![screenshot.png](img/screenshot.png)
+
+### Author
+
+[🐝 Matt Bross](../matt-bross.md)
+
+### Description
+
+```text
+Frogger game by Matt Bross.
+```
+
+### QBjs
+
+> Please note that QBjs is still in early development and support for these examples is extremely experimental (meaning will most likely not work). With that out of the way, give it a try!
+
+* [LOAD "frog.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?src=https://qb64.com/samples/frogger/src/frog.bas)
+* [RUN "frog.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=auto&src=https://qb64.com/samples/frogger/src/frog.bas)
+* [PLAY "frog.bas"](https://v6p9d9t4.ssl.hwcdn.net/html/5963335/index.html?mode=play&src=https://qb64.com/samples/frogger/src/frog.bas)
+
+### File(s)
+
+* [frog.bas](src/frog.bas)
+
+🔗 [game](../game.md), [frogger](../frogger.md)
diff --git a/samples/frogger/src/frog.bas b/samples/frogger/src/frog.bas
new file mode 100644
index 00000000..e1a5375c
--- /dev/null
+++ b/samples/frogger/src/frog.bas
@@ -0,0 +1,701 @@
+'RETRO.BAS by Matt Bross, 1997
+'HOMEPAGE - http://www.GeoCities.Com/SoHo/7067/
+'EMAIL - oh_bother@GeoCities.Com
+DefInt A-Z
+
+Type ScoreType
+ SCORE As Long
+ PERSON As String * 3
+End Type
+
+Dim Shared HISCORE(9) As ScoreType
+
+Screen 7: Cls
+Randomize Timer + Val(Date$) + Rnd
+'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%INTRO AND GAME%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+FrogINTRO
+ShowHiScore
+'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%BEGIN DATA%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+FroggerGraphics:
+'frog
+Data 9,9,0,-32612,0,-32612,20,-32578,0,-32598,0,-32513,0,-32513,-32567,-32513
+Data 0,54,8,62,0,54,0,127,0,127,28,127,0,99,34,-32541,0,-32575,-32575,-32575
+Data 0,0
+'car1
+Data 9,9,-32513,-32513,-32513,0,-32575,-32575,-32513,0,-32575,-32575,-32541,0
+Data 0,0,-32541,0,0,128,-32513,128,0,0,-32513,0,0,0,-32578,0,0,0,28,65,-32578
+Data -32578,-32578,0
+'car2
+Data 9,9,-32513,-32513,-32513,0,-32513,-32575,-32575,0,-32541,-32575,-32575,0
+Data -32541,0,0,0,255,-32768,-32768,-32768,-32513,0,0,0,-32578,0,0,0,28,0,0
+Data 65,-32578,-32578,-32578,0
+'log1
+Data 9,9,-32640,-32513,127,-32640,0,-32513,-32513,64,0,-32513,-32513,64,0
+Data -32513,-32513,64,0,-32513,-32513,64,0,-32513,-32513,64,0,-32513,-32513
+Data 64,0,-32513,-32513,64,-32640,-32513,127,-32640
+'lily
+Data 9,9,-32547,-32513,0,-32513,-32632,127,0,127,0,-32513,0,-32513,8,-32513,0
+Data -32521,-32632,-32513,0,119,-32567,-32513,0,-32586,-32575,255,0,255
+Data -32541,127,0,93,-32513,-32513,0,-32541
+'water
+Data 9,9,-32513,-32513,0,-32513,-32513,219,0,219,-32513,146,0,146,-32513,73,0
+Data 73,-32513,-32513,0,-32513,-32513,219,0,219,-32513,146,0,146,-32513,73,0
+Data 73,-32513,-32513,0,-32513
+'road
+Data 9,9,-32513,-32513,-32513,0,-32513,-32513,-32513,0,-32513,-32513,-32513,0
+Data -32513,-32513,-32513,0,-32513,-32513,-32513,127,-32513,-32513,-32513,0
+Data -32513,-32513,-32513,0,-32513,-32513,-32513,0,-32513,-32513,-32513,0
+'exit1
+Data 9,9,-32513,0,0,-32513,-32513,127,127,-32640,-32576,64,64,-32577,-32576
+Data 64,64,-32577,-32576,64,64,-32577,-32576,64,64,-32577,-32576,64,64,-32577
+Data -32576,64,64,-32577,-32576,64,64,-32577
+FroggerIntroPalette:
+Data 1,0,7,2,8,7,4,5,7,7,10,10,10,8,7,15
+FroggerIntroGraphics:
+'title1
+Data 57,87,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-3976,0,0,0,0,0,0,0,0,0
+Data 0,0,0,0,0,0,-3841,0,0,0,-24576,0,0,0,0,0,0,0,0,0,0,0,-1793,0,0,0,-16369
+Data 0,0,0,0,0,0,0,0,0,0,768,-1793,0,0,0,-3969,0,0,0,0,0,0,0,0,0,0,7936
+Data -1793,0,0,256,28927,0,0,0,0,0,0,0,0,0,0,16128,-1793,0,0,3840,28784
+Data 0,0,0,0,0,0,0,8192,0,0,32512,-3841,0,0,1536,-8159,0,0,0,0,0,0,0,-8192
+Data 0,0,-256,-3841,0,0,2048,-8189,0,0,0,0,0,0,0,-8190,0,0,-253,-7937,0
+Data 0,20224,-16361,0,0,0,0,0,0,0,-16363,0,0,-249,-16129,0,0,-26623,-32513
+Data 0,0,0,0,0,0,0,-32705,0,0,-241,-16129,0,0,-20477,127,0,0,0,0,0,0,0
+Data 63,0,0,-481,15615,0,0,8199,-16322,0,0,0,0,0,0,0,30,0,0,-225,1023,128
+Data 0,16399,-994,0,0,0,0,0,0,0,30,0,0,-225,1790,96,0,16399,-2019,0,0,0
+Data 0,0,0,0,28,0,0,-193,1276,32,0,16399,-1765,192,0,0,0,0,0,0,24,0,0,-129
+Data 1272,32,0,24604,-1225,0,0,0,0,0,0,0,48,0,0,-129,1272,16,0,12344,-1673
+Data 192,0,0,0,0,0,0,112,0,0,-1,-31503,16,0,2096,31470,96,0,0,0,0,0,0,224
+Data 0,256,-1,29935,16,0,26466,2496,160,0,0,0,0,0,768,192,0,768,-1,7904
+Data 8,0,-10265,0,192,0,0,0,0,0,1536,0,0,1792,-1,608,8,256,-8977,128,112
+Data 0,0,0,0,0,1024,0,0,3840,-257,832,8,768,-15889,128,144,0,0,0,0,0,0
+Data 0,0,7936,-769,64,232,1792,-27665,128,0,0,0,0,0,0,0,0,0,16128,-257
+Data 64,56,3840,4591,128,0,0,0,0,0,0,0,0,0,16128,-1537,64,16,7936,32495
+Data 128,0,0,0,0,0,0,0,0,0,32512,-1537,64,16,7936,32494,128,0,0,0,0,0,0
+Data 0,0,0,-256,-1537,192,16,16128,-308,0,0,0,0,0,0,0,0,0,0,-255,-769,192
+Data 16,32256,32732,0,0,0,0,0,0,0,0,0,0,-255,-1281,128,16,31744,-232,0
+Data 0,0,0,0,0,0,0,0,0,-255,-1793,128,16,32256,-200,0,0,0,0,0,0,0,0,0,0
+Data -255,-513,192,32,-512,-208,0,0,0,0,0,0,0,0,0,0,-255,-3329,192,32,-512
+Data -208,0,0,0,0,0,0,0,0,0,0,-205,-8449,64,32,-512,-14,128,0,0,0,0,0,0
+Data 0,0,0,-197,-769,96,64,-8704,-14,160,0,0,0,32,0,0,0,0,0,-217,-3841
+Data 48,64,-9191,-14,208,0,0,0,16,0,0,0,0,0,-221,-11777,40,128,-8931,-10
+Data 248,0,0,256,40,0,0,0,0,0,-221,-513,52,128,-9955,-10,220,0,0,256,20
+Data 0,0,0,0,0,-205,-16385,-73,0,-9443,-9,236,0,0,768,164,0,0,0,0,0,-185
+Data -4865,19548,0,-27847,-17,-3857,0,0,0,76,0,0,0,0,0,-185,-3329,-391
+Data 0,-18631,-49,-1801,0,0,512,112,0,0,0,0,0,-153,255,-16404,128,-18631
+Data -33,-1805,0,0,0,224,0,0,0,0,0,-185,16639,32566,240,-18629,-97,-2079
+Data 0,0,0,32,0,0,0,0,0,-185,8446,-221,254,14139,-65,15808,224,0,0,0,0
+Data 0,0,0,0,-185,254,-224,235,28475,-65,2016,92,0,0,32,0,0,0,0,0,-153
+Data 254,3904,-32519,20283,-65,128,254,0,0,0,0,0,0,0,0,-185,24820,128,-32514
+Data 32571,-1,0,1,0,0,0,0,0,0,0,0,-185,205,128,-32765,-197,-1,0,0,0,0,0
+Data 0,0,0,0,0,-185,192,128,0,-197,-1,0,0,0,0,0,0,0,0,0,0,-121,6608,0,0
+Data -133,-257,0,0,0,6144,0,0,0,0,0,0,-121,5504,0,0,-133,-257,0,0,0,5120
+Data 0,0,0,0,0,0,-121,-4672,0,0,-133,-257,0,0,0,-5120,0,0,0,0,0,0,-313
+Data -17024,0,0,-133,-257,0,0,0,-17408,0,0,0,0,0,0,-1401,-9340,0,0,-133
+Data -769,0,0,0,-10236,0,0,0,0,0,0,-1401,-17729,0,0,-133,-769,0,0,0,-18241
+Data 0,0,0,0,0,0,-377,-2823,0,0,-135,-1793,0,0,0,-3847,0,0,0,0,0,0,-9329
+Data -19233,0,0,-143,-1793,0,0,768,-20257,0,0,0,0,0,0,-3509,-1793,0,0,-207
+Data -3841,0,0,512,-3841,0,0,0,0,0,0,-31919,-28469,0,0,-224,-7937,0,0,768
+Data -32565,0,0,0,0,0,0,-30383,-7970,0,0,32544,255,0,0,2304,222,0,0,0,0
+Data 0,0,865,87,0,0,-256,252,0,0,768,84,0,0,0,0,0,0,-6656,188,0,0,7936
+Data 248,0,0,1536,184,0,0,0,0,0,0,8960,248,0,0,7936,240,0,0,768,240,0,0
+Data 0,0,0,0,13056,248,0,0,3840,240,0,0,768,240,0,0,0,0,0,0,4352,248,0
+Data 0,3840,240,0,0,256,240,0,0,0,0,0,0,7168,248,0,0,3840,240,0,0,3072
+Data 240,0,0,0,0,0,0,7680,124,0,0,3840,248,0,0,3584,120,0,0,0,0,0,0,7936
+Data 28,0,0,3840,248,0,0,3840,24,0,0,0,0,0,0,32512,140,0,0,1792,248,0,0
+Data 0,8,0,0,0,0,0,0,-253,228,0,0,16128,248,0,0,0,0,0,0,0,0,0,0,-241,244
+Data 0,0,-255,248,0,0,0,0,0,0,0,0,0,0,-225,252,0,0,-241,240,0,0,0,0,0,0
+Data 0,0,0,0,-193,248,0,0,-993,0,0,0,0,0,0,0,0,0,0,0,-385,0,0,0,56,0,0
+Data 0,0,0,0,0,0,0,0,0,-8000,0,0,0,63,0,0,0,0,0,0,0,0,0,0,0,30832,0,0,0
+Data -32753,0,0,0,0,0,0,0,0,0,0,0,-14577,-8057,0,0,14336,0,0,0,0,0,0,0
+Data 0,0,0,0,16128,-3969,0,0,0,-8057,0,0,0,-8185,0,0,0,0,0,0,0,-7937,0
+Data 0,0,8,0,0,0,8,0,0,0,0,0,0,0,-1921,0,0,0,-16345,0,0,0,-16345,0,0,0
+Data 0,0,0,0,-385,0,0,0,14352,0,0,0,14352,0,0,0,0,0,0,0,31800,0,0,0,0,0
+Data 0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0
+Data 0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+'title2
+Data 54,81,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0
+Data 0,-7951,0,0,0,0,0,0,0,0,0,0,0,0,0,-7951,0,0,2048,0,0,0,8192,0,0,0
+Data 0,0,256,-24322,0,0,0,0,0,0,16385,0,0,0,0,0,256,-7937,0,0,2816,64,0
+Data 0,8192,0,0,0,0,0,256,-3842,0,0,0,64,0,0,1,0,0,0,0,0,256,-7945,0,0
+Data 2,32,0,0,24,0,0,0,0,0,16128,-3841,0,0,-19455,80,0,0,0,0,0,0,0,0,16128
+Data -3841,0,0,-7671,32,0,0,16384,0,0,0,32,0,32512,-24322,0,0,16514,240
+Data 0,0,1,0,0,0,0,0,-256,24829,0,0,-32766,176,0,0,16386,0,0,0,0,0,-249
+Data -24321,0,2304,-24824,0,0,1280,16384,0,0,5376,0,0,-243,16607,0,0,-8440
+Data 0,0,4098,-20448,0,0,2560,0,0,-225,-7937,0,512,-256,16,0,4100,2048
+Data 0,0,7424,0,0,-489,2047,192,1024,-16640,48,0,8456,-16384,0,0,7680,0
+Data 0,-193,1258,64,1792,4352,184,0,16384,16396,128,0,0,0,0,-129,16626
+Data 64,1792,2304,-24574,0,8192,-12028,0,0,0,0,0,-4225,-23324,32,3584,5120
+Data 16386,0,4144,-6133,160,0,0,0,0,30079,1093,32,15872,2576,184,0,-21888
+Data 16529,96,0,0,0,768,-1,-19272,48,20736,25856,74,0,1024,-32750,0,0,0
+Data 0,1792,-1,7792,16,-3326,-32262,16512,0,256,352,160,0,0,0,3840,-257
+Data 688,16,-2298,-7447,233,0,512,0,224,0,0,0,7936,-1,864,208,-221,-31520
+Data 92,0,2048,80,32,0,0,0,16128,-1,16,112,-2289,-23836,-32618,0,0,10240
+Data 0,0,0,0,32512,-1,144,32,-1265,1484,20490,4096,0,5376,0,0,0,0,-256
+Data -257,80,32,-1177,735,180,0,0,2560,128,0,0,0,-255,-257,80,544,-3105
+Data 9375,80,0,0,0,0,0,0,0,-255,-1,48,32,1407,-13793,16,0,80,8192,0,0,0
+Data 0,-255,-257,32,32,1791,20751,16,0,8192,128,0,0,0,0,-255,-257,32,0
+Data 3807,21020,12448,0,256,2176,0,0,0,0,-255,-1,184,8192,3775,16522,4184
+Data 0,0,0,0,0,0,0,-253,-257,88,64,7799,-23024,-28644,48,256,-32768,40
+Data 0,0,0,-214,-1,140,5184,3819,25408,8208,1,0,1040,16,0,0,0,-201,-257
+Data 6,2176,17486,22612,4272,0,256,2720,96,0,0,0,-253,-1,37,-31616,3754
+Data -29744,16627,112,384,81,0,0,0,0,-221,-1,16038,-11264,-12224,22980
+Data 1089,8,0,-32768,0,0,-31232,0,-201,-1,21499,2048,-3864,9312,1156,512
+Data 0,26656,0,0,-29952,0,-217,-257,-16409,-16256,-12208,6608,1032,56,256
+Data 16385,8,0,1536,0,-187,-769,-10466,-22416,6200,-26368,2052,18,768,10842
+Data 132,0,1537,0,-16537,-2817,27299,-25604,20737,21568,16,16384,2816,1448
+Data 0,0,0,0,-185,-7425,8002,-18200,-13559,9608,0,0,5376,8408,20,0,0,0
+Data -185,-7937,946,-28420,20997,68,4,40,6912,-22280,0,0,0,0,32611,-3841
+Data 2,-31744,-17919,15626,-22384,-32752,1280,17728,64,0,0,0,-189,25342
+Data 4,-18432,-11115,23191,49,4,2561,-30048,40,0,0,0,-189,255,4,-20480
+Data -5380,-30556,4181,4,22785,81,0,0,0,0,-189,-32514,200,-28672,22751
+Data 12309,-22452,44,27137,-24058,0,0,0,0,-189,253,168,-31744,-19974,17799
+Data 17476,48,28674,0,0,0,-32768,0,-61,2046,104,0,12663,-27328,2050,29
+Data -18432,-30718,128,0,0,0,-637,1524,216,1280,-23813,9386,29,152,20489
+Data 1,20,0,0,0,-893,-3628,208,1024,16637,10254,1,569,43,10752,160,0,144
+Data 0,-893,-6149,96,19456,16637,4104,12312,657,4108,128,4,0,8352,0,-53
+Data 32495,160,1024,21757,149,0,56,5124,64,0,0,72,0,-4729,-2101,192,24576
+Data 9470,8238,0,152,9744,0,0,0,209,0,-860,11791,64,20736,4350,-32555,0
+Data 266,1248,0,0,0,40,0,25516,29223,128,20736,-9807,165,0,3584,10241,0
+Data 0,0,80,0,-860,11791,64,21248,4096,-32560,0,17160,480,0,0,2048,32,0
+Data -4857,-2101,192,0,1106,32,0,-24424,10768,0,0,512,16400,0,-30654,-3897
+Data 0,0,11552,12,0,-30961,533,0,0,512,16,0,20032,24609,0,2560,3584,176
+Data 0,16901,9232,0,0,256,64,0,1536,-24519,0,3328,1032,16,0,-24574,18450
+Data 0,0,2048,160,0,1024,-4036,0,1280,544,12,0,4864,1,0,0,3072,48,0,1536
+Data 28734,0,1280,16457,128,0,-24568,2049,0,0,512,0,0,3840,4349,0,1280
+Data 176,104,0,16384,-32766,0,0,3328,0,0,16128,-12033,0,1280,16708,32,0
+Data -32766,0,0,0,0,0,0,-256,-3841,0,1280,-8183,0,0,512,0,0,0,0,0,0,-256
+Data -16129,0,768,12367,32,0,0,72,0,0,0,0,0,-253,248,0,1024,770,80,0,0
+Data 0,0,0,0,0,0,3590,0,0,2048,-10240,8,0,-3839,-32734,0,0,0,0,0,-30965
+Data 3264,0,1024,8232,144,0,21000,16,0,0,0,0,0,29456,-264,0,0,1420,0,0
+Data 16,2,0,0,0,0,0,800,-4065,0,0,-24528,0,0,544,2112,0,0,0,0,0,64,-16889
+Data 0,-24576,2048,0,0,0,20480,0,0,0,0,0,128,-2801,128,16384,0,16384,0
+Data 128,2560,0,0,256,128,0,0,-29949,0,0,1024,64,0,0,8192,0,0,0,8,0,0,-16383
+Data 0,0,0,16,0,0,0,0,0,0,0,0,0,-16384,0,0,256,0,0,0,0,0,0,0,0,0,0,-16384
+Data 0,0,0,0,0,0,0,0,0,0,0,0,0,-32767,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
+Data 0,0,0,-32768,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0
+'title3
+Data 55,82,0,0,48,0,0,0,0,0,0,32,0,0,0,0,0,0,16,0,0,0,0,0,0,32,0,0,0,0
+Data 0,0,96,0,0,0,0,0,0,64,0,0,0,0,0,0,64,0,0,0,0,0,0,32,0,0,0,0,0,0,-7952
+Data 0,0,0,16,0,0,65,0,0,0,0,0,0,16465,0,0,16384,0,0,0,-32608,0,0,0,0,0
+Data 0,-7951,0,0,8192,16,0,0,81,0,0,0,0,0,256,16483,0,0,16384,0,0,0,-32638
+Data 0,0,0,0,0,256,-32605,0,0,256,0,0,0,16448,0,0,0,0,0,768,16597,0,0,768
+Data 0,0,512,-32520,0,0,0,0,0,768,16633,0,0,2304,0,0,256,-32554,0,0,0,0
+Data 0,768,85,0,0,0,192,0,0,234,0,0,0,0,0,512,-16134,0,0,-1536,0,0,256
+Data 5,0,0,0,0,0,256,21,0,0,8452,0,0,2560,-32546,0,0,0,0,0,11776,-16129
+Data 0,0,-16374,0,0,5376,0,0,0,0,0,0,-6400,16639,0,0,8,128,0,-4096,16384
+Data 0,0,0,0,0,-16637,254,0,256,256,128,0,24576,16384,0,0,0,0,0,-235,-16132
+Data 0,8192,2816,0,0,523,160,0,0,0,0,0,-5607,-3345,128,3072,18184,1,0,5890
+Data 12344,0,0,0,0,0,-233,-18945,0,0,26112,-16246,0,10,16408,0,0,0,0,0
+Data -193,-21254,192,0,256,67,0,-2781,4190,0,0,0,0,0,22301,16630,64,256
+Data 512,-32624,0,-21978,10413,0,0,0,0,0,-4113,24818,32,-30976,512,-12261
+Data 0,21784,-16307,0,0,0,0,256,-2057,20708,32,514,6656,16552,0,-21992
+Data 165,0,0,0,0,3840,-1026,-29779,32,15878,16512,112,0,17729,1844,0,0
+Data 0,0,14080,30167,1916,160,22279,-32162,16400,14336,-24408,3176,32,0
+Data 0,0,-1280,-1025,584,192,-18425,18088,176,12288,21829,1952,128,0,0
+Data 0,7937,30719,1476,576,21543,-30638,-32688,-16384,-22102,3856,0,0,0
+Data 0,-22016,-5,144,64,-22134,-9542,248,21761,17748,32,0,0,1024,0,22273
+Data 32725,1092,64,-11245,24645,8272,-22528,-21974,146,0,0,2048,0,-255
+Data -1,230,96,21763,-20090,4344,0,20736,72,0,0,0,0,-255,30079,226,32,-24053
+Data 13665,84,2,-30200,520,112,0,0,0,-2034,-18310,1015,2256,1,128,80,1537
+Data 17541,-32504,48,322,7,0,-1785,22524,1016,3104,512,2128,4208,1616,-24575
+Data 6927,224,262,8,128,-201,-1281,-15880,-32632,0,1280,8,76,0,4354,8,0
+Data 5,32,-29,-3585,3042,2200,0,1024,8388,22,512,14617,24,0,14,0,-57,-1
+Data -3075,4348,0,0,128,172,0,-13310,12,4,16,80,-2105,-2049,-4916,10342
+Data -32768,0,4112,10450,2048,-24013,138,128,128,224,-2073,-1,-6408,4346
+Data 0,0,1144,2156,0,-7929,0,0,64,128,-191,-1,29904,-24388,0,10240,8441
+Data 22,0,28679,66,0,32,0,-18653,16351,2946,5290,0,17408,4112,2120,96,-6863
+Data 228,64,2248,0,32515,22527,5120,11264,0,512,13921,18,2048,-29143,192
+Data 128,-11104,0,-8397,-5633,-28152,7296,0,20484,14944,64,512,3079,64
+Data 32,-24560,0,7937,-11777,1025,1024,8224,256,22211,-16334,3840,7423
+Data 0,192,32,0,-253,-1409,6314,2048,160,-24319,32290,16404,1152,-13068
+Data 0,-32768,2144,0,-255,-2561,20492,3072,64,1281,31777,8208,2816,-29450
+Data 0,0,100,64,-1455,-22481,-22491,1536,4330,12112,-21936,5465,1984,1269
+Data 0,-32767,160,0,-2799,-19121,-32523,2640,20727,264,2600,2052,25248
+Data 265,244,8192,-2928,0,-504,31,-32544,29962,-8136,-26609,0,17666,12048
+Data 133,6,0,208,0,-2814,2143,-16169,14336,16469,4207,2048,10887,20384
+Data 25,0,0,9872,0,-1270,2192,-32745,256,-11927,12300,64,5252,-9170,-32676
+Data 0,0,-32733,0,29957,528,13,512,-20076,28799,128,11144,-31154,128,0
+Data 0,256,0,14495,-30559,40,0,1,-32202,0,-15668,16734,84,0,0,8,0,4373
+Data -6909,112,8704,-6078,28,0,-21112,1556,142,0,0,16385,0,11818,8216,248
+Data 1024,-15615,14,0,-3949,-28416,12,0,1024,0,0,18224,5320,96,512,1924
+Data 232,0,30881,816,152,0,0,0,0,11818,-20196,252,1024,-7360,78,0,-28271
+Data 4356,12,0,0,0,0,5397,-6369,242,-24064,12352,-30712,0,-20711,4684,6
+Data 0,0,0,0,2624,-129,224,-28672,0,0,0,15616,16516,0,0,0,0,0,1344,29695
+Data 192,-32768,42,0,0,5120,-17366,128,0,0,0,0,2816,-1281,160,0,0,4096
+Data 0,5120,1280,192,0,0,0,0,1280,5616,0,0,3072,-32760,0,2560,-2302,96
+Data 0,0,0,0,2816,-13316,224,0,0,0,0,1536,13507,0,0,0,0,0,5376,-2161,32
+Data 0,4104,-32768,0,4096,2176,96,0,0,0,0,24576,-2032,128,0,784,16384,0
+Data 16384,1792,0,0,0,0,0,-16384,29696,224,0,0,3,0,0,19456,96,0,0,16,0
+Data 1,2816,32,0,0,0,0,1,1024,0,0,0,0,0,2,768,0,0,0,12,0,2,0,0,0,0,0,0
+Data 4,1536,0,512,0,0,0,4,0,0,0,0,0,0,24,1024,0,8192,0,8,0,8,512,0,0,0
+Data 0,0,32,3072,0,2048,0,0,0,32,0,0,0,0,0,0,64,4096,0,16384,0,44,0,0,0
+Data 0,0,0,0,0,0,6144,0,0,0,0,0,0,0,0,0,0,0,0,128,12288,0,0,0,0,0,128,8192
+Data 0,0,0,0,0,0,12288,0,0,0,0,0,0,0,0,0,0,0,0,0,24576,0,0,0,128,0,0,8192
+Data 0,0,0,0,0,0,-16384,0,0,0,0,0,0,0,0,0,0,0,0,0,16384,0,0,0,0,0,0,-32768
+Data 0,0,0,0,0,0,-32767,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,128,0,0,0,0,0
+Data 0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,2048,0,0,0,2,0,0,0,0,0
+'title4
+Data 55,82,0,0,0,0,0,16384,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0
+Data 0,0,0,0,0,0,0,0,0,0,96,0,0,0,0,0,0,0,0,0,0,0,0,0,96,0,0,0,0,0,0,0
+Data 0,0,0,0,0,0,96,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0
+Data 0,256,-16157,0,0,0,0,0,0,0,0,0,0,128,0,256,16483,0,0,0,0,0,0,0,0,0
+Data 0,0,0,256,-16157,0,0,0,0,0,0,0,0,0,0,0,0,256,-16191,0,0,0,0,0,0,0
+Data 0,0,0,0,0,256,-16157,0,0,0,0,0,0,0,0,0,0,0,0,768,71,0,0,0,0,0,0,0
+Data 0,0,0,0,0,768,-32569,0,0,0,0,0,0,0,0,0,1282,0,0,1280,-32552,0,0,0
+Data 0,0,0,0,0,0,1280,0,0,1792,-32518,0,0,0,0,0,0,0,0,0,-31488,0,0,1792
+Data 114,0,0,0,0,0,0,0,0,0,2560,0,0,3840,245,0,0,0,0,0,0,0,0,0,2048,0,0
+Data 1280,213,0,0,0,0,0,0,0,0,0,3072,0,0,1792,243,0,0,0,0,0,0,0,0,0,32
+Data 0,0,21760,84,0,0,0,0,0,0,0,0,0,-4859,0,0,-2044,-32766,0,0,0,0,0,3840
+Data 252,0,0,400,0,0,16413,-32512,0,0,0,0,0,-256,252,0,1280,0,128,0,0,1792
+Data 128,0,0,0,0,-32753,-16185,0,4096,10,0,0,29984,12480,64,0,0,0,0,-30708
+Data -8057,0,28928,12288,2,0,-254,6216,64,0,0,0,0,5237,4124,0,2048,768
+Data 136,3328,-1273,24828,192,0,0,0,-32000,-21821,2723,0,4,3072,21,-26624
+Data -8385,-6061,128,0,0,0,1536,1,-10432,0,16568,6696,-32768,16641,-10305
+Data -3868,0,0,0,0,15872,10794,514,0,513,4,209,-32767,-1027,11517,128,0
+Data 0,0,-16384,2305,513,0,62,2562,208,257,-769,245,0,0,0,0,-9213,10784
+Data -32736,96,0,256,2,8960,-1,-22274,0,0,0,0,-1018,3652,-16383,2272,2
+Data 2048,0,257,-1,9462,0,0,0,0,-32754,0,-8191,256,32001,-2187,-4050,512
+Data -30078,8329,0,124,136,0,-28643,64,13326,8440,257,-32536,171,518,5888
+Data 11008,0,-16788,28928,64,25121,32512,-8180,17568,256,1024,23747,26
+Data -32768,-15612,2,-355,-3328,28,17125,-18688,-16242,12,-30720,27136
+Data -7444,22,2184,-13206,16,30653,4416,19,-1342,-8193,20367,62,4,2128
+Data 0,63,20480,8,192,-20351,29729,191,-1088,28667,4095,2076,1028,8256
+Data 25120,55,16384,32,128,29200,3219,223,-1086,28667,3054,8240,1108,0
+Data -14832,20495,0,1025,8,29216,4243,235,-3327,-2561,-31105,8256,-24572
+Data 24,2603,86,6816,640,100,6152,256,212,9249,-4081,-3329,3104,8208,7432
+Data 1089,2096,2080,16413,714,-8509,16631,188,1041,-4081,-8462,1120,-32760
+Data 18952,-32535,4272,2176,-14270,532,32483,1527,16,9248,-4081,-20225
+Data 7520,4120,1801,5195,128,2320,1031,642,-4669,8438,176,-7935,-4081,20605
+Data -22824,16400,-17401,1583,16,1792,-32708,32,-20466,760,80,528,3,24847
+Data 794,-15360,2305,-32688,-116,312,19481,4,0,-7938,128,264,1,-7734,4866
+Data 3712,2112,2096,32708,240,11784,0,0,13759,0,12,33,15904,4096,11777
+Data 32583,241,-349,1488,12320,0,0,-32584,8,12289,1,5760,-13824,1536,32558
+Data 240,-240,-22800,6144,0,0,81,0,28675,3585,15488,10240,16384,3552,0
+Data -12416,-24386,-16270,0,0,17,32,32257,2304,26752,2560,808,20619,132
+Data -31852,-22028,4111,0,0,84,0,-6400,898,-1918,1280,9232,19475,0,2218
+Data 857,33,0,512,236,0,5376,716,-32665,-10240,58,-32654,32,4,-32197,24
+Data 0,0,16385,0,3584,16255,-7937,-32768,16,-32684,0,316,-30323,72,0,0
+Data 0,0,256,-24769,-32577,0,-32768,4,64,24,26688,64,0,0,0,0,0,-1,254,-32768
+Data 1,-32508,192,48,0,8,0,0,0,0,0,-241,222,0,-12288,8192,0,48,0,0,0,0
+Data 0,0,0,-1025,254,-32768,0,0,0,48,1024,8,0,0,0,0,256,-26817,-32579,0
+Data 16384,40,64,280,20528,66,0,0,0,0,0,0,0,0,0,156,0,192,128,120,0,0,0
+Data 0,0,0,0,0,-32768,0,0,256,0,16,0,0,0,0,0,0,0,0,0,0,0,1664,0,48,0,0
+Data 0,0,0,0,0,0,0,0,0,3200,0,16,0,0,0,0,0,0,0,0,0,0,0,4096,0,96,0,0,0
+Data 0,0,0,0,0,0,0,0,8192,0,64,0,0,0,0,0,0,0,0,0,0,0,-16384,0,192,0,0,0
+Data 0,0,0,0,0,0,0,0,-32767,256,128,0,0,0,0,0,0,0,0,0,0,0,2,256,128,0,0
+Data 0,0,0,0,0,0,0,0,0,4,768,0,0,0,0,0,0,0,0,0,0,0,0,24,1536,0,0,0,0,0
+Data 0,0,0,0,0,0,0,16,1024,0,0,0,0,0,0,0,0,0,0,0,0,32,3072,0,0,0,0,0,64
+Data 0,0,0,0,0,0,64,1024,0,0,0,0,0,0,0,0,0,0,0,0,0,6144,0,0,0,0,0,0,0,0
+Data 0,0,0,0,128,4096,0,0,0,0,0,0,0,0,0,0,0,0,0,12288,0,0,0,0,0,0,0,0,0
+Data 0,0,0,0,24576,0,0,0,0,0,0,0,0,0,0,0,0,0,24576,0,0,0,0,0,0,0,0,0,0
+Data 0,0,0,-16384,0,0,0,0,0,0,0,0,0,0,0,0,0,-32767,0,0,0,0,0,0,0,0,0,0
+Data 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0
+Data 0,0,0,0
+'title5
+Data 57,22,0,-241,248,0,0,0,0,0,0,0,0,0,0,0,0,0,768,240,-8185,0,0,-241
+Data 248,0,0,0,0,0,0,0,0,0,15360,0,7680,0,768,-1,-7937,0,0,0,0,0,0,0,0
+Data 0,-16383,0,256,192,16128,-1,-257,0,0,0,0,0,0,0,0,0,6,0,0,48,-255,-1
+Data -1,192,-512,0,0,0,0,0,0,0,24,0,0,12,-249,-1,-1,240,-32255,0,0,0,31744
+Data 0,0,0,32,0,0,2,-241,-1,-1,252,6673,0,15360,0,-7168,0,0,0,64,0,0,1
+Data -225,-1,-1,254,-17631,-12289,-6145,248,17408,0,6144,0,64,0,0,1,-225
+Data -1,-1,254,-16864,30860,18992,136,16640,-30861,-18993,112,128,0,0,-32768
+Data -193,-1,-1,255,-19136,-19677,-25754,40,18432,19676,25753,208,128,0
+Data 0,-32768,-193,-1,-1,255,-31424,-22714,-19634,72,30720,22712,19633
+Data 176,128,0,0,-32768,-193,-1,-1,255,-17088,-20619,-28834,120,16384,20616
+Data 28833,128,128,0,0,-32768,-193,-1,-1,255,-19647,11895,-17572,96,16384
+Data -11896,17571,128,64,0,0,1,-225,-1,-1,254,4641,28728,-14752,32,-7936
+Data -28729,14751,192,64,0,0,1,-225,-1,-1,252,-3295,-8209,-130,226,0,0
+Data 129,0,32,0,0,2,-249,-1,-1,240,24,7424,-32646,12,0,0,129,0,24,0,0,12
+Data -255,-1,-1,192,6,5888,-32658,48,0,2048,145,0,6,0,0,48,16128,-1,-257
+Data 0,-16383,6144,-32271,192,0,1792,14,0,-16383,0,256,192,768,-1,-7937
+Data 0,15360,3840,7839,0,0,0,0,0,15360,0,7680,0,0,-241,248,0,768,240,-8185
+Data 0,0,0,0,0,768,240,-8185,0,0,0,0,0,0,-241,248,0,0,0,0,0,0,-241,248
+Data 0,0,0,0,0,0,0,0,0,0,0,0,0
+
+Sub BYE
+ Screen 0, 0, 0, 0: Width 80, 25: Cls
+ Print "FROGGER! Written in *QB*. Matt Bross, 1997"
+ Print "HOMEPAGE - http://www.GeoCities.Com/SoHo/7067/"
+ Print "EMAIL - oh_bother@GeoCities.Com"
+ End
+End Sub
+
+Sub DELAY (SEC!)
+ For V = 0 To SEC! * 70: Wait &H3DA, 8: Wait &H3DA, 8, 8: Next
+End Sub
+
+Sub Frogger (TLIVES, ODIF, OT, OD!)
+ '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%GRAPHICS ARRAYS%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ Rem $DYNAMIC
+ Dim FROG(37), car1(37), car2(37), log1(37), lily(37), water(37), road(37)
+ Dim exit1(37): Restore FroggerGraphics
+ For i = 0 To 37: Read FROG(i): Next: For i = 0 To 37: Read car1(i): Next
+ For i = 0 To 37: Read car2(i): Next: For i = 0 To 37: Read log1(i): Next
+ For i = 0 To 37: Read lily(i): Next: For i = 0 To 37: Read water(i): Next
+ For i = 0 To 37: Read road(i): Next: For i = 0 To 37: Read exit1(i): Next
+ '%%%%%%%%%%%%%%%%%%%%%%%%%%%INFORMATION ARRAYS%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ Dim FrogLev(23, 15)
+ '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%VARIABLES%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ NewGame: LIVES = TLIVES: SCORE = 0: DIF = ODIF: D! = OD!
+ '%%%%%%%%%%%%%%%%%%%%%%%%%%LOAD HIGH SCORE TABLE%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ Open "hiscore.dat" For Binary As #1
+ 'FOR i = 0 TO 9: GET #1, , HISCORE(i): NEXT
+ Close
+ '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%LOAD LEVEL%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ NextLev: Cls
+ For Y = 0 To 15: For X = 0 To 23
+ Select Case Y
+ Case 0: If Int(Rnd * DIF) = 0 Then FrogLev(X, Y) = 8 Else FrogLev(X, Y) = 9
+ Case 1 TO 6: FrogLev(X, Y) = 6
+ If Int(Rnd * DIF) = 0 Then
+ If Y And 1 Then FrogLev(X, Y) = 4 Else FrogLev(X, Y) = 5
+ End If
+ Case 8 TO 14: FrogLev(X, Y) = 7
+ If Int(Rnd * (100 - DIF)) = 0 Then
+ If Y And 1 Then FrogLev(X, Y) = 2 Else FrogLev(X, Y) = 3
+ End If
+ End Select
+ Next: Next
+
+ For Y = 0 To 6
+ FY = -1: FX = -1: EX = -1
+ For X = 0 To 23
+ If FrogLev(X, Y) = 4 And Y And 1 Then FY = 0
+ If FrogLev(X, Y) = 5 Then FX = 0
+ If FrogLev(X, Y) = 8 Then EX = 0
+ Next
+ If Y And 1 Then
+ If FY = -1 Then FrogLev(Int(Rnd * 23), Y) = 4
+ Else
+ If FX = -1 And Y <> 0 Then
+ If Y = 3 Or Y = 6 Then EX = 11 Else EX = 0
+ FrogLev(Int(Rnd * 11) + EX, Y) = 5
+ End If
+ End If
+ If EX = -1 And Y = 0 Then FrogLev(Int(Rnd * 11), Y) = 8
+ Next
+ '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%RESTART POINT%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ ReStart: FX = 11: FY = 15: SEC = OT: ForStep = DIF: SideStep = DIF \ 2
+ '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%DRAW LEVEL%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ For Y = 0 To 15: For X = 0 To 23
+ EX = X * 9 + 50: EY = Y * 9 + 20
+ Select Case FrogLev(X, Y)
+ Case 2: Put (EX, EY), car1(), PSet
+ Case 3: Put (EX, EY), car2(), PSet
+ Case 4: Put (EX, EY), log1(), PSet
+ Case 5: Put (EX, EY), lily(), PSet
+ Case 6: Put (EX, EY), water(), PSet
+ Case 7: Put (EX, EY), road(), PSet
+ Case 8: Put (EX, EY), exit1(), PSet
+ Case Else: Line (EX, EY)-(EX + 8, EY + 8), 0, BF
+ End Select
+ Next: Next
+ Locate 2, 14: Print Space$(12)
+ Line (0, 178)-(45, 186), 0, BF
+ If LIVES > 5 Then SLIVES = 5 Else SLIVES = LIVES
+ For X = 0 To SLIVES - 1: Put (X * 9, 178), FROG(), PSet: Next
+ Locate 22, 1: Print "LIVES": Locate 1, 16: Print "FROGGER!"
+ Locate 22, 9: Print "SCORE": Locate 23, 9: Print SCORE
+ Locate 22, 16: Print "TIME": Locate 23, 16: Print SEC
+ Locate 22, 23: Print "LEVEL": Locate 23, 23: Print DIF
+ Locate 22, 31: Print "HISCORE": Locate 23, 31: Print HISCORE(0).SCORE
+ Put (149, 155), FROG(), PSet: If LIVES <= 0 Then GoTo LOSE
+ Do: Loop Until InKey$ <> ""
+ T& = Timer Mod 86400: Do: Loop Until Timer >= T&: T& = Timer
+ '------------------------>BEGIN MAIN LOOP OF FROGGER GAME<-------------------
+ Def Seg = 0
+ Do
+ '**********************************GET KEY***********************************
+
+
+ 'a = INP(&H60): WHILE LEN(INKEY$): WEND
+ 'SELECT CASE a
+ ' CASE &H48: OFX = FX: OFY = FY: FY = FY - 1
+ 'SCORE = SCORE + ForStep: KeyPress = -1
+ ' CASE &H50: OFX = FX: OFY = FY: FY = FY + 1
+ 'KeyPress = -1
+ ' CASE &H4B: OFX = FX: OFY = FY: FX = FX - 1
+ 'SCORE = SCORE + SideStep: KeyPress = -1
+ ' CASE &H4D: OFX = FX: OFY = FY: FX = FX + 1
+ 'SCORE = SCORE + SideStep: KeyPress = -1
+ ' CASE &H1: GOSUB ABORTGAME
+ ' CASE ELSE: KeyPress = 0
+ 'END SELECT
+
+ a$ = InKey$
+ 'a = INP(&H60): WHILE LEN(INKEY$): WEND
+ Select Case a$
+ Case "8": OFX = FX: OFY = FY: FY = FY - 1
+ SCORE = SCORE + ForStep: KeyPress = -1
+ Case "2": OFX = FX: OFY = FY: FY = FY + 1
+ KeyPress = -1
+ Case "4": OFX = FX: OFY = FY: FX = FX - 1
+ SCORE = SCORE + SideStep: KeyPress = -1
+ Case "6": OFX = FX: OFY = FY: FX = FX + 1
+ SCORE = SCORE + SideStep: KeyPress = -1
+ Case "q": GoSub ABORTGAME
+ Case Else: KeyPress = 0
+ End Select
+
+
+ '********************************MOVE FROG***********************************
+ If KeyPress Then
+ Locate 23, 9: Print SCORE: Sound 500, .5
+ '*************************CHECK BOUNDS OF THE FROG***************************
+ If FX < 0 Then FX = 0
+ If FX > 23 Then FX = 23
+ If FY < 0 Then FY = 0
+ If FY > 15 Then FY = 15
+ End If
+ '********************************DRAW FROG***********************************
+ If KeyPress Or FY < 7 Then Put (FX * 9 + 50, FY * 9 + 20), FROG(), PSet
+ '******************************ERASE OLD CELL********************************
+ If FX <> OFX Or FY <> OFY Then
+ EX = OFX * 9 + 50: EY = OFY * 9 + 20
+ Select Case FrogLev(OFX, OFY)
+ Case 2: Put (EX, EY), car1(), PSet
+ Case 3: Put (EX, EY), car2(), PSet
+ Case 4: Put (EX, EY), log1(), PSet
+ Case 5: Put (EX, EY), lily(), PSet
+ Case 6: Put (EX, EY), water(), PSet
+ Case 7: Put (EX, EY), road(), PSet
+ Case 8: Put (EX, EY), exit1(), PSet
+ Case Else: Line (EX, EY)-(EX + 8, EY + 8), 0, BF
+ End Select
+ End If
+
+ Do: newtimer! = Timer: Loop While newtimer! = lasttimer!
+ lasttimer! = newtimer!
+
+ Do: newtimer! = Timer: Loop While newtimer! = lasttimer!
+ lasttimer! = newtimer!
+
+
+ '*****************************CHECK FOR BONUSES******************************
+ If FrogLev(FX, FY) = 8 Then GoTo WIN
+ If SCORE And SCORE Mod (100 * DIF + 1) = 0 Then GoSub LIFEUP
+ '***************************CHECK IF YOU ARE DEAD****************************
+ Select Case FrogLev(FX, FY)
+ Case 2, 3, 6, 9: GoTo DIE
+ End Select
+ If T& <> Fix(Timer) Then T& = Timer: SEC = SEC - 1: Locate 23, 16: Print SEC
+ If SEC <= 0 Then GoTo DIE
+ '******************************MOVE OBSTICALES*******************************
+ BACK = 23: FORTH = 0
+ For Y = 1 To 14: For X = BACK To FORTH Step Sgn(FORTH - BACK)
+ Select Case FrogLev(X, Y)
+ Case 2
+ If X = 0 Then C2 = 23 Else C2 = X - 1
+ Swap FrogLev(X, Y), FrogLev(C2, Y)
+ Put (C2 * 9 + 50, Y * 9 + 20), car1(), PSet
+ If FrogLev(X, Y) <> 2 Then Put (X * 9 + 50, Y * 9 + 20), road(), PSet
+ Case 3
+ If X = 23 Then C2 = 0 Else C2 = X + 1
+ Swap FrogLev(X, Y), FrogLev(C2, Y)
+ Put (C2 * 9 + 50, Y * 9 + 20), car2(), PSet
+ If FrogLev(X, Y) <> 3 Then Put (X * 9 + 50, Y * 9 + 20), road(), PSet
+ Case 4
+ Select Case Y
+ Case 1, 5
+ If X = 23 Then C2 = 0 Else C2 = X + 1
+ If FY = Y And FX = X Then OFX = FX: OFY = FY: FX = (FX + 1) Mod 23
+ Swap FrogLev(X, Y), FrogLev(C2, Y)
+ Put (C2 * 9 + 50, Y * 9 + 20), log1(), PSet
+ If FrogLev(X, Y) <> 4 Then Put (X * 9 + 50, Y * 9 + 20), water(), PSet
+ Case 3
+ If X = 0 Then C2 = 23 Else C2 = X - 1
+ If FY = Y And FX = X Then OFX = FX: OFY = FY: FX = FX - 1
+ Swap FrogLev(X, Y), FrogLev(C2, Y)
+ Put (C2 * 9 + 50, Y * 9 + 20), log1(), PSet
+ If FrogLev(X, Y) <> 4 Then Put (X * 9 + 50, Y * 9 + 20), water(), PSet
+ End Select
+ End Select
+ Next
+ If Y > 7 Then Swap BACK, FORTH Else If Y And 1 Then Swap BACK, FORTH
+ Next
+ Sound 100, .1
+
+ 'DELAY D!
+
+ Loop
+ '--------------------->END MAIN LOOP OF FROGGER GAME<------------------------
+ DIE: Sound 500, 5: Sound 200, 3: Sound 100, 2
+ LIVES = LIVES - 1: GoTo ReStart
+
+ WIN: Put ((OFX + 1) * 9 + 50, OFY * 9 + 20), log1(), PSet
+ Locate 2, 14: Print "LEVEL PASSED": DIF = DIF + 1: GoTo NextLev
+
+ LOSE: For X = 0 To 500 Step 40: Sound 2000 + X, 1: Next
+ Sound 200, 4: Sound 100, 2
+ Locate 2, 15: Print "GAME OVER!"
+ While Len(InKey$): Wend: DELAY 1
+ If SCORE > HISCORE Then NewHiScore SCORE
+ Locate 1, 1: Print Space$(40)
+ Print Space$(40)
+ Locate 2, 15: Print "PLAY AGAIN?"
+ promt: a$ = Input$(1)
+ Select Case a$
+ Case "Y", "y": GoTo NewGame
+ Case "N", "n": Def Seg: Exit Sub
+ Case Else: GoTo promt
+ End Select
+
+ ABORTGAME: Locate 2, 12: Print "ABORT GAME?(Y/N)": a$ = Input$(1)
+ Select Case a$
+ Case "Y", "y": Locate 2, 12: Print Space$(16): GoTo LOSE
+ Case "N", "n": Locate 2, 12: Print Space$(16): Return
+ Case Else: GoTo ABORTGAME
+ End Select
+
+ LIFEUP: Sound 3000, .9: Sound 3000, .2: Sound 4000, .1
+ SCORE = SCORE + DIF: LIVES = LIVES + 1
+ If LIVES > 5 Then SLIVES = 4 Else SLIVES = LIVES - 1
+ Put (SLIVES * 9, 178), FROG(), PSet: Return
+
+End Sub
+
+Rem $STATIC
+Sub FrogINTRO
+ '%%%%%%%%%%%%%%%%%%%%%%%%%%%%LOAD TITLE IMAGES%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ Cls: For X = 0 To 15: Palette X, 0: Next
+ ReDim title1(1393), title2(1135), title3(1149), title4(1149), title5(353)
+ Restore FroggerIntroGraphics
+ For i = 0 To 1393: Read title1(i): Next
+ For i = 0 To 1135: Read title2(i): Next
+ For i = 0 To 1149: Read title3(i): Next
+ For i = 0 To 1149: Read title4(i): Next
+ For i = 0 To 353: Read title5(i): Next
+ '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%SET PALETTE%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ Restore FroggerIntroPalette
+ For X = 0 To 15: Read i: Palette X, i: Next
+ '%%%%%%%%%%%%%%%%%%%%%%%%%%%%SHOW MORPHING TITLE%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ Put (131, 60), title1(), PSet
+ DELAY 1: Line (131, Y)-(188, 144), 0, BF
+ Put (131, 60), title2(), PSet
+ DELAY .05: Line (131, 60)-(188, 144), 0, BF
+ Put (131, 60), title3(), PSet
+ DELAY .05: Line (131, 60)-(188, 144), 0, BF
+ Put (131, 60), title4(), PSet
+ DELAY .05: Line (131, 60)-(188, 144), 0, BF
+ Put (131, 88), title5(), PSet
+ Erase title1, title2, title3, title4, title5
+ '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%SET STAR PALETTE%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ DELAY 1: Palette 0, 0: Palette 3, 8: Palette 5, 7: Palette 8, 15
+ Locate 16, 11: Print "PRESS SPACE TO START"
+ '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%STAR INIT%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ nstar = 100
+ ReDim starX(nstar), starY(nstar), starZ(nstar), OSX(nstar), OSY(nstar)
+ For X = 0 To nstar
+ starX(X) = Int(Rnd * 320) - 160
+ starY(X) = Int(Rnd * 200) - 100
+ starZ(X) = Int(Rnd * 150)
+ Next
+ '%%%%%%%%%%%%%%%%%%%%%%%%%%REAL(!) 3D STAR SCROLLER%%%%%%%%%%%%%%%%%%%%%%%%%%
+ Def Seg = 0
+ Do
+ For X = 0 To nstar
+ Select Case Point(OSX(X), OSY(X))
+ Case 3, 5, 8: PSet (OSX(X), OSY(X)), 0
+ End Select
+ If starZ(X) <= 0 Then
+ starX(X) = Int(Rnd * 320) - 160
+ starY(X) = Int(Rnd * 200) - 100
+ starZ(X) = Int(Rnd * 150)
+ Else
+ SX = 50 * starX(X) \ starZ(X) + 160
+ SY = 50 * starY(X) \ starZ(X) + 100
+ c = starZ(X) \ 50
+ Select Case c
+ Case 0: c = 8
+ Case 1: c = 5
+ Case 2: c = 3
+ End Select
+ If Point(SX, SY) = 0 Then PSet (SX, SY), c
+ OSX(X) = SX: OSY(X) = SY
+ starZ(X) = starZ(X) - 1
+ End If
+ Next
+ Select Case Inp(&H60)
+ Case &H39: Exit Do
+ Case &H10: If SPECIAL = 0 Then SPECIAL = 1
+ Case &H30: If SPECIAL = 1 Then SPECIAL = 2
+ End Select
+ Loop
+ Palette: Def Seg
+ OptScn SPECIAL
+End Sub
+
+Sub NewHiScore (SCORE)
+ i = 9: Do: i = i - 1: If i = 0 Then Exit Do
+ If SCORE > HISCORE(i).SCORE Then Exit Do
+ Loop
+
+ Locate 1, 1: Print "YOU HAVE A NEW HIGH SCORE"
+ Input "PLEASE GIVE 3 OR LESS INITIALS: ", NAME$
+ HISCORE(i).PERSON = NAME$: HISCORE(i).SCORE = SCORE
+ Open "hiscore.dat" For Binary As #1
+ For i = 0 To 9
+ ' PUT #1, , HISCORE(i)
+ Next
+ Close #1
+End Sub
+
+Sub OptScn (SPECIAL)
+
+ Cls: LIVES = 5: DIF = 0: D = 0: OT = 40: choose = 1
+ If SPECIAL = 2 Then
+ Do
+ Color 15
+ Locate 1, 1: Print "OPTIONS SCREEN: PRESS ENTER TO EXIT"
+ If choose = 1 Then Color 4 Else Color 15
+ Locate 2, 1: Print "LIVES: "; LIVES
+ If choose = 2 Then Color 4 Else Color 15
+ Locate 3, 1: Print "DIFFICULTY: "; DIF
+ If choose = 3 Then Color 4 Else Color 15
+ Locate 4, 1: Print "TIME: "; OT
+ If choose = 4 Then Color 4 Else Color 15
+ Locate 5, 1: Print "DELAY: "; D / 10; " "
+ Do: a$ = InKey$: Loop Until a$ <> ""
+ Select Case a$
+ Case Chr$(13): Exit Do
+ Case Chr$(0) + "K"
+ Select Case choose
+ Case 1: LIVES = LIVES - 1
+ Case 2: DIF = DIF - 1
+ Case 3: OT = OT - 1
+ Case 4: D = D - 1
+ End Select
+ Case Chr$(0) + "H"
+ If choose = 0 Then choose = 4 Else choose = choose - 1
+ Case Chr$(0) + "P"
+ If choose = 4 Then choose = 0 Else choose = choose + 1
+ Case Chr$(0) + "M"
+ Select Case choose
+ Case 1: LIVES = LIVES + 1
+ Case 2: DIF = DIF + 1
+ Case 3: OT = OT + 1
+ Case 4: D = D + 1
+ End Select
+ End Select
+ Loop
+ End If
+
+ Color 15
+ Frogger LIVES, DIF, OT, D / 10
+End Sub
+
+Sub ShowHiScore
+ Cls
+ Locate 1, 14: Print "HIGH SCORES": Print
+ For i = 0 To 9
+ a$ = Str$(i + 1): If i < 9 Then a$ = a$ + " "
+ a$ = a$ + Str$(HISCORE(i).SCORE)
+ b$ = HISCORE(i).PERSON
+ Locate i + 3, 7: Print a$, b$
+ Next
+ Sleep
+ BYE
+End Sub
+
diff --git a/samples/frostbite.md b/samples/frostbite.md
new file mode 100644
index 00000000..3f6efaa3
--- /dev/null
+++ b/samples/frostbite.md
@@ -0,0 +1,9 @@
+[Home](https://qb64.com) • [News](../news.md) • [GitHub](../github.md) • [Wiki](../wiki.md) • [Samples](../samples.md) • [Media](../media.md) • [Community](../community.md) • [Rolodex](../rolodex.md) • [More...](../more.md)
+
+## SAMPLES: FROSTBITE
+
+**[Frostbite](frostbite/index.md)**
+
+[🐝 Fellippe Heitor](fellippe-heitor.md) 🔗 [game](game.md), [frostbite](frostbite.md)
+
+A clone of Frostbite for the Atari 2600, originally designed by Steve Cartwright and published by...
diff --git a/samples/frostbite/img/screenshot.png b/samples/frostbite/img/screenshot.png
new file mode 100644
index 00000000..d5136156
Binary files /dev/null and b/samples/frostbite/img/screenshot.png differ
diff --git a/samples/frostbite/index.md b/samples/frostbite/index.md
new file mode 100644
index 00000000..1b4874d0
--- /dev/null
+++ b/samples/frostbite/index.md
@@ -0,0 +1,25 @@
+[Home](https://qb64.com) • [News](../../news.md) • [GitHub](../../github.md) • [Wiki](../../wiki.md) • [Samples](../../samples.md) • [Media](../../media.md) • [Community](../../community.md) • [Rolodex](../../rolodex.md) • [More...](../../more.md)
+
+## SAMPLE: FROSTBITE
+
+![screenshot.png](img/screenshot.png)
+
+### Author
+
+[🐝 Fellippe Heitor](../fellippe-heitor.md)
+
+### Description
+
+```text
+A clone of Frostbite for the Atari 2600, originally designed by Steve Cartwright and published by Activision in 1983. Written in QB64.
+```
+
+### File(s)
+
+* [frostbite.bas](src/frostbite.bas)
+* [frostbite.zip](src/frostbite.zip)
+
+🔗 [game](../game.md), [frostbite](../frostbite.md)
+
+
+Reference: [github.com](https://github.com/FellippeHeitor/frostbite)
diff --git a/samples/frostbite/src/frostbite.bas b/samples/frostbite/src/frostbite.bas
new file mode 100644
index 00000000..86670f68
--- /dev/null
+++ b/samples/frostbite/src/frostbite.bas
@@ -0,0 +1,3220 @@
+'Frosbite Tribute
+'A clone of Frostbite for the Atari 2600, originally designed
+'by Steve Cartwright and published by Activision in 1983.
+'
+'Fellippe Heitor / @FellippeHeitor / fellippeheitor@gmail.com
+'
+' - Beta 1: (November 30th, 2015)
+' - Screen layout, with aurora and logo on the bottom.
+' - Ripped hero sprites from youtube gameplays.
+' - Can move around, jump up and down. Still walks on
+' water, though.
+'
+' - Beta 2: (December 1st, 2015)
+' - Primitive ice blocks are around, and our hero moves
+' along with them.
+' - Blocks are mirrored on the other side when they go
+' offscreen. However, until they are reset on screen,
+' the mirrored blocks aren't "seen" by the code, yet.
+' - Very basic detection of landing safely, to see if
+' the hero will drown.
+' - Drowning/losing lives.
+' - Scores for ice blocks the hero steps on.
+'
+' - Beta 3: (December 2nd, 2015)
+' - Ripped audio effects. Not required for gameplay, though.
+' - Added a .MirroredPosition variable to IceRows, which
+' now allows the hero to step on any ice block he sees
+' fit.
+' - When temperature reaches 0 degrees, hero loses a life by
+' freezing to death.
+' - Moved drawing routines to subprocedures, to make reading
+' easier.
+'
+' - Beta 4: (December 3rd 2015)
+' - More code beautification.
+' - Spritesheet no longer necessary; sprites are now created
+' on the fly with pixel data READ from DATA statements
+' (I decided to do so after seeing some code from TrialAndTerror).
+' - WE NOW HAVE AN IGLOO!! With every ice block the Hero steps on
+' a new block is placed on his brand new igloo. After the igloo
+' is finished (that's when the door is placed = 16 ice blocks)
+' the Hero must enter the igloo to end the level.
+' - You can use SPACEBAR to change ice blocks direction, however
+' that'll cost you a piece of your igloo.
+' - Upon entering the igloo, the level is complete. Scores are then
+' calculated. New sound effects are used for that.
+'
+' - Beta 5: (December 8th, 2015)
+' - Fixed: Temperature timer wasn't reset after setting a new level.
+' - Added: Different block types: DOUBLEBLOCK and MOVINGBLOCK, which can
+' be seen from level 2 onward.
+' - Improved aurora simulation, to better mimick the original game.
+' - Ice blocks now look more like in the original game.
+' - Creatures (fish, birds, crabs and clams) came to life and the
+' hero must now avoid them, except for fish. Fish are good.
+'
+' - Beta 6 (July 24th, 2016)
+' - Fixed a bug that caused the hero to have infinite lives (thanks
+' to Luke for pointing that out).
+' - Hero earns an extra life every 5,000 points. Lives don't go
+' past a total of 9, for reasons of ATARI. :-)
+' - Fixed: Ice row widths were being wrongly calculated for DOUBLEBLOCK
+' and MOVINGBLOCK.
+' - There is now a day and a night. When the night falls and the Hero
+' finishes building a block, there'll be the flickering of a light
+' source coming from inside the igloo.
+' - Sound files have been embedded into the code, so that they are
+' saved to disk every time the game is run. No more having to
+' download separate files (code adapted from Dav's Qbasic Site,
+' as seen here: http://www.qbasicnews.com/dav/files/basfile.bas)
+' - Aquatic creatures now actually enter the water.
+'
+'Intended:
+' - Fix random level features after level 9 (must be randomized only
+' after a new level is set.
+' - Fix bad guys inverting ice row direction when the hero is almost
+' falling off (which makes it take much longer for death)
+' - Add a bear.
+' - Add CRABs and CLAMs
+' - Make creatures faster than ice rows.
+' - Add crabs/clams paused movement
+' - Make constant speed increase.
+'
+$Resize:Smooth
+
+$Let INTERNALBUILD = FALSE
+
+'Game constants: --------------------------------------------------------------
+Const True = -1
+Const False = Not True
+
+'Block types
+Const SINGLEBLOCK = 1
+Const DOUBLEBLOCK = 2
+Const MOVINGBLOCK = 3
+
+'Directions
+Const MOVINGLEFT = -1
+Const MOVINGRIGHT = 1
+Const STOPPED = 0
+
+'Actions
+Const WALKING = 1
+Const JUMPINGUP = 2
+Const JUMPINGDOWN = 3
+Const FREEZING = 4
+Const DROWNING = 5
+Const ENTERINGIGLOO = 6
+Const EATINGFISH = 7
+
+'Light conditions/Palette selection
+Const DAY = 1
+Const NIGHT = 2
+
+Const GROUND = 1
+Const SKY = 2
+Const BEAR = 3
+
+'Creatures
+Const BIRD = 1
+Const FISH = 2
+Const CRAB = 4
+Const CLAM = 8
+
+'Colors
+Const UnsteppedBlockColor = _RGB32(208, 208, 208)
+Const SteppedBlockColor = _RGB32(73, 134, 213)
+Const IglooBlockColor = _RGB32(136, 136, 136)
+Const LightInsideColor = _RGB32(217, 134, 69)
+
+'Misc:
+Const GAMESTART = -1
+Const NEXTLEVEL = 0
+
+Const ONEUPGOAL = 5000
+
+Const FIRST = 48
+Const SECOND = 12
+Const THIRD = 3
+
+Const HeroStartRow = 95
+Const HeroHeight = 36
+Const HeroWidth = 30
+Const DoorX = 276
+Const MaxSpaceBetween = 15
+
+Const InitialTemperature = 45
+
+'Type definitions: ------------------------------------------------------------
+Type RowInfo
+ Position As Integer
+ MirroredPosition As Integer
+ Direction As Integer
+ State As _Byte ' True when row has been stepped on
+End Type
+
+Type CreaturesInfo
+ Species As Integer
+ X As Integer
+ Y As Single
+ Direction As Integer
+ Number As Integer
+ Spacing As Integer
+ RowWidth As Integer
+ State As _Byte 'Indicates fish in row (11) or fish eaten (00) as in &B110011 = fish, no fish, fish
+ Frame As _Byte
+End Type
+
+Type HeroInfo
+ CurrentRow As Integer
+ X As Integer
+ Y As Integer
+ Direction As Integer
+ Face As Integer
+ Action As Integer
+ Grabbed As _Byte
+ Frame As _Byte
+End Type
+
+Type LevelInfo
+ Speed As Single
+ BlockType As _Byte
+ CreaturesAllowed As _Byte
+End Type
+
+'Game variables: --------------------------------------------------------------
+Dim Shared ActualLevel As Integer
+Dim Shared AnimationStep As Integer
+Dim Shared Aurora(1 To 7) As Long
+Dim Shared AuroraH As Integer
+Dim Shared IceRows(1 To 4) As Integer
+Dim Shared Creatures(1 To 4) As CreaturesInfo
+Dim Shared CreatureSprite As Long
+Dim Shared CreatureWidth(1 To 8) As Integer
+Dim Shared CreditsBarH As Integer
+Dim Shared CreditsIMG As Long, CreditY As Integer
+Dim Shared FishPoints As Integer
+Dim Shared FishSprites(1 To 2) As Long
+Dim Shared FramesTimer As Integer
+Dim Shared GameBG As Long
+Dim Shared GameOver As _Bit
+Dim Shared GameScreen As Long
+Dim Shared GroundH As Integer
+Dim Shared Hero As HeroInfo
+Dim Shared HeroFreezingSprite As Long
+Dim Shared HeroSprites(1 To 4) As Long
+Dim Shared BirdSprites(1 To 2) As Long
+Dim Shared IceRow(1 To 4) As RowInfo
+Dim Shared IglooPieces As Integer
+Dim Shared InGame As _Byte
+Dim Shared JustLanded As _Bit
+Dim Shared LevelComplete As _Bit
+Dim Shared Lives As Integer
+Dim Shared MainScreen As Long
+Dim Shared MaxLevelCreatures As Integer
+Dim Shared NextGoal As Long
+Dim Shared NewLevelSet As Single
+Dim Shared PointsInThisLevel As Integer
+Dim Shared RestoreRowsTimer As Single
+Dim Shared RowWidth As Single
+Dim Shared Safe As Single
+Dim Shared SceneryPalette(1 To 2, 1 To 3) As Long
+Dim Shared Score As Long
+Dim Shared SkyH As Integer
+Dim Shared SpaceBetween As Single
+Dim Shared Temperature As Integer
+Dim Shared TempTimer As Integer
+Dim Shared TimeOfDay As Integer
+Dim Shared ThisAurora As Long
+Dim Shared ThisLevel As Integer
+Dim Shared ThisRowColor As Long
+Dim Shared UserWantsToQuit As _Byte
+Dim Shared WaterH As Integer
+
+ReDim Shared Levels(0) As LevelInfo
+ReDim Shared ThisLevelCreatures(0) As Integer
+
+Dim i As Long
+
+'Variables to hold sounds:
+Dim Shared JumpSound As Long
+Dim Shared BlockSound As Long
+Dim Shared DrowningSound As Long
+Dim Shared IglooBlockCountSound As Long
+Dim Shared ScoreCountSound As Long
+Dim Shared CollectFishSound As Long
+
+'For testing/debugging purposes
+$If INTERNALBUILD = TRUE Then
+ DIM SHARED Frames AS _UNSIGNED LONG
+ DIM SHARED RunStart AS DOUBLE
+ RunStart = TIMER
+$End If
+
+'Game setup: ------------------------------------------------------------------
+RestoreData
+SetLevel GAMESTART
+ScreenSetup
+LoadAssets
+SpritesSetup
+SetTimers
+NewLevelSet = 0
+
+'Main game loop: --------------------------------------------------------------
+Do
+ CalculateScores
+ NewLevelPause
+ ComposeScenery
+ DrawIgloo
+ MoveIceBlocks
+ MoveCreatures
+ MoveHero
+ CheckLanding
+ CheckCreatures
+
+ UpdateScreen
+
+ If LevelComplete And IglooPieces > 0 Then _Delay .108
+ If LevelComplete And IglooPieces = 0 And Temperature > 0 Then _Delay .05
+
+ ReadKeyboard
+ If Not LevelComplete Then _Delay .03
+Loop Until UserWantsToQuit
+System
+
+'Game data: -------------------------------------------------------------------
+AuroraPaletteDATA:
+Data 207,199,87
+Data 208,161,62
+Data 199,141,54
+Data 210,95,110
+Data 183,101,193
+Data 157,111,224
+Data 120,116,237
+
+SceneryPaletteDATA: 'Ground, sky and bear
+Data 192,192,192,74,74,74
+Data 23,68,185,0,36,149
+Data 111,111,111,214,214,214
+
+IceRowsDATA:
+Data 134,173,212,251
+
+CreaturesDATA:
+Data 30,30,30,30
+
+LevelsDATA:
+Data 4
+Data 1,1,1
+Data 1,2,3
+Data 1,3,7
+Data 1.5,3,15
+
+HeroPalette:
+'Total colors, color values (_UNSIGNED LONG)
+Data 5,0,4289225241,4291259443,4287072135,4288845861
+
+Hero1:
+Data 111111111111111111111111111111
+Data 111111111111111111111111111111
+Data 111122222222222111111111111111
+Data 111122222222222111111111111111
+Data 111122222222222222211111111111
+Data 111122222222222222211111111111
+Data 222222222222222222211111111111
+Data 222222222222222222211111111111
+Data 222222222222222222222222221111
+Data 222222222222222222222222221111
+Data 222222222222222222222222221111
+Data 222222222222222222222222221111
+Data 222222222222222222222222221111
+Data 111133333333333333333311111111
+Data 111133333333333333333311111111
+Data 111133333333333333333333331111
+Data 111133333333333333333333331111
+Data 111111113333333333333311111111
+Data 111111113333333333333311111111
+Data 111144444444444444444411111111
+Data 111144444444444444444411111111
+Data 111144411114444444444444441111
+Data 111144411114444444444444441111
+Data 111144411114444444444444441111
+Data 111144411111111444444444441111
+Data 111144444441111444444444441111
+Data 111144444441111111144444441111
+Data 111144444444444111144444441111
+Data 111144444444444111144444441111
+Data 111144444444444444444444441111
+Data 111111115555555111155555551111
+Data 111111115555555111155555551111
+Data 111111115555555111155555551111
+Data 111111115555555111155555551111
+Data 555555555555555555555555555555
+Data 555555555555555555555555555555
+
+Hero2:
+Data 111122222222222111111111111111
+Data 111122222222222111111111111111
+Data 111122222222222222111111111111
+Data 111122222222222222111111111111
+Data 222222222222222222111111111111
+Data 222222222222222222111111111111
+Data 222222222222222222222222221111
+Data 222222222222222222222222221111
+Data 222222222222222222222222221111
+Data 222222222222222222222222221111
+Data 222222222222222222222222221111
+Data 111133333333333333333311111111
+Data 111133333333333333333311111111
+Data 111133333333333333333333331111
+Data 111133333333333333333333331111
+Data 111111133333333333333311111111
+Data 111111133333333333333311111111
+Data 111144444444444444444411111111
+Data 111144444444444444444411111111
+Data 111144411114444444444444441111
+Data 111144411114444444444444441111
+Data 111144411111111444444444441111
+Data 111144411111111444444444441111
+Data 111144444444441111444444441111
+Data 111144444444441111444444441111
+Data 111144444444444444444444441111
+Data 111144444444444444444444441111
+Data 111144444444444444444444441111
+Data 111111111115555555555511111111
+Data 111111111115555555555511111111
+Data 111111111115555555555511111111
+Data 111111111115555555555511111111
+Data 111111111115555555555511111111
+Data 111111111115555555555511111111
+Data 555555555555555555555555555555
+Data 555555555555555555555555555555
+
+Hero3:
+Data 111112222222222211111111111111
+Data 111112222222222211111111111111
+Data 111112222222222222221111111111
+Data 111112222222222222221111111111
+Data 122222222222222222221111111111
+Data 122222222222222222221111111111
+Data 122222222222222222222222222111
+Data 122222222222222222222222222111
+Data 122222222222222222222222222111
+Data 122222222222222222222222222111
+Data 133333333333333333333333333111
+Data 133333333333333333333333333111
+Data 111113333333333333333333333111
+Data 111113333333333333333333111111
+Data 111111113333333333333333111111
+Data 111114444444444444444444111111
+Data 111114444444444444444444111111
+Data 111114444111444444444444444411
+Data 111114444111444444444444444411
+Data 111114444111111111111111444411
+Data 111114444111111111111111444411
+Data 111114444444444444444444444411
+Data 111114444444444444444444444411
+Data 111114444444444444444444444411
+Data 111114444444444444444444444411
+Data 111111111111555551115555111111
+Data 111115555555555555555555555511
+Data 111115555555555555555555555511
+Data 111115555555555555555555555511
+Data 111111111111111111111111111111
+Data 111111111111111111111111111111
+Data 111111111111111111111111111111
+Data 111111111111111111111111111111
+Data 111111111111111111111111111111
+Data 111111111111111111111111111111
+Data 111111111111111111111111111111
+
+Hero4:
+Data 111111111111111111111111111111
+Data 111111111111111111111111111111
+Data 111111111111222222111111111111
+Data 111111111222222222222111111111
+Data 111111111222222222222111111111
+Data 111111111222222222222111111111
+Data 111111111222222222222111111111
+Data 111111111222222222222111111111
+Data 111222222222222222222222221111
+Data 111222222222222222222222221111
+Data 111222222222222222222222221111
+Data 111222222222222222222222221111
+Data 111222222222222222222222221111
+Data 111111333333333333333331111111
+Data 111111333333333333333331111111
+Data 111111333333333333333331111111
+Data 111111333333333333333331111111
+Data 111111333333111113333331111111
+Data 111111333333111113333331111111
+Data 111111333333333333333334441111
+Data 111111111444444444444114441111
+Data 111114444444444444444114441111
+Data 111444444444111444444114441111
+Data 111444444444111444444444441111
+Data 111444444444444444444444441111
+Data 111444444444444444444444441111
+Data 111444111444444444444444441111
+Data 111444111444111444444441111111
+Data 111444111444111444444441111111
+Data 111444111444444444444441111111
+Data 111111111555555555555111111111
+Data 111111111555555555555111111111
+Data 111111111555555555555111111111
+Data 111111111555111115555111111111
+Data 111555555555555555555555551111
+Data 111555555555555555555555551111
+
+BirdPalette:
+Data 2,0,4286877948
+
+Bird1:
+Data 111111111111111111111111111111
+Data 111111111111111111111122211111
+Data 111111111111111111111122211111
+Data 111111111111111111222222222211
+Data 111111111111111111222222222211
+Data 122222222222222222222211111111
+Data 122222222222222222222211111111
+Data 111122222222222222111111111111
+Data 111111122222222222111111111111
+Data 111111122222221111111111111111
+Data 111122222222221111111111111111
+Data 111122222221111111111111111111
+Data 122222222221111111111111111111
+Data 122222221111111111111111111111
+Data 122222221111111111111111111111
+
+Bird2:
+Data 111111111111111111111111111111
+Data 122222222222111111112222111111
+Data 122222222222111111112222111111
+Data 111111111222222211112222222211
+Data 111111111222222211112222222211
+Data 111111111222222211112222222211
+Data 122222222222222222222222111111
+Data 122222222222222222222222111111
+Data 111112222222222222221111111111
+Data 111112222222222222221111111111
+Data 111112222222222222221111111111
+Data 111111111222222211111111111111
+Data 111111111222222211111111111111
+Data 111112222111111111111111111111
+Data 111112222111111111111111111111
+
+FishPalette:
+Data 2,0,4285518447
+
+Fish1:
+Data 111111111111111111111111111111
+Data 111111111111111111111111111111
+Data 122221111122222222221111111111
+Data 122221111122222222221111111111
+Data 122222221111122222222221111111
+Data 122222222222222222222222221111
+Data 111122222222222222221122221111
+Data 111111112222222222222222221111
+Data 111111112222222222222222221111
+Data 111111112222222222222222221111
+Data 111122222222222222222221111111
+Data 122222222222222222222222221111
+Data 122222221111122222222222221111
+Data 122221111122222222221111111111
+Data 122221111122222222221111111111
+
+Fish2:
+Data 111111111111111111111111111111
+Data 111111111111111111111111111111
+Data 111111111111122222111111111111
+Data 111111111111122222111111111111
+Data 222222211122222222222211111111
+Data 222222222222222222222222211111
+Data 222222222222222222111222211111
+Data 111111222222222222222222211111
+Data 111111222222222222222222211111
+Data 111111222222222222222222211111
+Data 222222222222222222222222211111
+Data 222222222222222222222222211111
+Data 222222211122222222222211111111
+Data 111111111111122222111111111111
+Data 111111111111122222111111111111
+
+'------------------------------------------------------------------------------
+'Subprocedures start here:
+'------------------------------------------------------------------------------
+Sub NewLevelPause
+ If InGame Then Exit Sub
+ If NewLevelSet <> 0 Then
+ If Timer - NewLevelSet > 1 Then
+ InGame = True
+ Timer(TempTimer) On
+ NewLevelSet = 0
+ End If
+ End If
+End Sub
+
+'------------------------------------------------------------------------------
+Sub ComposeScenery
+ Static TemperatureBlink As Integer
+
+ 'Game layers: Background, Aurora, Credits (bottom line)
+ _PutImage , GameBG, GameScreen
+ _PutImage (0, SkyH - AuroraH / 2), ThisAurora, GameScreen
+ _PutImage (0, _Height(GameScreen) - CreditsBarH), CreditsIMG, GameScreen, (0, CreditY)-Step(_Width(CreditsIMG), CreditsBarH)
+
+ 'Score, temperature and lives:
+ Color _RGB32(126, 148, 254), _RGBA32(0, 0, 0, 0)
+ _PrintString (72 - (Len(TRIM$(Score)) * _FontWidth), 2), TRIM$(Score)
+
+ Select Case Temperature
+ Case 1 TO 5
+ TemperatureBlink = TemperatureBlink + 1
+ Select Case TemperatureBlink
+ Case 7 TO 14
+ If Not LevelComplete And Not GameOver Then
+ Color _RGBA32(0, 0, 0, 0), _RGBA32(0, 0, 0, 0)
+ End If
+ Case 15
+ TemperatureBlink = 0
+ End Select
+ Case Else
+ TemperatureBlink = 0
+ End Select
+ _PrintString (40 - (Len(TRIM$(Temperature)) * _FontWidth), 14), TRIM$(Temperature) + Chr$(248)
+
+ If Lives > 0 Then _PrintString (72 - (Len(TRIM$(Lives)) * _FontWidth), 14), TRIM$(Lives)
+
+ '$IF INTERNALBUILD = TRUE THEN
+ ' 'Variable watch on screen, for debugging purposes:
+ ' COLOR _RGB32(0, 0, 0), _RGBA32(255, 255, 255, 200)
+ ' i = 0
+ ' crd$ = "Frames=" + TRIM$(Frames) + " FPS=" + TRIM$(_CEIL(Frames / (TIMER - RunStart))): _PRINTSTRING (_WIDTH - (LEN(crd$) * _FONTWIDTH), i), crd$
+
+ ' i = i + 8
+ ' crd$ = "ThisLevel=" + TRIM$(ThisLevel): _PRINTSTRING (_WIDTH - (LEN(crd$) * _FONTWIDTH), i), crd$
+
+ ' i = i + 8
+ ' crd$ = "ActualLevel=" + TRIM$(ActualLevel): _PRINTSTRING (_WIDTH - (LEN(crd$) * _FONTWIDTH), i), crd$
+
+ ' i = i + 8
+ ' crd$ = "PointsInThisLevel=" + TRIM$(PointsInThisLevel): _PRINTSTRING (_WIDTH - (LEN(crd$) * _FONTWIDTH), i), crd$
+
+ ' 'FOR j = 1 TO 4
+ ' ' i = i + 8
+ ' ' crd$ = "Creatures(" + TRIM$(j) + ").species=" + TRIM$(Creatures(j).Species): _PRINTSTRING (_WIDTH - (LEN(crd$) * _FONTWIDTH), i), crd$
+ ' 'NEXT j
+ '$END IF
+
+End Sub
+
+'------------------------------------------------------------------------------
+Sub DrawIgloo
+ Dim IglooBlink As _Bit
+ Dim IglooDoorColor As _Unsigned Long
+
+ If IglooPieces = 0 Then Exit Sub
+
+ Select EveryCase IglooPieces
+ Case Is > 0
+ Line (232, 57)-Step(32, -9), IglooBlockColor, BF
+ Case Is > 1
+ Line (264, 57)-Step(32, -9), IglooBlockColor, BF
+ Case Is > 2
+ Line (296, 57)-Step(32, -9), IglooBlockColor, BF
+ Case Is > 3
+ Line (328, 57)-Step(32, -9), IglooBlockColor, BF
+ Case Is > 4
+ Line (328, 48)-Step(32, -9), IglooBlockColor, BF
+ Case Is > 5
+ Line (296, 48)-Step(32, -9), IglooBlockColor, BF
+ Case Is > 6
+ Line (264, 48)-Step(32, -9), IglooBlockColor, BF
+ Case Is > 7
+ Line (232, 48)-Step(32, -9), IglooBlockColor, BF
+ Case Is > 8
+ Line (232, 39)-Step(32, -9), IglooBlockColor, BF
+ Case Is > 9
+ Line (264, 39)-Step(32, -9), IglooBlockColor, BF
+ Case Is > 10
+ Line (296, 39)-Step(32, -9), IglooBlockColor, BF
+ Case Is > 11
+ Line (328, 39)-Step(32, -9), IglooBlockColor, BF
+ Case Is > 12
+ Line (248, 31)-Step(49, -9), IglooBlockColor, BF
+ Case Is > 13
+ Line (297, 31)-Step(49, -9), IglooBlockColor, BF
+ Case Is > 14
+ Line (265, 25)-Step(65, -9), IglooBlockColor, BF
+ Case Is > 15
+ IglooDoorColor = _RGB32(0, 0, 0)
+ If TimeOfDay = NIGHT Then
+ Randomize Timer
+ IglooBlink = _Ceil(Rnd * 2) - 2
+ If IglooBlink Then
+ IglooDoorColor = LightInsideColor
+ End If
+ End If
+ Line (276, 57)-Step(35, -16), IglooDoorColor, BF
+ Line (281, 43)-Step(25, -5), IglooDoorColor, BF
+ End Select
+End Sub
+
+'------------------------------------------------------------------------------
+Sub MoveIceBlocks
+ Dim i As Integer
+ Dim j As Integer
+ Dim x As Integer
+ Dim x.m As Integer
+ Dim BlockLines As Integer
+
+ 'Ice blocks:
+ For i = 1 To 4
+ If Not IceRow(i).State Then ThisRowColor = UnsteppedBlockColor Else ThisRowColor = SteppedBlockColor
+
+ If InGame And Hero.Action <> DROWNING And Hero.Action <> FREEZING And Hero.Action <> EATINGFISH And Not LevelComplete Then
+ IceRow(i).Position = IceRow(i).Position + Levels(PointsInThisLevel).Speed * IceRow(i).Direction
+ If IceRow(i).Direction = MOVINGRIGHT Then
+ If IceRow(i).Position >= _Width(GameScreen) Then
+ IceRow(i).Position = 0
+ IceRow(i).MirroredPosition = 0
+ End If
+ End If
+ If IceRow(i).Direction = MOVINGLEFT Then
+ If IceRow(i).Position < -RowWidth Then
+ IceRow(i).Position = _Width(GameScreen) - 1 - RowWidth
+ IceRow(i).MirroredPosition = 0
+ End If
+ End If
+ End If
+
+ x = IceRow(i).Position
+
+ Select Case Levels(ActualLevel).BlockType
+ Case SINGLEBLOCK
+ 'Draw normal blocks
+ For j = -8 To 8
+ BlockLines = j + _Ceil(Rnd(j) * 6)
+ Line (x + BlockLines, IceRows(i) - j)-Step(HeroWidth * 2, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 3.5, IceRows(i) - j)-Step(HeroWidth * 2, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 7, IceRows(i) - j)-Step(HeroWidth * 2, 0), ThisRowColor
+ Next j
+
+ If IceRow(i).Direction = MOVINGLEFT Then
+ If IceRow(i).Position < 0 Then
+ IceRow(i).MirroredPosition = _Width(GameScreen) + IceRow(i).Position
+ End If
+ Else
+ If IceRow(i).Position + HeroWidth * 7 + HeroWidth * 2 > _Width(GameScreen) Then
+ IceRow(i).MirroredPosition = -_Width(GameScreen) + IceRow(i).Position
+ End If
+ End If
+
+ 'Draw mirrored blocks
+ If IceRow(i).MirroredPosition Then
+ x = IceRow(i).MirroredPosition
+ For j = -8 To 8
+ BlockLines = j + _Ceil(Rnd(j) * 6)
+ Line (x + BlockLines, IceRows(i) - j)-Step(HeroWidth * 2, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 3.5, IceRows(i) - j)-Step(HeroWidth * 2, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 7, IceRows(i) - j)-Step(HeroWidth * 2, 0), ThisRowColor
+ Next j
+ End If
+ Case DOUBLEBLOCK
+ 'Draw normal blocks
+ For j = -8 To 8
+ BlockLines = j + _Ceil(Rnd(j) * 6)
+ Line (x + BlockLines, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 1.5, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 3, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 4.5, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 6, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 7.5, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Next j
+
+ If IceRow(i).Direction = MOVINGLEFT Then
+ If IceRow(i).Position < 0 Then
+ IceRow(i).MirroredPosition = _Width(GameScreen) + IceRow(i).Position
+ End If
+ Else
+ If IceRow(i).Position + HeroWidth * 7 + HeroWidth * 2 > _Width(GameScreen) Then
+ IceRow(i).MirroredPosition = -_Width(GameScreen) + IceRow(i).Position
+ End If
+ End If
+
+ 'Draw mirrored blocks
+ If IceRow(i).MirroredPosition Then
+ x = IceRow(i).MirroredPosition
+ For j = -8 To 8
+ BlockLines = j + _Ceil(Rnd(j) * 6)
+ Line (x + BlockLines, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 1.5, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 3, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 4.5, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 6, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 7.5, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Next j
+ End If
+ Case MOVINGBLOCK
+ 'Draw normal blocks
+ For j = -8 To 8
+ BlockLines = j + _Ceil(Rnd(j) * 6)
+ Line (x + BlockLines + SpaceBetween, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 1.5 - SpaceBetween, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 3 + SpaceBetween, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 4.5 - SpaceBetween, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 6 + SpaceBetween, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 7.5 - SpaceBetween, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Next j
+
+ If IceRow(i).Direction = MOVINGLEFT Then
+ If IceRow(i).Position < 0 Then
+ IceRow(i).MirroredPosition = _Width(GameScreen) + IceRow(i).Position
+ End If
+ Else
+ If IceRow(i).Position + HeroWidth * 7 + HeroWidth * 2 > _Width(GameScreen) Then
+ IceRow(i).MirroredPosition = -_Width(GameScreen) + IceRow(i).Position
+ End If
+ End If
+
+ 'Draw mirrored blocks
+ If IceRow(i).MirroredPosition Then
+ x = IceRow(i).MirroredPosition
+ For j = -8 To 8
+ BlockLines = j + _Ceil(Rnd(j) * 6)
+ Line (x + BlockLines + SpaceBetween, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 1.5 - SpaceBetween, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 3 + SpaceBetween, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 4.5 - SpaceBetween, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 6 + SpaceBetween, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Line (x + BlockLines + HeroWidth * 7.5 - SpaceBetween, IceRows(i) - j)-Step(HeroWidth, 0), ThisRowColor
+ Next j
+ End If
+ End Select
+ Next i
+End Sub
+
+'------------------------------------------------------------------------------
+Sub MoveCreatures
+ Dim i As Integer
+ Dim X As Integer
+ Static Floating As Single
+ Static FloatStep As Single
+
+ If Not InGame Then Exit Sub
+
+ If FloatStep = 0 Then FloatStep = .1
+
+ 'Four rows of creatures:
+ For i = 1 To 4
+ If Hero.Action <> DROWNING And Hero.Action <> FREEZING And Hero.Action <> EATINGFISH And Not LevelComplete Then
+ If Hero.Grabbed And i = Hero.CurrentRow Then
+ If Creatures(i).Direction = MOVINGRIGHT Then
+ If Creatures(i).X < _Width(GameScreen) - CreatureWidth(Creatures(i).Species) Then
+ Creatures(i).X = Creatures(i).X + (Levels(PointsInThisLevel).Speed * Creatures(i).Direction) + Creatures(i).Direction
+ End If
+ ElseIf Creatures(i).Direction = MOVINGLEFT Then
+ If Creatures(i).X > 0 Then
+ Creatures(i).X = Creatures(i).X + (Levels(PointsInThisLevel).Speed * Creatures(i).Direction) + Creatures(i).Direction
+ End If
+ End If
+ Else
+ Creatures(i).X = Creatures(i).X + (Levels(PointsInThisLevel).Speed * Creatures(i).Direction) + Creatures(i).Direction
+ End If
+
+ Floating = Floating + FloatStep
+ If Floating > HeroHeight / 4 Then FloatStep = -.1
+ If Floating <= 0 Then FloatStep = .1
+
+ 'Birds fly linearly. Other creatures are in water, and so they float:
+ If Creatures(i).Species <> BIRD Then Creatures(i).Y = Creatures(i).Y + FloatStep
+
+ 'Once the creature row leaves screen, it is reset:
+ If Creatures(i).Direction = MOVINGRIGHT Then
+ If Creatures(i).X >= _Width(GameScreen) Then
+ Creatures(i).Species = 0
+ End If
+ End If
+ If Creatures(i).Direction = MOVINGLEFT Then
+ If Creatures(i).X < -Creatures(i).RowWidth Then
+ Creatures(i).Species = 0
+ End If
+ End If
+ End If
+
+ 'if a creature has not yet been set (or just been cleared) for this row,
+ 'we'll generate a new one:
+ If Creatures(i).Species = 0 Then MakeCreature i
+
+ X = Creatures(i).X
+
+ 'IF X < -Creatures(i).RowWidth THEN EXIT SUB
+
+ Select Case Creatures(i).Species
+ Case BIRD: CreatureSprite = BirdSprites(Creatures(i).Frame)
+ Case FISH: CreatureSprite = FishSprites(Creatures(i).Frame)
+ Case CRAB: CreatureSprite = 0: text$ = "CRAB"
+ Case CLAM: CreatureSprite = 0: text$ = "CLAM"
+ End Select
+
+ 'First creature in row is always drawn at the same position:
+ If Creatures(i).State And FIRST Then
+ If CreatureSprite < -1 Then
+ If Creatures(i).Direction = MOVINGRIGHT Then
+ _PutImage (X, Creatures(i).Y), CreatureSprite, GameScreen, (0, IIF(Creatures(i).Species <> BIRD, -Floating, 0))-Step(_Width(CreatureSprite), _Height(CreatureSprite))
+ Else
+ _PutImage (X + CreatureWidth(Creatures(i).Species), Creatures(i).Y)-Step(-CreatureWidth(Creatures(i).Species) - 1, _Height(CreatureSprite) - 1), CreatureSprite, GameScreen, (0, IIF(Creatures(i).Species <> BIRD, -Floating, 0))-Step(_Width(CreatureSprite), _Height(CreatureSprite))
+ End If
+ Else
+ Line (X, Creatures(i).Y)-Step(CreatureWidth(Creatures(i).Species), 8), _RGB32(255, 0, 0), BF
+ _PrintString (X, Creatures(i).Y), text$
+ End If
+ End If
+
+ 'Second creature in row (position will be affected by Creatures().Spacing):
+ If Creatures(i).Number > 1 And (Creatures(i).State And SECOND) Then
+ If CreatureSprite < -1 Then
+ If Creatures(i).Direction = MOVINGRIGHT Then
+ _PutImage (X + CreatureWidth(Creatures(i).Species) + Creatures(i).Spacing, Creatures(i).Y), CreatureSprite, GameScreen, (0, IIF(Creatures(i).Species <> BIRD, -Floating, 0))-Step(_Width(CreatureSprite), _Height(CreatureSprite))
+ Else
+ _PutImage (X + CreatureWidth(Creatures(i).Species) + Creatures(i).Spacing + CreatureWidth(Creatures(i).Species), Creatures(i).Y)-Step(-CreatureWidth(Creatures(i).Species) - 1, _Height(CreatureSprite) - 1), CreatureSprite, GameScreen, (0, IIF(Creatures(i).Species <> BIRD, -Floating, 0))-Step(_Width(CreatureSprite), _Height(CreatureSprite))
+ End If
+ Else
+ Line (X + CreatureWidth(Creatures(i).Species) + Creatures(i).Spacing, Creatures(i).Y)-Step(CreatureWidth(Creatures(i).Species), 8), _RGB32(255, 0, 0), BF
+ _PrintString (X + CreatureWidth(Creatures(i).Species) + Creatures(i).Spacing, Creatures(i).Y), text$
+ End If
+ End If
+
+ 'Third creature in row (always at the same spot)
+ If Creatures(i).Number = 3 And (Creatures(i).State And THIRD) Then
+ If CreatureSprite < -1 Then
+ If Creatures(i).Direction = MOVINGRIGHT Then
+ _PutImage (X + CreatureWidth(Creatures(i).Species) * 2 + Creatures(i).Spacing * 2, Creatures(i).Y), CreatureSprite, GameScreen, (0, IIF(Creatures(i).Species <> BIRD, -Floating, 0))-Step(_Width(CreatureSprite), _Height(CreatureSprite))
+ Else
+ _PutImage (X + CreatureWidth(Creatures(i).Species) * 2 + Creatures(i).Spacing * 2 + CreatureWidth(Creatures(i).Species), Creatures(i).Y)-Step(-CreatureWidth(Creatures(i).Species) - 1, _Height(CreatureSprite) - 1), CreatureSprite, GameScreen, (0, IIF(Creatures(i).Species <> BIRD, -Floating, 0))-Step(_Width(CreatureSprite), _Height(CreatureSprite))
+ End If
+ Else
+ Line (X + CreatureWidth(Creatures(i).Species) * 2 + Creatures(i).Spacing * 2, Creatures(i).Y)-Step(CreatureWidth(Creatures(i).Species), 8), _RGB32(255, 0, 0), BF
+ _PrintString (X + CreatureWidth(Creatures(i).Species) * 2 + Creatures(i).Spacing * 2, Creatures(i).Y), text$
+ End If
+ End If
+ Next i
+End Sub
+
+'------------------------------------------------------------------------------
+Sub MakeCreature (RowNumber)
+ 'Randomly selects a new creature from the current level's array
+ Dim NewCreature As Integer
+
+ Randomize Timer
+ NewCreature = _Ceil(Rnd * MaxLevelCreatures)
+ Creatures(RowNumber).Species = ThisLevelCreatures(NewCreature)
+
+ Do
+ Creatures(RowNumber).Direction = Int(Rnd * 3) - 1
+ Loop While Creatures(RowNumber).Direction = 0
+
+ If ActualLevel <= 2 Then
+ Creatures(RowNumber).Number = ActualLevel
+ Else
+ Creatures(RowNumber).Number = _Ceil(Rnd * 3)
+ End If
+
+ Select Case Creatures(RowNumber).Number
+ Case 2: Creatures(RowNumber).Spacing = HeroWidth * 2.5
+ Case 3: Creatures(RowNumber).Spacing = HeroWidth * 1
+ End Select
+
+ Creatures(RowNumber).RowWidth = (Creatures(RowNumber).Spacing + CreatureWidth(Creatures(RowNumber).Species) * Creatures(RowNumber).Number)
+
+ Select Case Creatures(RowNumber).Direction
+ Case MOVINGRIGHT
+ Creatures(RowNumber).X = -Creatures(RowNumber).RowWidth - _Ceil(Rnd * 100)
+ Case MOVINGLEFT
+ Creatures(RowNumber).X = _Width(GameScreen) + _Ceil(Rnd * 100)
+ End Select
+
+ If Creatures(RowNumber).Species = BIRD Then
+ Creatures(RowNumber).Y = IceRows(RowNumber) - HeroHeight + 6
+ Else
+ Creatures(RowNumber).Y = IceRows(RowNumber) - HeroHeight + 6
+ End If
+
+ 'Make all creatures in row visible:
+ Creatures(RowNumber).State = 0 Xor FIRST Xor SECOND Xor THIRD
+ Creatures(RowNumber).Frame = 1
+End Sub
+
+'------------------------------------------------------------------------------
+Sub MoveHero
+ 'Hero:
+ If InGame Then
+
+ If Not Hero.Grabbed Then
+ Hero.X = Hero.X + Hero.Direction * 3
+ If Hero.CurrentRow > 0 And (Hero.Action = STOPPED Or Hero.Action = WALKING) Then
+ Hero.X = Hero.X + IceRow(Hero.CurrentRow).Direction * Levels(PointsInThisLevel).Speed
+ End If
+ Else
+ If (Hero.Action = STOPPED Or Hero.Action = WALKING) And Hero.Action <> EATINGFISH Then
+ Hero.X = Hero.X + Creatures(Hero.CurrentRow).Direction * Levels(PointsInThisLevel).Speed + Creatures(Hero.CurrentRow).Direction
+ End If
+ End If
+
+ 'Hero can't go past a certain point to the left of the screen if WALKING.
+ 'However, if he jumps from an ice block, he can stand there:
+ 'IF Hero.CurrentRow = 0 AND Hero.Action = WALKING AND Hero.Direction = MOVINGLEFT THEN
+ ' IF Hero.X > HeroWidth + 3 THEN
+ ' Hero.X = Hero.X + Hero.Direction * 3
+ ' END IF
+ 'ELSEIF Hero.CurrentRow = 0 AND Hero.Action = WALKING AND Hero.Direction = MOVINGRIGHT THEN
+ 'ELSEIF Hero.Action = JUMPINGUP OR Hero.Action = JUMPINGDOWN THEN
+ 'END IF
+
+ Select Case Hero.Action
+ Case JUMPINGUP
+ If Hero.CurrentRow = 0 Then Hero.Action = WALKING Else AnimationStep = AnimationStep + 1
+ Select Case AnimationStep
+ Case 1 TO 6
+ Hero.Y = Hero.Y - 8
+ Hero.Frame = 3
+ Case 10 TO 12
+ Hero.Y = Hero.Y + 3
+ Hero.Frame = 1
+ Case 13
+ Hero.CurrentRow = Hero.CurrentRow - 1
+ JustLanded = True
+ Hero.Action = STOPPED: Hero.Direction = Hero.Action
+ End Select
+ Case JUMPINGDOWN
+ If Hero.CurrentRow = 4 Then Hero.Action = WALKING Else AnimationStep = AnimationStep + 1
+ Select Case AnimationStep
+ Case 1 TO 3
+ Hero.Y = Hero.Y - 3
+ Hero.Frame = 3
+ Case 7 TO 12
+ Hero.Y = Hero.Y + 8
+ Hero.Frame = 1
+ Case 13
+ Hero.CurrentRow = Hero.CurrentRow + 1
+ JustLanded = True
+ Hero.Action = STOPPED: Hero.Direction = Hero.Action
+ End Select
+ Case ENTERINGIGLOO
+ AnimationStep = AnimationStep + 1
+ Select Case AnimationStep
+ Case 1 TO 6
+ Hero.Y = Hero.Y - 8
+ Hero.Frame = 3
+ _PutImage (Hero.X, Hero.Y - HeroHeight + AnimationStep)-Step(HeroWidth, HeroHeight - AnimationStep), HeroSprites(Hero.Frame), GameScreen, (0, 0 + AnimationStep * 6)-(HeroWidth, HeroHeight)
+ Case 20
+ LevelComplete = True
+ End Select
+ Case DROWNING
+ AnimationStep = AnimationStep + 1
+ Select Case AnimationStep
+ Case 1 TO 5, 11 TO 15, 21 TO 25, 30 TO 35
+ _PutImage (Hero.X, Hero.Y - HeroHeight + AnimationStep)-Step(HeroWidth, HeroHeight - AnimationStep), HeroSprites(Hero.Frame), GameScreen, (0, 0)-(HeroWidth, HeroHeight - AnimationStep)
+ Case 6 TO 10, 16 TO 20, 26 TO 29
+ _PutImage (Hero.X + HeroWidth, Hero.Y - HeroHeight + AnimationStep)-Step(-HeroWidth, HeroHeight - AnimationStep), HeroSprites(Hero.Frame), GameScreen, (0, 0)-(HeroWidth, HeroHeight - AnimationStep)
+ Case 36
+ If Lives <= -1 Then
+ GameOver = True
+ InGame = False
+ Else
+ Timer(TempTimer) On
+ SetLevel ThisLevel
+ End If
+ End Select
+ Case FREEZING
+ AnimationStep = AnimationStep + 1
+ 'Recolor the hero sprite to show it's freezing
+ _Dest HeroFreezingSprite
+ For i = 0 To _Width(HeroFreezingSprite) - 1
+ If AnimationStep >= _Height(HeroFreezingSprite) Then Exit For
+ If Point(i, AnimationStep) <> _RGBA32(0, 0, 0, 0) Then
+ PSet (i, AnimationStep), _RGB32(0, 150 - AnimationStep * 3, 219 + AnimationStep)
+ End If
+ Next i
+ _Dest GameScreen
+ Select Case AnimationStep
+ Case 1 TO 5, 11 TO 39
+ _PutImage (Hero.X, Hero.Y - HeroHeight)-Step(HeroWidth - 1, HeroHeight - 1), HeroFreezingSprite, GameScreen
+ Case 6 TO 10
+ _PutImage (Hero.X + HeroWidth, Hero.Y - HeroHeight)-Step(-HeroWidth - 1, HeroHeight - 1), HeroFreezingSprite, GameScreen
+ Case 40
+ _FreeImage HeroFreezingSprite
+ If Lives <= -1 Then
+ GameOver = True
+ InGame = False
+ Else
+ Temperature = InitialTemperature
+ Timer(TempTimer) On
+ SetLevel ThisLevel
+ End If
+ End Select
+ Case EATINGFISH
+ If FishPoints Then
+ Score = Score + 50
+ FishPoints = FishPoints - 50
+ Else
+ Hero.Action = STOPPED
+ End If
+ Case STOPPED
+ Hero.Frame = 1
+ End Select
+
+ If Hero.X + HeroWidth > _Width Then Hero.X = _Width - HeroWidth
+ If Hero.X < 0 Then Hero.X = 0
+ End If
+
+ Select Case Hero.Face
+ Case MOVINGRIGHT
+ _PutImage (Hero.X, Hero.Y - HeroHeight), HeroSprites(Hero.Frame), GameScreen
+ Case MOVINGLEFT
+ _PutImage (Hero.X + HeroWidth, Hero.Y - HeroHeight)-Step(-HeroWidth - 1, HeroHeight - 1), HeroSprites(Hero.Frame), GameScreen
+ End Select
+End Sub
+
+'------------------------------------------------------------------------------
+Sub CheckLanding
+ 'Check to see if the hero landed safely:
+ Dim i As Integer
+ Dim X As Integer
+ Dim m.X As Integer
+
+ If Hero.CurrentRow > 0 And (Hero.Action = STOPPED Or Hero.Action = WALKING) Then
+ Safe = False
+ X = IceRow(Hero.CurrentRow).Position
+ m.X = IceRow(Hero.CurrentRow).MirroredPosition
+ Select Case Levels(ActualLevel).BlockType
+ Case SINGLEBLOCK
+ If Hero.X + HeroWidth > X And Hero.X < X + HeroWidth * 2 Then
+ Safe = True
+ ElseIf m.X And Hero.X + HeroWidth > m.X And Hero.X < m.X + HeroWidth * 2 Then
+ Safe = True
+ ElseIf Hero.X + HeroWidth > X + HeroWidth * 3.5 And Hero.X < X + HeroWidth * 3.5 + HeroWidth * 2 Then
+ Safe = True
+ ElseIf m.X And Hero.X + HeroWidth > m.X + HeroWidth * 3.5 And Hero.X < m.X + HeroWidth * 3.5 + HeroWidth * 2 Then
+ Safe = True
+ ElseIf Hero.X + HeroWidth > X + HeroWidth * 7 And Hero.X < X + HeroWidth * 7 + HeroWidth * 2 Then
+ Safe = True
+ ElseIf m.X And Hero.X + HeroWidth > m.X + HeroWidth * 7 And Hero.X < m.X + HeroWidth * 7 + HeroWidth * 2 Then
+ Safe = True
+ End If
+ Case DOUBLEBLOCK
+ If Hero.X + HeroWidth > X And Hero.X < X + RowWidth Then
+ Safe = True
+ ElseIf m.X And Hero.X + HeroWidth > m.X And Hero.X < m.X + RowWidth Then
+ Safe = True
+ End If
+ Case MOVINGBLOCK
+ If Hero.X + HeroWidth > X + BlockLines + SpaceBetween And Hero.X < X + BlockLines + SpaceBetween + HeroWidth Then
+ Safe = True
+ ElseIf m.X And Hero.X + HeroWidth > m.X + BlockLines + SpaceBetween And Hero.X < m.X + BlockLines + SpaceBetween + HeroWidth Then
+ Safe = True
+ ElseIf Hero.X + HeroWidth > X + BlockLines + HeroWidth * 1.5 - SpaceBetween And Hero.X < X + BlockLines + HeroWidth * 1.5 - SpaceBetween + HeroWidth Then
+ Safe = True
+ ElseIf m.X And Hero.X + HeroWidth > m.X + BlockLines + HeroWidth * 1.5 - SpaceBetween And Hero.X < m.X + BlockLines + HeroWidth * 1.5 - SpaceBetween + HeroWidth Then
+ Safe = True
+ ElseIf Hero.X + HeroWidth > X + BlockLines + HeroWidth * 3 + SpaceBetween And Hero.X < X + BlockLines + HeroWidth * 3 + SpaceBetween + HeroWidth Then
+ Safe = True
+ ElseIf m.X And Hero.X + HeroWidth > m.X + BlockLines + HeroWidth * 3 + SpaceBetween And Hero.X < m.X + BlockLines + HeroWidth * 3 + SpaceBetween + HeroWidth Then
+ Safe = True
+ ElseIf Hero.X + HeroWidth > X + BlockLines + HeroWidth * 4.5 - SpaceBetween And Hero.X < X + BlockLines + HeroWidth * 4.5 - SpaceBetween + HeroWidth Then
+ Safe = True
+ ElseIf m.X And Hero.X + HeroWidth > m.X + BlockLines + HeroWidth * 4.5 - SpaceBetween And Hero.X < m.X + BlockLines + HeroWidth * 4.5 - SpaceBetween + HeroWidth Then
+ Safe = True
+ ElseIf Hero.X + HeroWidth > X + BlockLines + HeroWidth * 6 + SpaceBetween And Hero.X < X + BlockLines + HeroWidth * 6 + SpaceBetween + HeroWidth Then
+ Safe = True
+ ElseIf m.X And Hero.X + HeroWidth > m.X + BlockLines + HeroWidth * 6 + SpaceBetween And Hero.X < m.X + BlockLines + HeroWidth * 6 + SpaceBetween + HeroWidth Then
+ Safe = True
+ ElseIf Hero.X + HeroWidth > X + BlockLines + HeroWidth * 7.5 - SpaceBetween And Hero.X < X + BlockLines + HeroWidth * 7.5 - SpaceBetween + HeroWidth Then
+ Safe = True
+ ElseIf m.X And Hero.X + HeroWidth > m.X + BlockLines + HeroWidth * 7.5 - SpaceBetween And Hero.X < m.X + BlockLines + HeroWidth * 7.5 - SpaceBetween + HeroWidth Then
+ Safe = True
+ End If
+ End Select
+ If Safe Then
+ Safe = False
+ If IceRow(Hero.CurrentRow).State = False And JustLanded Then
+ JustLanded = False
+ If BlockSound Then _SndPlayCopy BlockSound
+ If IglooPieces < 16 Then IglooPieces = IglooPieces + 1
+ IceRow(Hero.CurrentRow).State = True
+ RestoreRowsTimer = Timer
+ Score = Score + PointsInThisLevel * 10
+ End If
+ Else
+ If Hero.Action <> DROWNING Then
+ If DrowningSound Then _SndPlayCopy DrowningSound
+ Timer(TempTimer) Off
+ Hero.Frame = 4
+ Hero.Action = DROWNING
+ Hero.Face = STOPPED
+ Hero.Direction = STOPPED
+ Lives = Lives - 1
+ AnimationStep = 0
+ End If
+ End If
+ End If
+End Sub
+
+'------------------------------------------------------------------------------
+Sub CheckCreatures
+ Dim i As Integer
+ Dim j As Integer
+ Dim X As Integer
+ Dim Touched As _Bit
+ Dim WhichCreature As _Byte
+ Dim EvalCreatures(1 To 3) As Integer
+
+ If Hero.Grabbed Or Hero.CurrentRow = 0 Or (Hero.Action = JUMPINGUP Or Hero.Action = JUMPINGDOWN Or Hero.Action = DROWNING Or Hero.Action = FREEZING) Then Exit Sub
+ i = Hero.CurrentRow
+
+ If Creatures(i).Species = 0 Then Exit Sub
+
+ X = Creatures(i).X
+
+ EvalCreatures(1) = Creatures(i).X
+ EvalCreatures(2) = X + CreatureWidth(Creatures(i).Species) + Creatures(i).Spacing
+ EvalCreatures(3) = X + CreatureWidth(Creatures(i).Species) * 2 + Creatures(i).Spacing * 2
+
+ 'Check for first creature in row, left to right:
+ If (Creatures(i).State And FIRST) And Hero.X + HeroWidth > EvalCreatures(1) And Hero.X < EvalCreatures(1) + CreatureWidth(Creatures(i).Species) Then
+ Touched = True
+ WhichCreature = FIRST
+ End If
+
+ 'Check for second creature in row, left to right:
+ If Creatures(i).Number > 1 Then
+ If (Creatures(i).State And SECOND) And Hero.X + HeroWidth > EvalCreatures(2) And Hero.X < EvalCreatures(2) + CreatureWidth(Creatures(i).Species) Then
+ Touched = True
+ WhichCreature = SECOND
+ End If
+ End If
+
+ 'Check for second creature in row, left to right:
+ If Creatures(i).Number = 3 Then
+ If (Creatures(i).State And THIRD) And Hero.X + HeroWidth > EvalCreatures(3) And Hero.X < EvalCreatures(3) + CreatureWidth(Creatures(i).Species) Then
+ Touched = True
+ WhichCreature = THIRD
+ End If
+ End If
+
+ If Touched Then
+ If Creatures(i).Species = FISH Then
+ Creatures(i).State = Creatures(i).State Xor WhichCreature
+ If Hero.Action <> EATINGFISH Then
+ If CollectFishSound Then _SndPlayCopy CollectFishSound
+ Hero.Frame = 1
+ Hero.Action = EATINGFISH
+ Hero.Direction = STOPPED
+ AnimationStep = 0
+ FishPoints = 200
+ End If
+ Else
+ Hero.Grabbed = True
+ If IceRow(i).Direction = Creatures(i).Direction Then
+ InvertCurrentIceRow
+ End If
+ End If
+ End If
+End Sub
+
+'------------------------------------------------------------------------------
+Sub UpdateScreen
+ _PutImage , GameScreen, MainScreen
+ _Display
+ $If INTERNALBUILD Then
+ Frames = Frames + 1
+ $End If
+End Sub
+
+'------------------------------------------------------------------------------
+Sub ReadKeyboard
+ Dim k As Integer
+
+ k = _KeyHit
+ Select Case k
+ Case Asc("s"), Asc("S")
+ $If INTERNALBUILD = TRUE Then
+ LevelComplete = True
+ $End If
+ Case 27
+ UserWantsToQuit = True
+ Case 13
+ If Not InGame Then
+ If GameOver Then
+ SetLevel GAMESTART
+ Else
+ NewLevelSet = 0
+ Timer(TempTimer) On
+ InGame = True
+ End If
+ GameOver = False
+ End If
+ Case 32
+ If Not Hero.Grabbed And Hero.CurrentRow > 0 And (Hero.Action = STOPPED Or Hero.Action = WALKING) And InGame Then
+ If IglooPieces > 0 Then
+ If IglooPieces < 16 Then IglooPieces = IglooPieces - 1
+ If BlockSound Then _SndPlayCopy BlockSound
+ InvertCurrentIceRow
+ End If
+ End If
+ End Select
+
+ 'Check if a movement must be processed:
+ If Not InGame Or Hero.Action = DROWNING Or Hero.Action = FREEZING Or Hero.Action = ENTERINGIGLOO Or Hero.Action = EATINGFISH Then Exit Sub
+
+ If Hero.Action = WALKING Then Hero.Action = STOPPED: Hero.Direction = Hero.Action
+
+ 'Is the left arrow key down?
+ If _KeyDown(19200) Then Hero.Direction = MOVINGLEFT: Hero.Face = Hero.Direction: If Hero.Action = STOPPED Then Hero.Action = WALKING
+
+ 'Is the right arrow key down?
+ If _KeyDown(19712) Then Hero.Direction = MOVINGRIGHT: Hero.Face = Hero.Direction: If Hero.Action = STOPPED Then Hero.Action = WALKING
+
+ 'If the hero has been grabbed by a creature, no jumps are allowed.
+ If Hero.Grabbed Then Exit Sub
+
+ 'If the hero is already jumping, we have to wait for him to land:
+ If Hero.Action <> STOPPED And Hero.Action <> WALKING Then Exit Sub
+
+ 'Is the up arrow key down?
+ If _KeyDown(18432) Then
+ If Hero.CurrentRow > 0 Then
+ Hero.Action = JUMPINGUP
+ AnimationStep = 0
+ If JumpSound Then _SndPlayCopy JumpSound
+ ElseIf Hero.CurrentRow = 0 And IglooPieces = 16 Then
+ 'The igloo has been finished. If the hero is standing under the door,
+ 'we'll let him in:
+ If Hero.X + HeroWidth > DoorX + 5 And Hero.X < DoorX + 17 Then
+ If JumpSound Then _SndPlayCopy JumpSound
+ Timer(TempTimer) Off
+ Hero.Action = ENTERINGIGLOO
+ Hero.Direction = STOPPED
+ Hero.Face = STOPPED
+ Hero.X = DoorX
+ AnimationStep = 0
+ End If
+ End If
+ End If
+
+ 'Is the down arrow key down?
+ If _KeyDown(20480) Then
+ If Hero.CurrentRow < 4 Then
+ Hero.Action = JUMPINGDOWN
+ AnimationStep = 0
+ If JumpSound Then _SndPlayCopy JumpSound
+ End If
+ End If
+End Sub
+
+'------------------------------------------------------------------------------
+Sub DecreaseTemperature
+ Temperature = Temperature - 1
+ If Temperature = 0 Then
+ If DrowningSound Then _SndPlayCopy DrowningSound
+ Timer(TempTimer) Off
+ HeroFreezingSprite = _CopyImage(HeroSprites(4))
+ _Source HeroFreezingSprite
+ Hero.Action = FREEZING
+ Hero.Face = STOPPED
+ Hero.Direction = STOPPED
+ Lives = Lives - 1
+ AnimationStep = 0
+ End If
+End Sub
+
+'------------------------------------------------------------------------------
+Function TRIM$ (Value)
+ TRIM$ = LTrim$(RTrim$(Str$(Value)))
+End Function
+
+'------------------------------------------------------------------------------
+Sub UpdateFrames
+ Dim PrevDest As Long
+ Dim i As _Byte
+ Dim AuroraLineColor As _Unsigned Long
+ Static AuroraCount As Integer
+ Static CreditCount As Integer
+ Static CreditUpdate As Integer
+ Static BlockCount As Single
+
+ AuroraCount = AuroraCount + 1
+ If AuroraCount > 3 Then
+ Randomize Timer
+ AuroraCount = 0
+ PrevDest = _Dest
+ _Dest ThisAurora
+ For i = 1 To AuroraH Step 2
+ Select Case i
+ Case 1 TO AuroraH / 3
+ AuroraLineColor = Aurora(_Ceil(Rnd * 3))
+ Case AuroraH / 3 + 1 TO (AuroraH / 3) + (AuroraH / 4)
+ AuroraLineColor = Aurora(_Ceil(Rnd * 3) + 3)
+ Case Else
+ AuroraLineColor = Aurora(_Ceil(Rnd * 2) + 5)
+ End Select
+ Line (0, 0)-Step(_Width(ThisAurora), AuroraH - i), AuroraLineColor, BF 'Aurora
+ Next i
+ _Dest PrevDest
+ End If
+
+ If Not InGame Then
+ CreditUpdate = CreditUpdate + 1
+ If CreditUpdate > 1 Then
+ CreditUpdate = 0
+ Select Case CreditY
+ Case -2
+ CreditCount = CreditCount + 1
+ If CreditCount > 10 Then
+ CreditCount = 0
+ CreditY = CreditY + 1
+ End If
+ Case -1 TO 16
+ CreditY = CreditY + 1
+ Case 17
+ CreditCount = CreditCount + 1
+ If CreditCount > 15 Then
+ CreditCount = 0
+ CreditY = -2
+ End If
+ End Select
+ End If
+ Else
+ CreditY = 17
+ End If
+
+ If Hero.Action = WALKING And InGame Then
+ If Hero.Frame = 1 Then Hero.Frame = 2 Else Hero.Frame = 1
+ End If
+
+ If InGame And Not LevelComplete And (Hero.Action <> DROWNING And Hero.Action <> FREEZING And Hero.Action <> EATINGFISH) Then
+ For i = 1 To 4
+ If Creatures(i).Frame = 1 Then Creatures(i).Frame = 2 Else Creatures(i).Frame = 1
+ Next i
+ End If
+
+ If IceRow(1).State And IceRow(2).State And IceRow(3).State And IceRow(4).State And IglooPieces < 16 Then
+ If Not LevelComplete Then
+ If Timer - RestoreRowsTimer > .3 Then
+ For i = 1 To 4
+ IceRow(i).State = False
+ Next i
+ End If
+ End If
+ End If
+
+ If InGame And Levels(ActualLevel).BlockType = MOVINGBLOCK And (Hero.Action <> DROWNING And Hero.Action <> FREEZING And Hero.Action <> EATINGFISH) And Not LevelComplete Then
+ BlockCount = BlockCount + .5
+ If BlockCount > MaxSpaceBetween Then BlockCount = -MaxSpaceBetween
+ Select Case BlockCount
+ Case -MaxSpaceBetween TO -1
+ SpaceBetween = Abs(BlockCount + 1)
+ Case 0 TO MaxSpaceBetween
+ SpaceBetween = BlockCount
+ End Select
+ End If
+End Sub
+
+'------------------------------------------------------------------------------
+Sub SetLevel (TargetLevel)
+ Dim CreatureCheck As Integer
+
+ Select Case TargetLevel
+ Case GAMESTART
+ LevelComplete = False
+ ThisLevel = 1
+ TimeOfDay = DAY
+ Lives = 3
+ Score = 0
+ Temperature = InitialTemperature
+ IglooPieces = 0
+ NextGoal = ONEUPGOAL
+ Case NEXTLEVEL
+ LevelComplete = False
+ ThisLevel = ThisLevel + 1
+ Temperature = InitialTemperature
+
+ If (ThisLevel - 1) Mod 4 = 0 Then
+ If TimeOfDay = DAY Then TimeOfDay = NIGHT Else TimeOfDay = DAY
+ DrawScenery
+ End If
+ End Select
+
+ 'Set hero's initial position and state:
+ Hero.CurrentRow = 0
+ Hero.X = 100
+ Hero.Y = HeroStartRow
+ Hero.Direction = STOPPED
+ Hero.Face = MOVINGRIGHT
+ Hero.Action = STOPPED
+ Hero.Frame = 1
+ Hero.Grabbed = False
+
+ 'Levels only have defined conditions up to level 9. After that, conditions are random.
+ ActualLevel = ThisLevel
+ PointsInThisLevel = ThisLevel
+ If ThisLevel > UBound(Levels) Then
+ Randomize Timer
+ ActualLevel = _Ceil(Rnd * UBound(Levels))
+ PointsInThisLevel = UBound(Levels)
+ End If
+
+ 'Erase existing creatures and fills an array with the ones allowed:
+ Erase Creatures
+ MaxLevelCreatures = 0
+ CreatureCheck = 1
+ Do
+ If Levels(ActualLevel).CreaturesAllowed And CreatureCheck Then
+ MaxLevelCreatures = MaxLevelCreatures + 1
+ ReDim _Preserve ThisLevelCreatures(1 To MaxLevelCreatures)
+ ThisLevelCreatures(MaxLevelCreatures) = CreatureCheck
+ End If
+ CreatureCheck = CreatureCheck * 2
+ If CreatureCheck > CLAM Then Exit Do
+ Loop
+
+ 'Set ice rows initial position and direction:
+ IceRow(1).Position = 90
+ IceRow(1).Direction = MOVINGLEFT
+ IceRow(2).Position = 10
+ IceRow(2).Direction = MOVINGRIGHT
+ IceRow(3).Position = 90
+ IceRow(3).Direction = MOVINGLEFT
+ IceRow(4).Position = 10
+ IceRow(4).Direction = MOVINGRIGHT
+
+ For I = 1 To 4
+ IceRow(I).MirroredPosition = 0
+ IceRow(I).State = False
+ Next I
+
+ Select Case Levels(ActualLevel).BlockType
+ Case SINGLEBLOCK: RowWidth = HeroWidth * 9
+ Case DOUBLEBLOCK, MOVINGBLOCK: RowWidth = HeroWidth * 8.5
+ End Select
+
+ NewLevelSet = Timer
+ InGame = False
+End Sub
+
+'------------------------------------------------------------------------------
+Sub LoadAssets
+ 'Saves sound files to disk, then loads them with _SNDOPEN:
+ 'jump.ogg
+ A$ = ""
+ A$ = A$ + "?MfIC1P00000000000P7[00000000PDQ:^L0N4PM_9WHY=7000002@4[0000"
+ A$ = A$ + "000004W00000000^1ldIW=50000000000000N\20040000`L`]TnB\cooooo"
+ A$ = A$ + "ooooooooooooooooA>PM_9WHY=g:0000HU6LXibCbM68\UVHFmVLRUfLPT48"
+ A$ = A$ + "b0C>Zi9YVciL66WhXLPVCJ>QcYPLPRA1N>98Lm"
+ A$ = A$ + "VYCjX>ZSjX>:d2]@;d2]B[4CaD]ESiJ_6d5OciL>"
+ A$ = A$ + "WciL>WciL>Wc98d@F500P00048T1I@642Q@85BQD8VRYH:W2bP8J2]VcgL>>XIiPV:5K>M`9BeVWTKZ"
+ A$ = A$ + "H^iL>WciLbVcI<>WciL::WIaPV9dJ>Wc9aPVU2JV@[iL>WW4KN@[Y:]VciL6"
+ A$ = A$ + "WcY36WAHL>WcY9]V7TJfH]iL>W5dJJ>ZiBaVciLRD^i9eV;EK>WciL>WciL>"
+ A$ = A$ + "WciL>WZGLjL`i4>WciLRJ_iJiV@GL>WciC6W^gL2QciL>WciL>WciL>WciL2"
+ A$ = A$ + "2=TE100@0001QQ=66gYPPdWS6865QHJ8Cj1M?j`TP63bY@Z7=jXA:UjP@9E6"
+ A$ = A$ + "WD:M22=TE100P00042QD85BQD85BQD85BQD86RQH86bYL:W2ZP:YBZX::Sb\"
+ A$ = A$ + "<;cb\<;cb\<[3k\>[3k`@<43a@[d:aB=EKeH=F[iN>W[iPdJUF[eJ]BYD:UB"
+ A$ = A$ + "YD:8d@F500P00048T1I@6TAQD85BQH8VbYL:W2ZP:P@3IE000800800000?9"
+ A$ = A$ + "?7A7A7A7A7A7A7A7A7A7?7?7A9A9A9A9A;C;C=C?EAEEGIGKIMIMKOKQMQMM"
+ A$ = A$ + "OOMOOOMSOMQQUUUUUUUUUUUUUUUUUUUUUUP@3IE0002000P@842QD85BQD8U"
+ A$ = A$ + "RaH<7ciP>9D212=TE100P00P00000LDLDLLTLTLTT\T\TdTd\d\ldldld4m4"
+ A$ = A$ + "555===E5M5M5e=]5U=U=M=M=U=MEUE]MUU]]U]e]mUU]mmmmmmmmmmmmmmmm"
+ A$ = A$ + "mmmee12=TE10P400P>B>B:B:B:B>>>>BBB0Q6bZ00@600@00PRRSRSSSSTTT"
+ A$ = A$ + "TTUTVTWUWUXVYVYWYWZX:@XQ\:00040040000000PRVRWRYRWRXRWSXSXTXU"
+ A$ = A$ + "YUXVZV[X\Y\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[;@"
+ A$ = A$ + "XQ\:00T000dAbAbAbABABABAbAb18d@F500b000200L:G>@B2BB`C3PSU5llPW6<=1hHI1??Xi1CC00"
+ A$ = A$ + "00000000000@bC3NN`c3VV0TdlPW7llPY900000000000008ii1??hi1CC0B"
+ A$ = A$ + "NN`c3NN`d40000000000000l<=QY94=QZ90?CCHJ2CCHZ200000000000000"
+ A$ = A$ + "000000000000000P000P1L0002`4:3DXQ\R00RC00LhX89100PSTTU5000:B"
+ A$ = A$ + "BFF000HIIii100PTUUW70000000000000000000000000000000000000000"
+ A$ = A$ + "00000000000000000000000000000000000000000000008000H0700P005J8[40P@2007>>FFNNRRRR"
+ A$ = A$ + "VVVVZZLL\\ll4555==EEMMihHIii9:::JJZZjjbbBCccCDDDddDEee5JJNNR"
+ A$ = A$ + "RRRVVZZ^^@CCDddddDEEEee5JJNRVVVVZZZZ^^`cCDddddDEeeee58:JJJJZ"
+ A$ = A$ + "Zjjjj245====EEMMMM1RRRVVVZZ^^^^0CCCCEEEGGGII0VVZZZZ^^bb0DEEE"
+ A$ = A$ + "MMMUUU1XZZZjjjj:;3`eeeEfEFFF60^^^^bbbb2000>`10080SP>9SZ\8\AC"
+ A$ = A$ + "h2?0DXQ\R00R2000<6VBaD:3S9Q@:4JH<94BQ@VDBYB:UZP@ZDBUB54BUBZD"
+ A$ = A$ + "bXD;UJYD54BUBZDZP@ZDBUB100H7h00PMP525J8[40Pl0002SAYHWc9A8URaL>WCZDWD:IYDbH>WciLBYTaL>WciTBYciL>W3"
+ A$ = A$ + ":UBYdiL>WC:UB94jL>WD:UBWciL>100@5h0004P=:bVC`81EXQ\B00B500YXa2\@3IU00T100@H<"
+ A$ = A$ + "8T2Q@8U1Q@:42QD:529000H0700P00@"
+ A$ = A$ + "IAHSc`:9MFQS6LQ6b:108T000`H@863jT@YT:YD52aH>XDBUFZUR]:4RaP@Y"
+ A$ = A$ + "TB]F\5S5?Wc1QB:UJYH:f:N>WC:YD[5SaH\FL]@8UBYF;fR]H\9KQ@:UB]F<"
+ A$ = A$ + "6[eHcXD]DZeRaH<6[aRBiBYD[5KaH\FS5QbVK]F<6[eJ]FC:U?gBaF]FSaJ]"
+ A$ = A$ + "V<:SB6SaJ]6[eJ]8D:U<6CaD\F[eJB8<6O?6SaJG000e3>00D9H4d9IDU5Q=J2Gh1P2=TE20@^"
+ A$ = A$ + "10022YD<6SiL>WciL>W3BA:6caL>W32Q@842Q@:2aH842Q@84:QB:UbH>Wc1Q@84:UBYDBYDWciP@842QBYD:UB:UjL>742Q@XD"
+ A$ = A$ + ":UBYDBYD842Q@842UBYD:UB:UBY@842QBXD:UBYDBYD:52Q@8D:UBYD:UB:U"
+ A$ = A$ + "BY@842QBYD:UBYDBYD:52U@YD:UBYD:UB:UBYD:4:UBYD:UBYDBYD:UBUBYD"
+ A$ = A$ + ":UBYD:UB:UBYDZD:UBYD:UBYDBYD:UBUBYD:UBYD:UB:UBYD:U:UBYD:UBYD"
+ A$ = A$ + "BYD:UBYDYD:UBYD:UB:UBYD:U:UBYD:UBYDBYD:UBYDYD:UBYD:UB:UBYD:U"
+ A$ = A$ + "BYBYD:UBYD:000j0700P0UCU@7S1000PP00`0A8c48@1@16830P3@81Y00X`2QKh9N3?QK`9XCAUj01000000N00h1008I3P8R8JVSS>l"
+ A$ = A$ + "h3@2ATA8Y4C>151000000\30h300895P8R8JVSS>lh3@2ATA8Y4C>1U000@0"
+ A$ = A$ + "4000000@04028P0000000@0000028ldIW=504@1:00000000N\20080000`c"
+ A$ = A$ + "PYlJId5C:mOMoSeoQmoKooeocl_7oGaobl_Ao_1K=QHaN=fBHg1LUc2V"
+ A$ = A$ + "N1H^\52d<1TnKX9j@]mEEKdaom?OiLWnAeOMCmfbK7GFf_`n?i_VOdLoKNSo"
+ A$ = A$ + "M_iSmYlgi=7NmgcloBegcn]n1GWmOaW]dU00`[[6000gYc7GK0CTQ`9NG>O<"
+ A$ = A$ + "]1LG9"
+ A$ = A$ + "UA55dZVn?VOC4e:RRZ>_Zi204Y@\1X01RJHDF8XZ:P>iXMd9X34[8HE5S>9^?n0=PE46[0J1<=1IeQEeYXA"
+ A$ = A$ + "7H;P3QMFHM;4E53eZFeB4040iI=[RE\43\dJVPX:RJYe]d9LR"
+ A$ = A$ + "XCMHSPA`XXA1K1001@AW::Z8R10ZmWR9`:ZXA[PH@0401EMZe008XZ3E@<80"
+ A$ = A$ + "080JdQ>4005]J\51000413FWJ]0FA[8Z2R100@<08:J`ZRASF1a06E03REeYFE00<802HJ=[RQZ0PH5[I=1E4D@D@YY=LHRa9_Ujni[PE_"
+ A$ = A$ + "BiKm?dWCjO00000b5@07F@ZVC7a;8EC18B2;RMj;`YCDFP9000JC008SVJA0"
+ A$ = A$ + "0D1\eRZX2:8D6A904025P;7AhC5D@Yh`A@F`202@@aZJ@[>DA0\H[XESF5E1oE:2A:14@]CD4CA]UH=3A"
+ A$ = A$ + "@Xg:aW5@000]JeX4@0YC[AE010aP5EMR6@00@0aJ\641140`P>Ee8808aeU9"
+ A$ = A$ + "92280FDeYXTVTGB[d9HMC314E00NJ3]"
+ A$ = A$ + "@an[`KnM@cBRm`lAL\3jd6JQRmGQglkPVU4kQiShH7do10000H?E;HQ5@@TR"
+ A$ = A$ + "[if6A:`2F0A=08B2F`V02Tb4000e00P8EKI00ZQJX026fJedZXVZX2000;O6"
+ A$ = A$ + "F`U2660F:8R;1?F6:U?On\PQ3hJZ6F1\:ReDa4e@4EEe2C3;Ea6\I4=JdX8H"
+ A$ = A$ + "3P=:QMheE1\0Kd21EA<\`21XQlkc2V;C@D\Z5Fa6110RmgKZE10@@DD[XFG3"
+ A$ = A$ + "R1000\F]jDEE400@A5\`jZEDE1000;F0[ZeBC54@11ajFAA;820PHabTQfR0"
+ A$ = A$ + "VZY=IYU2PBbU1j?Z9A20RXJMZg:eCM2bTSfB3;8b5"
+ A$ = A$ + "L048`nn2f9bDf5VGP0>MWn2Lj000`H]ZH54eJ4;6E]ZeH53R8643E55dZH4<02ZP:"
+ A$ = A$ + "XRE4KdV=AEA@4001;]V=J1Z8XHZ008:P2FgV=]RQ2X0ZHHMKbj6RFiWo[08P"
+ A$ = A$ + "PYHCfPP806Fg:V8X2TcR4PZXR1RE\6FJRRZXAW:H4K0jPR002V:FJSFeZFcj"
+ A$ = A$ + "RX0:00@3>J@1@@]`Z6fXQeF4`PJ0PJHY06ZQ=HQ?U8X:\PE\P1D4MJM5@000"
+ A$ = A$ + "0H@mbZFH:X88R2FJmK[Q1151A@A]d:fXeDVG?9WfP=9:R:000`AX0hSAj"
+ A$ = A$ + "NZ]ceU@j3oJg[mL`b`H33]l^7Jh\N9TN=n_VN]W35WeO000BUA6aYLj?cQS;"
+ A$ = A$ + "gCUhgb5P8WKiRUc;\P1R<5ARU2aK2000PR00P84UX6\jnNN6LE@4a6a6[XXH"
+ A$ = A$ + ":4?Aia``Bicb5P7A0K>3V:RQ5R8HH9FE1?CIeB;0A555\H5E=JeX:F8DPTAAAa6`ZX0R8P]ZZF]Zf0008FA[6]:F<08:ZZVfTHElimDA"
+ A$ = A$ + "4=Jd8R8F\07c?<]9[<6D5440<08XXZX:J]>EeJ300PPXX:FJ=[HYZ:880H\X"
+ A$ = A$ + "ZAEa200P8::J43000D\Z5f@_=B]^@00T1[ZZEE50C\ZHCVZZZHJQYQc3dTDO"
+ A$ = A$ + "i8HSYD_0X0PP5FJQeEeP>EeZJ320100FEC40EEmRa0bIB00P=]H0@0[EAa1g"
+ A$ = A$ + "oZLOeY03RXfXQE05D@@`06AAYJEA4L1004_Fd820NH3]1eag^hIoG7EOg7;I"
+ A$ = A$ + "6g`6JSZSoMecU_>ZUo^?Fb\Ho10000hD2`I@OXLL@FDKm69P`dY000dRKZYB"
+ A$ = A$ + "e00@\W00b:eTT;L@;`A@6PGH\]14\`d70A408bZ4SX0;0000]00000J=KTJP"
+ A$ = A$ + "8V8XVR8VXRRQ:HJHE]a4DA54UT:028D10D\::00P:00063:0X2HH[]fIJ022"
+ A$ = A$ + "8fX6V6PX2:F4[V000F\g6C01000004D[a:Z0PPJGlAR2lP8lY2@XL9Q`?e_@"
+ A$ = A$ + "L<9XY1li`Ji4F4d_gAWVBLDSm24;1Q1@=b01Q2^_<=kAWXH56P3RU2G\004@"
+ A$ = A$ + "LEEDD5564:\2UEJI2A@`G<>\0P@1@hb9C@HPMJ10V:A>oUckCb^:=Id0000H"
+ A$ = A$ + "QL1km6Dh10080>7Hm1^J02V0c]60NI3A`T6_TiWeKo4k:oY`X?9^\\Q8@AS?"
+ A$ = A$ + "DmMih_JOU?56m5hQo00000L>0hD000cY000D4=000QF80007;08DWR47300e"
+ A$ = A$ + "2hH08Eo20hH0:[4001;<102K099A00D=0000PF00000eF>B5<0343Y008HB3R50PFj>X20P6SAe0008eK;00000000RF7"
+ A$ = A$ + "00@Bo=502;P@nYLH94n<8d2H@`l4VU`5PeB3]DMbih7==EAZYF@9@15@;T8Z"
+ A$ = A$ + "A0142\480EDQ460JSf4IaX@DL>CF8[45=41@1[?AR8?2500"
+ A$ = A$ + "@:>6f_^N7^lY9EJB1_P>^QWQU000@11P1003;QQ9OP\0D0000h40H`00nH41"
+ A$ = A$ + "RZF?`dmjd?eXC_V^;3LH\Q0AE[7XiNIjWJD?f^V^T9Tn70000PYS30eD5XML"
+ A$ = A$ + "PXVj=0K[EA0RZ=XZe:28NEAT^2I@10002PH]F00"
+ A$ = A$ + "04kZ4E5XZFZ]X001L?dE1@000000T@c`AB>b4:GR0DFQ8RbU3hChAib@@[P>]4I]RHAXa^EGBPVl;L9872fBXXdC5jIN07070LW0D1100000100<]bX\UR25PgFA\N>?oY_;5gIn2="
+ A$ = A$ + "ATdFA\N>?oY_;=W1d5FP9eUD;eS@KP]`W4@X0CV9<9000\6E=H53B4_aRA`4=ZJ=HEE51<5[Z"
+ A$ = A$ + "[X60TDehPE0I3<`bO0c0B@JS5J5]RRa=`30^5LIC5P"
+ A$ = A$ + "U3>006P208G[aV]H4aT4`@YgOC"
+ A$ = A$ + "]W2L`3@j1`64PUBF1IfJ375`E]H;06400B_Djb<6J104T@\i\P]bB<00nF6?"
+ A$ = A$ + "K7[Ig1U@`F7k`F6gffGcY3B2F37`86KRGln>eYj4254:8TP4@Bh>610000fK"
+ A$ = A$ + "HH_=HKLVfJeZmAF]gdJFJJ;\AeV\Uff`jfPUZe\5FJMKbdZfPYYE\DcjX4;d"
+ A$ = A$ + "I]RF5DeHE=UFAUkBgnj^L7;Q44B@81QEPMgE[6^6QBa2;\`>`>`^;?900F<"
+ A$ = A$ + "ebDbET98VPh9`CIL[0`3OkfSBTAQ45R000PSFKgXFRN0Tm9K8;00P`27"
+ A$ = A$ + "iIa83000`kV0%%%0"
+ RestoreFile A$, "jump.ogg"
+
+ 'block.ogg
+ A$ = ""
+ A$ = A$ + "?MfIC1P00000000000@N^00000000`PlEPH0N4PM_9WHY=7000002@4[0000"
+ A$ = A$ + "000004W00000000^1ldIW=50000000000000ii20040000@DEnC\B\cooooo"
+ A$ = A$ + "ooooooooooooooooA>PM_9WHY=g:0000HU6LXibCbM68\UVHFmVLRUfLPT48"
+ A$ = A$ + "b0C>Zi9YVciL66WhXLPVCJ>QcYPLPRA1N>98Lm"
+ A$ = A$ + "VYCjX>ZSjX>:d2]@;d2]B[4CaD]ESiJ_6d5OciL>"
+ A$ = A$ + "WciL>WciL>Wc98d@F500P00048T1I@642Q@85BQD8VRYH:W2bP8J2]VcgL>>XIiPV:5K>M`9BeVWTKZ"
+ A$ = A$ + "H^iL>WciLbVcI<>WciL::WIaPV9dJ>Wc9aPVU2JV@[iL>WW4KN@[Y:]VciL6"
+ A$ = A$ + "WcY36WAHL>WcY9]V7TJfH]iL>W5dJJ>ZiBaVciLRD^i9eV;EK>WciL>WciL>"
+ A$ = A$ + "WciL>WZGLjL`i4>WciLRJ_iJiV@GL>WciC6W^gL2QciL>WciL>WciL>WciL2"
+ A$ = A$ + "2=TE100@0001QQ=66gYPPdWS6865QHJ8Cj1M?j`TP63bY@Z7=jXA:UjP@9E6"
+ A$ = A$ + "WD:M22=TE100P00042QD85BQD85BQD85BQD86RQH86bYL:W2ZP:YBZX::Sb\"
+ A$ = A$ + "<;cb\<;cb\<[3k\>[3k`@<43a@[d:aB=EKeH=F[iN>W[iPdJUF[eJ]BYD:UB"
+ A$ = A$ + "YD:8d@F500P00048T1I@6TAQD85BQH8VbYL:W2ZP:P@3IE000800800000?9"
+ A$ = A$ + "?7A7A7A7A7A7A7A7A7A7?7?7A9A9A9A9A;C;C=C?EAEEGIGKIMIMKOKQMQMM"
+ A$ = A$ + "OOMOOOMSOMQQUUUUUUUUUUUUUUUUUUUUUUP@3IE0002000P@842QD85BQD8U"
+ A$ = A$ + "RaH<7ciP>9D212=TE100P00P00000LDLDLLTLTLTT\T\TdTd\d\ldldld4m4"
+ A$ = A$ + "555===E5M5M5e=]5U=U=M=M=U=MEUE]MUU]]U]e]mUU]mmmmmmmmmmmmmmmm"
+ A$ = A$ + "mmmee12=TE10P400P>B>B:B:B:B>>>>BBB0Q6bZ00@600@00PRRSRSSSSTTT"
+ A$ = A$ + "TTUTVTWUWUXVYVYWYWZX:@XQ\:00040040000000PRVRWRYRWRXRWSXSXTXU"
+ A$ = A$ + "YUXVZV[X\Y\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[;@"
+ A$ = A$ + "XQ\:00T000dAbAbAbABABABAbAb18d@F500b000200L:G>@B2BB`C3PSU5llPW6<=1hHI1??Xi1CC00"
+ A$ = A$ + "00000000000@bC3NN`c3VV0TdlPW7llPY900000000000008ii1??hi1CC0B"
+ A$ = A$ + "NN`c3NN`d40000000000000l<=QY94=QZ90?CCHJ2CCHZ200000000000000"
+ A$ = A$ + "000000000000000P000P1L0002`4:3DXQ\R00RC00LhX89100PSTTU5000:B"
+ A$ = A$ + "BFF000HIIii100PTUUW70000000000000000000000000000000000000000"
+ A$ = A$ + "00000000000000000000000000000000000000000000008000H0700P005J8[40P@2007>>FFNNRRRR"
+ A$ = A$ + "VVVVZZLL\\ll4555==EEMMihHIii9:::JJZZjjbbBCccCDDDddDEee5JJNNR"
+ A$ = A$ + "RRRVVZZ^^@CCDddddDEEEee5JJNRVVVVZZZZ^^`cCDddddDEeeee58:JJJJZ"
+ A$ = A$ + "Zjjjj245====EEMMMM1RRRVVVZZ^^^^0CCCCEEEGGGII0VVZZZZ^^bb0DEEE"
+ A$ = A$ + "MMMUUU1XZZZjjjj:;3`eeeEfEFFF60^^^^bbbb2000>`10080SP>9SZ\8\AC"
+ A$ = A$ + "h2?0DXQ\R00R2000<6VBaD:3S9Q@:4JH<94BQ@VDBYB:UZP@ZDBUB54BUBZD"
+ A$ = A$ + "bXD;UJYD54BUBZDZP@ZDBUB100H7h00PMP525J8[40Pl0002SAYHWc9A8URaL>WCZDWD:IYDbH>WciLBYTaL>WciTBYciL>W3"
+ A$ = A$ + ":UBYdiL>WC:UB94jL>WD:UBWciL>100@5h0004P=:bVC`81EXQ\B00B500YXa2\@3IU00T100@H<"
+ A$ = A$ + "8T2Q@8U1Q@:42QD:529000H0700P00@"
+ A$ = A$ + "IAHSc`:9MFQS6LQ6b:108T000`H@863jT@YT:YD52aH>XDBUFZUR]:4RaP@Y"
+ A$ = A$ + "TB]F\5S5?Wc1QB:UJYH:f:N>WC:YD[5SaH\FL]@8UBYF;fR]H\9KQ@:UB]F<"
+ A$ = A$ + "6[eHcXD]DZeRaH<6[aRBiBYD[5KaH\FS5QbVK]F<6[eJ]FC:U?gBaF]FSaJ]"
+ A$ = A$ + "V<:SB6SaJ]6[eJ]8D:U<6CaD\F[eJB8<6O?6SaJG000e3>00D9H4d9IDU5Q=J2Gh1P2=TE20@^"
+ A$ = A$ + "10022YD<6SiL>WciL>W3BA:6caL>W32Q@842Q@:2aH842Q@84:QB:UbH>Wc1Q@84:UBYDBYDWciP@842QBYD:UB:UjL>742Q@XD"
+ A$ = A$ + ":UBYDBYD842Q@842UBYD:UB:UBY@842QBXD:UBYDBYD:52Q@8D:UBYD:UB:U"
+ A$ = A$ + "BY@842QBYD:UBYDBYD:52U@YD:UBYD:UB:UBYD:4:UBYD:UBYDBYD:UBUBYD"
+ A$ = A$ + ":UBYD:UB:UBYDZD:UBYD:UBYDBYD:UBUBYD:UBYD:UB:UBYD:U:UBYD:UBYD"
+ A$ = A$ + "BYD:UBYDYD:UBYD:UB:UBYD:U:UBYD:UBYDBYD:UBYDYD:UBYD:UB:UBYD:U"
+ A$ = A$ + "BYBYD:UBYD:000j0700P0UCU@7S1000PP00`0A8c48@1@16830P3@81Y00X`2QKh9N3?QK`9XCAUj01000000N00h1008I3P8R8JVSS>l"
+ A$ = A$ + "h3@2ATA8Y4C>151000000\30h300895P8R8JVSS>lh3@2ATA8Y4C>1U000@0"
+ A$ = A$ + "4000000@04028P0000000@0000028ldIW=504LI;00000000ii20080000@L"
+ A$ = A$ + "JCSSJl_=oCeodm?ND7??Lh`A1]J]X1DeYZR6aAmnhY[mglWA\FMZC"
+ A$ = A$ + "]JE[^5HogS0RY=JJ3fPUf<6Z^XE5100eic3CJWQAZ@aD45aWLl;JT3R62FV"
+ A$ = A$ + "V93k=cLF@FXUFe2\A100JL3c8eUI4fPN`8mhSKH6Y^3H3CTb4Z"
+ A$ = A$ + "DPZ1l?C;5H_S=\`CjBKEFXKnTS6H=8222P0OR\\ifL`W`G@LKFbTB7Uf2B[]"
+ A$ = A$ + ">_Xi[iV9mBEPTG=lM[R>[GdObHl82AaFj<3IlANCT_2iGbc2bA?0HL^OULV7"
+ A$ = A$ + "4hbY<\JGf5j]In4A:ndMo6i4RXNTm3Y5]`P>XbOMi=DEK2h0jP:oem^^T4A:UQLXO6"
+ A$ = A$ + "\W:7L`17LTH>`>86a<1@h0000<611;R8HDSA\edFKEk<\a`DaZJaZF"
+ A$ = A$ + "5ejRXPe=]dd23[KQ=XFPUVFJ5C3e2<@AS8F01AD4iX?J=WcE>XECT31^c`UD"
+ A$ = A$ + "R499]NE>fJL@N:M;7WB4>@aPaP6D\82;J5GfaCFgVMEOe"
+ A$ = A$ + "[8Y5O9aJ=d?aW`_S_^dW`>b>X9:WC`5OH4_ehGNjCUSVZI1?G??C00G_4j^?"
+ A$ = A$ + "MHgY\1Z@4JeTWX2]\Uf;gOA<0ZREED4AA\ZFd82Fh@WnK6A;iT`?j@aZm1hOJCJF[Mc5O5OhJ[VaU@GI"
+ A$ = A$ + "kQ\DjF95@C^VlK7]kF^Da^>:Oge2;57[[jhGgFXSZ8_ZSB2EVF08iDnFb9Qe"
+ A$ = A$ + ";]7;k@ZbkjEUk=XEAEAD5151A=FIk>UbeM7=0h_="
+ A$ = A$ + "dR9STR1D1S\km]QFH9KoiHAcgeLbKlFGRPQfeY];eVKQoLnWfZTZ\RjZ@lbbl\`Gf]BKVVoaISD;WIc^]"
+ A$ = A$ + "G[b^Co5FSXAEaFA05@D9mMjfWkn^10P7g@5W;@1X26YG>^Q:>GP2@5MbkOFkf5Ue8LM@SYEUQ<4["
+ A$ = A$ + "DO5BbZhlOGDn];82?BhD4=ia9dL=XbO`O500fBUHYhP3>h0a4c"
+ A$ = A$ + "4k0C0CIbOi[nfGG[[]4RCj7Tj\=Aci"
+ A$ = A$ + "AD[MKI_VAiATOT8CHGS7YW_0Imk7LU31baSPS:8cmT_Mbj\n1<>;bAKc:mMm"
+ A$ = A$ + "J;K7eZ\lAh[kfjMKO_UJkjgcBg>nXoV7hbJ5MWEnDfFSAaZPR1<5]RbNZO7="
+ A$ = A$ + "0hW=Tgh2D0ZPAj1Of@NS;@1X26Y7lg00P41K>b17LM`1aAL4?U[3DDVd1V[H"
+ A$ = A$ + "000X000C\a`ZQXFLEad@4Q17>4Qi`C4nPQ;7>LDC<]VJ5[JQUFABA]R>@EEA"
+ A$ = A$ + "7H5=jD7ZFQ[K;cT_2d:88HaHE5YQDB9i:kkJKEGC^DT0mF:H20;0@PMKFmOO"
+ A$ = A$ + "[D_=7e9E^]_XI1HZ\8^[\R^2F8WNGJYX8gbDehUiQY`J7K=DET2\0j0[MlE00HK`D]e9]JS@3UIJWh4000d0004RH4ZAFg:JVg80`QUa:P@74:AP=aU4PL8B8GfZLPV@9T4P\S^3RlH4fF01cP\84B"
+ A$ = A$ + "jPRbb:04Jb@2FhOWMhHLEed\KLYD97WF::]f=^^;Kf"
+ A$ = A$ + "]UciWCK=?oZWfS4ic:<6;10;fP=:085RdGjn8fXeZh\URO300<]A_5fNm2@[03aYV=bF^Yi>PYaAa"
+ A$ = A$ + "1Q1Q1[J_8oB6AAEF`Xe5gdFaBRH5E5EmFB91bBabi00YcUACbmd\DL@X<3dd"
+ A$ = A$ + "c7hGlnX4\_k^k6cZlVJ>g5N?<_`bKnXMKZf0e`kb5c@AUW6B`>=gG[T?VN:H"
+ A$ = A$ + "]I]=I]IQUVGIIQ6h2O]U[1?AAa4AZ]8@DaiW;C4M00nG6GODGhY3BH1jbhiEo2AhP466n:00\_faBO"
+ A$ = A$ + "[f`R\@ej6N9000:900C0cI<6@YD:hXYUJagXAbdfU3OYajcFmGQEJKEbXUK:"
+ A$ = A$ + "A_iU=Bde=ec[\?MjR@o_<7C<<7j]XP2Bh>SYHm`[fg@o@KP^LMeo<4[m5E=lDV]^<6"
+ A$ = A$ + "NkX7gk\^Mc[DUg;MgEb6Xo>SBWH:6:iM?ZdlO?;S\Wkl"
+ A$ = A$ + "<1FolIolQOOn6YEJC166IQVS1:KKS>D[ZJ^DB::000HHMK`jFdfWA[J8I8SFZfJFX="
+ A$ = A$ + "abb8757MWEFYc:[\7bhXkl\?kNTS\VCFidk:;nko=SX9goA?MU<]U1[h[k[2"
+ A$ = A$ + "00Zlnj]RBIYNA[mi]7B;[9C=eDC5]gEG=5SY^oS?FLU2lacK?0<000"
+ A$ = A$ + "0@FGaAFcckcK?IUE20PM_9WHY=g:0000HU6LXibCbM68\UVHFmVLRUfLPT48"
+ A$ = A$ + "b0C>Zi9YVciL66WhXLPVCJ>QcYPLPRA1N>98Lm"
+ A$ = A$ + "VYCjX>ZSjX>:d2]@;d2]B[4CaD]ESiJ_6d5OciL>"
+ A$ = A$ + "WciL>WciL>Wc98d@F500P00048T1I@642Q@85BQD8VRYH:W2bP8J2]VcgL>>XIiPV:5K>M`9BeVWTKZ"
+ A$ = A$ + "H^iL>WciLbVcI<>WciL::WIaPV9dJ>Wc9aPVU2JV@[iL>WW4KN@[Y:]VciL6"
+ A$ = A$ + "WcY36WAHL>WcY9]V7TJfH]iL>W5dJJ>ZiBaVciLRD^i9eV;EK>WciL>WciL>"
+ A$ = A$ + "WciL>WZGLjL`i4>WciLRJ_iJiV@GL>WciC6W^gL2QciL>WciL>WciL>WciL2"
+ A$ = A$ + "2=TE100@0001QQ=66gYPPdWS6865QHJ8Cj1M?j`TP63bY@Z7=jXA:UjP@9E6"
+ A$ = A$ + "WD:M22=TE100P00042QD85BQD85BQD85BQD86RQH86bYL:W2ZP:YBZX::Sb\"
+ A$ = A$ + "<;cb\<;cb\<[3k\>[3k`@<43a@[d:aB=EKeH=F[iN>W[iPdJUF[eJ]BYD:UB"
+ A$ = A$ + "YD:8d@F500P00048T1I@6TAQD85BQH8VbYL:W2ZP:P@3IE000800800000?9"
+ A$ = A$ + "?7A7A7A7A7A7A7A7A7A7?7?7A9A9A9A9A;C;C=C?EAEEGIGKIMIMKOKQMQMM"
+ A$ = A$ + "OOMOOOMSOMQQUUUUUUUUUUUUUUUUUUUUUUP@3IE0002000P@842QD85BQD8U"
+ A$ = A$ + "RaH<7ciP>9D212=TE100P00P00000LDLDLLTLTLTT\T\TdTd\d\ldldld4m4"
+ A$ = A$ + "555===E5M5M5e=]5U=U=M=M=U=MEUE]MUU]]U]e]mUU]mmmmmmmmmmmmmmmm"
+ A$ = A$ + "mmmee12=TE10P400P>B>B:B:B:B>>>>BBB0Q6bZ00@600@00PRRSRSSSSTTT"
+ A$ = A$ + "TTUTVTWUWUXVYVYWYWZX:@XQ\:00040040000000PRVRWRYRWRXRWSXSXTXU"
+ A$ = A$ + "YUXVZV[X\Y\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[;@"
+ A$ = A$ + "XQ\:00T000dAbAbAbABABABAbAb18d@F500b000200L:G>@B2BB`C3PSU5llPW6<=1hHI1??Xi1CC00"
+ A$ = A$ + "00000000000@bC3NN`c3VV0TdlPW7llPY900000000000008ii1??hi1CC0B"
+ A$ = A$ + "NN`c3NN`d40000000000000l<=QY94=QZ90?CCHJ2CCHZ200000000000000"
+ A$ = A$ + "000000000000000P000P1L0002`4:3DXQ\R00RC00LhX89100PSTTU5000:B"
+ A$ = A$ + "BFF000HIIii100PTUUW70000000000000000000000000000000000000000"
+ A$ = A$ + "00000000000000000000000000000000000000000000008000H0700P005J8[40P@2007>>FFNNRRRR"
+ A$ = A$ + "VVVVZZLL\\ll4555==EEMMihHIii9:::JJZZjjbbBCccCDDDddDEee5JJNNR"
+ A$ = A$ + "RRRVVZZ^^@CCDddddDEEEee5JJNRVVVVZZZZ^^`cCDddddDEeeee58:JJJJZ"
+ A$ = A$ + "Zjjjj245====EEMMMM1RRRVVVZZ^^^^0CCCCEEEGGGII0VVZZZZ^^bb0DEEE"
+ A$ = A$ + "MMMUUU1XZZZjjjj:;3`eeeEfEFFF60^^^^bbbb2000>`10080SP>9SZ\8\AC"
+ A$ = A$ + "h2?0DXQ\R00R2000<6VBaD:3S9Q@:4JH<94BQ@VDBYB:UZP@ZDBUB54BUBZD"
+ A$ = A$ + "bXD;UJYD54BUBZDZP@ZDBUB100H7h00PMP525J8[40Pl0002SAYHWc9A8URaL>WCZDWD:IYDbH>WciLBYTaL>WciTBYciL>W3"
+ A$ = A$ + ":UBYdiL>WC:UB94jL>WD:UBWciL>100@5h0004P=:bVC`81EXQ\B00B500YXa2\@3IU00T100@H<"
+ A$ = A$ + "8T2Q@8U1Q@:42QD:529000H0700P00@"
+ A$ = A$ + "IAHSc`:9MFQS6LQ6b:108T000`H@863jT@YT:YD52aH>XDBUFZUR]:4RaP@Y"
+ A$ = A$ + "TB]F\5S5?Wc1QB:UJYH:f:N>WC:YD[5SaH\FL]@8UBYF;fR]H\9KQ@:UB]F<"
+ A$ = A$ + "6[eHcXD]DZeRaH<6[aRBiBYD[5KaH\FS5QbVK]F<6[eJ]FC:U?gBaF]FSaJ]"
+ A$ = A$ + "V<:SB6SaJ]6[eJ]8D:U<6CaD\F[eJB8<6O?6SaJG000e3>00D9H4d9IDU5Q=J2Gh1P2=TE20@^"
+ A$ = A$ + "10022YD<6SiL>WciL>W3BA:6caL>W32Q@842Q@:2aH842Q@84:QB:UbH>Wc1Q@84:UBYDBYDWciP@842QBYD:UB:UjL>742Q@XD"
+ A$ = A$ + ":UBYDBYD842Q@842UBYD:UB:UBY@842QBXD:UBYDBYD:52Q@8D:UBYD:UB:U"
+ A$ = A$ + "BY@842QBYD:UBYDBYD:52U@YD:UBYD:UB:UBYD:4:UBYD:UBYDBYD:UBUBYD"
+ A$ = A$ + ":UBYD:UB:UBYDZD:UBYD:UBYDBYD:UBUBYD:UBYD:UB:UBYD:U:UBYD:UBYD"
+ A$ = A$ + "BYD:UBYDYD:UBYD:UB:UBYD:U:UBYD:UBYDBYD:UBYDYD:UBYD:UB:UBYD:U"
+ A$ = A$ + "BYBYD:UBYD:000j0700P0UCU@7S1000PP00`0A8c48@1@16830P3@81Y00X`2QKh9N3?QK`9XCAUj01000000N00h1008I3P8R8JVSS>l"
+ A$ = A$ + "h3@2ATA8Y4C>151000000\30h300895P8R8JVSS>lh3@2ATA8Y4C>1U000@0"
+ A$ = A$ + "4000000@04028P0000000@0000028ldIW=5000<:00000000Hk20080000`@"
+ A$ = A$ + "?:JSJ@4B7MeD>mOTo7honmO2oCho7noAo[eoom?PLU`X34P:<_ZRb:X3j8TS"
+ A$ = A$ + "c30QIL90d80F_<:\S91P6I0XB5N>jK>^j=NJ"
+ A$ = A$ + "dGYCAojgKbP^Uh9nNabf?0C9V?0HcH<0XQ0`Hfb_NnmCCl;^bC^CdO?OcoUbmB2A`ggQ2LdKG<^"
+ A$ = A$ + "6d@AjYFdNPH0AcRRF[Zf@V=Z\"
+ A$ = A$ + "7ZaVZ200dG?MF9kWa\:3]\?Oj\BfG3IEFJiImVEb8H9B0K30@]6[:ZH1R8Sa"
+ A$ = A$ + "LA@AdZeR2:XZ5AAaHA[jnJYH[a2H:XCN@4=ZJEaFZ6FJSZQ>5000JK3A4^bV"
+ A$ = A$ + "XEl`Y]JGbLACLK3A4^bVXEl`Y]JGbLACl?008SZEAMZFKTEbd78SbJU0e=1X"
+ A$ = A$ + "4\_WZcPTmmcP5R2\YmmLafgcC5QiLOCL7000]69@T0eJ`HD[JDS0PX6S886S"
+ A$ = A$ + ":Z5[00PaJE@4EDkdP08HH=00@\94EDAa6=5C3KfjHR]40A5eJ6V202Fc:Z088Fa4d120"
+ A$ = A$ + "8H008_H900HSV0ZXRE]^Q20HYe5E04a60<]I14[YRR::F5100MJa0PZZRR2X"
+ A$ = A$ + "HQQR=JYQnI040610035edFJ1R9FP00R=P0XRJ=3E00eJ680PYe=DajZ5FdY>"
+ A$ = A$ + "5;0P>D10@\V20P1Z00P:fjD7aQ00H00@EaRFA7PHEa06E]200j400`j002FH"
+ A$ = A$ + "H2VFC4\VH:0PYUF100C[KQ20XED@<0:j@EdY5f4RZ0000hU=TTcTB;B?60PRUF700eJF0FJ5;0]::00X3E00`J600Pe0003["
+ A$ = A$ + "PP=HZld080LP><00JDD10`JX00Z5F1003[J2VfT8H5E10`j600P>E10@dJ00"
+ A$ = A$ + "\F0MX][0800P1PJS2H]00PZ500dY10@aJ10@[61`V0\^800H3V00HJ=300<]"
+ A$ = A$ + "1401E\6RQQ=2R200:hS=TSc4EKB[>U;SU\;JP7K87W9ZfTFM:G6;IGd0o700"
+ A$ = A$ + "00P?PXXFP8Z91D61\OPDkP];FK:ggMj45HCG14\WcKk>mD8K00\e0E@5`:"
+ A$ = A$ + "00RJR0HHS2X0088YdhC10ShLhC8004N2aU`U?T6G80G:;2fP5Z8f2K4DCK@1"
+ A$ = A$ + "0a2KQU00HcFH00:f\90200F310000\2J]A00E]I3005K900H=;D00aZf8HH;"
+ A$ = A$ + "\:HHCF200fBD04\1300ad:F100C;<0KdFHQPa02=0T30[JC600HY=202:F3a"
+ A$ = A$ + "`VE10`JZ2"
+ A$ = A$ + "0XVF10@<\V9HH3V2FJ=A0@`J:0k0HZ200ZZHdY64<<00H3:jD;HA100]80PR"
+ A$ = A$ + "e=104aJV00P=SRE\9C1KBE00aV=10``6<100K0100[YZ9hU=8oYf0XJe8QXPXX>Y8RR8M8E2h87L`1F<7"
+ A$ = A$ + "LP5SHVWR1000[X0XHA4@@]F[A=64[XF0[KcZE\ZE<1;\1;<]`PX35SXZHAA0"
+ A$ = A$ + "[ePAEa8F1;Qka?A1bR2@\5SRF5[Ha^Wd24`@@D[K2HD9oJ`k4FQ0PXaR61A4"
+ A$ = A$ + "E029GNA9iP?eR>e2R00FLRJMOMQ130P2XAS424?HFVLM24bmnDF=:6i4\JY5"
+ A$ = A$ + ">hD41PNi;08D\>b0oWB>?m2Q@MGV"
+ A$ = A$ + "9Jc>>8eLLBP02FD1[E;REaH`R60A][FJn=\=7hO=Tg:VbV000=PXCM2R1003`900ZH8HCF3a`@50``J:0:V"
+ A$ = A$ + "F310aB;1H7d;0hI=d:dU^XYm:biZ?33TLTcJXEX;MACkETcEO668i8o70000"
+ A$ = A$ + "PO000D914Qmk185H9=X7kGBSU3j3@d2Xgn563k4_]UCHLKgYWbf600020Z04"
+ A$ = A$ + "D2T0D040H4SX08Z:HaNE00aNDD5\700e`010`6KE\ad>``2F\c4E\2Z1:XP="
+ A$ = A$ + "RZf;0026:0PJe2Xf10HeN45AD;Li`00RDLT0\0P8^HRcQ8\X22^L4P50PADa"
+ A$ = A$ + "i`104`A0Q9@\ZE<4eF800F5K00`jFc200000@dYX00PPe105KD00DKd00@`6"
+ A$ = A$ + "4"
+ A$ = A$ + "302J10`D0[K8P6800<1<\AE1C00[E104[310@]620HE4A\95\d:0PReE00\^"
+ A$ = A$ + "00U:8jVe1P0006P30@`:XR=KcPF5500MXA504aj00RYe10@S1=P10hY=Tdb]"
+ A$ = A$ + "`VPilUQ97dd6BJiFHC`Lnb`T3jW:P\\^e0b\\8RjA:S0>@2^4PM1R[iDLATc"
+ A$ = A$ + "iTCedALZL`Q5\i0000\80Ra8Z0ZAEA@5\ZJAEeddD=\8RZZY]VfYR98F\J?0"
+ A$ = A$ + "2RMZJEKf24a`@\5Feddd005e6D00[R108REA]ZJ]VlFS4YDBMSQQQQQQ:HHc"
+ A$ = A$ + "PHZH0ADd20H=:R0HA[=0PF1AA;XX00PRFKS]eY0@]_elMXFc`D5E104FQ020"
+ A$ = A$ + "PPQZZE]9@@503j`P]A[54A4A7R10dXC\ZF=H[30\Ee00PXC308:60`:2:jd0"
+ A$ = A$ + "RQPOfnE7mL7@e`:2hCPXU\V9P200:@j=002PYQeD4]0PP6[JKn_="
+ A$ = A$ + "3WJ8^gJ0nH33i:1A1nKNIFYLR7KH8G98:`Oc;c:UClce1XfJR0Z200g]AO<8"
+ A$ = A$ + "4fF`IP9VR;afgbiidA4kXDURS4GKY0000D1\ZeH]:XFDT40\cZ2P=6f1:H[="
+ A$ = A$ + "fZ8Z1Z16ZEEA<00Ca``ddN4A2615D0:Q;335D8Y=Z0RZFJQ00JD1@0=8F0E5"
+ A$ = A$ + "\`6D3C;0DAc8PXA0@\E03RE1@@d00XXH\>0E;0\28n1`2A1@A4CeJLVm4HL>"
+ A$ = A$ + "PP58f8FA=\@544C;<00e6AAA`V@01;\RUHJSRXZE7808j000M:ZR5dXaR1D3"
+ A$ = A$ + "4[JSR:202P3f2MZE@a00R64;6]0PH=:00R=R>EAES2H0MPH1@[1>=TERXC11"
+ A$ = A$ + "00P40A47_X1Q2F604=Z0PH]P>04=00J0CO5ZF0@D05=P0>101h`ReXa2f0P2"
+ A$ = A$ + "`:P3C50D[RZFc0aJ8:P56VR::Z>E@\H5[20X3;JA3RH0P=00nG3]\ZA:3:l^"
+ A$ = A$ + "MIM4dLToJXUE=BI@Qg];[SPVSlO00000NGC0bb041FYm;B;>38b?0XGZ^`2G"
+ A$ = A$ + "Pa^Clnf>A^_URSbgC10005P<044E40\Z0XHE5@\Vf206fJW:H5e`Z96ZMXf9"
+ A$ = A$ + "0PJ[10XfJ1K]0HXF1@`>ERb:RTL90P8X=I504\1[20HE;40@]>:0Ze50000@S>00[C=00Zj40@A70"
+ A$ = A$ + "0FX:6fP:VFA00aJ:0XfX00PF00<00`?0Ze50`2C;1<1Kf20@=\140DK40`JX"
+ A$ = A$ + "00FAaVa2<@Q90R1aoc`V0[208VF754\6:0HSR00Z=9R5f2CDKFD0dR20XPF0"
+ A$ = A$ + "0[90PRQ8FcZPQ0080P102:R=[ZH90PP2PPe@00[30ZJJ55KFA`Z00FE10dP1"
+ A$ = A$ + "0[10@e2JA1[`001`1REd1RX20X100[300ajX0HYU6HHCZHQH20R=Z08Z=H0P"
+ A$ = A$ + "ZFJ108jd8Jd9f20P2hO=dFY4;=YZo6G>aQDc9j[Qf:UHY9Emghb9>TJ>Ao10"
+ A$ = A$ + "000h>@P4`n2;m0G;FK\W6@:f56HOWhmmLRk50"
+ A$ = A$ + "aN\C0D33[:0VfJ3Z=fQQJWPmRYJA<10\c4DD\PYmZ5DeN350aNEaD0;2R5AA"
+ A$ = A$ + "\70:O>4@YRcU`10P8452c`A@9i:800A4eZ00f\10P=ISZ2P5F10@Y10@]10D"
+ A$ = A$ + "\A300;]>:0FHQ20FHE`:6:H=005[20ZJD0XM;`10;E`2C;10aVD10CKf250e"
+ A$ = A$ + "6\RJHSfXR]404`6D0@]A04\RU:0HHQRE]52RU0X0;3L5FHSRJQ008F110[;2"
+ A$ = A$ + "0H5;E0`dj2FG=`2a40`VE50a6@0@Ed00F[RP=YPQ0080`O10@\3>@=i;6O]jVABD\`>>N_U"
+ A$ = A$ + "TW1R4:3[6UTki>ZRXXAD100cWZX5]6[JU0P?f@EUD4D=JdQAWR0H[C10\60`0C0`d0C[K==7400PX00ZJ1@dYF0@WF1@a"
+ A$ = A$ + "V5DK1Xf00XR>005MP08FE10\@aF2I456:1[YVH:0PQH20FG0D<]R0PJJ5<]`"
+ A$ = A$ + ":RH=50dQ20X130FE003AaB[c10000L06FC130@a4;]`6`050ed20@A<0RZ>105E`j400P7f@E[BPVCD;Lii7iO"
+ A$ = A$ + ">AQ=DeZ4Xi4e2GNnAnWCdO00000N3ES2@I1TC:M0H]OI0afIP5A[18OgAkK;"
+ A$ = A$ + "@PlLRcgLj4i6000:P@2BbB@2TPZReH1D[JA0\ADed>CaFk0`2:0HeD==<0e`"
+ A$ = A$ + "DaF30@]7`N00K=DAEEECC``20HADAicQ@8\@80`b2Y4@:ai0ATP?5P5LY4`2"
+ A$ = A$ + "K@50\1103;D05KYZ000XH;10<\V02f40P5F30edZ6H=40`:20HX:FJSTA20]4d"
+ A$ = A$ + "ZXPe20FE10\>@0DED00C[:H3:HM00MH0@dH0``40`B0[CC00mVULH3]EKAU9kZ@jUWC_I9o300DYBm:"
+ A$ = A$ + "[68EKj=bX^BXB2iTBC7BeMRb2T:000D0:01@EeRE5<"
+ A$ = A$ + "HaPZ6[53H4A@AEKa6\e@5a>0C0`ZJ00F]8=n<02@i2606247dYX0PXZ53XXJ"
+ A$ = A$ + "04A5=ZJ]FHW10QRiOA4MRZR00X18[Pk[0F72:jdF[00R630Z:0P]0Hd:R6EM"
+ A$ = A$ + "bQ=E9`60\00F3RQ=S8F20FHY28R>D10[30@<\43[[HQ5:0R>=0X130F30Da@"
+ A$ = A$ + "=\djl9F:MFR_LHO\3`?G3XJE8ZT00PcJa"
+ A$ = A$ + "PYS8f17L`1a4;EY@\34CHP9V9NV2000`J@5[eH1;RX0P445[V6P=fKEDA=TR"
+ A$ = A$ + "ShB91?F0`:5;35j0dZE`jDAE\260dJ0S8F\P]X3AESZX:F2H2l04d0jDW:8:"
+ A$ = A$ + "VOjZhX>YhH:C8V?=]Pem:EgE9R000D:M`Zm`5aU4L\c3G5E@DjI8l;7IW0cP"
+ A$ = A$ + "TEIIlDM\X806A@[Z8M`I`ACfHMnSnl=Z\FlCfISXj2>9V]^:?S3NVI`ZF@[=:0XRPHaJ444A5;8Z:2:"
+ A$ = A$ + "J`08o=C0nI3I:RHT5cZ7aEWYVeV3lI3I:RHT5cZ7aEWYVeV3lWJP\B=PjTZg"
+ A$ = A$ + "\RZ94E;aKAF5D9P8G3bd8Qd`Rlmie0BK;\HPm]DLdL:PSbim=W:000D[Pa8Z"
+ A$ = A$ + ":H`:ZP:R5`J50`8FD0R"
+ A$ = A$ + "H5C0`J08H=4Kbj6]60[2000P20XA1``614e:F10`ZP=1F30`ZV08j@50dQ0?"
+ A$ = A$ + "0P;0@0HQEE5``J0PHM\dd2\RH0DeR1d10P610D4dYjg9080j@"
+ A$ = A$ + "WJ1]00J=0:Z60d10XXeR>EAAa0H]0P6005104a:JE13@0008P6ES=4mPX1d0"
+ A$ = A$ + "0RF@76AS10M20:R1@<00<0[]W0@BP=PX:0RY90RH90Ze40\`dDEK@<\V:P:F"
+ A$ = A$ + "g0XXA50d10PRPZ6D<0POf@QR8ifTMfEnbIZIgLR?KX@ATLKb>k:Oia?"
+ A$ = A$ + "G1RbJAXV810PGbJ;P<2`1d2bcgMde08O1kKYBPI^0C74Kjd5g100PX2ZEEa:"
+ A$ = A$ + "FE\VXR08QRa00F3PJ1Ce`dNC`NA1<5K`6;08VfSRXL5EDaT440NL52DHE;`F"
+ A$ = A$ + "RQY=H10FR50RY=H0P5H2J43000Zj40\6H=KQea2;00[50\60D3;0@]d2`6ad"
+ A$ = A$ + ":60H:F08Ze<0`@=1`D5eV]2UP000H38Xa0VF30e2;0@]>@3ZF720FA3PPe40"
+ A$ = A$ + "4C;1@a0;]UXV20iQO206ZZfX=P5FX8PYE55@]10`2[X0P=8H;4aJH@@A780j"
+ A$ = A$ + "00@E50;:X3]j<<30oEdYF4a0XZ:0P>005530j0S>@3605=0P6<0ZZ0P88FCA"
+ A$ = A$ + "50:010\AAW6<0f20X30@A0oY2TA=P:QRjTAT@49^40>R85`AlDEY0000SE4"
+ A$ = A$ + "@]F1aJ5A<8F44SJ@DedFe4A4eN;ZJZVFC4;]`0CAEEE;8UN2Q^IS:::jDa80"
+ A$ = A$ + "hLFYUPH86ZYE]VHP2[@o60=2fF`om@CEdQ0HK\1"
+ A$ = A$ + "@dP0FeRa@gY>;`G6nDLN[b7oJ;_82o4SoMWLOG;g^h420ifkOioLYA5f<"
+ A$ = A$ + "9nfF6Cj>P`BC<@d0SZ[h_eVVeRF=GnFdeiKRaPeQReQ6De10:F50["
+ A$ = A$ + "88PH=50[00=hb@]5F8H9:PeE54EM2P6oZkQnTg>7Xg"
+ A$ = A$ + "6>bCTl\UIWOem@ObKW3dW0::;1ED?eDZJ0A5XhEUBXB2IQLOV_W_?9blY0Yb"
+ A$ = A$ + "A4V><5HVCTC000HD1E53Pe:2PE\F`JE44<61SH4D`Pa8fPJCF10[S50Ze]60"
+ A$ = A$ + "R=P0RH9FgV5\22:fX2000J50d0j@Ae:20:Z0Fd90XZC0DDDE3[QQe1@\1E0\"
+ A$ = A$ + "V0PQY90F2fX=:HY206000P00F[H1F7aBD`dB1@a:0HJ51D\>HH=dWUm@QidP6\5@3H00`Pe9H3P:\2h4nCgmDP"
+ A$ = A$ + "F0@e0H005@d0200408H]R]0PXa0RX2PRZ1@7R8j45a0FD0`j00dH0`43KB53"
+ A$ = A$ + "58P101E]^e`:20RF36M:0XZZ00J1E000nI3mZ`TB;SNOjbiMT3`I3mZ`TB;S"
+ A$ = A$ + "NOjbiMT3`g00@oN9QiMeBXF@F6211kR[mMRF9`N^0Ki2hX9QYSV24DA5;:Z2XXFaREe6K1`dZ88RYJH13C0\JH00P1HZHa0@2"
+ A$ = A$ + ":1\2:Y0\04QhAiJCV0HYU2PHQRe\1\@D0\`208h17JCK@<4C0<=@01C@aBC1"
+ A$ = A$ + "0[SZF3\60V660H51@E[;0H5`653a@1010P1MP5F2PJSX0Fg4[JMaB[90:F10"
+ A$ = A$ + "5MH`XC0@4e2KDa@1@50ZA\RR>A10D]20FH20FG1`JA7HEA10E=0P>00EE0`2"
+ A$ = A$ + "4K@A4001>@1Dd1:R1SZ2DHndPXC\>4K50D513j@00E0@1DeP800P0J]PR1@5"
+ A$ = A$ + "R>h7@dZJMREE0@e20R20X5041[C\0005PPEdY]20XZ:0Xa08j405D55MR>50"
+ A$ = A$ + "\>504=8PXJ04=X3Ae:2@07F[28X30@aH@DDEA300NI3I1`TU?9ekU?Lh?\3Q"
+ A$ = A$ + ":K8;0V\l9YN_lQ3oQM8dg00Pf\RHR9V9VHRIa8f1a00008"
+ A$ = A$ + "1B:f[H_Y8F4K\XHJHE2:0;52@1[hl4P@\d0[IQE5E\0;=<]^ZESHAED4[P6\"
+ A$ = A$ + "Ha_=\a1BVYYEm;?la1i"
+ A$ = A$ + "4o300RZAPX:4eh=RJCX:5YPPdI1FffFHa2g<@B@bE^22Kki>Jj81L`11LD:>"
+ A$ = A$ + "h8W:0000989[RJE@]ZEADaJ`ZH\HEaH<6A51A\J:PHA14K=1@]PH76F05K01"
+ A$ = A$ + "\00HJJA]PYH0:fX8RHJ2ZHa4D\0ZRED0k]RbQ2:4@8625R893GA\0F3000FJ"
+ A$ = A$ + "80FJ:fPE]dD40d20j0`R>E@ajRYQE`J0P>D1@W60MXB2PG2`VE@`:V:0F3K`"
+ A$ = A$ + "`D<003000\80fRFC[H:60HE04[Y0HMC@ajRHQE]>00=J1@;2PQY2P5RYe4Y3"
+ A$ = A$ + "400400AWZP0PF3P63PF3PF15MH=Hh>SFXJ0D`jD@0`00@@S:80X27VWiU:?7"
+ A$ = A$ + "A?_PX1ZZ^2203R6410S0DQN`XC4K0Ae0650a605@3=100Y?YH17=NINgLc]?"
+ A$ = A$ + "0A[:PA1@DE1@1\6DKnKl_Ko_ao"
+ A$ = A$ + "3moDo3fo9lo>oSdoLHoo@mO@o3`och_=\ZPcHZXU3`Z3K4TSlK3[:hmmm]mM1VC2C7=5HVbL;5000H051S"
+ A$ = A$ + "X8F;Z=f962H?6:HE\Ga>503kE\8VfJH[RP5CC15[0XfX]dJ:HE3[HJC6FXF2"
+ A$ = A$ + "ZHMC5D;\000]000@Q9;8V_lMG:@30XE50=60\03K2330450X0e2\^J=\62HR"
+ A$ = A$ + "50Re]4@]`JPP=H8f\EaV=1DKd00[9:PUF80ZUH=[ZV80Z:000H0@;fV0C1@<"
+ A$ = A$ + "=1`J2PHE;1`jPUF3[Q2HQE1`B31@\40ADCKD4??0@0054d9R:0JD0@W20j@0"
+ A$ = A$ + "@A5MXH]:0HM0PRF3P>0`FDeXP00P1M280XJ><_4H=RR>]Xe0X50[10[:0RAd"
+ A$ = A$ + "H<000hi@d1H0D00[105EK0MRZZ2j01453PF1@43PPXEe600104dQAD0m=004QU9gF`L;5W^3Yb178fA>@0a2@\3RAl<50000b0BZQ]"
+ A$ = A$ + "R5C<=5eR:Rm070:E4A94FZ@LXB8=Ea6]562Pe\ZE]^QZE1\::8R8Z0ZPZZJ:"
+ A$ = A$ + "Z=;86kMnK_:f0J@[>5A:60X8PAE54A30P2ZjD40@J1_@<"
+ A$ = A$ + "D3[S1:XZQfn_]5gAdjd5]MGcJh3B8J100`f=KPda6@?72EcS_38o=?7[N@9;6g\H1=0000C66X;P<FcBZg;?D]L>Co000e2EP\J`;I=@DX88]0W^S4Hj87=G`"
+ A$ = A$ + "E>eDiXLR100081Y\@@\2R1DSEE`H53ZeXRA@Q0`bU:05\lXDF1U2e"
+ A$ = A$ + "2[K2H9286:P:6FH=;A4Da4N[F0Fa6E35`D<@bmlPWdWbTPO0D40[R>e:ZD94"
+ A$ = A$ + "0@4[Z3d80F[H15aHAE5@d9F7Re8PAC4gEG4Q]>4`00001T?eJ;0XJ`R2PXH0"
+ A$ = A$ + "A\XC[e2PF10=2P]44<0[[R08m05a00631j0J@QaRE1@[=:F1:"
+ A$ = A$ + "2=610Kd060\P61@[0"
+ A$ = A$ + "PF:k9dB_P8;AF9ZCUb[Q9VafIBTB3<8:HaVSVKY50DK=0`2F=AA1`@@4eF;P]dZ6PJ3f48"
+ A$ = A$ + "FaFHS0HE[I1PY=P0F10aZVFJ;]R8:PY000H=0PFD0dZ0PF@S]Z08J=8XEJ28"
+ A$ = A$ + "F30;\DE4aB0dQEdYE43P6h6R:C5M8860000010EDeQ>D4SAE;PEe0X6F0HJE"
+ A$ = A$ + "\^URe5`RFE`R>1@E4`:RHM22@0:XPR>D]0P604[28J=P6aX3dX2P>00=0XX2"
+ A$ = A$ + "P:FWB<080PAd9Hce=4@hSP2IlB>H=[J:Z::Jd:JEADA55K4aJ]6]XX2PZ000PAdX8a]f2I5DO2WY]F8alOm:N3Y:M"
+ A$ = A$ + "_GICZ2LQ8:M70[5@A4D15QN@7fZ:XE@AD`2@fL9coeob91RLUSKNm0ZGRRAL"
+ A$ = A$ + "RoW@02Q@;[J]\@Yg6E6dLh4P4hc8UgkTmg[;ZRUGjcb1RM85RM4QiD<0000P=fK15?QI^C5000P4TZHSEDKa>4<]A5\30DE44C[HX>0:;3QU`"
+ A$ = A$ + "A:a4E0a4aZF54KbjFc2[KJ;Aa`6=Aaj08FAAA;Zj@3J145E0d2HA1@A;0j4@"
+ A$ = A$ + "\ZXaZ0l;LA<`:ZR6S0P10040DM]>Em20J0`Z0f2PF@7P6H7LXh1Ykk4608`Y"
+ A$ = A$ + "ZZ:28R:PF0D;4@=]@]1a235@722:6`F0`Y@HTHR9000D0\:F[E4E"
+ A$ = A$ + "a>[ZJA]RRH[PYZR:HJe8PMfHR6cn@dJ30RPPR0P2HDaJ5KB65aH];<0gFcOR50K10K=h^490i`@oP0C5T"
+ A$ = A$ + "?O7NJ6Tb18fJE\20:0X1@@S1[EAm6MjhaACAD0<5eJ0:NM39@YXj44mYL4j="
+ A$ = A$ + "VDg@2D:Z>1AO:7QNS9_Pb2D6IeJDIOjPHYb1RM`1RMPH7HR9<:6c4W:70000"
+ A$ = A$ + "06E444aH5ED[JY=X8f\E1C[I3Z8f2a6aJfB3`4K@4<\^R8FA5DA\DSXPP820"
+ A$ = A$ + "082H5AWFSP5WHI>M^E:ME5c@>ZG2370Zj4=Z6@a`I]fco[X2f1;WWFLF1Li4"
+ A$ = A$ + "JT6VeUOKV3F`k5`4118ok]`C8Td_`G4jUHX5@0fl3I4Dd8TLm?B4@[:VdCVL"
+ A$ = A$ + "YNo=CNo?NeL1<@`@[d\7IVC7o]nWAdJ?0_;IN[>Nd0DDMT@\PF4A0\h^J=Ph"
+ A$ = A$ + "n3hH_Pc6k?10NK3A:nd=;bBk7jSCL>WXf6RDlYKFTUf?d7WhL>AO3004`n65"
+ A$ = A$ + "QJD1DQ1f==\`A;H;W8gbWcDi8RM4QaY34Vc=700008Q@9a6EDA4\HSmP5K\3"
+ A$ = A$ + "D`J=F5DE5101k<<1e6\X660VF1<<1X0@4NDF`WE0Q5CDaeQ8ZPA00hNF1GP5"
+ A$ = A$ + "AeF0D=PF5@]0`@`V0SAI=PQJJCHH0HX0F;PE14K]8Z6@aPXaPHJ2H:R=[VV0"
+ A$ = A$ + "=9M8fPEaZ0ZH1Pe0`:0Pe`V43[0XE4@E40M08ZF[>450<00020VHM410]0f2"
+ A$ = A$ + "HE50]ZR>A;0RF0d2H0@3j`6100000@4[A\8AU?7J>nCOL8PR086`FdF01hk`"
+ A$ = A$ + "T9DL`C4=H51\Z0X:T8FQ0Pe22PP1D1@50DAkd8>6?@jJPP6aF0D04aP8ZPE4"
+ A$ = A$ + "E5A30F3Pe0820VHM5D0400010E5]gfXaW@>JJ5PWf@NbDP51Qb;E=N=7Pd6b"
+ A$ = A$ + "CV2\88DNYZa[i0l=00TC?3iUYET4cI:KC1VC7i87URSLP`X3>@lL;E00004@"
+ A$ = A$ + "X9YMPEk]A4e>A"
+ A$ = A$ + "@;0Z20082PRR6d:Z0:H0=0F[0X8F3J50550EE0A5@aXC]FmLbZ4`@<\58V0F"
+ A$ = A$ + "X0R2PZ505dRe2H51@;0X2XH5=Zf0:[A1]J4<8:6\61@;0XAaJEE1\60d28H0"
+ A$ = A$ + "aF7H3H000404dFf8IDPF04=R>@;07<=E2@WPZ1000`WME050@3Pe:PE4E5A;"
+ A$ = A$ + "0R2o6miJ30008P>03dAXX15m?FR7D9R>PG<2CRI>B=c5XAhPSLPhDa4c>86a4c4c\3>h0"
+ A$ = A$ + "0000`H5`J`H]XRH=K9ZY=Z6VZE]2VVFE]9K`B[J=adB[JJQUVFJHX666V2P5"
+ A$ = A$ + "ReeH0430061@[FE=F@0?gXNOonj\O81IO\;0PF^@j_Z7406555;0P68A3>9k"
+ A$ = A$ + "`g>PSOLG4ANF04<8J@EDPme`TW?0;inVLgF_XJFdi8cnel=lo5;0]XdoJCS7"
+ A$ = A$ + "@gM0eUU_^;ng:6PTDh`OjeRkRZIPJKA_=4BjR`\H[TNI_`G"
+ A$ = A$ + ">AO3006;mL8P<9^Vkc5\=M8EYb1aL`QDLP`0a>JV200001@A@4\31K\H3H_="
+ A$ = A$ + "ZJ_0Fa2HJWH[JJQ2`5236^R95P02:8f\e]1aZf2;A5[KE@UY0>0a25KQHZP1"
+ A$ = A$ + ":P60[2HA4`0Z28R1d0X8fX:R220000RJJJCX5@dY1=H@[0XXXA\F0;:0V:8R"
+ A$ = A$ + "2RQHMeM770FRUFcD4`D14]0R6@dH=:ZX0R60[28Z02XCK3000lD:blTLl?8o;co2l?8"
+ A$ = A$ + "o;cnoCboKl_9o7`oOlo7oO@oocPOg@8>6g\XXeNiHNXe>0Lg@8>6g\XXeNiH"
+ A$ = A$ + "NXe>0l6RBb\XXNDVB2SG:CeZ4T4R;7bCUHcIZBedAYT:1L`124c17AH4000:"
+ A$ = A$ + "H@@=RE045k\J7He@<`Z82RJ:fB5\ZP]`V`B@142RYR=;6:8V0o"
+ A$ = A$ + "0E5E]20600004E]V:28J\PR1DNNQ^ji=40CAe5K]"
+ A$ = A$ + "dUbUNJ>1i=40CAe5K]dUbUNJ>1gdf>m6;QeQ4\4GY:OjdgLdhPH>hPH>@"
+ A$ = A$ + "HV:7UW2000DDeRmPJHHWMF<]7e@DE\HJ:XRXf8P53[PJW=R8F`V]dZFe:fT0"
+ A$ = A$ + "R=HED5D0F@EA\9e@0e4@`PZ1D5d::>NdT`PX8j@E10100@0D1;]9d1PZ5@A5"
+ A$ = A$ + "SF1\E@[P:8Z6DA0\4`@`6d>2020e0[KQQ1PJ0PF`F1\RXXnHZ02FSP100"
+ A$ = A$ + "0000MRP1d0XJ`R64d1J8j:nUU@H2]k[0DWHSR9A"
+ A$ = A$ + "7RkBLAH2fd60H@FIJ^ZDgfe1Q`80o03J`2P=P2PXJ0EdRX0:N61OJ100<06E"
+ A$ = A$ + "M02PF3R63X5SUZQeE3AA\`45]28H05d18\80nM3AXH4R9V6UG:LPEk0`M3AX"
+ A$ = A$ + "H4R9V6UG:LPEk0`;X0AVeY8;\;`d17L`A`>`34`i;JDW@OWRRF"
+ A$ = A$ + "EED\8H@DJo2FneX`667BVhiRlo\@F@Wg^WkSZ`Tb]nXECd2G^E82V\h]]eQN"
+ A$ = A$ + "Y9>Ze41i@=b>geB47Nlgn[KViW083oAVaL;>B[oE300XKioS6>EcXZX8laW]"
+ A$ = A$ + "kFkn4d2XH41DE4VA:0P_g@8XT8FLKWN@8Dk0dN3QPBRHa]Mj1Q@]3@G`d_W3"
+ A$ = A$ + "`2aE^3>T?CIj`D=0H00@1<`64e01=64MJ@E;8RF=J@;P632"
+ A$ = A$ + "ZPE1@AdQ10HYeP8P0P=PF0AEED\117Jd4]>Q100Re:F043XRAePH[5d28ZPH"
+ A$ = A$ + "3fPL?P100@0]6Q:?VV__7ASMl]6DdD2??2ge@<86`08X91`RLf4==IFY^]f6"
+ A$ = A$ + "a500?FYK_jlmO7AS7HE141]:8@aQeJ43X2X:\0g30hi=4a:adFleMn5>WC@N"
+ A$ = A$ + "3A\B<]5OMWOQci4l=00X_QdM6S1HgTlLRLKO:fh0QY34c>h8WNZ0000"
+ A$ = A$ + "0BE9HWMf1H3R531eR5[RQJ5A]g@``F5<\1Dk\XfI;20@i:^0D8\HL4P[@lPF"
+ A$ = A$ + "00032ZFc:H2H80:P80:XZeJ5SF11[0HZ2PUR=eZH9P8Z]D\@1;=41\:XH0Ze"
+ A$ = A$ + "4K2A;FdY=F3P=86HME0@0004@5aJFP50J1DD4=8J01`02VWWFWh`H4bWN10g?2_l]nY>\:AkOP10@=>H<5RH]X2HE14"
+ A$ = A$ + "55<5@@]6X004LPFEA0K50KoB4W=0nM314ahR57Sb35F2k0`M314ahR57Sb35"
+ A$ = A$ + "F2k0`=Q8jCJ=\k`00005A=<<4CA]eD0ed`@aZ"
+ A$ = A$ + "M6RQmfZZE[K3ZYQeA]D]0`jRHPURHQJHEKD]@@50DlRRmmRL6o9344`OF4BLTZNMYBi`D@VfI56n_7E"
+ A$ = A$ + ";4=_5VKGUF:YYRDm0`oH>G:JToJ1:bbPLOR00PjATZ865;O3;CMi\:>lOIlk"
+ A$ = A$ + "e:CR9YNRc_foN6g_Ddlmf`YT]9Yl6`d]^IEi^VW2;B:MeO2`IA0O7Tj8l4nj"
+ A$ = A$ + "C0PWg@B@;]cRSgMOP187Ql6B2JYMFLl^k3<0i8l2ATDZJ=5BgcH9UBaRQbnVF:j3A1aBD<5K@5Xh@dQA5S:HE1\:PReXZ0H4dH9>K:@4mP@:Oabm"
+ A$ = A$ + "JDTh`Qk100`FdR0PQ7R6Eo=nNN]U7X5<000002Ja0F@0aHA0K]lh8@Q@EW90"
+ A$ = A$ + "0V>Acjajb60@0G8QPR4]S?O0:020fJ@4:UCdQ86"
+ A$ = A$ + "4]HDE5`B5\RH=`:PJYPHE`6TCTCRLV:a8f17L`1R5Si9QA000XPA\"
+ A$ = A$ + "XZRAa8RQEk=DaF[PYmPYQ5`REC430C``:F5\Z=:ZY=JXRUF70@4`ddd6=J97:DPE1EaXA5@0XAjf2EHdH0ED4E1\FaHY0H5@`dFHH0`LH3XVP:2HQ"
+ A$ = A$ + "2:H@7X3E5E3J@@30J1455MJ30AajHX8Z9H:PA1D]eYA1d2XR8X0PZe:H0100"
+ A$ = A$ + "Q]B=7Th0"
+ A$ = A$ + "a>RHaV461000X6[E=H44300F\G`F[F4e`F;HSEC4\7\eD@0\0H;6HE1a2C`B"
+ A$ = A$ + ";\1K`ZR0V008H1=R>\ElTHXiokBR^XY0082XXFG@1@;PR0RAdg9;S61\:PRZ"
+ A$ = A$ + "6=2TPcj0[2XH@;Pe0FAdHA;8ZZPZ0RH0AdJ101[E4S]28ZlTg;[@S0R:P8PE"
+ A$ = A$ + "EK20PH=R806@10E@\eP5bL`01=ZR1400Pl[QhW4::jOlHB0PX540000:5\P6"
+ A$ = A$ + "CiaY?0=9l900@LV_^MRWXU9Da8O60000`X=\n;SSokP[Ohm=TRmADCLLkQc`<0f1Yn6Ban8Z9>^m`IH60kPd5h@ZL`1RM@<78VHR5SIa8VhD960000\gR1F1edFk=a6534Kd4C3Kbd`Jf"
+ A$ = A$ + "TQHSV6FZZED;<\D@\@EC\9[HJHH:P208RAdXASEDQjbiJQD_dZH7A[FThR`0"
+ A$ = A$ + "]c_kD?OU4A3F0=6`:2`cBV:88g7;boL8YkjABXc97OIbe`YUYUK71RTA9_J0"
+ A$ = A$ + "751DIEhD8TfnLY7BXiHMXT<0KFR=T8oWSD[dRe@N2ak?928`;@ZTYRbMD;]m"
+ A$ = A$ + "AP5KR7j]5lfXNR3`1;NAd=bYh?1X9>OS<_o32K\5@\"
+ A$ = A$ + "3>h0CL:>:UD10008@X2\a4E\1D[RY]F\1:5li3>DAiaB8BS@]V=JE`jF1<\:"
+ A$ = A$ + "8FXRJQQe]^H98V00X0VRE\1a2@e0FE0aP=ZR1d2X105@=`643@400@1\d`V]"
+ A$ = A$ + "41\TY3EdB:ZL@C@EAE;0000R1A5MXJ@d2:H<2XA4]J5@d0F54KXN[10PC=AU"
+ A$ = A$ + "4mT;o:Y;K?0fk8m86Ue:oTLVfC000jbdhaA:^7eSEEo:b00`dV6Eb47=9HP>"
+ A$ = A$ + "Vf0@@L4>05J2M3]EcNB1\jc>9lb533X0P06dJ@QE1JN0:PH[CE51DD1[8HE1"
+ A$ = A$ + "\eXH6m@\eJ3XJ4aT9M00NN39a]X[9>Nj3DfCi=T4gR^VhhY?@I?MCHWDJ5FG"
+ A$ = A$ + "1ThdMTCgAC7=WC1BU34c>`4c2TBZ000P2F@5k\aNa2F<15\E4eN3KEe@5CeN"
+ A$ = A$ + "DK]3Dk4e`FCED[JHCZ1P100V0VHH366PX45UT>_@lQP2[XX30`6003@43[YV"
+ A$ = A$ + "XHYWn@XD=:iA51dXJ04000`XA[80:Pe8P>1[XXXEE>Z[Pa08000PA;80:P51d2F4]XEF^ng>d:0800008J5"
+ A$ = A$ + "aPH8i\:^o@@CE4Tb101I=cD97OTaXEU10h@801QJAR`Qe;?0ilfAhMPW3=FE"
+ A$ = A$ + "61VM7U:7=MT3>h0a>@\3JkZ?SJAL0:F7H0400KX@QHE=80200PXMcTSALFBU37`O>10@BjGCVZVS^2e_gOM?S1@R"
+ A$ = A$ + "eUiP;@B]c]b[R?<00QBA5Q3NoRm5AoW2W^Ljf@A^=9A6Th@0J[_3X]cFP[3K"
+ A$ = A$ + "c0^QfHJQ2:<4bHgYW:79FZL`1RM@`RAb1000X22FQaH]C_E@2nAhBS"
+ A$ = A$ + "V@21QBES411L02hmIE]KikP6SQ30FA2L`N[mC7F?0QSlaG@<51K11E5=R:n8"
+ A$ = A$ + "[7ElS:00NN31PDZfRQ]76YH>1i=40BYJ;6fNHTRi4l658cJb888ad;]0H;U="
+ A$ = A$ + "7LT3LZ4SH7H78<8VHRA\0cD000P:XF;ReXF;8fKR=fXZMH5K]H_YMVfZ6f88"
+ A$ = A$ + "X00R6dXZ55MXRRX5A@5;=a6\@03C@D1=6DEDE\8864148\Z0R:XHZ\KB<0P[DjmRK\gkRkJ`F;0"
+ A$ = A$ + "000kEB@h3NYnYKWh920^CXB55UYBZ88N76`fLTcl1kEU`74`_YTH1Q\[F>6b"
+ A$ = A$ + "KL10@UBYDMJ478TA0FmQ`7\_=C7\e2000006MJ1SRA43J0[EADe2X1@A0501"
+ A$ = A$ + "=f00?MfIC101jQ?00000000f^00060000h^PXMg4o?co1l?6og`oT@oo5l_7"
+ A$ = A$ + "okaoohk=4P;9V=:VFe6@aLVgK80GB8@Z8NV:7L`QI:000@5\65E\RJE\6ZRPY=FD@]gdNKQPJ;5E\IC5K"
+ A$ = A$ + "6edBK0K6;AE10@1<<<\^U:HJ0GDbgGU3bL@leC040ReYR0J0AaP60E1EE0aP"
+ A$ = A$ + "2PH0;j41<4\;MR=X5SFaXC3J4E]j0@[0J=X2H5[CD140038RXCK`:0J0[88J"
+ A$ = A$ + "AWX5@3H51D8NJ1000\e:0:64E@1`:XeY@76S:J100002M3];Y7emMTaTih?<"
+ A$ = A$ + "@0]6141D0[8PFdR:P24B0oF0nEBh@7=@1]80Z06`06]8000008J=6C6=eN5I"
+ A$ = A$ + "8eg@8=5]FTTLI2kPdUa>]IgY;FZ4c1f1RC5a>@lQ?=Ai07I;ehMS4d^J[f>"
+ A$ = A$ + "mnQLeElZn;bY8?1M6GD5TZC68BT^T\1`DciDACVPSbD7E"
+ A$ = A$ + "ZLjdYOo3f[ofKM>i;Z;8W?i034Rb^BMO4B9S:cQk?Fj8b?"
+ A$ = A$ + "c>_[k2[B0C]8W>62654[ESP5D]<9ZMI0_@1BeCFPR5[E20HKC07U:7i0a>hPH>hP3Ri0Q17V>b1000PPaZ6eJ"
+ A$ = A$ + "ESHc>[A\151SP5RK[000PXCD=X2FE@d2R"
+ A$ = A$ + "6=H=DeQ6m^:0P0\F;2X8P2@ADZkA]d4>k0Hn0=jiaiORNZahZ:00hTL`Y?hm"
+ A$ = A$ + "oaQcT9Z:@Bii7E7]P?4Z`3002UP42B]Gi\d`Bn=0P?6Z3?YC47PiW70bRXE0"
+ A$ = A$ + "bH`D6000SXC:E>8@ZBEZL85796C000"
+ A$ = A$ + "04`P5e:FA\63adV4\ZY5H=3\UFH=E\Ze5a2[RHH9RJSFH=a0a@105@DdXEE5"
+ A$ = A$ + "D=X54]gCB6505@DdQHSA00`HKM:4L@XVZ65<65@5S:H;j4000P_cHYJa:?>e"
+ A$ = A$ + "ZY?LHiN_6PXA\1E3Z6AI`:J]:P2HQ00004\g0"
+ A$ = A$ + "3K<<`NKDCk]XF]c@]HW9fJS=VfIedZ=:RZ0P:8ZE\VRE]0\Z1ZYE@AdXC[2Z"
+ A$ = A$ + "6DE150]R:fH1\1D1KMJA010038ZXaQ?LX@[XAaPZPHSPA\XAE40000\XAE1@"
+ A$ = A$ + "aP2X:2:8J554D153J04dI0H[5A`R086]0JD54153X0X08R60<08WJ`2X2P:6"
+ A$ = A$ + "=:ZZ0J0SP1B:@7nP_CLCNPH04]800"
+ A$ = A$ + "00H4]011CRo3619TB0PHY\KGko4Mj>hhI2<6Y?72Bfc00:Q6=ZX_YO5DRV;5"
+ A$ = A$ + "102YNZNLjmJ0NP3IdHJe14Mi5A<63L8S6C[>PX;_8Rah=V]724[]D=5ShY3R"
+ A$ = A$ + "iP34c>`GnJET?=_V;I1i31PV[McOE>gh?i_iYL^m>L\m5lCNh1SEJVOAKkN"
+ A$ = A$ + "kV\HYE;klKJU2aL1D5PkjMh4F^AIY`UcXe>[1he=TPXTI\0NiYUcIZ^Q44U<"
+ A$ = A$ + "S5`;?YL>3_9c2YjX\Pb0QF[c`@\=W2T:78hP;0000S"
+ A$ = A$ + "AADD<:RRQmfSEk=4K\gN<@\RMHWYE4KE\Ja6E7:P0082FA\9a2@=0;E`2@1d"
+ A$ = A$ + "XZ0R0f8R1AdX08002PRZX132H1D0aJ15@A0E@04AW:2dH3R1A0E_[RQ>T9kd004Rl@LNBBol1FF6hNRdT:"
+ A$ = A$ + "ITBmRP@f?0LK3678]l4LPobiL;An2TiPhd0Po^kl^OAA57472`D>8@HQR=`A"
+ A$ = A$ + "C104oiLX?T_eggQ\Q0QAPS30nN3Q`BFe44lQWQH?]g@8XTE\PTGNJai4m2U1"
+ A$ = A$ + "UI=B:bC[aBoIN>aRg73ak4RM52F600@4"
+ A$ = A$ + "D`jH8X:X0XJ@[E4=PQPX3XiPJ>JD?X2hPB2;@@jcN0P2W8=96]X8EfZD0:1YJGOjSF1L00H8`P5@T=^RVZ0ZE>"
+ A$ = A$ + "H4PTRS=428P5@@[8000<5Q=XPRHZ^DEd:P5J1<0fJ000nR3=^DRf4Tlb26S;"
+ A$ = A$ + ">dh:9Z98iU5<6^2\1KYBl>RHa?LK[EUZBVHNj2000k]c><4;RmREA5K]HP=H"
+ A$ = A$ + "YYHM[[fPJ;D[[FH5[JRUVFA\R5:FgBeVd:820Hg8XXC53F1AD1E9MkW<9XBn"
+ A$ = A$ + "f0g0B14h@3BhUGFE=RAHJFbmHCB=Ok58N>Hhl]?N_nS:0P]1mZRPH@E4[7DEdRNK70;HFA"
+ A$ = A$ + "0FE:nN6WRSUUO=0;PWgchLJ\9le@Rl3PkN1Haf3K]SZ]=\jZQ5\EJ1100PEk"
+ A$ = A$ + "1K5a`Fa>kALd>3;9H9>KdhSLD4ED3ED<\^e<=]Re]RYJ5[[a0:Z:6\B95QAF"
+ A$ = A$ + "HQ3RCLD\`bI1FFhP`0SL@X`bRBFFhP`Pa1Q2;F0\RZNe@DE<00]5Q1QR:]00"
+ A$ = A$ + ";S23:<`X`0S\\;TGLWFVdA:00la9bFSX7aK5;FG6T1X9gc3`agglalcEN]Z"
+ A$ = A$ + "2:V6TU1_HA9[20jKL4A;0h2m4500@aA6E00PEiU`830P<:FP\<\ii^Y175;\"
+ A$ = A$ + "\0IA8Y60%%%0"
+ RestoreFile A$, "drowning.ogg"
+
+ 'iglooblock.ogg
+ A$ = ""
+ A$ = A$ + "?MfIC1P00000000000@X]00000000TW_AJI0N4PM_9WHY=7000002@4[0000"
+ A$ = A$ + "000004W00000000^1ldIW=50000000000000Qf20040000``^4bmB\cooooo"
+ A$ = A$ + "ooooooooooooooooA>PM_9WHY=g:0000HU6LXibCbM68\UVHFmVLRUfLPT48"
+ A$ = A$ + "b0C>Zi9YVciL66WhXLPVCJ>QcYPLPRA1N>98Lm"
+ A$ = A$ + "VYCjX>ZSjX>:d2]@;d2]B[4CaD]ESiJ_6d5OciL>"
+ A$ = A$ + "WciL>WciL>Wc98d@F500P00048T1I@642Q@85BQD8VRYH:W2bP8J2]VcgL>>XIiPV:5K>M`9BeVWTKZ"
+ A$ = A$ + "H^iL>WciLbVcI<>WciL::WIaPV9dJ>Wc9aPVU2JV@[iL>WW4KN@[Y:]VciL6"
+ A$ = A$ + "WcY36WAHL>WcY9]V7TJfH]iL>W5dJJ>ZiBaVciLRD^i9eV;EK>WciL>WciL>"
+ A$ = A$ + "WciL>WZGLjL`i4>WciLRJ_iJiV@GL>WciC6W^gL2QciL>WciL>WciL>WciL2"
+ A$ = A$ + "2=TE100@0001QQ=66gYPPdWS6865QHJ8Cj1M?j`TP63bY@Z7=jXA:UjP@9E6"
+ A$ = A$ + "WD:M22=TE100P00042QD85BQD85BQD85BQD86RQH86bYL:W2ZP:YBZX::Sb\"
+ A$ = A$ + "<;cb\<;cb\<[3k\>[3k`@<43a@[d:aB=EKeH=F[iN>W[iPdJUF[eJ]BYD:UB"
+ A$ = A$ + "YD:8d@F500P00048T1I@6TAQD85BQH8VbYL:W2ZP:P@3IE000800800000?9"
+ A$ = A$ + "?7A7A7A7A7A7A7A7A7A7?7?7A9A9A9A9A;C;C=C?EAEEGIGKIMIMKOKQMQMM"
+ A$ = A$ + "OOMOOOMSOMQQUUUUUUUUUUUUUUUUUUUUUUP@3IE0002000P@842QD85BQD8U"
+ A$ = A$ + "RaH<7ciP>9D212=TE100P00P00000LDLDLLTLTLTT\T\TdTd\d\ldldld4m4"
+ A$ = A$ + "555===E5M5M5e=]5U=U=M=M=U=MEUE]MUU]]U]e]mUU]mmmmmmmmmmmmmmmm"
+ A$ = A$ + "mmmee12=TE10P400P>B>B:B:B:B>>>>BBB0Q6bZ00@600@00PRRSRSSSSTTT"
+ A$ = A$ + "TTUTVTWUWUXVYVYWYWZX:@XQ\:00040040000000PRVRWRYRWRXRWSXSXTXU"
+ A$ = A$ + "YUXVZV[X\Y\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[;@"
+ A$ = A$ + "XQ\:00T000dAbAbAbABABABAbAb18d@F500b000200L:G>@B2BB`C3PSU5llPW6<=1hHI1??Xi1CC00"
+ A$ = A$ + "00000000000@bC3NN`c3VV0TdlPW7llPY900000000000008ii1??hi1CC0B"
+ A$ = A$ + "NN`c3NN`d40000000000000l<=QY94=QZ90?CCHJ2CCHZ200000000000000"
+ A$ = A$ + "000000000000000P000P1L0002`4:3DXQ\R00RC00LhX89100PSTTU5000:B"
+ A$ = A$ + "BFF000HIIii100PTUUW70000000000000000000000000000000000000000"
+ A$ = A$ + "00000000000000000000000000000000000000000000008000H0700P005J8[40P@2007>>FFNNRRRR"
+ A$ = A$ + "VVVVZZLL\\ll4555==EEMMihHIii9:::JJZZjjbbBCccCDDDddDEee5JJNNR"
+ A$ = A$ + "RRRVVZZ^^@CCDddddDEEEee5JJNRVVVVZZZZ^^`cCDddddDEeeee58:JJJJZ"
+ A$ = A$ + "Zjjjj245====EEMMMM1RRRVVVZZ^^^^0CCCCEEEGGGII0VVZZZZ^^bb0DEEE"
+ A$ = A$ + "MMMUUU1XZZZjjjj:;3`eeeEfEFFF60^^^^bbbb2000>`10080SP>9SZ\8\AC"
+ A$ = A$ + "h2?0DXQ\R00R2000<6VBaD:3S9Q@:4JH<94BQ@VDBYB:UZP@ZDBUB54BUBZD"
+ A$ = A$ + "bXD;UJYD54BUBZDZP@ZDBUB100H7h00PMP525J8[40Pl0002SAYHWc9A8URaL>WCZDWD:IYDbH>WciLBYTaL>WciTBYciL>W3"
+ A$ = A$ + ":UBYdiL>WC:UB94jL>WD:UBWciL>100@5h0004P=:bVC`81EXQ\B00B500YXa2\@3IU00T100@H<"
+ A$ = A$ + "8T2Q@8U1Q@:42QD:529000H0700P00@"
+ A$ = A$ + "IAHSc`:9MFQS6LQ6b:108T000`H@863jT@YT:YD52aH>XDBUFZUR]:4RaP@Y"
+ A$ = A$ + "TB]F\5S5?Wc1QB:UJYH:f:N>WC:YD[5SaH\FL]@8UBYF;fR]H\9KQ@:UB]F<"
+ A$ = A$ + "6[eHcXD]DZeRaH<6[aRBiBYD[5KaH\FS5QbVK]F<6[eJ]FC:U?gBaF]FSaJ]"
+ A$ = A$ + "V<:SB6SaJ]6[eJ]8D:U<6CaD\F[eJB8<6O?6SaJG000e3>00D9H4d9IDU5Q=J2Gh1P2=TE20@^"
+ A$ = A$ + "10022YD<6SiL>WciL>W3BA:6caL>W32Q@842Q@:2aH842Q@84:QB:UbH>Wc1Q@84:UBYDBYDWciP@842QBYD:UB:UjL>742Q@XD"
+ A$ = A$ + ":UBYDBYD842Q@842UBYD:UB:UBY@842QBXD:UBYDBYD:52Q@8D:UBYD:UB:U"
+ A$ = A$ + "BY@842QBYD:UBYDBYD:52U@YD:UBYD:UB:UBYD:4:UBYD:UBYDBYD:UBUBYD"
+ A$ = A$ + ":UBYD:UB:UBYDZD:UBYD:UBYDBYD:UBUBYD:UBYD:UB:UBYD:U:UBYD:UBYD"
+ A$ = A$ + "BYD:UBYDYD:UBYD:UB:UBYD:U:UBYD:UBYDBYD:UBYDYD:UBYD:UB:UBYD:U"
+ A$ = A$ + "BYBYD:UBYD:000j0700P0UCU@7S1000PP00`0A8c48@1@16830P3@81Y00X`2QKh9N3?QK`9XCAUj01000000N00h1008I3P8R8JVSS>l"
+ A$ = A$ + "h3@2ATA8Y4C>151000000\30h300895P8R8JVSS>lh3@2ATA8Y4C>1U000@0"
+ A$ = A$ + "4000000@04028P0000000@0000028ldIW=504X8500000000Qf20080000P4"
+ A$ = A$ + ";]HhA`dAmlS?`>:DEP<^L@OLPMDXZ0ILm]^eVR88"
+ A$ = A$ + "H2b5X10VXeXXRE]R6d^fkmjADdXA`FDD4E]J]lW_AlIaO3Jn<@PR224cm<=TZ2;VFmg>m"
+ A$ = A$ + "<=TZ2;VFL0e=ZV46\T13]0@cRZRATKYZ8P>1;Z8H]NOVZPX1Q`DDeeeLW]>4"
+ A$ = A$ + "DFDX;`Qod\P>;9\kLMh?=;XcB2k>GO08?1n6?D4:lT9[Ea2`JHn91@R0eY0Q^aPQJZ41ZC12MS13eD7802V0"
+ A$ = A$ + "6`@;0TZ0Y4T33[`l8n;5MXA5]6D454SASOJg^\A5mh;AEK[PA;[0hnTgbJ"
+ A$ = A$ + "R82QPSL]=0@D3ZeHE4KEE]Zg[?>DdXXAD@aZJeZZJ3:R6AA:DK]FL8J4=R2R"
+ A$ = A$ + "m_XRH=3K`2MXP0Pne`0>OHIjoGC=f?halW;;@i@oJH0G61@Dg4FHdR4O100hhPJ0:S2g60]1^U0HKS790"
+ A$ = A$ + "00eF=8:Pa]503C00000EDa``FC3CaD\E100000005;6S002PG5"
+ A$ = A$ + "KE3D9QN6VR2000002M001D_Ja=1D00000<U08SS108[=B\`eWFhH4XBej93`a0X<;P<["
+ A$ = A$ + "]`]1@?PK90f070fUX0FkkW1T4f61@Hc:1Q5A^;^_`147\0K000X500dTf400"
+ A$ = A$ + ">:>260eHE;28H`J5D15AA0D\P5;000PHHW]800XFE<2@b47SVJMDM000RH4a"
+ A$ = A$ + "H]000HE5DSA\:28000PPJX:0000X00000PHWQ=R0H?000HJWmfI7000PEa@1"
+ A$ = A$ + "000A\H0R92f:0000R551000000k\edT8=b>C000TD4F62O:QB1XD:O^2c8=a"
+ A$ = A$ + "Y4:G2h32O<9:h`2K20000l08H;\1;M000000`d6\=000FJE[Y0000PE\ID03"
+ A$ = A$ + "0XE[>B00\D\60PP]@=16\9;E0000`ZRe000DCKf@1000000adF::Ze\R0000"
+ A$ = A$ + "PE]AK00001Kb0000;R^dJ0PO6A2XO^MFjogF8g[UG;JPl@J3AHgX=`]402l80008[=8bm;8`>Q5Q5QU`W]0;<``N<008_Q8_1;FP=000L3800A"
+ A$ = A$ + "AF:00=SH`REDS8FE5Db6DeJ50000ZZF]BRlV0X7`nE2PX06Gj1\_AT4F49QEn2F`n4000]<0P<]PZZeZRa:FA48"
+ A$ = A$ + "YFS5A\ZaXZ82X08X:DR0:HDAD0410aJ51EEaN31Ea>015A<4A]G]7A051aF\"
+ A$ = A$ + "0ZZfJX2He>C4@100[8000XH;P80000:R80RE3a0eFD000P8XHP``bB9Ygf0K_Y=4cNZL@\DBA0R5PhDHa8V`0a<;V"
+ A$ = A$ + "H>R1000HSMfKE4e`ZQ5;HSY9fR]F`Fk<]J_mZmf\5FHSFCE;<5D1C[HE3\d2"
+ A$ = A$ + "eBK`6]0C3D10@<:JE\5^Je`LEJ0n^;:7@hJL[o4?YiGKVe:f:fJdY6K5SX\n"
+ A$ = A$ + "=HAEa86A[6Efb?\5I9ci38ZJDA`h4N3P7G^:8@VJhJLk7008^bC@ESZ86AE4EQLM1b^90%%%0"
+ RestoreFile A$, "iglooblock.ogg"
+
+ 'scorecount.ogg
+ A$ = ""
+ A$ = A$ + "?MfIC1P00000000000Pm]000000008h>V@A0N4PM_9WHY=7000002@4[0000"
+ A$ = A$ + "000004W00000000^1ldIW=50000000000000fg2004000009ooA4B\cooooo"
+ A$ = A$ + "ooooooooooooooooA>PM_9WHY=g:0000HU6LXibCbM68\UVHFmVLRUfLPT48"
+ A$ = A$ + "b0C>Zi9YVciL66WhXLPVCJ>QcYPLPRA1N>98Lm"
+ A$ = A$ + "VYCjX>ZSjX>:d2]@;d2]B[4CaD]ESiJ_6d5OciL>"
+ A$ = A$ + "WciL>WciL>Wc98d@F500P00048T1I@642Q@85BQD8VRYH:W2bP8J2]VcgL>>XIiPV:5K>M`9BeVWTKZ"
+ A$ = A$ + "H^iL>WciLbVcI<>WciL::WIaPV9dJ>Wc9aPVU2JV@[iL>WW4KN@[Y:]VciL6"
+ A$ = A$ + "WcY36WAHL>WcY9]V7TJfH]iL>W5dJJ>ZiBaVciLRD^i9eV;EK>WciL>WciL>"
+ A$ = A$ + "WciL>WZGLjL`i4>WciLRJ_iJiV@GL>WciC6W^gL2QciL>WciL>WciL>WciL2"
+ A$ = A$ + "2=TE100@0001QQ=66gYPPdWS6865QHJ8Cj1M?j`TP63bY@Z7=jXA:UjP@9E6"
+ A$ = A$ + "WD:M22=TE100P00042QD85BQD85BQD85BQD86RQH86bYL:W2ZP:YBZX::Sb\"
+ A$ = A$ + "<;cb\<;cb\<[3k\>[3k`@<43a@[d:aB=EKeH=F[iN>W[iPdJUF[eJ]BYD:UB"
+ A$ = A$ + "YD:8d@F500P00048T1I@6TAQD85BQH8VbYL:W2ZP:P@3IE000800800000?9"
+ A$ = A$ + "?7A7A7A7A7A7A7A7A7A7?7?7A9A9A9A9A;C;C=C?EAEEGIGKIMIMKOKQMQMM"
+ A$ = A$ + "OOMOOOMSOMQQUUUUUUUUUUUUUUUUUUUUUUP@3IE0002000P@842QD85BQD8U"
+ A$ = A$ + "RaH<7ciP>9D212=TE100P00P00000LDLDLLTLTLTT\T\TdTd\d\ldldld4m4"
+ A$ = A$ + "555===E5M5M5e=]5U=U=M=M=U=MEUE]MUU]]U]e]mUU]mmmmmmmmmmmmmmmm"
+ A$ = A$ + "mmmee12=TE10P400P>B>B:B:B:B>>>>BBB0Q6bZ00@600@00PRRSRSSSSTTT"
+ A$ = A$ + "TTUTVTWUWUXVYVYWYWZX:@XQ\:00040040000000PRVRWRYRWRXRWSXSXTXU"
+ A$ = A$ + "YUXVZV[X\Y\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[;@"
+ A$ = A$ + "XQ\:00T000dAbAbAbABABABAbAb18d@F500b000200L