QB / QB64 Discussion Forum      Other Subforums, Links and Downloads
 Return to Index  

QB Jump - Map Editor and code generator v.01.5

May 24 2010 at 6:15 PM
  (Login unseenmachine)
R


Response to SLR Game 1 - Map Editor and code generator v.01.4

Sorry about the last update, it was full of dodgy little bugs. So i have worked on it a bit, and have managed to iron out most of them.

I have started work on a loading option so levels from all ready made games can be edited. I am however having trouble figuring out the best way to get all the level variables back in, this means that only the parts of the level stored in the DATA blocks can be edited at the moment. You will have to replace bridges, start\exit points and transporters, but i will work on it.

Lava although placeable(only in the bottom row & only 3) does not yet function. Until i figure out to pass the varibles back properly in the loading, i am going to leave it out.

So this lovely update comes with the following improvements....

- Main menu ( Will be graphical in the future ) New Game \ Load Game \ Exit
- Load level backgrounds for edit
- Imporoved level deletion (no longer cause's errors)
- A few other little tweaks to improve performance

Please report any bugs, thanks folks...UNSEEN

CODE

'QB JUMP Map Editor and Code Generator - Basic Edition v.01.5
'By Unseen Machine

DECLARE SUB loadgame ()
DECLARE SUB mainmenu ()
DECLARE SUB bumparray ()
DECLARE SUB buildgame ()
DECLARE SUB loadlevel ()
DECLARE SUB savelevel ()
DECLARE SUB clrgrid ()
DECLARE SUB draweditor ()

'variables that are going to be written into the code
DIM SHARED t1x(1 TO 10) AS INTEGER, t2x(1 TO 10) AS INTEGER
DIM SHARED t1y(1 TO 10) AS INTEGER, t2y(1 TO 10) AS INTEGER
DIM SHARED map(1 TO 10, 800) AS INTEGER
DIM SHARED gpx(1 TO 10) AS INTEGER, gpy(1 TO 10) AS INTEGER

'bridge variables
DIM SHARED bflag(1 TO 10) AS INTEGER
DIM SHARED gbx1(1 TO 10) AS INTEGER, gby1(1 TO 10) AS INTEGER
DIM SHARED bx1(1 TO 10) AS INTEGER, by1(1 TO 10) AS INTEGER
DIM SHARED bcnt(1 TO 10) AS INTEGER, bdirect(1 TO 10) AS INTEGER 'movement & direction

'Player - level and exit variables
DIM SHARED px(1 TO 10) AS INTEGER, py(1 TO 10) AS INTEGER
DIM SHARED level AS INTEGER, plyrflag(1 TO 10) AS INTEGER
DIM SHARED exitflag(1 TO 10) AS INTEGER, levelmax AS INTEGER
DIM SHARED xitx(1 TO 10) AS INTEGER, xity(1 TO 10) AS INTEGER

'transporter variables
DIM SHARED tranflag1(1 TO 10) AS INTEGER, tranflag2(1 TO 10) AS INTEGER
DIM SHARED gt1x(1 TO 10) AS INTEGER, gt2x(1 TO 10) AS INTEGER
DIM SHARED gt1y(1 TO 10) AS INTEGER, gt2y(1 TO 10) AS INTEGER

'editor variables
DIM mxmin AS INTEGER, mxmax AS INTEGER, mymin AS INTEGER, mymax AS INTEGER
DIM rowcnt AS INTEGER, colcnt AS INTEGER, clr AS INTEGER
DIM clrymin AS INTEGER, itmcnt AS INTEGER, item AS STRING

'lava variables
DIM SHARED lx(1 TO 3, 1 TO 10) AS INTEGER, ly(1 TO 3, 1 TO 10) AS INTEGER
DIM SHARED lcnt(1 TO 3, 1 TO 10) AS INTEGER, lflag(1 TO 3, 1 TO 10) AS INTEGER

CLS
SCREEN 12

CALL mainmenu

CALL draweditor

level = 1

CALL loadlevel

DIM SHARED m(8) AS LONG, mb AS INTEGER, mx AS INTEGER, my AS INTEGER
m(0) = &H8BE58955
m(1) = &H78B0C5E
m(2) = &HD88933CD
m(3) = &H890A5E8B
m(4) = &H85E8B07
m(5) = &H5E8B0F89
m(6) = &H5D178906
m(7) = &H8CA
DEF SEG = VARSEG(m(0))


CALL ABSOLUTE(1, mb, mx, my, VARPTR(m(0)))
CALL ABSOLUTE(3, mb, mx, my, VARPTR(m(0)))

OUT &H3C8, 12: OUT &H3C9, 63: OUT &H3C9, 8: OUT &H3C9, 7

DO

IF level > levelmax THEN levelmax = level

COLOR 2: LOCATE 4, 31: PRINT "Level.."
COLOR 15: LOCATE 4, 41: PRINT level
LOCATE 4, 45: PRINT "of"
LOCATE 4, 47: PRINT levelmax

IF itmcnt = 0 THEN

item = "Background "
clr = 0

ELSEIF itmcnt = 1 THEN

item = "Player Start"
clr = 1

ELSEIF itmcnt = 2 THEN

item = "Ground "
clr = 2

ELSEIF itmcnt = 3 THEN

item = "Exit Point "
clr = 4

ELSEIF itmcnt = 4 THEN

item = "Dirt "
clr = 6

ELSEIF itmcnt = 5 THEN

item = "Transporter "
clr = 15

ELSEIF itmcnt = 6 THEN

item = "Bridge "
clr = 14

ELSEIF itmcnt = 7 THEN

item = "Lava "
clr = 12

END IF

mxmin = 170: mxmax = 570
mymin = 75: mymax = 275
clrymin = 96

COLOR 15

' LOCATE 27, 1: PRINT "mx : "; mx; "my : "; my
LOCATE 17, 3: PRINT "Game item :"
LOCATE 19, 6: PRINT item
LOCATE 19, 36: PRINT "Column :"; colcnt
LOCATE 19, 50: PRINT "Row :"; rowcnt

CALL ABSOLUTE(3, mb, mx, my, VARPTR(m(0)))

'Next level button

IF mx >= 410 AND mx <= 415 AND my >= 50 AND my <= 60 THEN

IF mb = 1 THEN

IF level < 10 THEN

CALL savelevel
CALL clrgrid
level = level + 1
CALL loadlevel

IF plyrflag(level) = 1 THEN

PAINT (px(level), py(level)), 1, 7

FOR i = 1 TO 2 STEP 1

PAINT STEP(0, 10), 1, 7
NEXT

END IF

END IF

END IF

END IF

'previous level button

IF mx >= 300 AND mx <= 305 AND my >= 50 AND my <= 60 THEN

IF mb = 1 THEN

IF level > 1 THEN

CALL savelevel
CALL clrgrid
level = level - 1
CALL loadlevel

IF plyrflag(level) = 1 THEN GOSUB drawplyr
IF bflag(level) = 1 THEN GOSUB drawbridge

END IF

END IF

END IF

'build game button

IF mx >= 290 AND mx <= 382 AND my >= 315 AND my <= 340 THEN

IF mb = 1 THEN

CALL buildgame

END IF

END IF

'Delete level button

IF mx >= 170 AND mx <= 280 AND my >= 347 AND my <= 372 THEN

IF mb = 1 AND levelmax > 1 AND level > 1 AND level < levelmax THEN

CALL bumparray
levelmax = levelmax - 1
level = level - 1
CALL loadlevel
IF plyrflag(level) = 1 THEN GOSUB drawplyr
IF bflag(level) = 1 THEN GOSUB drawbridge

ELSEIF mb = 1 AND levelmax = 1 THEN

CALL clrgrid
CALL savelevel
plyrflag(level) = 0
tranflag1(level) = 0
tranflag2(level) = 0
exitflag(level) = 0
bflag(level) = 0

ELSEIF mb = 1 AND level = 1 AND levelmax > 2 THEN

CALL bumparray
levelmax = levelmax - 1
CALL loadlevel
IF plyrflag(level) = 1 THEN GOSUB drawplyr
IF bflag(level) = 1 THEN GOSUB drawbridge

ELSEIF mb = 1 AND level = levelmax THEN

CALL clrgrid
level = level - 1
levelmax = levelmax - 1
plyrflag(level) = 0
tranflag1(level) = 0
tranflag2(level) = 0
exitflag(level) = 0
bflag(level) = 0

ELSEIF mb = 1 AND level = 1 AND levelmax = 2 THEN

CALL clrgrid
levelmax = levelmax - 1
plyrflag(level) = 0
tranflag1(level) = 0
tranflag2(level) = 0
exitflag(level) = 0
bflag(level) = 0

END IF

GOSUB resetmouse

END IF

'clear grid button

IF mx >= 170 AND mx <= 280 AND my >= 315 AND my <= 340 THEN

IF mb = 1 THEN

CALL clrgrid
plyrflag(level) = 0
tranflag1(level) = 0
tranflag2(level) = 0
exitflag(level) = 0
bflag(level) = 0

END IF

END IF

'mouse functions in the item area

IF mx >= 28 AND mx <= 138 AND my >= 95 AND my <= 221 THEN

IF mb = 1 THEN

itmcnt = 0

DO

IF my >= clrymin AND my <= clrymin + 16 THEN

EXIT DO

ELSE

itmcnt = itmcnt + 1
clrymin = clrymin + 16

END IF

LOOP

END IF

END IF

'mouse functions in the grid area

IF mx >= 170 AND mx <= 570 AND my >= 75 AND my <= 275 THEN

'row and column data

colcnt = 1

DO

IF mx >= mxmin AND mx <= mxmin + 10 THEN

EXIT DO

ELSE

colcnt = colcnt + 1
mxmin = mxmin + 10

END IF

LOOP

rowcnt = 1

DO

IF my >= mymin AND my <= mymin + 10 THEN

EXIT DO

ELSE

rowcnt = rowcnt + 1
mymin = mymin + 10
END IF

LOOP

IF mb = 1 THEN

CALL ABSOLUTE(2, mb, mx, my, VARPTR(m(0)))

IF itmcnt = 1 THEN 'player start positioning

IF rowcnt <= 17 AND plyrflag(level) = 0 THEN

PAINT (mxmin + 5, mymin + 5), clr, 7

FOR i = 1 TO 2 STEP 1

PAINT STEP(0, 10), clr, 7

NEXT


ELSE

PAINT (px(level), py(level)), 0, 7

FOR i = 1 TO 2 STEP 1

PAINT STEP(0, 10), 0, 7

NEXT

plyrflag = 0

PAINT (mxmin + 5, mymin + 5), clr, 7

FOR i = 1 TO 2 STEP 1

PAINT STEP(0, 10), clr, 7

NEXT

END IF

plyrflag(level) = 1
px(level) = (mxmin + 5)
py(level) = (mymin + 5)

gpx(level) = ((mxmin) - 150) + (colcnt * 5)
gpy(level) = (mymin) + (rowcnt * 5)

ELSEIF itmcnt = 3 THEN

IF exitflag(level) = 0 THEN

exitflag(level) = 1

ELSE
PAINT (xitx(level), xity(level)), 0, 7

END IF

xitx(level) = mxmin + 5: xity(level) = mymin + 5
PAINT (mxmin + 5, mymin + 5), 4, 7


ELSEIF itmcnt = 5 THEN

IF tranflag1(level) = 1 AND tranflag2(level) = 1 THEN

PAINT (gt1x(level), gt1y(level)), 0, 7
tranflag1(level) = 0: tranflag2(level) = 0
PAINT (gt2x(level), gt2y(level)), 0, 7

END IF

IF tranflag1(level) = 1 AND tranflag2(level) = 0 AND rowcnt > 3 THEN

tranflag2(level) = 1
PAINT (mxmin + 5, mymin + 5), 15, 7
gt2x(level) = mxmin + 5: gt2y(level) = mymin + 5
t2x(level) = (mxmin - 150) + (colcnt * 5)
t2y(level) = (mymin + (rowcnt * 5))

END IF

IF tranflag1(level) = 0 AND rowcnt > 3 THEN

tranflag1(level) = 1
PAINT (mxmin + 5, mymin + 5), 15, 7
gt1x(level) = mxmin + 5: gt1y(level) = mymin + 5
t1x(level) = (mxmin - 150) + (colcnt * 5)
t1y(level) = (mymin + (rowcnt * 5))

END IF

GOSUB resetmouse

ELSEIF itmcnt = 6 THEN

IF bflag(level) = 1 THEN

GOSUB clrbridge

END IF

IF bflag(level) <= 0 AND colcnt <= 37 AND rowcnt > 3 THEN

bx1(level) = (mxmin - 150) + (colcnt * 5)
by1(level) = (mymin + (rowcnt * 5))

gbx1(level) = mxmin + 5
gby1(level) = mymin + 5

GOSUB drawbridge
bflag(level) = 1

END IF

'figure out movement max's

rmax% = 37 - colcnt
lmax% = colcnt - 1

DO

LOCATE 26, 1: INPUT "Choose start direction (1 = Left 2 = Right) : ", direct$

LOOP UNTIL VAL(direct$) > 0 AND VAL(direct$) < 3

bdirect(level) = VAL(direct$)

IF bdirect(level) = 1 THEN

max% = lmax%

ELSEIF bdirect(level) = 2 THEN

max% = rmax%

END IF

LOCATE 26, 1: PRINT SPACE$(70)

DO

LOCATE 26, 1: PRINT "Enter move count (Max = " + STR$(max%) + ") : ";: INPUT "", move$

LOOP UNTIL VAL(move$) > 0 AND VAL(move$) <= max%

LOCATE 26, 1: PRINT SPACE$(70)

bcnt(level) = VAL(move$)

ELSEIF itmcnt = 7 THEN


IF rowcnt = 20 THEN

IF lflag(1, level) = 0 THEN

lflag(1, level) = 1

ELSEIF lflag(1, level) = 1 AND lflag(2, level) = 0 THEN

lflag(2, level) = 1

ELSEIF lflag(1, level) = 1 AND lflag(2, level) = 1 AND lflag(3, level) = 0 THEN

lflag(3, level) = 1

END IF

PAINT (mxmin + 5, mymin + 5), 12, 7
PAINT STEP(10, 0), 12, 7

END IF

GOSUB resetmouse

ELSE

IF POINT(mxmin + 5, mymin + 5) <> 1 AND POINT(mxmin + 5, mymin + 5) <> 15 AND POINT(mxmin + 5, mymin + 5) <> 4 AND POINT(mxmin + 5, mymin + 5) <> 14 AND POINT(mxmin + 5, mymin + 5) <> 12 THEN

PAINT (mxmin + 5, mymin + 5), clr, 7

END IF

END IF

CALL ABSOLUTE(1, mb, mx, my, VARPTR(m(0)))

END IF


END IF


kb$ = INKEY$

SELECT CASE kb$

CASE CHR$(27)

SYSTEM

END SELECT



LOOP

SYSTEM

resetmouse:


DO

CALL ABSOLUTE(3, mb, mx, my, VARPTR(m(0)))

LOOP UNTIL mb = 0
RETURN

drawplyr:


PAINT (px(level), py(level)), 1, 7

FOR i = 1 TO 2 STEP 1

PAINT STEP(0, 10), 1, 7
NEXT
RETURN

clrbridge:


PAINT (gbx1(level), gby1(level)), 0, 7

FOR i = 1 TO 3 STEP 1

PAINT STEP(10, 0), 0, 7

NEXT

bflag(level) = 0
RETURN

drawbridge:


PAINT (gbx1(level), gby1(level)), 14, 7

FOR i = 1 TO 3 STEP 1

PAINT STEP(10, 0), 14, 7

NEXT

bflag(level) = 1
RETURN

SUB buildgame

DIM cnt AS INTEGER, lvlcnt AS INTEGER

'check each level for player start - exit and transporters

CALL savelevel

DO

lvlcnt = lvlcnt + 1

IF tranflag1(lvlcnt) = 1 AND tranflag2(lvlcnt) = 0 THEN

msg$ = "Error on level " + STR$(lvlcnt) + " - No second transporter point."
GOSUB builderror

END IF

IF px(lvlcnt) <= 0 OR plyrflag(level) = 0 THEN

msg$ = "Error on level " + STR$(lvlcnt) + " - No player start point."
GOSUB builderror

END IF

IF exitflag(lvlcnt) <= 0 THEN

msg$ = "Error on level " + STR$(lvlcnt) + " - No exit point."
GOSUB builderror

END IF

LOOP UNTIL lvlcnt = levelmax

lvlcnt = 0


DO

LOCATE 26, 1: PRINT SPACE$(60)
LOCATE 26, 1: INPUT "Enter a name for your game : ", gname$

LOOP UNTIL LEN(gname$) > 0


CLOSE
OPEN "c:\" + gname$ + ".bas" FOR OUTPUT AS #1

PRINT #1, "DECLARE SUB loose ()"
PRINT #1, "DECLARE SUB loadplayer ()"
PRINT #1, "DECLARE SUB startgame ()"
PRINT #1, ""
PRINT #1, "DIM SHARED level AS INTEGER"
PRINT #1, "DIM SHARED grav AS SINGLE"
PRINT #1, "DIM SHARED px(1 to 10) AS INTEGER, py(1 to 10) AS INTEGER"
PRINT #1, "dim shared t1x(1 to 10) as integer,t1y(1 to 10) as integer"
PRINT #1, "dim shared t2x(1 to 10) as integer,t2y(1 to 10) as integer"
PRINT #1, "dim shared bx1(1 to 10) as integer, by1(1 to 10) as integer"
PRINT #1, "dim shared bdirect(1 to 10) as integer, bcnt(1 to 10) as integer"
PRINT #1, "dim shared bflag(1 to 10) as integer,mcnt as integer"
PRINT #1, "DIM SHARED lx(1 TO 3, 1 TO 10) AS INTEGER, ly(1 TO 3, 1 TO 10) AS INTEGER"
PRINT #1, "DIM SHARED lcnt(1 TO 3, 1 TO 10) AS INTEGER, lflag(1 TO 3, 1 TO 10) AS INTEGER"
PRINT #1, ""
PRINT #1, "grav = .08"
PRINT #1, "OUT &H3C8, 12: OUT &H3C9, 63: OUT &H3C9, 8: OUT &H3C9, 7"
PRINT #1, ""
PRINT #1, "DO"
PRINT #1, " level = level + 1"
PRINT #1, " CALL startgame"
PRINT #1, " CALL loadplayer"
PRINT #1, " "
PRINT #1, " "
PRINT #1, ""
PRINT #1, "LOOP UNTIL level = "; levelmax

'level array to data covertor
DO

lvlcnt = lvlcnt + 1
cnt = 0

DO

text$ = "DATA "

DO

IF cnt > 0 AND cnt MOD 40 <> 0 THEN

text$ = text$ + "," + STR$(map(lvlcnt, cnt))

ELSE

text$ = text$ + STR$(map(lvlcnt, cnt))

END IF

cnt = cnt + 1

LOOP UNTIL cnt MOD 40 = 0

PRINT #1, text$

LOOP UNTIL cnt = 800


LOOP UNTIL lvlcnt = levelmax


PRINT #1, ""
PRINT #1, "SUB loadplayer"
PRINT #1, ""

'item points for each level

lvlcnt = 0

DO
lvlcnt = lvlcnt + 1
PRINT #1, "'level points"
PRINT #1, "px(" + STR$(lvlcnt) + ") = "; gpx(lvlcnt)
PRINT #1, "py(" + STR$(lvlcnt) + ") = "; gpy(lvlcnt)
PRINT #1, "t1x(" + STR$(lvlcnt) + ") = "; t1x(lvlcnt)
PRINT #1, "t1y(" + STR$(lvlcnt) + ") = "; t1y(lvlcnt)

PRINT #1, "t2x(" + STR$(lvlcnt) + ") = "; t2x(lvlcnt)
PRINT #1, "t2y(" + STR$(lvlcnt) + ") = "; t2y(lvlcnt)
PRINT #1, "bflag(" + STR$(lvlcnt) + ")="; bflag(lvlcnt)
PRINT #1, "bx1(" + STR$(lvlcnt) + ")="; bx1(lvlcnt)
PRINT #1, "by1(" + STR$(lvlcnt) + ")="; by1(lvlcnt)

PRINT #1, "bcnt(" + STR$(lvlcnt) + ")="; bcnt(lvlcnt)
PRINT #1, "bdirect(" + STR$(lvlcnt) + ")="; bdirect(lvlcnt)
PRINT #1, "lx(1," + STR$(lvlcnt) + ")="; lx(1, lvlcnt)
PRINT #1, "lx(2," + STR$(lvlcnt) + ")="; lx(2, lvlcnt)
PRINT #1, "lx(3," + STR$(lvlcnt) + ")="; lx(3, lvlcnt)

PRINT #1, "ly(1," + STR$(lvlcnt) + ")="; ly(1, lvlcnt)
PRINT #1, "ly(2," + STR$(lvlcnt) + ")="; ly(2, lvlcnt)
PRINT #1, "ly(3," + STR$(lvlcnt) + ")="; ly(3, lvlcnt)
PRINT #1, "lflag(1," + STR$(lvlcnt) + ")="; lflag(1, lvlcnt)
PRINT #1, "lflag(2," + STR$(lvlcnt) + ")="; lflag(2, lvlcnt)

PRINT #1, "lflag(3," + STR$(lvlcnt) + ")="; lflag(3, lvlcnt)
PRINT #1, "lcnt(1," + STR$(lvlcnt) + ")="; lcnt(1, lvlcnt)
PRINT #1, "lcnt(2," + STR$(lvlcnt) + ")="; lcnt(2, lvlcnt)
PRINT #1, "lcnt(3," + STR$(lvlcnt) + ")="; lcnt(3, lvlcnt)

LOOP UNTIL lvlcnt = levelmax

PRINT #1, "'end points"
PRINT #1, ""
PRINT #1, "GOSUB drawplyr"
PRINT #1, ""
PRINT #1, "IF bflag(level) = 1 then gosub drawbridge"
PRINT #1, "mcnt = 0"
PRINT #1, ""
PRINT #1, ""
PRINT #1, "now! = TIMER"
PRINT #1, "now2! = TIMER"
PRINT #1, ""
PRINT #1, "DO"
PRINT #1, ""
PRINT #1, " 'collisions and empty space(gravity)"
PRINT #1, ""
PRINT #1, " newnow! = TIMER"
PRINT #1, ""
PRINT #1, " IF POINT(px(level), py(level) + 45) = 0 AND newnow! - now! >= grav AND py(level) < 330 THEN"
PRINT #1, ""
PRINT #1, " GOSUB clrplyr"
PRINT #1, " py(level) = py(level) + 15"
PRINT #1, ""
PRINT #1, " GOSUB drawplyr"
PRINT #1, ""
PRINT #1, " grav = grav / 1.12 'acceleration factor"
PRINT #1, ""
PRINT #1, " now! = TIMER"
PRINT #1, ""
PRINT #1, " ELSEIF POINT(px(level), py(level) + 45) > 0 THEN"
PRINT #1, ""
PRINT #1, " grav = .08"
PRINT #1, ""
PRINT #1, " END IF"
PRINT #1, ""
PRINT #1, ""
PRINT #1, " 'transporters"
PRINT #1, ""
PRINT #1, " IF POINT(px(level), py(level) + 45) = 15 THEN"
PRINT #1, ""
PRINT #1, " if px(level) = t1x(level) and py(level)+45 = t1y(level) then "
PRINT #1, ""
PRINT #1, " gosub clrplyr"
PRINT #1, " px(level) = t2x(level) "
PRINT #1, " py(level) = t2y(level) - 45"
PRINT #1, " GOSUB drawplyr"
PRINT #1, ""
PRINT #1, " END IF "
PRINT #1, ""
PRINT #1, " end if "
PRINT #1, ""
PRINT #1, " 'bottom of screen"
PRINT #1, ""
PRINT #1, " IF py(level) >= 330 THEN CALL loose"
PRINT #1, ""
PRINT #1, " 'red x win collison"
PRINT #1, ""
PRINT #1, " IF POINT(px(level) + 15, py(level)) = 4 OR POINT(px(level) + 15, py(level) + 15) = 4 OR POINT(px(level) + 15, py(level) + 30) = 4 THEN EXIT DO"
PRINT #1, ""
PRINT #1, " IF POINT(px(level) - 15, py(level)) = 4 OR POINT(px(level) - 15, py(level) + 15) = 4 OR POINT(px(level) - 15, py(level) + 30) = 4 THEN EXIT DO"
PRINT #1, ""
PRINT #1, ""
PRINT #1, " 'bridge movement"
PRINT #1, ""
PRINT #1, " IF newnow!-now2! =>.7 then "
PRINT #1, ""
PRINT #1, " 'bridge collision"
PRINT #1, ""
PRINT #1, " IF POINT(px(level),py(level) + 45) = 14 then "
PRINT #1, ""
PRINT #1, " gosub clrplyr"
PRINT #1, " if bdirect(level) = 1 and point(px(level)-15,py(level)) = 0 and point(px(level)-15,py(level)+15)=0 and point(px(level)-15,py(level)+30)=0 then "
PRINT #1, ""
PRINT #1, " px(level) = px(level)-15"
PRINT #1, ""
PRINT #1, " elseif bdirect(level) = 2 and point(px(level)+15,py(level))=0 and point(px(level)+15,py(level)+15)=0 and point(px(level)+15,py(level)+30)=0 then "
PRINT #1, ""
PRINT #1, " px(level) = px(level) + 15"
PRINT #1, ""
PRINT #1, " end if"
PRINT #1, " gosub drawplyr"
PRINT #1, " End if"
PRINT #1, ""
PRINT #1, " gosub clrbridge"
PRINT #1, " "
PRINT #1, " "
PRINT #1, " if bdirect(level) = 1 and mcnt>0 and mcnt <= bcnt(level) then "
PRINT #1, ""
PRINT #1, " bx1(level) = bx1(level) - 15"
PRINT #1, ""
PRINT #1, " mcnt =mcnt -1"
PRINT #1, ""
PRINT #1, " elseif bdirect(level) = 2 and mcnt =>0 and mcnt < bcnt(level) then "
PRINT #1, ""
PRINT #1, " bx1(level) =bx1(level) + 15"
PRINT #1, " mcnt = mcnt + 1"
PRINT #1, ""
PRINT #1, " end if"
PRINT #1, " now2! = TIMER"
PRINT #1, " gosub drawbridge"
PRINT #1, ""
PRINT #1, " if bdirect(level) = 1 and mcnt = 0 then bdirect(level)= 2 "
PRINT #1, " if bdirect(level) = 2 and mcnt = bcnt(level) then bdirect(level)= 1 "
PRINT #1, ""
PRINT #1, " end if"
PRINT #1, ""
PRINT #1, " ' user input"
PRINT #1, ""
PRINT #1, " kb$ = INKEY$"
PRINT #1, ""
PRINT #1, " SELECT CASE kb$"
PRINT #1, ""
PRINT #1, " CASE CHR$(27)"
PRINT #1, ""
PRINT #1, " SYSTEM"
PRINT #1, ""
PRINT #1, " CASE CHR$(0) + CHR$(72) 'jump button"
PRINT #1, ""
PRINT #1, " IF POINT(px(level), py(level) - 15) = 0 AND POINT(px(level), py(level) + 45) > 0 THEN"
PRINT #1, ""
PRINT #1, " FOR i = 1 TO 5 STEP 1"
PRINT #1, ""
PRINT #1, " GOSUB clrplyr"
PRINT #1, " IF POINT(px(level), py(level) - 15) = 0 AND py(level) > 80 THEN py(level) = py(level) - 15"
PRINT #1, " GOSUB drawplyr"
PRINT #1, " now! = TIMER"
PRINT #1, ""
PRINT #1, " DO"
PRINT #1, ""
PRINT #1, " newnow! = TIMER"
PRINT #1, ""
PRINT #1, " LOOP UNTIL newnow! - now! >= .05"
PRINT #1, ""
PRINT #1, " NEXT"
PRINT #1, ""
PRINT #1, " END IF"
PRINT #1, ""
PRINT #1, " CASE CHR$(13)"
PRINT #1, ""
PRINT #1, " EXIT DO"
PRINT #1, ""
PRINT #1, " CASE CHR$(0) + CHR$(77)"
PRINT #1, ""
PRINT #1, " IF POINT(px(level) + 15, py(level)) = 0 AND POINT(px(level) + 15, py(level) + 15) = 0 AND POINT(px(level) + 15, py(level) + 30) = 0 THEN"
PRINT #1, ""
PRINT #1, " GOSUB clrplyr"
PRINT #1, " IF px(level) < 610 THEN px(level) = px(level) + 15"
PRINT #1, " GOSUB drawplyr"
PRINT #1, ""
PRINT #1, " END IF"
PRINT #1, ""
PRINT #1, " CASE CHR$(0) + CHR$(75)"
PRINT #1, ""
PRINT #1, " IF POINT(px(level) - 15, py(level)) = 0 AND POINT(px(level) - 15, py(level) + 15) = 0 AND POINT(px(level) - 15, py(level) + 30) = 0 THEN"
PRINT #1, ""
PRINT #1, " GOSUB clrplyr"
PRINT #1, " IF px(level) > 25 THEN px(level) = px(level) - 15"
PRINT #1, " GOSUB drawplyr"
PRINT #1, ""
PRINT #1, " END IF"
PRINT #1, ""
PRINT #1, ""
PRINT #1, " END SELECT"
PRINT #1, ""
PRINT #1, "LOOP"
PRINT #1, ""
PRINT #1, "GOTO btm"
PRINT #1, ""
PRINT #1, "drawplyr:"
PRINT #1, ""
PRINT #1, "CIRCLE (px(level), py(level)), 7, 1"
PRINT #1, "PAINT (px(level), py(level)), 1, 1"
PRINT #1, "CIRCLE STEP(0, 15), 7, 1"
PRINT #1, "PAINT STEP(0, 0), 1, 1"
PRINT #1, "CIRCLE STEP(0, 15), 7, 1"
PRINT #1, "PAINT STEP(0, 0), 1, 1"
PRINT #1, "RETURN"
PRINT #1, ""
PRINT #1, "clrplyr:"
PRINT #1, ""
PRINT #1, "CIRCLE (px(level), py(level)), 7, 9"
PRINT #1, "PAINT (px(level), py(level)), 0, 9"
PRINT #1, "CIRCLE STEP(0, 15), 7, 9"
PRINT #1, "PAINT STEP(0, 0), 0, 9"
PRINT #1, "CIRCLE STEP(0, 15), 7, 9"
PRINT #1, "PAINT STEP(0, 0), 0, 9"
PRINT #1, "RETURN"
PRINT #1, ""
PRINT #1, "drawbridge:"
PRINT #1, "circle(bx1(level),by1(level)),7,14"
PRINT #1, "paint step(0,0),14,14"
PRINT #1, "CIRCLE STEP(15, 0), 7, 14"
PRINT #1, "paint step(0,0),14,14"
PRINT #1, "CIRCLE STEP(15, 0), 7, 14"
PRINT #1, "paint step(0,0),14,14"
PRINT #1, "CIRCLE STEP(15, 0), 7, 14"
PRINT #1, "paint step(0,0),14,14"
PRINT #1, "return"
PRINT #1, ""
PRINT #1, "clrbridge:"
PRINT #1, "circle(bx1(level),by1(level)),7,9"
PRINT #1, "paint step(0,0),0,9"
PRINT #1, "CIRCLE STEP(15, 0`), 7, 9"
PRINT #1, "paint step(0,0),0,9"
PRINT #1, "CIRCLE STEP(15, 0), 7, 9"
PRINT #1, "paint step(0,0),0,9"
PRINT #1, "CIRCLE STEP(15, 0), 7, 9"
PRINT #1, "paint step(0,0),0,9"
PRINT #1, "return"
PRINT #1, ""
PRINT #1, "btm:"
PRINT #1, ""
PRINT #1, "END SUB"
PRINT #1, ""
PRINT #1, "SUB loose"
PRINT #1, "CLS"
PRINT #1, "LOCATE 15, 30: PRINT" + CHR$(34) + " YOU DIED FOOL!" + CHR$(34)
PRINT #1, "SLEEP"
PRINT #1, "'SYSTEM"
PRINT #1, "RUN"
PRINT #1, ""
PRINT #1, ""
PRINT #1, "END SUB"
PRINT #1, ""
PRINT #1, "SUB startgame"
PRINT #1, "SCREEN 12"
PRINT #1, ""
PRINT #1, "DIM cx AS INTEGER, cy AS INTEGER, cnt AS INTEGER"
PRINT #1, ""
PRINT #1, "cx = 25: cy = 80"
PRINT #1, ""
PRINT #1, "OUT &H3C8, 9: OUT &H3C9, 19: OUT &H3C9, 19: OUT &H3C9, 49"
PRINT #1, ""
PRINT #1, "FOR i = 1 TO 800 STEP 1"
PRINT #1, ""
PRINT #1, " READ n"
PRINT #1, ""
PRINT #1, " if n = 0 then "
PRINT #1, ""
PRINT #1, " circle(cx, cy),7,9"
PRINT #1, " paint step(0,0),0,9"
PRINT #1, ""
PRINT #1, " else"
PRINT #1, ""
PRINT #1, " CIRCLE (cx, cy), 7, n"
PRINT #1, " PAINT (cx, cy), n, n"
PRINT #1, ""
PRINT #1, " END IF"
PRINT #1, " cx = cx + 15"
PRINT #1, ""
PRINT #1, " cnt = cnt + 1"
PRINT #1, ""
PRINT #1, " IF cnt MOD 40 = 0 THEN"
PRINT #1, ""
PRINT #1, " cy = cy + 15"
PRINT #1, " cx = 25"
PRINT #1, ""
PRINT #1, " END IF"
PRINT #1, ""
PRINT #1, "NEXT"
PRINT #1, ""
PRINT #1, "END SUB"



LOCATE 26, 1: PRINT SPACE$(60)
LOCATE 26, 1: PRINT "File created at location C:\" + gname$ + ".bas"

GOTO subend

builderror:

LOCATE 26, 1: PRINT SPACE$(60)
LOCATE 26, 1: PRINT msg$

subend:

END SUB

SUB bumparray

DIM bump AS INTEGER

bump = level

DO
FOR i = 0 TO 800 STEP 1

map(bump, i) = map(bump + 1, i)

NEXT i

plyrflag(bump) = plyrflag(bump + 1)
px(bump) = px(bump + 1)
py(bump) = py(bump + 1)
gpx(bump) = gpx(bump + 1)
gpy(bump) = gpy(bump + 1)

tranflag1(bump) = tranflag1(bump + 1)
tranflag2(bump) = tranflag2(bump + 1)

t1x(bump) = t1x(bump + 1)
t1y(bump) = t1y(bump + 1)
t2x(bump) = t2x(bump + 1)
t2y(bump) = t2y(bump + 1)

gt1x(bump) = gt1x(bump + 1)
gt1y(bump) = gt1y(bump + 1)
gt2x(bump) = gt2x(bump + 1)
gt2y(bump) = gt2y(bump + 1)

bflag(bump) = bflag(bump + 1)
bx1(bump) = bx1(bump + 1)
by1(bump) = by1(bump + 1)
gbx1(bump) = gbx1(bump + 1)
gby1(bump) = gby1(bump + 1)
bcnt(bump) = bcnt(bump + 1)
bdirect(bump) = bdirect(bump + 1)

exitflag(bump) = exitflag(bump + 1)
xitx(bump) = xitx(bump + 1)
xity(bump) = xity(bump + 1)

bump = bump + 1

LOOP UNTIL bump = levelmax - 1


END SUB

SUB clrgrid

DIM cx AS INTEGER, cy AS INTEGER, cnt AS INTEGER, clr AS INTEGER

cx = 175: cy = 80

DO

PAINT (cx, cy), 0, 7

cx = cx + 10

cnt = cnt + 1

IF cnt MOD 40 = 0 THEN

cy = cy + 10
cx = 175

END IF



LOOP UNTIL cnt = 800



END SUB

SUB draweditor

CLS

COLOR 9

LOCATE 1, 1: PRINT "QB Jump Map Editor & Code Generator Basic Edition v.01.5"

COLOR 15

'main grid

DIM cx AS INTEGER, cy AS INTEGER, cnt AS INTEGER, clr AS INTEGER

cx = 175: cy = 80

DO

CIRCLE (cx, cy), 5, 7

cx = cx + 10

cnt = cnt + 1

IF cnt MOD 40 = 0 THEN

cy = cy + 10
cx = 175

END IF

LOOP UNTIL cnt = 800

: COLOR 15
LOCATE 7, 8: PRINT "Background"
LOCATE 8, 8: PRINT "Player Start"
LOCATE 9, 8: PRINT "Ground"
LOCATE 10, 8: PRINT "Exit Point"
LOCATE 11, 8: PRINT "Dirt"
LOCATE 12, 8: PRINT "Transporter"
LOCATE 13, 8: PRINT "Bridge"
COLOR 8: LOCATE 14, 8: PRINT "Lava": COLOR 15

cx = 36: cy = 103: cnt = 0

FOR i = 1 TO 8 STEP 1

CIRCLE (cx, cy), 7, 15

IF cnt > 2 THEN

IF cnt = 3 THEN clr = 4
IF cnt = 4 THEN clr = 6
IF cnt = 5 THEN clr = 15
IF cnt = 6 THEN clr = 14
IF cnt = 7 THEN clr = 12

ELSE

clr = cnt

END IF

PAINT STEP(0, 0), clr, 15

cnt = cnt + 1
cy = cy + 16

NEXT

COLOR 2

LOCATE 21, 23: PRINT " Clear Grid "
LINE (170, 315)-(280, 340), 10, B

LOCATE 21, 38: PRINT "Build Game"
LINE (290, 315)-(382, 340), 10, B

LOCATE 23, 23: PRINT "Delete Level"
LINE (170, 347)-(280, 372), 10, B

'level arrows

PSET (305, 55), 2: DRAW "d5h5e5d5"
PAINT STEP(-1, 0), 10, 2

PSET (410, 55), 2: DRAW "d5e5h5d5"
PAINT STEP(1, 0), 10, 2

END SUB

SUB loadgame
CLS

DIM streamcnt AS INTEGER

LOCATE 1, 1: PRINT "QB Jump Map Editor & Code Generator Basic Edition v.01.5"

COLOR 15

DO

LOCATE 5, 4: INPUT "Please enter game name : ", file$

OPEN "c:\" + file$ + ".bas" FOR RANDOM AS #1

IF LOF(1) > 1 THEN EXIT DO ELSE LOCATE 6, 4: PRINT "File not found..."

CLOSE
KILL "c:\" + file$ + ".bas"

LOOP


CLOSE
OPEN "c:\" + file$ + ".bas" FOR INPUT AS #1


DO

streamcnt = streamcnt + 1
LINE INPUT #1, dstream$

LOOP UNTIL LEFT$(dstream$, 4) = "DATA"

CLOSE

OPEN "c:\" + file$ + ".bas" FOR INPUT AS #1

DO

cnt = cnt + 1
LINE INPUT #1, dstream$

LOOP UNTIL cnt = streamcnt - 1

cnt = 0
lvlcnt = 1
DO

ds$ = ""

LINE INPUT #1, dstream$

FOR i = 6 TO 124 STEP 1


IF MID$(dstream$, i, 1) <> "," AND MID$(dstream$, i, 1) <> " " THEN

ds$ = ds$ + MID$(dstream$, i, 1)

map(lvlcnt, cnt) = VAL(MID$(dstream$, i, 1))

IF cnt < 800 THEN

cnt = cnt + 1

ELSE

cnt = 0
lvlcnt = lvlcnt + 1
levelmax = lvlcnt - 1

END IF

END IF

IF lvlcnt = 11 THEN EXIT DO

NEXT i

'PRINT ds$

LOOP UNTIL LEFT$(dstream$, 4) <> "DATA"

CLOSE

OPEN "c:\" + file$ + ".bas" FOR INPUT AS #1

cnt = 0
streamcnt = 0

DO

streamcnt = streamcnt + 1
LINE INPUT #1, dstream$

LOOP UNTIL dstream$ = "'level points"

CLOSE

OPEN "c:\" + file$ + ".bas" FOR INPUT AS #1

DO

cnt = cnt + 1
LINE INPUT #1, dstream$

LOOP UNTIL cnt = streamcnt - 1

lvlcnt = 1
cnt = 0
DO

cnt = cnt + 1

LINE INPUT #1, dstream$

IF cnt MOD 24 = 0 THEN lvlcnt = lvlcnt + 1

LOOP UNTIL dstream$ = "'end points"


END SUB

SUB loadlevel

DIM cx AS INTEGER, cy AS INTEGER, cnt AS INTEGER, clr AS INTEGER

cx = 175: cy = 80

DO

clr = map(level, cnt)

PAINT (cx, cy), clr, 7

cx = cx + 10

cnt = cnt + 1

IF cnt MOD 40 = 0 THEN

cy = cy + 10
cx = 175

END IF

LOOP UNTIL cnt = 800

END SUB

SUB mainmenu
CLS
DIM arl AS INTEGER

LOCATE 1, 1: PRINT "QB Jump Map Editor & Code Generator Basic Edition v.01.5"

arl = 9

COLOR 2

LOCATE 9, 30: PRINT "New game"
LOCATE 10, 30: PRINT "Load game"
LOCATE 11, 30: PRINT "Exit"

DO

kb$ = INKEY$

SELECT CASE kb$

CASE CHR$(0) + CHR$(80)

LOCATE arl, 28: PRINT " "

IF arl < 11 THEN arl = arl + 1 ELSE arl = 9

CASE CHR$(0) + CHR$(72)

LOCATE arl, 28: PRINT " "

IF arl > 9 THEN arl = arl - 1 ELSE arl = 11

CASE CHR$(13)

EXIT DO


END SELECT

LOCATE arl, 28: PRINT CHR$(177)

LOOP

IF arl = 11 THEN SYSTEM
IF arl = 10 THEN CALL loadgame

END SUB

SUB savelevel

DIM cx AS INTEGER, cy AS INTEGER, cnt AS INTEGER, clr AS INTEGER

cx = 175: cy = 80

DO

IF POINT(cx, cy) <> 1 AND POINT(cx, cy) <> 14 AND POINT(cx, cy) <> 4 AND POINT(cx, cy) <> 15 THEN

map(level, cnt) = POINT(cx, cy)

ELSE

map(level, cnt) = 0

END IF

cx = cx + 10

cnt = cnt + 1

IF cnt MOD 40 = 0 THEN

cy = cy + 10
cx = 175

END IF

LOOP UNTIL cnt = 800

END SUB



 
 Respond to this message