02-20-2005, 11:53 PM
i'm trying to port this to fb, i realize it's only halfway converted, but fbc is already telling me my indexes are messed for the first put statement. what am i doing wrong?
Code:
'
'DDD OOO N N A L DDD BBB A SSS
'D D O O NN N A A L D D B B A A S
'D D O O N N N AAAAA L D D BBB AAAAA SS
'D D O O N NN A A L D D B B A A S
'DDD OOO N N A A LLLLL DDD .. BBB A A SSS
'
'Base Code by: Donald
'Assistance: Darwin
' Duncan
'
'See credits for full recognition
'
DECLARE SUB Border ()
DECLARE SUB Challenge ()
DECLARE SUB CREDITS ()
DECLARE SUB DrawBackGround ()
DECLARE SUB DrawBox (A!, B!, c!)
DECLARE SUB DrawQuad ()
DECLARE SUB DrawTile (xxx, yyy)
DECLARE SUB InpKey ()
DECLARE FUNCTION InputKey! (k$)
DECLARE SUB Intro ()
DECLARE FUNCTION LegalMove! ()
DECLARE SUB Loadgfx ()
DECLARE SUB LoadLev (lev%, quad%)
DECLARE SUB Palette.FadeIn ()
DECLARE SUB Palette.Fadeout ()
DECLARE SUB Palette.Get (nColor%, pInfo AS ANY)
DECLARE SUB Palette.Set (nColor%, pInfo AS ANY)
DECLARE SUB ScrollDown ()
DECLARE SUB ScrollLeft ()
DECLARE SUB ScrollRight ()
DECLARE SUB ScrollUp ()
DECLARE SUB Text (words$, x, y, col)
DECLARE SUB UpdateInfo ()
DECLARE SUB UpdatePos (k)
DECLARE SUB WAIIT (A!)
DECLARE SUB win ()
COMMON SHARED ddo AS INTEGER
COMMON SHARED xx%
COMMON SHARED yy%
COMMON SHARED rand
COMMON SHARED blast
COMMON SHARED no
COMMON SHARED lev%
COMMON SHARED pi$
COMMON SHARED oldmove
COMMON SHARED maxlev%
DIM SHARED gf$(40 * 20)
DIM SHARED donald1(10 * 19)
DIM SHARED donmask1(10 * 19)
DIM SHARED donald2(10 * 19)
DIM SHARED donmask2(10 * 19)
DIM SHARED donald3(10 * 19)
DIM SHARED donmask3(10 * 19)
DIM SHARED donald4(10 * 19)
DIM SHARED donmask4(10 * 19)
DIM SHARED donald5(10 * 19)
DIM SHARED donmask5(10 * 19)
DIM SHARED donald6(10 * 19)
DIM SHARED donmask6(10 * 19)
DIM SHARED donald7(10 * 19)
DIM SHARED donmask7(10 * 19)
DIM SHARED donald8(10 * 19)
DIM SHARED donmask8(10 * 19)
DIM SHARED donald9(10 * 19)
DIM SHARED donmask9(10 * 19)
DIM SHARED shoofly1(14 * 14)
DIM SHARED flymask1(14 * 14)
DIM SHARED shoofly2(14 * 23)
DIM SHARED flymask2(14 * 23)
DIM SHARED shoofly3(14 * 23)
DIM SHARED flymask3(14 * 23)
DIM SHARED shoofly4(14 * 23)
DIM SHARED flymask4(14 * 23)
DIM SHARED shoofly5(14 * 23)
DIM SHARED flymask5(14 * 23)
DIM SHARED shoofly6(14 * 23)
DIM SHARED flymask6(14 * 23)
DIM SHARED shoofly7(14 * 23)
DIM SHARED flymask7(14 * 23)
DIM SHARED shoofly8(14 * 23)
DIM SHARED flymask8(14 * 23)
DIM SHARED shoofly9(14 * 23)
DIM SHARED flymask9(14 * 23)
DIM SHARED back(14 * 23)
DIM SHARED wall(22 * 22)
DIM SHARED coin(22 * 22)
DIM SHARED piblast1(22 * 22)
DIM SHARED floor(22 * 22)
DIM SHARED gr$(-98 TO 198)
DIM SHARED Lett$(126)
DIM SHARED quad%
DIM SHARED shoo AS INTEGER
DIM SHARED coins(9)
DIM SHARED coinleft AS INTEGER
DIM SHARED piblast AS INTEGER
DIM SHARED pib(9)
DIM SHARED shoofly(9)
DIM SHARED Text1(318 * 8)
DIM SHARED Text2(318 * 8)
DIM SHARED Text3(318 * 8)
DIM SHARED Text4(318 * 8)
DIM SHARED Text5(318 * 8)
DIM SHARED Text6(318 * 8)
DIM SHARED Text7(318 * 8)
DIM SHARED Text8(318 * 8)
DIM SHARED Text9(318 * 8)
DIM SHARED Text10(318 * 8)
DIM SHARED tile$(1 TO 4)
DIM SHARED xdata(1 TO 4)
DIM SHARED ydata(1 TO 4)
DEFINT A-Z
TYPE PaletteType
red AS INTEGER
Green AS INTEGER
Blue AS INTEGER
END TYPE
DIM SHARED Pal AS PaletteType
DIM SHARED pData(0 TO 255, 1 TO 3)
CONST path$ = "c:\"
pi$ = "3.14159265358979323846264338327950288419716939937510582097494"
coinleft = 9
lev% = 2
maxlev% = 6
SCREEN 7, 0, 1, 0
xx% = 7
yy% = 4
RANDOMIZE TIMER
Loadgfx
Intro
quad% = 5
InpKey
DEFSNG A-Z
SUB Border
LINE (0, 0)-(319, 161), 15, B
LINE (1, 1)-(318, 160), 7, B
LINE (2, 2)-(317, 159), 8, B
LINE (3, 3)-(316, 158), 0, B
LINE (0, 162)-(319, 162), 3
LINE (0, 163)-(319, 163), 0
PAINT (1, 167), 0
END SUB
SUB Challenge
FOR e = 1 TO 3
IF shoo = 1 THEN
FOR i = 0 TO 14
FOR ii = 0 TO 23
PSET (xx% + i, yy% + ii), 15
NEXT ii
NEXT i
ELSE
FOR i = 0 TO 10
FOR ii = 0 TO 19
PSET (xx% + i, yy% + ii), 15
NEXT ii
NEXT i
END IF
IF shoo = 0 THEN PUT (xx%, yy%), donald1(0), XOR ELSE PUT (xx%, yy%), shoofly6(0), XOR
DrawBackGround
Border
DrawQuad
PCOPY 1, 0
WAIIT 7
IF shoo = 0 THEN PUT (xx%, yy%), donald1, PSET ELSE PUT (xx%, yy%), shoofly7, PSET
no = 0
DrawBackGround
Border
LINE (10, 168)-(305, 195), 0, BF
DrawQuad
PCOPY 1, 0
WAIIT 7
NEXT e
LET rand2 = INT((11 - 1 + 1) * RND + 1)
0
LOCATE 23, 1: PRINT " ";
ON rand2 GOTO 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
1
PRINT "What is the square root of 36?"
PCOPY 1, 0
LET correctans = 6
GOTO There
2
PRINT "x=5, y=3, & z=2. solve -(5zý+7y-9x)."
PCOPY 1, 0
LET correctans = 4
GOTO There
3
PRINT "Solve for c: 12/27 = c/6.75"
PCOPY 1, 0
LET correctans = 3
GOTO There
4
PRINT "Solve for x: 3x=6"
PCOPY 1, 0
LET correctans = 2
GOTO There
5
PRINT "Find the % of change from 40 to 42."
PCOPY 1, 0
LET correctans = 5
GOTO There
6
PRINT "Area of X: h = 3, b = 4"
PCOPY 1, 0
LET correctans = 6
GOTO There
7
PRINT "ã(fraction) = 22/c, c = ?"
PCOPY 1, 0
LET correctans = 7
GOTO There
8
PRINT "Round to the 1s: 8.95"
PCOPY 1, 0
LET correctans = 9
GOTO There
9
PRINT "Cosine of 0 (don't be tricked)."
PCOPY 1, 0
LET correctans = 1
GOTO There
10
PRINT "6 is 75% of what number?"
PCOPY 1, 0
LET correctans = 8
GOTO There
11
PRINT "2/3 of 9 is what?"
PCOPY 1, 0
LET correctans = 6
GOTO There
There:
LET ans$ = INPUT$(1)
PRINT " ";
IF VAL(ans$) = correctans THEN
PRINT ans$;
PCOPY 1, 0
END IF
IF VAL(ans$) <> correctans THEN
COLOR 4
PRINT ans$;
COLOR 15
END IF
PCOPY 1, 0
IF VAL(ans$) = correctans THEN
WAIIT 5
LINE (10, 168)-(305, 195), 0, BF
UpdateInfo
PCOPY 1, 0
EXIT SUB
ELSE GOTO 0
END IF
END SUB
SUB CREDITS
CLS
COLOR 1
PRINT "Programmer DONALD"
GET (0, 0)-(318, 8), Text1
CLS
PRINT "Assistant Programmer DARWIN"
GET (0, 0)-(318, 8), Text2
CLS
PRINT "Special Effects DUNCAN"
GET (0, 0)-(318, 8), Text3
CLS
PRINT "Special Thanks To"
GET (0, 0)-(318, 8), Text5
CLS
PRINT " GHANDI "
GET (0, 0)-(314, 8), Text6
CLS
PRINT " MICROSOFT "
GET (0, 0)-(314, 8), Text7
CLS
PRINT " HTTP://WWW.QBASIC.COM/ "
GET (0, 0)-(318, 8), Text8
CLS
PRINT " JAWS-V SOFT "
GET (0, 0)-(314, 8), Text9
CLS
PRINT " JESUS CHRIST "
GET (0, 0)-(318, 8), Text10
CLS
COLOR 4
PRINT "Thank You For Playing The Game!"
GET (0, 0)-(318, 8), Text4
FOR j = 190 TO -185 STEP -1
IF j >= 0 THEN PUT (0, j), Text1
IF j >= -40 AND j + 40 < 190 THEN PUT (0, j + 40), Text2
IF j >= -50 AND j + 50 < 190 THEN PUT (0, j + 50), Text3
IF j >= -100 AND j + 100 < 190 THEN PUT (0, j + 100), Text5
IF j >= -130 AND j + 130 < 190 THEN PUT (4, j + 130), Text6
IF j >= -140 AND j + 140 < 190 THEN PUT (4, j + 140), Text7
IF j >= -150 AND j + 150 < 190 THEN PUT (0, j + 150), Text8
IF j >= -160 AND j + 160 < 190 THEN PUT (4, j + 160), Text9
IF j >= -170 AND j + 170 < 190 THEN PUT (0, j + 170), Text10
LOCATE 1, 1
PRINT " "
LOCATE 25, 1
PRINT " "
PCOPY 1, 0
CLS
WAIIT .1
NEXT j
WAIIT 4
Palette.Fadeout
PUT (0, 75), Text4
PCOPY 1, 0
Palette.FadeIn
COLOR 0, 0
WAIIT 15
SYSTEM
END SUB
SUB DrawBackGround
IF no = 0 THEN
SCREEN , , 2, 0
FOR i = 1 TO 7 * 14
gr$(i) = LCASE$(gr$(i))
IF gr$(i) = "w" THEN PUT (f * 22 + 6, l * 22 + 4), wall, PSET
IF gr$(i) = "s" THEN DrawTile f, l: PUT (f * 22 + 10, l * 22 + 8), flymask1, AND: PUT (f * 22 + 10, l * 22 + 8), shoofly1, OR
IF gr$(i) = "c" THEN PUT (f * 22 + 6, l * 22 + 4), coin, PSET
IF gr$(i) = "p" THEN PUT (f * 22 + 6, l * 22 + 4), piblast1, PSET
IF gr$(i) = "t" THEN DrawTile f, l
f = f + 1
IF f = 14 THEN f = 0: l = l + 1
NEXT i
SCREEN , , 1, 0
PCOPY 2, 1
no = 1
ELSEIF no = 1 THEN
EXIT SUB
END IF
END SUB
SUB DrawBox (A, B, c)
FOR yyy = B TO B + 3
FOR xxx = A TO A + 3
PSET (xxx, yyy), c
NEXT xxx
NEXT yyy
END SUB
SUB DrawQuad
IF quad% = 1 THEN DrawBox 296, 1, 2 ELSE DrawBox 296, 1, 0
IF quad% = 2 THEN DrawBox 301, 1, 2 ELSE DrawBox 301, 1, 0
IF quad% = 3 THEN DrawBox 306, 1, 2 ELSE DrawBox 306, 1, 0
IF quad% = 4 THEN DrawBox 296, 6, 2 ELSE DrawBox 296, 6, 0
IF quad% = 5 THEN DrawBox 301, 6, 2 ELSE DrawBox 301, 6, 0
IF quad% = 6 THEN DrawBox 306, 6, 2 ELSE DrawBox 306, 6, 0
IF quad% = 7 THEN DrawBox 296, 11, 2 ELSE DrawBox 296, 11, 0
IF quad% = 8 THEN DrawBox 301, 11, 2 ELSE DrawBox 301, 11, 0
IF quad% = 9 THEN DrawBox 306, 11, 2 ELSE DrawBox 306, 11, 0
PCOPY 1, 0
END SUB
SUB DrawTile (xxx, yyy)
PUT (xxx * 22 + 6, yyy * 22 + 4), floor, PSET
'FOR f% = xxx * 22 TO xxx * 22 + 22
' FOR l% = yyy * 22 TO yyy * 22 + 22
' PSET (f%, l%), 15
' NEXT l%
'NEXT f%
END SUB
SUB InpKey
LET rand = INT((50 - 20 + 1) * RND + 20)
LoadLev lev%, quad%
UpdatePos 3
UpdateInfo
PCOPY 1, 0
PUT (xx%, yy%), back, PSET
coinleft = 9
DoLoop:
DO
DO
LET A$ = INKEY$
LOOP UNTIL A$ <> ""
LET move = InputKey(A$)
SELECT CASE move
CASE IS = 1 'left
IF xx% > 3 THEN xx% = xx% - 1
IF shoo = 1 AND xx% > 5 THEN xx% = xx% - 2
IF LegalMove = 1 THEN xx% = xx% + 1
CASE IS = 2 'right
IF shoo = 0 AND xx% < 306 THEN xx% = xx% + 1
IF shoo = 1 AND xx% < 300 THEN xx% = xx% + 3
IF LegalMove = 1 THEN xx% = xx% - 1
CASE IS = 3 'down
IF shoo = 0 AND yy% < 139 THEN yy% = yy% + 1
IF shoo = 1 AND yy% < 135 THEN yy% = yy% + 3
IF LegalMove = 1 THEN yy% = yy% - 1
CASE IS = 4 'up
IF yy% > 3 THEN yy% = yy% - 1
IF shoo = 1 AND yy% > 5 THEN yy% = yy% - 2
IF LegalMove = 1 THEN yy% = yy% + 1
CASE IS = 5
CREDITS
CASE IS = 6
IF piblast = 1 THEN blast = 1: GOTO UPDT
CASE IS = 7
GOTO DoLoop
END SELECT
UPDT:
UpdatePos move
IF move <> 6 AND move <> 5 AND move <> 7 THEN oldmove = move
movenum = movenum + 1
IF rand = movenum THEN
Challenge
LET rand = INT((500 - 50 + 1) * RND + 50)
movenum = 0
END IF
PCOPY 1, 0
PUT (xx%, yy%), back, PSET
LOOP
END SUB
FUNCTION InputKey (k$)
IF k$ = CHR$(0) + CHR$(75) THEN
InputKey = 1
ELSEIF k$ = CHR$(0) + CHR$(77) THEN InputKey = 2
ELSEIF k$ = CHR$(0) + CHR$(80) THEN InputKey = 3
ELSEIF k$ = CHR$(0) + CHR$(72) THEN InputKey = 4
ELSEIF LCASE$(k$) = "q" OR LCASE$(k$) = "x" THEN InputKey = 5
ELSEIF k$ = " " THEN InputKey = 6
ELSE InputKey = 7
END IF
IF coinleft = 0 THEN
lev% = lev% + 1: coinleft = 9
FOR iii = 1 TO 9
coins(iii) = 0
NEXT iii
shoo = 0: piblast = 0: quad% = 5: xx% = 7: yy% = 4
LoadLev lev%, quad%: no = 0: DrawBackGround
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
EXIT FUNCTION
END IF
END FUNCTION
SUB Intro
'init
SCREEN , , 3, 0
PAINT (0, 0), 15
PUT (0, 0), wall, PSET
PUT (0, 22), coin, PSET
PUT (0, 44), piblast1, PSET
PUT (0, 66), floor, PSET
PUT (0, 88), floor, PSET
PUT (4, 92), flymask1, AND
PUT (4, 92), shoofly1, OR
OPEN path$ + "donald.fnt" FOR INPUT AS #1
FOR i = 32 TO 126
LINE INPUT #1, Lett$(i)
NEXT i
CLOSE #1
SCREEN , , 1, 0
'PAINT (0, 0), 1
'LINE (255, 150)-(56, 150)
'LINE (0, 151)-(360, 151), 2
'PAINT (1, 171), 2
'CIRCLE (20, 17), 16, 14
'PAINT (15, 15), 14
'PCOPY 1, 0
'LET x = (255 + 56) / 2
'SCREEN , , 0, 0
'FOR y = 0 TO 149
'PSET (x, y), 15
'WAIIT 1
'NEXT y
'FOR y = 149 TO 40 STEP -1
'LINE (x, y)-(x, 0)
'LINE (255, 150)-(x, y)
'LINE (56, 150)-(x, y)
'PAINT (x, y + 1), 15
'WAIIT 1.2
'NEXT y
'FOR y = 40 TO 0 STEP -1
'PSET (x, y), 1
'WAIIT 1
'NEXT y
'PSET (x, 0), 1
'PCOPY 0, 1
'LOCATE , 12
'PRINT "THE TRIANGLE MACHINE"
'WAIIT 50
'LINE (90, 0)-(205, 120), 14
'CIRCLE (205, 120), 8, 4
'CIRCLE (205, 120), 7, 14
'CIRCLE (205, 120), 6, 15
'CIRCLE (205, 120), 5, 3
'PAINT (205, 120), 3
'WAIIT 20
'PCOPY 1, 0
'xx = x
'PCOPY 0, 1
'SCREEN , , 1, 0
'FOR y = 40 TO 149
'LINE (255, 150)-(x, y), 1
'LINE (56, 150)-(x, y), 1
'IF ddo = 0 THEN
' GET (xx, 130)-(xx + 11, 149), back
' PUT (xx, 131), donmask6, AND
' PUT (xx, 131), donald6, OR
' ddo = 1
'ELSEIF ddo = 1 THEN
' GET (xx, 131)-(xx + 11, 149), back
' PUT (xx, 131), donmask7, AND
' PUT (xx, 131), donald7, OR
' ddo = 0
'END IF
'PCOPY 1, 0
'PUT (xx, 131), back, PSET
'xx = xx - 1
'WAIIT 1
'NEXT y
'PUT (xx, 131), donmask4, AND
'PUT (xx, 131), donald4, OR
'PCOPY 1, 0
'SCREEN , , 0, 0
PAINT (0, 0), 15
Border
y = 75
FOR x = 5 TO 75
LINE (x - 1, y - 50)-(x + 100, y + 50), 15, BF
LINE (x, y - 50)-(x, y + 50), 0
LINE (x, y - 50)-(x + 100, y), 0
LINE (x + 100, y)-(x, y + 50), 0
LINE (x + 10, y - 35)-(x + 10, y + 35), 0
LINE (x + 10, y - 35)-(x + 80, y), 0
LINE (x + 80, y)-(x + 10, y + 35), 0
LINE (x + 10, y - 5)-(x + 20, y), 0
LINE (x + 10, y + 5)-(x + 20, y), 0
LINE (x + 20, y)-(x + 33, y), 0
LINE (x + 29, y - 5)-(x + 29, y + 5), 0
CIRCLE (x + 38, y), 5, 0
PCOPY 1, 0
NEXT x
WAIIT 10
LINE (x + 50, y - 24)-(x + 55, y - 34), 0
LINE (x + 50, y - 60)-(x + 165, y - 34), 0, B
Text "Oh no! It's the", x + 55, y - 55, 0
Text "Invisible Machine!", x + 55, y - 45, 0
PCOPY 1, 0
WAIIT 30
LINE (x + 50, y - 24)-(x + 165, y - 60), 15, BF
LINE (x - 1, y - 50)-(x + 99, y), 0
LINE (315, y + 49)-(x + 98, y - 1), 4
LINE (315, y + 50)-(x + 98, y), 12
LINE (315, y + 51)-(x + 98, y + 1), 4
PCOPY 1, 0
WAIIT 10
LINE (x + 50, y - 24)-(x + 55, y - 34), 0
LINE (x + 50, y - 50)-(x + 87, y - 34), 0, B
Text "Ouch!", x + 55, y - 45, 0
PCOPY 1, 0
WAIIT 17
FOR i = 1 TO 75
LINE (x - 1, y - 50)-(x + 100, y + 50), 15, BF
LINE (x + 10, y - 5)-(x + 20, y), 0
LINE (x + 10, y + 5)-(x + 20, y), 0
LINE (x + 20, y)-(x + 33, y), 0
LINE (x + 29, y - 5)-(x + 29, y + 5), 0
CIRCLE (x + 38, y), 5, 0
PCOPY 1, 0
LINE (x, y - 50)-(x, y + 50), 0
LINE (x, y - 50)-(x + 100, y), 0
LINE (x + 100, y)-(x, y + 50), 0
LINE (x + 10, y - 35)-(x + 10, y + 35), 0
LINE (x + 10, y - 35)-(x + 80, y), 0
LINE (x + 80, y)-(x + 10, y + 35), 0
LINE (x + 10, y - 5)-(x + 20, y), 0
LINE (x + 10, y + 5)-(x + 20, y), 0
LINE (x + 20, y)-(x + 33, y), 0
LINE (x + 29, y - 5)-(x + 29, y + 5), 0
CIRCLE (x + 38, y), 5, 0
PCOPY 1, 0
NEXT i
LINE (x - 1, y - 50)-(x + 100, y + 50), 15, BF
LINE (x + 10, y - 5)-(x + 20, y), 0
LINE (x + 10, y + 5)-(x + 20, y), 0
LINE (x + 20, y)-(x + 33, y), 0
LINE (x + 29, y - 5)-(x + 29, y + 5), 0
CIRCLE (x + 38, y), 5, 0
PCOPY 1, 0
WAIIT 8
FOR i = 1 TO 75
LINE (x - 1, y - 50)-(x + 100, y + 50), 15, BF
LINE (x + 10, y - 5)-(x + 20, y), 0
LINE (x + 10, y + 5)-(x + 20, y), 0
LINE (x + 20, y)-(x + 33, y), 0
LINE (x + 29, y - 5)-(x + 29, y + 5), 0
CIRCLE (x + 38, y), 5, 0
PCOPY 1, 0
LINE (x - 1, y - 50)-(x + 100, y + 50), 15, BF
PUT (x + 20, y), donmask1, AND
PUT (x + 20, y), donald1, OR
PCOPY 1, 0
NEXT i
LINE (x - 1, y - 50)-(x + 100, y + 50), 15, BF
FOR i = y TO 138
LINE (x + 20, i - 1)-(x + 30, i + 19), 15, BF
PUT (x + 20, i), donmask1, AND
PUT (x + 20, i), donald1, OR
PCOPY 1, 0
WAIIT .9
NEXT i
y = 138
LINE (x + 20, y - 1)-(x + 30, y + 19), 15, BF
PUT (x + 20, y), donmask2, AND
PUT (x + 20, y), donald2, OR
PCOPY 1, 0
WAIIT 8
LINE (x + 20, y - 1)-(x + 30, y + 19), 15, BF
PUT (x + 20, y), donmask1, AND
PUT (x + 20, y), donald1, OR
PCOPY 1, 0
WAIIT 8
LINE (x + 20, y - 1)-(x + 30, y + 19), 15, BF
PUT (x + 20, y), donmask6, AND
PUT (x + 20, y), donald6, OR
PCOPY 1, 0
WAIIT 8
LINE (x + 20, y - 1)-(x + 30, y + 19), 15, BF
PUT (x + 20, y), donmask4, AND
PUT (x + 20, y), donald4, OR
PCOPY 1, 0
WAIIT 8
FOR i = x TO -16 STEP -1
LINE (i + 20, y - 1)-(i + 30, y + 19), 15, BF
IF dddo = 0 THEN
PUT (i + 20, y), donmask6, AND
PUT (i + 20, y), donald6, OR
dddo = 1
ELSE
PUT (i + 20, y), donmask7, AND
PUT (i + 20, y), donald7, OR
dddo = 0
END IF
PCOPY 1, 0
WAIIT 1
NEXT i
LINE (4, y - 1)-(14, y + 19), 15, BF
PCOPY 1, 0
SCREEN , , 0, 0
VIEW PRINT 23 TO 25
LOCATE , 3
PRINT "Donald is stranded on a strange"
LOCATE , 3
PRINT "planet. Help him by getting all"
WAIIT 40
LOCATE , 3
PRINT "of the coins needed to buy replacement"
WAIIT 40
LOCATE , 3
PRINT "parts for the Triangle Machine!"
WAIIT 40
LOCATE , 3
PRINT "Use arrows to move, space to shoot."
WAIIT 40
LOCATE , 3
PRINT "Good Luck!"
WHILE INKEY$ = "": WEND
VIEW PRINT
SCREEN , , 1, 0
CLS
END SUB
FUNCTION LegalMove
'xx%, yy%
'FOR i = 1 TO 7 * 14
' gr$(i) = LCASE$(gr$(i))
' IF shoo = 0 THEN
' IF gr$(i) = "w" THEN
' IF yy% >= l * 22 - 20 + 5 AND yy% <= l * 22 + 20 + 5 AND xx% >= f * 22 - 11 + 8 AND xx% <= f * 22 + 19 + 8 THEN LegalMove = 1: EXIT FUNCTION
' END IF
' IF gr$(i) = "s" THEN
' IF yy% >= l * 22 - 20 + 5 AND yy% <= l * 22 + 20 + 5 AND xx% >= f * 22 - 11 + 8 AND xx% <= f * 22 + 19 + 8 THEN
' gr$(i) = "t": DrawTile f, l: shoo = 1: shoofly(quad%) = 1: UpdateInfo: LegalMove = 0
' EXIT FUNCTION
' END IF
' END IF
' END IF
' IF gr$(i) = "c" THEN
' IF yy% >= l * 22 - 20 + 5 AND yy% <= l * 22 + 20 + 5 AND xx% >= f * 22 - 11 + 8 AND xx% <= f * 22 + 19 + 8 THEN
' gr$(i) = "t": DrawTile f, l: coins(quad%) = 1: coinleft = coinleft - 1: UpdateInfo
' END IF
' END IF
' IF gr$(i) = "p" THEN
' IF yy% >= l * 22 - 20 + 5 AND yy% <= l * 22 + 20 + 5 AND xx% >= f * 22 - 11 + 8 AND xx% <= f * 22 + 19 + 8 THEN piblast = 1: gr$(i) = "t": DrawTile f, l: UpdateInfo: LegalMove = 0: EXIT FUNCTION
' END IF
' f = f + 1
' IF f = 14 THEN f = 0: l = l + 1
'NEXT i
'y = (1/22)x + (3/22)
'or
' x + 3
'y = -------
' 22
'and the second one is...
' x + 15
'y = --------
' 22
'I get the integer value by using integer divide (\) instead of floating-point
'divide (/)
'another old method
'FOR i = 7 TO 139 STEP 22
' u = u + 1
' IF yy% >= i THEN row = u
'NEXT i
'u = 0
'FOR i = 19 TO 305 STEP 22
' u = u + 1
' IF xx% >= i THEN column = u
'NEXT i
'nowtile$ = gr$((row - 1) * 14 + (column + 1))
IF shoo = 0 THEN
tile$(1) = gr$((((yy% + 18) \ 22 - 1) * 14) + ((xx% + 17) \ 22))
xdata(1) = ((xx% + 17) \ 22)
ydata(1) = ((yy% + 18) \ 22 - 1)
tile$(2) = gr$((((yy% + 37) \ 22 - 1) * 14) + ((xx% + 17) \ 22))
xdata(2) = ((xx% + 17) \ 22)
ydata(2) = ((yy% + 37) \ 22 - 1)
tile$(3) = gr$((((yy% + 18) \ 22 - 1) * 14) + ((xx% + 24) \ 22))
xdata(3) = ((xx% + 24) \ 22)
ydata(3) = ((yy% + 18) \ 22 - 1)
tile$(4) = gr$((((yy% + 37) \ 22 - 1) * 14) + ((xx% + 24) \ 22))
xdata(4) = ((xx% + 24) \ 22)
ydata(4) = ((yy% + 37) \ 22 - 1)
ELSE
tile$(1) = gr$((((yy% + 18) \ 22 - 1) * 14) + ((xx% + 17) \ 22))
xdata(1) = ((xx% + 17) \ 22)
ydata(1) = ((yy% + 18) \ 22 - 1)
tile$(2) = gr$((((yy% + 41) \ 22 - 1) * 14) + ((xx% + 17) \ 22))
xdata(2) = ((xx% + 17) \ 22)
ydata(2) = ((yy% + 41) \ 22 - 1)
tile$(3) = gr$((((yy% + 18) \ 22 - 1) * 14) + ((xx% + 28) \ 22))
xdata(3) = ((xx% + 28) \ 22)
ydata(3) = ((yy% + 18) \ 22 - 1)
tile$(4) = gr$((((yy% + 41) \ 22 - 1) * 14) + ((xx% + 28) \ 22))
xdata(4) = ((xx% + 28) \ 22)
ydata(4) = ((yy% + 41) \ 22 - 1)
END IF
IF shoo = 0 THEN
FOR i = 1 TO 4
tile$(i) = LCASE$(tile$(i))
IF tile$(i) = "w" THEN
LegalMove = 1
EXIT FUNCTION
END IF
NEXT i
END IF
FOR i = 1 TO 4
tile$(i) = LCASE$(tile$(i))
IF shoo = 0 THEN
IF tile$(i) = "s" THEN
gr$(ydata(i) * 14 + xdata(i)) = "t"
DrawTile xdata(i) - 1, ydata(i)
shoo = 1
shoofly(quad%) = 1
UpdateInfo
LegalMove = 0
EXIT FUNCTION
END IF
END IF
IF tile$(i) = "c" THEN
gr$(ydata(i) * 14 + xdata(i)) = "t"
DrawTile xdata(i) - 1, ydata(i)
coins(quad%) = 1
coinleft = coinleft - 1
UpdateInfo
LegalMove = 0
EXIT FUNCTION
END IF
IF tile$(i) = "p" THEN
piblast = 1
gr$(ydata(i) * 14 + xdata(i)) = "t"
DrawTile xdata(i) - 1, ydata(i)
UpdateInfo
LegalMove = 0
EXIT FUNCTION
END IF
NEXT i
END FUNCTION
SUB Loadgfx
BLOAD path$ + "donald1.don", VARPTR(donald1(0))
BLOAD path$ + "donmask1.don", VARPTR(donmask1(0))
BLOAD path$ + "donald2.don", VARPTR(donald2(0))
BLOAD path$ + "donmask2.don", VARPTR(donmask2(0))
BLOAD path$ + "donald3.don", VARPTR(donald3(0))
BLOAD path$ + "donmask3.don", VARPTR(donmask3(0))
BLOAD path$ + "donald4.don", VARPTR(donald4(0))
BLOAD path$ + "donmask4.don", VARPTR(donmask4(0))
BLOAD path$ + "donald5.don", VARPTR(donald5(0))
BLOAD path$ + "donmask5.don", VARPTR(donmask5(0))
BLOAD path$ + "donald6.don", VARPTR(donald6(0))
BLOAD path$ + "donmask6.don", VARPTR(donmask6(0))
BLOAD path$ + "donald7.don", VARPTR(donald7(0))
BLOAD path$ + "donmask7.don", VARPTR(donmask7(0))
BLOAD path$ + "donald8.don", VARPTR(donald8(0))
BLOAD path$ + "donmask8.don", VARPTR(donmask8(0))
BLOAD path$ + "donald9.don", VARPTR(donald9(0))
BLOAD path$ + "donmask9.don", VARPTR(donmask9(0))
BLOAD path$ + "shoofly1.don", VARPTR(shoofly1(0))
BLOAD path$ + "flymask1.don", VARPTR(flymask1(0))
BLOAD path$ + "shoofly2.don", VARPTR(shoofly2(0))
BLOAD path$ + "flymask2.don", VARPTR(flymask2(0))
BLOAD path$ + "shoofly3.don", VARPTR(shoofly3(0))
BLOAD path$ + "flymask3.don", VARPTR(flymask3(0))
BLOAD path$ + "shoofly4.don", VARPTR(shoofly4(0))
BLOAD path$ + "flymask4.don", VARPTR(flymask4(0))
BLOAD path$ + "shoofly5.don", VARPTR(shoofly5(0))
BLOAD path$ + "flymask5.don", VARPTR(flymask5(0))
BLOAD path$ + "shoofly6.don", VARPTR(shoofly6(0))
BLOAD path$ + "flymask6.don", VARPTR(flymask6(0))
BLOAD path$ + "shoofly7.don", VARPTR(shoofly7(0))
BLOAD path$ + "flymask7.don", VARPTR(flymask7(0))
BLOAD path$ + "shoofly8.don", VARPTR(shoofly8(0))
BLOAD path$ + "flymask8.don", VARPTR(flymask8(0))
BLOAD path$ + "shoofly9.don", VARPTR(shoofly9(0))
BLOAD path$ + "flymask9.don", VARPTR(flymask9(0))
BLOAD path$ + "wall.gfx", VARPTR(wall(0))
BLOAD path$ + "coin.gfx", VARPTR(coin(0))
BLOAD path$ + "piblast1.gfx", VARPTR(piblast1(0))
BLOAD path$ + "floor.gfx", VARPTR(floor(0))
END SUB
SUB LoadLev (lev%, quad%)
IF lev% = maxlev% + 1 THEN UpdateInfo
OPEN path$ + "Level" + RTRIM$(LTRIM$(STR$(lev%))) + ".dat" FOR INPUT AS #1
FOR i = 1 TO quad% - 1
IF quad% = 1 THEN EXIT FOR
DO
INPUT #1, dummy$
LOOP UNTIL dummy$ = ""
NEXT i
A$ = " "
DO WHILE A$ <> ""
LINE INPUT #1, A$
gfx$ = gfx$ + A$
LOOP
FOR i = 1 TO 7 * 14
gr$(i) = MID$(gfx$, 1, 1)
IF LCASE$(gr$(i)) = "c" AND coins(quad%) = 1 THEN gr$(i) = "t"
IF LCASE$(gr$(i)) = "s" AND shoo = 1 THEN gr$(i) = "t"
IF LCASE$(gr$(i)) = "p" AND piblast = 1 THEN gr$(i) = "t"
IF LEN(gfx$) >= 2 THEN gfx$ = MID$(gfx$, 2, LEN(gfx$) - 1)
NEXT i
CLOSE #1
no = 0
DrawBackGround
UpdateInfo
END SUB
DEFINT A-Z
SUB Palette.FadeIn
DIM tt(1 TO 3)
FOR i = 1 TO 64
WAIT &H3DA, 8, 8
FOR O = 0 TO 255
Palette.Get O, Pal
tt(1) = Pal.red
tt(2) = Pal.Green
tt(3) = Pal.Blue
IF tt(1) < pData(O, 1) THEN tt(1) = tt(1) + 1
IF tt(2) < pData(O, 2) THEN tt(2) = tt(2) + 1
IF tt(3) < pData(O, 3) THEN tt(3) = tt(3) + 1
Pal.red = tt(1)
Pal.Green = tt(2)
Pal.Blue = tt(3)
Palette.Set O, Pal
NEXT O
WAIIT .2
NEXT i
END SUB
SUB Palette.Fadeout
DIM tt(1 TO 3)
FOR i = 0 TO 255
Palette.Get i, Pal
pData(i, 1) = Pal.red
pData(i, 2) = Pal.Green
pData(i, 3) = Pal.Blue
NEXT i
FOR i = 1 TO 64
WAIT &H3DA, 8, 8
FOR O = 0 TO 255
Palette.Get O, Pal
tt(1) = Pal.red
tt(2) = Pal.Green
tt(3) = Pal.Blue
IF tt(1) > 0 THEN tt(1) = tt(1) - 1
IF tt(2) > 0 THEN tt(2) = tt(2) - 1
IF tt(3) > 0 THEN tt(3) = tt(3) - 1
Pal.red = tt(1)
Pal.Green = tt(2)
Pal.Blue = tt(3)
Palette.Set O, Pal
NEXT O
WAIIT .2
NEXT i
END SUB
SUB Palette.Get (nColor%, pInfo AS PaletteType)
OUT &H3C6, &HFF
OUT &H3C7, nColor%
pInfo.red = INP(&H3C9)
pInfo.Green = INP(&H3C9)
pInfo.Blue = INP(&H3C9)
END SUB
SUB Palette.Set (nColor%, pInfo AS PaletteType)
OUT &H3C6, &HFF
OUT &H3C8, nColor%
OUT &H3C9, pInfo.red
OUT &H3C9, pInfo.Green
OUT &H3C9, pInfo.Blue
END SUB
DEFSNG A-Z
SUB ScrollDown
x% = xx%
IF shoo = 0 THEN y% = 137 ELSE y% = 133
quad% = quad% - 3
LoadLev lev%, quad%
IF shoo = 0 THEN
tile$(1) = gr$((((y% + 18) \ 22 - 1) * 14) + ((x% + 17) \ 22))
tile$(2) = gr$((((y% + 37) \ 22 - 1) * 14) + ((x% + 17) \ 22))
tile$(3) = gr$((((y% + 18) \ 22 - 1) * 14) + ((x% + 24) \ 22))
tile$(4) = gr$((((y% + 37) \ 22 - 1) * 14) + ((x% + 24) \ 22))
ELSE
GOTO ScrolDown
END IF
FOR i = 1 TO 4
IF LCASE$(tile$(i)) = "w" THEN quad% = quad% + 3: LoadLev lev%, quad%: EXIT SUB
NEXT i
ScrolDown:
CLS
PAINT (0, 0), 15
Border
UpdateInfo
IF shoo = 0 THEN
FOR yy% = 5 TO 137
IF ddo = 0 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), donmask8, AND
PUT (xx%, yy%), donald8, OR
ELSEIF ddo = 1 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), donmask9, AND
PUT (xx%, yy%), donald9, OR
END IF
WAIIT .3
DrawQuad
PCOPY 1, 0
PUT (xx%, yy%), back, PSET
NEXT yy%
ELSEIF shoo = 1 THEN
FOR yy% = 6 TO 133
IF ddo = 0 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), flymask8, AND
PUT (xx%, yy%), shoofly8, OR
ELSEIF ddo = 1 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), flymask9, AND
PUT (xx%, yy%), shoofly9, OR
END IF
WAIIT .3
DrawQuad
PCOPY 1, 0
PUT (xx%, yy%), back, PSET
NEXT yy%
END IF
no = 0: DrawBackGround
UpdateInfo
END SUB
SUB ScrollLeft
y% = yy%
x% = 7
quad% = quad% + 1
LoadLev lev%, quad%
IF shoo = 0 THEN
tile$(1) = gr$((((y% + 18) \ 22 - 1) * 14) + ((x% + 17) \ 22))
tile$(2) = gr$((((y% + 37) \ 22 - 1) * 14) + ((x% + 17) \ 22))
tile$(3) = gr$((((y% + 18) \ 22 - 1) * 14) + ((x% + 24) \ 22))
tile$(4) = gr$((((y% + 37) \ 22 - 1) * 14) + ((x% + 24) \ 22))
ELSE
GOTO ScrolLeft
END IF
FOR i = 1 TO 4
IF LCASE$(tile$(i)) = "w" THEN quad% = quad% - 1: LoadLev lev%, quad%: EXIT SUB
NEXT i
ScrolLeft:
CLS
PAINT (0, 0), 15
Border
UpdateInfo
IF shoo = 0 THEN
FOR xx% = 303 TO 7 STEP -1
IF ddo = 0 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), donmask4, AND
PUT (xx%, yy%), donald4, OR
ELSEIF ddo = 1 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), donmask5, AND
PUT (xx%, yy%), donald5, OR
END IF
WAIIT .3
DrawQuad
PCOPY 1, 0
PUT (xx%, yy%), back, PSET
NEXT xx%
ELSEIF shoo = 1 THEN
FOR xx% = 302 TO 7 STEP -1
IF ddo = 0 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), flymask2, AND
PUT (xx%, yy%), shoofly2, OR
ELSEIF ddo = 1 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), flymask3, AND
PUT (xx%, yy%), shoofly3, OR
END IF
WAIIT .3
DrawQuad
PCOPY 1, 0
PUT (xx%, yy%), back, PSET
NEXT xx%
END IF
no = 0: DrawBackGround
UpdateInfo
END SUB
SUB ScrollRight
y% = yy%
IF shoo = 0 THEN x% = 303 ELSE x% = 298
quad% = quad% - 1
LoadLev lev%, quad%
IF shoo = 0 THEN
tile$(1) = gr$((((y% + 18) \ 22 - 1) * 14) + ((x% + 17) \ 22))
tile$(2) = gr$((((y% + 37) \ 22 - 1) * 14) + ((x% + 17) \ 22))
tile$(3) = gr$((((y% + 18) \ 22 - 1) * 14) + ((x% + 24) \ 22))
tile$(4) = gr$((((y% + 37) \ 22 - 1) * 14) + ((x% + 24) \ 22))
ELSE
GOTO ScrolRight
END IF
FOR i = 1 TO 4
IF LCASE$(tile$(i)) = "w" THEN quad% = quad% + 1: LoadLev lev%, quad%: EXIT SUB
NEXT i
ScrolRight:
CLS
PAINT (0, 0), 15
Border
UpdateInfo
IF shoo = 0 THEN
FOR xx% = 6 TO 303
IF ddo = 0 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), donmask6, AND
PUT (xx%, yy%), donald6, OR
ELSEIF ddo = 1 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), donmask7, AND
PUT (xx%, yy%), donald7, OR
END IF
WAIIT .3
DrawQuad
PCOPY 1, 0
PUT (xx%, yy%), back, PSET
NEXT xx%
ELSEIF shoo = 1 THEN
FOR xx% = 5 TO 298
IF ddo = 0 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), flymask4, AND
PUT (xx%, yy%), shoofly4, OR
ELSEIF ddo = 1 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), flymask5, AND
PUT (xx%, yy%), shoofly5, OR
END IF
WAIIT .3
DrawQuad
PCOPY 1, 0
PUT (xx%, yy%), back, PSET
NEXT xx%
END IF
no = 0: DrawBackGround
UpdateInfo
END SUB
SUB ScrollUp
x% = xx%
IF shoo = 0 THEN y% = 5 ELSE y% = 6
quad% = quad% + 3
LoadLev lev%, quad%
IF shoo = 0 THEN
tile$(1) = gr$((((y% + 18) \ 22 - 1) * 14) + ((x% + 17) \ 22))
tile$(2) = gr$((((y% + 37) \ 22 - 1) * 14) + ((x% + 17) \ 22))
tile$(3) = gr$((((y% + 18) \ 22 - 1) * 14) + ((x% + 24) \ 22))
tile$(4) = gr$((((y% + 37) \ 22 - 1) * 14) + ((x% + 24) \ 22))
ELSE
GOTO ScrolUp
END IF
FOR i = 1 TO 4
IF LCASE$(tile$(i)) = "w" THEN quad% = quad% - 3: LoadLev lev%, quad%: EXIT SUB
NEXT i
ScrolUp:
CLS
PAINT (0, 0), 15
Border
UpdateInfo
IF shoo = 0 THEN
FOR yy% = 137 TO 5 STEP -1
IF ddo = 0 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), donmask2, AND
PUT (xx%, yy%), donald2, OR
ELSEIF ddo = 1 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), donmask3, AND
PUT (xx%, yy%), donald3, OR
END IF
WAIIT .3
DrawQuad
PCOPY 1, 0
PUT (xx%, yy%), back, PSET
NEXT yy%
ELSEIF shoo = 1 THEN
FOR yy% = 134 TO 6 STEP -1
IF ddo = 0 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), flymask6, AND
PUT (xx%, yy%), shoofly6, OR
ELSEIF ddo = 1 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), flymask7, AND
PUT (xx%, yy%), shoofly7, OR
END IF
WAIIT .3
DrawQuad
PCOPY 1, 0
PUT (xx%, yy%), back, PSET
NEXT yy%
END IF
no = 0: DrawBackGround
UpdateInfo
END SUB
SUB Text (S$, x, y, C1)
DRAW "BM" + STR$(x) + "," + STR$(y)
FOR i = 1 TO LEN(S$)
DRAW "C" + STR$(C1) + Lett$(ASC(MID$(S$, i, 1)))
NEXT
END SUB
DEFINT A-Z
SUB UpdateInfo
LOCATE 23, 3: PRINT "Coins left:"; coinleft; " Items: ";
IF shoo = 1 THEN PRINT "Shooflypi "; : ELSE COLOR 8: PRINT "Shooflypi "; : COLOR 15
IF piblast = 1 THEN PRINT " Pi Blaster "; : ELSE COLOR 8: PRINT " Pi Blaster "; : COLOR 15
IF lev% > 1 THEN LINE (260, 195)-(310, 195), 8
IF lev% > 2 THEN LINE (260, 195)-(285, 160), 8
IF lev% > 3 THEN LINE (310, 195)-(285, 160), 8: PAINT (300, 194), 15, 8
IF lev% > 4 THEN LINE (270, 190)-(300, 190), 8
IF lev% > 5 THEN LINE (270, 190)-(285, 169), 8
IF lev% > 6 THEN LINE (300, 190)-(285, 169), 8
IF lev% > maxlev% THEN
WAIIT 30
FOR i = 1 TO 75
PCOPY 2, 0
PCOPY 1, 0
NEXT i
win
END IF
END SUB
DEFSNG A-Z
SUB UpdatePos (k)
IF xx% <= 5 AND quad% <> 1 AND quad% <> 4 AND quad% <> 7 THEN ScrollRight
IF xx% >= 305 AND quad% <> 3 AND quad% <> 6 AND quad% <> 9 OR shoo = 1 AND xx% >= 300 AND quad% <> 3 AND quad% <> 6 AND quad% <> 9 THEN ScrollLeft
IF yy% <= 3 AND quad% <> 1 AND quad% <> 2 AND quad% <> 3 THEN ScrollDown
IF yy% >= 139 AND quad% <> 7 AND quad% <> 8 AND quad% <> 9 OR shoo = 1 AND yy% >= 135 AND quad% <> 7 AND quad% <> 8 AND quad% <> 9 THEN ScrollUp
IF newg = 0 THEN DrawBackGround: newg = 1
IF LegalMove = 0 THEN
IF shoo = 0 THEN
IF k = 3 THEN
IF ddo = 0 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), donmask2, AND
PUT (xx%, yy%), donald2, OR
ddo = 1
ELSEIF ddo = 1 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), donmask3, AND
PUT (xx%, yy%), donald3, OR
ddo = 0
END IF
END IF
IF k = 4 THEN
IF ddo = 0 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), donmask8, AND
PUT (xx%, yy%), donald8, OR
ddo = 1
ELSEIF ddo = 1 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), donmask9, AND
PUT (xx%, yy%), donald9, OR
ddo = 0
END IF
END IF
IF k = 2 THEN
IF ddo = 0 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), donmask4, AND
PUT (xx%, yy%), donald4, OR
ddo = 1
ELSEIF ddo = 1 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), donmask5, AND
PUT (xx%, yy%), donald5, OR
ddo = 0
END IF
END IF
IF k = 1 THEN
IF ddo = 0 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), donmask6, AND
PUT (xx%, yy%), donald6, OR
ddo = 1
ELSEIF ddo = 1 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), donmask7, AND
PUT (xx%, yy%), donald7, OR
ddo = 0
END IF
END IF
ELSEIF shoo = 1 THEN
IF k = 2 THEN
IF ddo = 0 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), flymask2, AND
PUT (xx%, yy%), shoofly2, OR
ddo = 1
ELSEIF ddo = 1 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), flymask3, AND
PUT (xx%, yy%), shoofly3, OR
ddo = 0
END IF
END IF
IF k = 4 THEN
IF ddo = 0 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), flymask8, AND
PUT (xx%, yy%), shoofly8, OR
ddo = 1
ELSEIF ddo = 1 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), flymask9, AND
PUT (xx%, yy%), shoofly9, OR
ddo = 0
END IF
END IF
IF k = 1 THEN
IF ddo = 0 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), flymask4, AND
PUT (xx%, yy%), shoofly4, OR
ddo = 1
ELSEIF ddo = 1 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), flymask5, AND
PUT (xx%, yy%), shoofly5, OR
ddo = 0
END IF
END IF
IF k = 3 THEN
IF ddo = 0 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), flymask6, AND
PUT (xx%, yy%), shoofly6, OR
ddo = 1
ELSEIF ddo = 1 THEN
GET (xx%, yy%)-(xx% + 14, yy% + 23), back
PUT (xx%, yy%), flymask7, AND
PUT (xx%, yy%), shoofly7, OR
ddo = 0
END IF
END IF
END IF
IF k = 6 AND piblast = 1 THEN
PCOPY 0, 1
PCOPY 0, 2
DRAW "C0BM" + STR$(xx%) + "," + STR$(yy%)
DRAW "BD5BR3" 'init
coordx = xx% + 3
coordy = yy% + 5
IF oldmove = 1 THEN DRAW "BL5": coordx = coordx - 5
IF oldmove = 2 THEN DRAW "BR5": coordx = coordx + 5
IF oldmove = 3 THEN DRAW "BD13": coordy = coordy + 13
IF oldmove = 4 THEN DRAW "BU13": coordy = coordy - 13
DO
c = c + 1
DRAW "C9" + Lett$(ASC(MID$(pi$, c, 1)))
PCOPY 1, 0
'OK now, our "room" is saved in an array as follows:
'TTTTTTTTTTTTTTTTTTTTTTTTTTTT (for 2 rows)
'1111111111111122222222222222 (1 is row 1, 2 is row 2)
'every 14 chars, a new row is made, even if the array doesn't
'indicate it. Now, first we find the row of the coords, then we
'find which tile in that row we're on! (great explaination, huh?)
'the "room" is 14 tiles (x)(rows) * 7 tiles (y)(columns), so...
IF coordy >= 7 THEN row = 1
IF coordy >= 29 THEN row = 2
IF coordy >= 51 THEN row = 3
IF coordy >= 73 THEN row = 4
IF coordy >= 95 THEN row = 5
IF coordy >= 117 THEN row = 6
IF coordy >= 139 THEN row = 7
'ok! now all we have to do is figure out which tile in that row
'is the one we're on.
IF coordx >= 19 THEN column = 1
IF coordx >= 41 THEN column = 2
IF coordx >= 63 THEN column = 3
IF coordx >= 85 THEN column = 4
IF coordx >= 107 THEN column = 5
IF coordx >= 129 THEN column = 6
IF coordx >= 151 THEN column = 7
IF coordx >= 173 THEN column = 8
IF coordx >= 195 THEN column = 9
IF coordx >= 217 THEN column = 10
IF coordx >= 239 THEN column = 11
IF coordx >= 261 THEN column = 12
IF coordx >= 283 THEN column = 13
IF coordx >= 305 THEN column = 14
'Great! We now know our current row and column in tile position.
'Now we have to check to see if this tile is a wall...
nowtile$ = gr$((row - 1) * 14 + (column + 1))
IF LCASE$(nowtile$) = "w" THEN 'If it is...
gr$((row - 1) * 14 + (column + 1)) = "t" 'Turn it into
no = 0: DrawBackGround 'floor and
UpdatePos oldmove 'repaint.
EXIT SUB
END IF
IF oldmove = 1 THEN
DRAW "BM" + STR$(xx% - 2) + "," + STR$(yy% + 5)
FOR red = 1 TO c
DRAW "BL6"
NEXT red
coordx = coordx - 6
END IF
IF oldmove = 2 THEN
DRAW "BM" + STR$(xx% + 8) + "," + STR$(yy% + 5)
FOR red = 1 TO c
DRAW "BR6"
NEXT red
coordx = coordx + 6
END IF
IF oldmove = 3 THEN 'down
DRAW "BM" + STR$(xx% + 3) + "," + STR$(yy% + 18)
FOR red = 1 TO c
DRAW "BD9"
NEXT red
coordy = coordy + 9
END IF
IF oldmove = 4 THEN 'up
DRAW "BM" + STR$(xx% + 3) + "," + STR$(yy% - 8)
FOR red = 1 TO c
DRAW "BU9"
NEXT red
coordy = coordy - 9
END IF
WAIIT 3
LOOP UNTIL c = LEN(pi$) - 10
no = 0: DrawBackGround
UpdatePos oldmove
END IF
END IF
Border
DrawQuad
END SUB
SUB WAIIT (A)
STATIC OLDSPEED!
FOR i = 1 TO A
DO
SPEED! = TIMER
LOOP UNTIL SPEED! <> OLDSPEED!
OLDSPEED! = SPEED!
NEXT
END SUB
SUB win
CLS
PAINT (0, 0), 15
x = 160
FOR y = 200 TO 150 STEP -1
LINE (x - 50, y)-(x + 50, y), 0
LINE (x - 50, y)-(x, y - 80), 0
LINE (x, y - 80)-(x + 50, y), 0
LINE (x - 30, y - 10)-(x + 30, y - 10), 0
LINE (x - 30, y - 10)-(x, y - 60), 0
LINE (x, y - 60)-(x + 30, y - 10), 0
LINE (x - 5, y - 10)-(x, y - 20), 0
LINE (x + 5, y - 10)-(x, y - 20), 0
LINE (x, y - 20)-(x, y - 33), 0
LINE (x - 5, y - 29)-(x + 5, y - 29), 0
CIRCLE (x, y - 38), 5, 0
PCOPY 1, 0
LINE (x + 50, y + 1)-(x - 50, y - 100), 15, BF
NEXT y
PCOPY 0, 1
WAIIT 2
LINE (142, 100)-(100, 50), 0
LINE (47, 20)-(110, 50), 0, B
Text "YAY! MORE", 52, 25, 0
Text "HOMEWORK!", 52, 38, 0
PCOPY 1, 0
WHILE INKEY$ = "": WEND
CREDITS
END SUB
ttp://m0n573r.afraid.org/
Quote:quote: "<+whtiger> you... you don't know which way the earth spins?" ... see... stupidity leads to reverence, reverence to shakiness, shakiness to... the dark side...phear