Original Message
Unseen Machine
(Login unseenmachine ) R Posted May 24, 2010 6:15 PM 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