Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
gfx put problem
#1
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
Reply
#2
FB 0.11 doesn't support things like
Code:
PUT (x,y), image
This infact should be written as
Code:
PUT (x,y), image(0)
Otherwise it'll not compile. FB 0.12 will support both ways, but until it's released you should modify your sources to use the second method...
ngelo Mottola - EC++
Reply
#3
thanks! my problem was that, in addition to qbasic automatically adding defsng a-z's to my subs since i had used defint a-z a couple times. now it crashes whenever i try to put my sprites anywhere on the screen, though. here's a link to my sources, with sprites, since i don't want to clutter this thread:
Download donald_fb.zip
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
Reply
#4
ok, i figured out that problem... now, fbc goes crazy and seems corrupt when i try to move around... here's the new download link:
Download donald_fb.zip
my array of tile data seems to get corrupted, i've modified my "ScrollLeft" subroutine to show some debug output from this. in order to execute this subroutine from ingame, just run off the right-hand side of the screen... it's buggy. you can see how it *should* look using the level editor i included, just load "data\level1.dat". but in the main game engine, it looks... corrupt.... :???: :???: O.o
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
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)