; Added hide unused tile feature (addition to Space). ; Added grid overlap feature (Tab). ; This is the elaborate version. Const Screen_Width = 800 Const Screen_Height = 600 ; Space (Chr(32)) = Unused tile frame (-1), so Chr(33)(="!") = First tile frame (0) Const TileNumber_Offset = 33 Const EditMode_DrawTiles = 1 Const EditMode_TileSelect = 2 Const NoTileImage_NumberTooLow = 0 ; Tile frame number < -1 Const NoTileImage_NumberTooHigh = 1 ; Tile frame number >= Tile_Frames Const NoTileImage_Unused = 2 ; Tile frame number = -1 Const Mouse_File$ = "Mouse Cursor.BMP" ; tilemaps: ; Const Tile_File$ = "..\Tiles.PNG" ; logo: Const Tile_File$ = "..\LogoTiles.BMP" Const Tile_Width = 32 Const Tile_Height = 32 ; tilemaps: ; Const Tile_Frames = 6*6+6 ; logo: Const Tile_Frames = 6*6+6+6 Const TileSelect_Width = 6 ;--- Global Tile_Images Global Mouse_Image Global NoTile_Images Global TileMap_Width = 32 Global TileMap_Height = 32 Dim Tile_Map( 0 , 0 ) NewTileMap Global Tile_Selected = -1 Global EditMode = EditMode_DrawTiles Global Tiles_Transparent = False Global Grid_Overlap = False Global View_PosX = 0 Global View_PosY = 0 ;--- AppTitle "TileMap Editor (elaborate)" Graphics Screen_Width , Screen_Height HidePointer Tile_Images = LoadAnimImage ( Tile_File , Tile_Width , Tile_Height , 0 , Tile_Frames ) Mouse_Image = LoadImage ( Mouse_File ) NoTile_Images = CreateImage ( Tile_Width , Tile_Height , 3 ) ; Too low, too high and unused SetBuffer ImageBuffer ( NoTile_Images , NoTileImage_NumberTooLow ) Color 255 , 0 , 0 Line 0 , 0 , Tile_Width-1 , Tile_Height-1 Line Tile_Width-1 , 0 , 0 , Tile_Height-1 SetBuffer ImageBuffer ( NoTile_Images , NoTileImage_NumberTooHigh ) Color 255 , 128 , 0 Line 0 , 0 , Tile_Width-1 , Tile_Height-1 Line Tile_Width-1 , 0 , 0 , Tile_Height-1 SetBuffer ImageBuffer ( NoTile_Images , NoTileImage_Unused ) Color 255 , 255 , 255 Line 0 , 0 , Tile_Width-1 , Tile_Height-1 Line Tile_Width-1 , 0 , 0 , Tile_Height-1 ClsColor 32 , 16 , 16 SetBuffer BackBuffer () Repeat If KeyHit ( 15 ) ; Tab Grid_Overlap = Not Grid_Overlap End If If KeyHit ( 57 ) ; Space Tiles_Transparent = Not Tiles_Transparent End If If KeyHit ( 49 ) ; N Query_NewMap End If If KeyHit ( 38 ) ; L Query_LoadMap End If If KeyHit ( 31 ) ; S Query_SaveMap End If Select EditMode Case EditMode_DrawTiles If KeyDown ( 42 ) Or KeyDown ( 54 ) ; Left/right Shift View_MoveSpeed_Factor = 3 Else View_MoveSpeed_Factor = 1 End If If KeyDown ( 200 ) ; Up View_PosY = View_PosY - 5 * View_MoveSpeed_Factor End If If KeyDown ( 208 ) ; Down View_PosY = View_PosY + 5 * View_MoveSpeed_Factor End If If KeyDown ( 203 ) ; Left View_PosX = View_PosX - 5 * View_MoveSpeed_Factor End If If KeyDown ( 205 ) ; Right View_PosX = View_PosX + 5 * View_MoveSpeed_Factor End If If KeyHit ( 72 ) ; Keypad Up Tile_Selected = Tile_Selected - TileSelect_Width If Tile_Selected < -1 Then Tile_Selected = -1 End If If KeyHit ( 80 ) ; Keypad Down Tile_Selected = Tile_Selected + TileSelect_Width If Tile_Selected >= Tile_Frames Then Tile_Selected = Tile_Frames - 1 End If If KeyHit ( 75 ) ; Keypad Left Tile_Selected = Tile_Selected - 1 If Tile_Selected < -1 Then Tile_Selected = -1 End If If KeyHit ( 77 ) ; Keypad Right Tile_Selected = Tile_Selected + 1 If Tile_Selected >= Tile_Frames Then Tile_Selected = Tile_Frames - 1 End If If MouseDown ( 1 ) DrawTile = True DrawTile_Number = Tile_Selected End If If MouseDown ( 2 ) DrawTile = True DrawTile_Number = -1 End If DrawTile_PosX = ( MouseX () + View_PosX ) / Tile_Width + 1 DrawTile_PosY = ( MouseY () + View_PosY ) / Tile_Height + 1 If MouseHit ( 3 ) ; Middle mouse button PickupTile DrawTile_PosX , DrawTile_PosY End If If KeyHit ( 28 ) ; Enter EditMode = EditMode_TileSelect FlushKeys End If DisplayTileMap View_PosX , View_PosY If DrawTile DrawTile = False DrawTile DrawTile_PosX , DrawTile_PosY , DrawTile_Number Else Screen_PosX = ( DrawTile_PosX - 1 ) * Tile_Width - View_PosX Screen_PosY = ( DrawTile_PosY - 1 ) * Tile_Height - View_PosY If Tile_Selected = -1 DrawImage NoTile_Images , Screen_PosX , Screen_PosY , NoTileImage_Unused Else If Tiles_Transparent DrawImage Tile_Images , Screen_PosX , Screen_PosY , Tile_Selected Else DrawBlock Tile_Images , Screen_PosX , Screen_PosY , Tile_Selected End If End If End If Case EditMode_TileSelect If KeyHit ( 28 ) ; Enter EditMode = EditMode_DrawTiles FlushKeys End If TileSelector End Select DrawImage Mouse_Image , MouseX () , MouseY () Flip Cls Delay 1 Until KeyHit ( 1 ) End ;--- Function DrawTile ( Tile_PosX , Tile_PosY , Tile_Number ) ; Paint a tile on the tilemap. If Tile_PosX > 0 If Tile_PosY > 0 If Tile_PosX <= TileMap_Width If Tile_PosY <= TileMap_Height Tile_Map( Tile_PosX , Tile_PosY ) = Tile_Number End If End If End If End If End Function Function PickupTile ( Tile_PosX , Tile_PosY ) ; Select a tile from the tilemap. If Tile_PosX > 0 If Tile_PosY > 0 If Tile_PosX <= TileMap_Width If Tile_PosY <= TileMap_Height Tile_Selected = Tile_Map( Tile_PosX , Tile_PosY ) End If End If End If End If End Function Function DisplayTileMap ( View_PosX , View_PosY ) ; Display the tilemap on screen. Color 16 , 16 , 32 Rect -View_PosX , -View_PosY , TileMap_Width * Tile_Width , TileMap_Height * Tile_Height StartTile_PosX = View_PosX / Tile_Width + 1 StartTile_PosY = View_PosY / Tile_Height + 1 If StartTile_PosX < 1 Then StartTile_PosX = 1 If StartTile_PosY < 1 Then StartTile_PosY = 1 EndTile_PosX = ( View_PosX + Screen_Width ) / Tile_Width + 1 EndTile_PosY = ( View_PosY + Screen_Height ) / Tile_Height + 1 If EndTile_PosX > TileMap_Width Then EndTile_PosX = TileMap_Width If EndTile_PosY > TileMap_Height Then EndTile_PosY = TileMap_Height For Tile_PosX = StartTile_PosX To EndTile_PosX For Tile_PosY = StartTile_PosY To EndTile_PosY Frame = Tile_Map( Tile_PosX , Tile_PosY ) Screen_PosX = ( Tile_PosX - 1 ) * Tile_Width - View_PosX Screen_PosY = ( Tile_PosY - 1 ) * Tile_Height - View_PosY If Frame = -1 If Not Tiles_Transparent DrawImage NoTile_Images , Screen_PosX , Screen_PosY , NoTileImage_Unused End If Else If Frame < -1 DrawImage NoTile_Images , Screen_PosX , Screen_PosY , NoTileImage_NumberTooLow Else If Frame >= Tile_Frames DrawImage NoTile_Images , Screen_PosX , Screen_PosY , NoTileImage_NumberTooHigh Else If Tiles_Transparent DrawImage Tile_Images , Screen_PosX , Screen_PosY , Frame Else DrawBlock Tile_Images , Screen_PosX , Screen_PosY , Frame End If End If Next Next If Grid_Overlap Color 64 , 128 , 192 StartGrid_PosX = View_PosX / Tile_Width * Tile_Width - View_PosX StartGrid_PosY = View_PosY / Tile_Height * Tile_Height - View_PosY Grid_Width = Screen_Width / Tile_Width + 1 Grid_Height = Screen_Height / Tile_Height + 1 For Grid_PosX = 0 To Grid_Width Line_PosX = StartGrid_PosX + Grid_PosX * Tile_Width Line Line_PosX , 0 , Line_PosX , Screen_Height Next For Grid_PosY = 0 To Grid_Height Line_PosY = StartGrid_PosY + Grid_PosY * Tile_Height Line 0 , Line_PosY , Screen_Width , Line_PosY Next End If End Function Function TileSelector () TileSelect_Height = Float Tile_Frames / TileSelect_Width OffsetX = Screen_Width / 2 - TileSelect_Width * Tile_Width / 2 OffsetY = Screen_Height / 2 - TileSelect_Height * Tile_Height / 2 Color 16 , 16 , 32 Rect OffsetX , OffsetY , TileSelect_Width * Tile_Width , TileSelect_Height * Tile_Height For Tile_Number = 0 To Tile_Frames - 1 Screen_PosX = OffsetX + TileSelect_PosX Screen_PosY = OffsetY + TileSelect_PosY If Tiles_Transparent DrawImage Tile_Images , Screen_PosX , Screen_PosY , Tile_Number Else DrawBlock Tile_Images , Screen_PosX , Screen_PosY , Tile_Number End If TileSelect_PosX = TileSelect_PosX + Tile_Width If TileSelect_PosX = TileSelect_Width * Tile_Width TileSelect_PosX = 0 TileSelect_PosY = TileSelect_PosY + Tile_Height End If Next ;--- MouseX = MouseX () MouseY = MouseY () MouseOn_TileSelector = False If MouseX >= OffsetX If MouseY >= OffsetY If MouseX < OffsetX + TileSelect_Width * Tile_Width If MouseY < OffsetY + TileSelect_Height * Tile_Height TileX = ( MouseX - OffsetX ) / Tile_Width TileY = ( MouseY - OffsetY ) / Tile_Height Tile_Selected = TileX + TileY * TileSelect_Width If Tile_Selected >= Tile_Frames Tile_Selected = Tile_Frames - 1 End If MouseOn_TileSelector = True ; Display Tile Outline Color 255 , 255 , 255 PosX = OffsetX + TileX * Tile_Width PosY = OffsetY + TileY * Tile_Height Rect PosX , PosY , Tile_Width , Tile_Height , False End If End If End If End If If Not MouseOn_TileSelector Tile_Selected = -1 ; Display Tile Selector Outline Color 255 , 255 , 255 SizeX = TileSelect_Width * Tile_Width SizeY = TileSelect_Height * Tile_Height Rect OffsetX , OffsetY , SizeX , SizeY , False End If End Function Function NewTileMap () View_PosX = 0 View_PosY = 0 Dim Tile_Map( TileMap_Width , TileMap_Height ) For TileX = 1 To TileMap_Width For TileY = 1 To TileMap_Height Tile_Map( TileX , TileY ) = -1 Next Next End Function Function LoadTileMap ( File$ ) FileHandle = OpenFile ( File ) TileMap_Width = ReadLine ( FileHandle ) TileMap_Height = ReadLine ( FileHandle ) Dim Tile_Map( TileMap_Width , TileMap_Height ) For TileY = 1 To TileMap_Height Line$ = ReadLine ( FileHandle ) For TileX = 1 To TileMap_Width Tile_Map( TileX , TileY ) = Asc ( Mid ( Line , TileX , 1 ) ) - TileNumber_Offset If Tile_Map( TileX , TileY ) >= Tile_Frames Tile_Map( TileX , TileY ) = 0 EndIf Next Next CloseFile FileHandle End Function Function SaveTileMap ( File$ ) FileHandle = WriteFile ( File ) WriteLine FileHandle , TileMap_Width WriteLine FileHandle , TileMap_Height For TileY = 1 To TileMap_Height Line$ = "" For TileX = 1 To TileMap_Width Line = Line + Chr ( Tile_Map( TileX , TileY ) + TileNumber_Offset ) Next WriteLine FileHandle , Line Next CloseFile FileHandle End Function Function Query_NewMap () FlushKeys SetBuffer FrontBuffer () Cls Color 255 , 255 , 255 TileMap_Width = Input ( "Width: " ) TileMap_Height = Input ( "Height: " ) NewTileMap SetBuffer BackBuffer () FlushKeys End Function Function Query_LoadMap () FlushKeys SetBuffer FrontBuffer () Cls Color 255 , 255 , 255 FileName$ = Input ( "Filename: " ) If FileType ( FileName ) = 1 LoadTileMap FileName Else Print "File not found" WaitKey End If SetBuffer BackBuffer () FlushKeys End Function Function Query_SaveMap () FlushKeys SetBuffer FrontBuffer () Cls Color 255 , 255 , 255 FileName$ = Input ( "Filename: " ) SaveTileMap FileName SetBuffer BackBuffer () FlushKeys End Function ;~IDEal Editor Parameters: ;~C#Blitz3D198