QB / QB64 Discussion Forum      Other Subforums, Links and Downloads
Respond to this messageReturn to Index
Original Message
  • QB Jump - Map Editor and code generator v.01.5
    • (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


    Login Status
  • You are not logged in
    • Login
      Password
       

      Optional
      Provides additional benefits such as notifications, signatures, and user authentication.


      Create Account
    Your Name
    Your Email
    (Optional)
    Message Title
    Message Text
    Options Also send responses to my email address