; This is the simple version. ; Tilemap is loaded on start, ; and saved again on exit. 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" Const Tile_File$ = "Tiles.BMP" Const Tile_Width = 32 Const Tile_Height = 32 Const Tile_Frames = 36 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 ) Global Tile_Selected = -1 Global EditMode = EditMode_DrawTiles Global Tiles_Transparent = False Global View_PosX = 0 Global View_PosY = 0 ;--- AppTitle "TileMap Editor (simple)" 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 ;<-- LoadTileMap "Test Arena 1.TXT" ;NewTileMap SetBuffer BackBuffer () Repeat If KeyHit ( 57 ) ; Space Tiles_Transparent = Not Tiles_Transparent 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 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 Until KeyHit ( 1 ) ;<-- SaveTileMap "Test Arena 1.TXT" End ;--- Function DrawTile ( Tile_PosX , Tile_PosY , Tile_Number ) 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 ) 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 ) 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 DrawImage NoTile_Images , Screen_PosX , Screen_PosY , NoTileImage_Unused 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 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 Next Next CloseFile FileHandle End Function Function SaveTileMap ( File$ ) FileHandle = OpenFile ( 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 ;~IDEal Editor Parameters: ;~C#Blitz3D198