REMDEFINT A-Z_TITLE "VSGE Editor" ' our window titleSCREEN _NEWIMAGE(800, 600, 32) ' screen the user seesDIM Map%(40, 30) ' structure to hold the map data inmemoryDIM SHARED mx%, my%, mbl%, mbr% ' structure for mouse x y left and right buttonsDIM Tints&(8) ' structure for the 8 colors numbersTiles1& = _LOADIMAGE("RogueCraftExp1.bmp", 32) ' hidden window of our tiles 8 tiles@(16 x 16)IF Tiles1& <> 0 THEN ' error trap for unfound file PRINT "Graphic file loaded"; Tiles1&ELSE PRINT "Unable to locate graphic file RougeCraftExp1.bmp" _DELAY 3 ENDEND IFGrey& = _RGB32(192, 192, 192)Pink& = _RGB32(255, 105, 180)LWhite& = _RGB32(255, 250, 250)GOSUB BoxGOSUB GridGOSUB ShowTilesTileNum = 0: Savfilename$ = "VSGE-Data.txt": CanSave = 0_MOUSESHOWDO _LIMIT 30 GOSUB MicePoll GOSUB FindPlace IF _KEYDOWN(115) THEN GOSUB PrepareSave 'S button to save IF Region = 2 THEN GOSUB InRegion2 IF Region = 1 THEN GOSUB InRegion1 LOCATE 34, 1: PRINT "Tile", "Region="; Region, "TileNum="; TileNum, cellx, celly LOCATE 35, 1: PRINT "MiceX="; mx%, "MiceY="; my%; " " _DISPLAYLOOP UNTIL _KEYDOWN(27)SLEEPSYSTEM'------------------------------------- GOSUBS ------------------------------------Box:LINE (7, 7)-(649, 489), Grey&, BF ' main windowLINE (663, 7)-(680, 136), Grey&, BF ' tile selection windowLINE (698, 6)-(739, 39), Grey&, BF ' mini mapRETURNGrid:FOR x = 8 TO 647 STEP 16 ' main paste window grid FOR y = 8 TO 487 STEP 16 LINE (x, y)-(x + 15, y + 15), Pink&, B NEXT yNEXT xx = 664: y = 8FOR Tile = 0 TO 7 ' tile selection window grid LINE (x, y)-(x + 15, y + 15), Pink&, B y = y + 16NEXT TileRETURNShowTiles:x1 = 664: y1 = 8: x2 = 0: y2 = 0 ' show tiles zero to seven = 8 tiles totalFOR Tile = 0 TO 7 ' LINE (x1, y1)-(x1 + 15, y1 + 15), Pink&, B _PUTIMAGE (x1, y1)-(x1 + 15, y1 + 15), Tiles1&, 0, (x2, y2)-(x2 + 15, y2 + 15) y1 = y1 + 16 x2 = x2 + 16NEXT TileGOSUB MakeColors ' 'probe the color of the tiles + save to arrayRETURNFindPlace:Region = 0IF mx% >= 8 THEN IF mx% <= 647 THEN IF my% >= 8 THEN IF my% <= 487 THEN Region = 1 'main draw window END IF END IF END IFEND IFIF mx% >= 664 THEN IF mx% <= 679 THEN IF my% >= 8 THEN IF my% <= 135 THEN Region = 2 'main tile window END IF END IF END IFEND IFRETURNMicePoll:DO WHILE _MOUSEINPUT mx% = _MOUSEX: my% = _MOUSEY: mbl% = _MOUSEBUTTON(1): mbr% = _MOUSEBUTTON(2)LOOPRETURNInRegion1:micex = mx% - 8: MiceY = my% - 8 ' correct the offset from the left of the screencellx = micex \ 16 ' divide by 16 to get cellcelly = MiceY \ 16 ' divide by 16 to get cellpastex1 = (cellx * 16) + 8: pastex2 = pastex1 + 15: pastey1 = (celly * 16) + 8: pastey2 = pastey1 + 15 'paste refers to place to pasteIF mbl% = -1 THEN _PUTIMAGE (pastex1, pastey1)-(pastex2, pastey2), Tiles1&, 0, (copyx1, copyy1)-(copyx2, copyy2) Map%(cellx, celly) = TileNum ' assign tile number GOSUB ShowMiniDim ' update mini windowEND IFRETURNInRegion2:IF mbl% = -1 THEN SELECT CASE my% CASE 8 TO 23 TileNum = 0 copyx1 = 0: copyy1 = 0: copyx2 = copyx1 + 15: copyy2 = copyy1 + 15 'the source image co-ordinates for putimage CASE 24 TO 39 TileNum = 1 copyx1 = 16: copyy1 = 0: copyx2 = copyx1 + 15: copyy2 = copyy1 + 15 CASE 40 TO 55 TileNum = 2 copyx1 = 32: copyy1 = 0: copyx2 = copyx1 + 15: copyy2 = copyy1 + 15 CASE 56 TO 71 TileNum = 3 copyx1 = 48: copyy1 = 0: copyx2 = copyx1 + 15: copyy2 = copyy1 + 15 CASE 72 TO 87 TileNum = 4 copyx1 = 64: copyy1 = 0: copyx2 = copyx1 + 15: copyy2 = copyy1 + 15 CASE 88 TO 103 TileNum = 5 copyx1 = 80: copyy1 = 0: copyx2 = copyx1 + 15: copyy2 = copyy1 + 15 CASE 103 TO 119 TileNum = 6 copyx1 = 96: copyy1 = 0: copyx2 = copyx1 + 15: copyy2 = copyy1 + 15 CASE 120 TO 135 TileNum = 7 copyx1 = 112: copyy1 = 0: copyx2 = copyx1 + 15: copyy2 = copyy1 + 15 END SELECT _PUTIMAGE (10, 500)-(26, 516), Tiles1&, 0, (copyx1, copyy1)-(copyx2, copyy2)END IFRETURNShowMiniDim:x = 699: y = 7FOR across = 0 TO 29 '39 FOR down = 0 TO 39 '29 z = Map%(down, across) ' ->across ,down PSET (699 + down, 8 + across), Tints&(z) ' ->across ,down 'LOCATE across + 1, down + 1: PRINT LTRIM$(STR$(z)) ' ->across ,down NEXT downNEXT acrossCanSave = 1RETURNMakeColors:count = 0FOR T = 16 TO 130 STEP 16 Hue& = POINT(675, T) Tints&(count) = Hue& count = count + 1NEXT TRETURNPrepareSave:'convert onscreen to DATA statementstemp$ = "": LOCATE 20, 20: PRINT "SAVING FILE": _DISPLAY: _DELAY 1FOR across = 0 TO 29 '39 FOR down = 0 TO 39 '29 z = Map%(down, across) z$ = STR$(z): z$ = LTRIM$(z$) temp$ = temp$ + z$ + "," NEXT down GOSUB SavTxt temp$ = ""NEXT acrossLOCATE 20, 10: PRINT "FILE HAS BEEN SAVED AS VSGE-Data.txt": _DISPLAY: _DELAY 1SYSTEMRETURNSavTxt:z = LEN(temp$)temp$ = LEFT$(temp$, z - 1)temp$ = "DATA " + temp$OPEN Savfilename$ FOR APPEND AS #1PRINT #1, temp$CLOSE #1RETURN