Code archives/Miscellaneous/2D Tile Mapper
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
It was my Alpha, 2D tile mapper, that I've been working on the past week. I've dropped the project to try and switch it to 2D-in-3D. The controls are primitive:( This displays when you hit the H key) Text 0,72, "W - Scroll UP" Text 0,84, "S - Scroll Down" Text 0,96, "A - Scroll Left" Text 0,108, "D - Scroll Right" Text 0,120, "UP Key - Move Tile Up" Text 0,132, "Down Key - Move Tile Down" Text 0,144, "Left Key - Move Tile Left" Text 0,156, "Right Key - Move Tile Right" Text 0,168, "< - Decrease SelTile" Text 0,180, "> - Increase SelTile" Text 0,192, "K - Decrease Edit Mode" Text 0,204, "L - Increase Edit Mode" Text 0,216, "Entier - Place Tile/Entity/BG Tile/SpawnPoint" Text 0,228, "Shift - Delete Tile/Entity/BG Tile/SpawnPoint" I've included something to try and make entering with input work better, but it failed. It is the "IsTyping" thing in the code. Also, SpawnPoint SPN (Spawn Point Number) is stored using what layer you're currently on. Layering was never Implemented, due to the dropping of the project. | |||||
Type Tile Field X# Field Y# Field Frame# Field Layer# End Type Type BGTile Field X# Field Y# Field Frame# End Type Type SpawnPoint Field X# Field Y# Field SPN ; Spawn Point Number :D End Type Type Entity Field X# Field Y# Field Name$ Field Frame Field Layer End Type Graphics 800,608,32,2 SetBuffer BackBuffer() TileSheet = LoadAnimImage("TileSheet.bmp",16,16,0,2) CamImg = LoadImage("CamImg.bmp") MaskImage(CamImg,255,0,220) MaskImage(TileSheet,255,0,220) CurLayer = 1 CX# = 0 CY# = 0 CurX = 0 CurY = 0 IsTyping = False SelTile = 0 EditMode = 0 MovX = 0 MovY = 0 MaxTiles = 0 MaxBGTiles = 0 MaxSpawnPoints = 0 MaxEnts = 0 FileName = "MAPITH!.Map" While Not KeyHit(1) ; Program loop ;SAVING AND OMFG LOADING!; If KeyHit(26) ; Saving ;IsTyping = True file = WriteFile(FileName) WriteInt (file, MaxTiles) For T.Tile = Each tile WriteInt (file, T\X) WriteInt (file, T\Y) WriteInt (file, T\Frame) WriteInt (file, T\Layer) Next WriteInt (file, MaxBGTiles) For B.BGTile = Each BGTile WriteInt (file, B\X) WriteInt (file, B\Y) WriteInt (file, B\Frame) Next WriteInt (file, MaxSpawnPoints) For S.SpawnPoint = Each SpawnPoint WriteInt (file, S\X) WriteInt (file, S\Y) WriteInt (file, S\SPN) Next WriteInt (file, MaxEnts) For E.Entity = Each Entity WriteInt (file, E\X) WriteInt (file, E\Y) WriteString (file, E\Name) WriteInt (file, Frame) WriteInt (file, Layer) Next CloseFile (file) EndIf If KeyHit(27) ; Loading file = ReadFile(FileName) Ts = ReadInt(file) For i = 0 To Ts - 1 T.Tile = New Tile T\X = ReadInt(file) T\Y = ReadInt(file) T\Frame = ReadInt(file) T\Layer = ReadInt(file) Next BTS = ReadInt (file) For i2 = 0 To BTS - 1 B.BGTile = New BGTile B\X = ReadInt(file) B\Y = ReadInt(file) B\Frame = ReadInt(file) Next SPs = ReadInt(file) For i3 = 0 To SPs - 1 S.SpawnPoint = New SpawnPoint S\X = ReadInt(file) S\Y = ReadInt(file) S\SPN = ReadInt(file) Next ETs = ReadInt(file) For i4 = 0 To ETs - 1 E.Entity = New Entity E\X = ReadInt(file) E\Y = ReadInt(file) E\Name = ReadString(file) E\Frame = ReadInt(file) E\Layer = ReadInt(file) Next CloseFile (file) EndIf ;Render ClsColor 0,0,100 Cls If IsTyping = True If KeyHit(28) IsTyping = False EndIf EndIf If IsTyping = False ;Mov(e)X and Mov(e)Y If KeyHit(2) MovX = CurX MovY = CurY EndIf ;Layer If KeyHit(23) CurLayer = CurLayer - 1 EndIf If KeyHit(24) CurLayer = CurLayer + 1 EndIf ;Edit Mode If KeyHit(37) EditMode = EditMode - 1 EndIf If KeyHit(38) EditMode = EditMode + 1 EndIf If EditMode < 0 EditMode = 0 EndIf If EditMode > 3 EditMode = 3 EndIf ;End Edit Mode If KeyDown(35) ;Help Button Text 0,0, "Edit Mode:" + EditMode Text 0,12, "Tile Frame:" + SelTile Text 0,24, "Current Layer:" + CurLayer Text 0,36, "Camera X:" + CX# Text 0,48, "Camera Y:" + CY# Text 0,60, "Controls:" Text 0,72, "W - Scroll UP" Text 0,84, "S - Scroll Down" Text 0,96, "A - Scroll Left" Text 0,108, "D - Scroll Right" Text 0,120, "UP Key - Move Tile Up" Text 0,132, "Down Key - Move Tile Down" Text 0,144, "Left Key - Move Tile Left" Text 0,156, "Right Key - Move Tile Right" Text 0,168, "< - Decrease SelTile" Text 0,180, "> - Increase SelTile" Text 0,192, "K - Decrease Edit Mode" Text 0,204, "L - Increase Edit Mode" Text 0,216, "Entier - Place Tile/Entity/BG Tile/SpawnPoint" Text 0,228, "Shift - Delete Tile/Entity/BG Tile/SpawnPoint" Text 0,240, "Move X:" + MovX Text 0,256, "Move Y:" + MovY Text 0,268, "Cur X:" + CurX Text 0,280, "Cur Y:" + CurY Text 0,292, "Tiles:" + MaxTiles Text 0,304, "BGTiles:" + MaxBGTiles Text 0,316, "SpawnPoints:" + MaxSpawnPoints Text 0,328, "Entites:" + MaxEnts EndIf ;Seletected tile If KeyHit(51) SelTile = SelTile - 1 EndIf If KeyHit(52) SelTile = SelTile + 1 EndIf If SelTile > 5 Then SelTile = 0 EndIf If SelTile < 0 Then SelTile = 5 EndIf ;End Selected Tile ;Program Clean UP If KeyHit(1) For T.Tile = Each Tile Delete T Next For B.BGTile = Each BGTile Delete B Next For S.SpawnPoint = Each SpawnPoint Delete S Next For E.Entity = Each Entity Delete E Next FreeImage(CamImg) FreeImage(TileSheet) EndIf ;End Program Clean Up ;Creation If KeyHit(28) If EditMode = 0 For T.Tile = Each Tile If T\X = CurX + CX# And T\Y = CurY + CY# Delete T MaxTiles = MaxTiles - 1 EndIf Next T.Tile = New Tile T\X = CurX + CX# T\Y = CurY + CY# T\Frame = SelTile T\Layer = CurLayer MaxTiles = MaxTiles + 1 EndIf If EditMode = 1 For B.BGTile = Each BGTile If B\X = CurX And B\Y = CurY Delete B MaxBGTiles = MaxBGTiles - 1 EndIf Next B.BGTile = New BGTile B\X = CurX + CX# B\Y = CurY + CY# B\Frame = SelTile MaxBGTiles = MaxBGTiles + 1 EndIf If EditMode = 2 For S.SpawnPoint = Each SpawnPoint If S\X = CurX And S\Y = CurY Delete S MaxSpawnPoints = MaxSpawnPoints - 1 EndIf Next S.SpawnPoint = New SpawnPoint S\X = CurX + CX# S\Y = CurY + CY# S\SPN = CurLayer MaxSpawnPoints = MaxSpawnPoints + 1 EndIf If EditMode = 3 For E.Entity = Each Entity If E\X = CurX And E\Y = CurY Delete B MaxEnts = MaxEnts - 1 EndIf Next E.Entity = New Entity E\X = CurX + CX# E\Y = CurY + CY# E\Layer = CurLayer E\Frame = SelTile IsTyping = True E\Name = Input("Enter Entity Name:") MaxEnts = MaxEnts + 1 EndIf EndIf ;Total End Creation ;Destruction If KeyHit(54) ;For Loop For T.Tile = Each Tile If T\X = CurX And T\Y = CurY Delete T MaxTiles = MaxTiles - 1 EndIf Next ;End Foor Loop For B.BGTile = Each BGTile If B\X = CurX And B\Y = CurY Delete B MaxBGTiles = MaxBGTiles - 1 EndIf Next For S.SpawnPoint = Each SpawnPoint If S\X = CurX And S\Y = CurY Delete S MaxSpawnPoints = MaxSpawnPoints - 1 EndIf Next For E.Entity = Each Entity If E\X = CurX And E\Y = CurY Delete B MaxEnts = MaxEnts - 1 EndIf Next EndIf ;End Destruction If KeyHit(200) ; Move Up CurY = CurY - 16 EndIf If KeyHit(208) ; Move Down CurY = CurY + 16 EndIf If KeyHit(203) ; Move Left CurX = CurX - 16 EndIf If KeyHit(205) ; Move Right CurX = CurX + 16 EndIf If KeyHit(17) ; Scroll UP :D CY# = CY# - 16 EndIf If KeyHit(31) ;Scroll Down :D CY# = CY# + 16 EndIf If KeyHit(30) ; Scroll Left CX# = CX# - 16 EndIf If KeyHit(32) ; Scroll Right CX# = CX# + 16 EndIf EndIf ;End if isTyping = false ;Tile Drawing For T.Tile = Each Tile If ImagesOverlap(TileSheet,T\X, T\Y,CamImg,CX#,CY#) DrawImage TileSheet, Ceil((Abs(T\X - CX#) / 16) * 16), Ceil((Abs(T\Y - CY#) / 16) * 16), T\Frame# EndIf Next For B.BGTile = Each BGTile If ImagesOverlap(TileSheet,B\X, B\Y,CamImg,CX#,CY#) DrawImage TileSheet, Ceil((Abs(B\X - CX#) / 16) * 16), Ceil((Abs(B\Y - CY#) / 16) * 16), B\Frame# EndIf Next For S.SpawnPoint = Each SpawnPoint If ImagesOverlap(TileSheet,S\X, S\Y,CamImg,CX#,CY#) Oval Ceil((Abs(S\X - CX#) / 16) * 16), Ceil((Abs(S\Y - CY#) / 16) * 16),16,16,1 EndIf Next For E.Entity = Each Entity If ImagesOverlap(TileSheet,E\X, E\Y,CamImg,CX#,CY#) DrawImage TileSheet, Ceil((Abs(E\X - CX#) / 16) * 16), Ceil((Abs(E\Y - CY#) / 16) * 16), E\Frame# Text E\X, E\Y + 5, "Name:" + E\Name EndIf Next ;End Tile Drawing If EditMode <> 2 DrawImage TileSheet, CurX, CurY, SelTile Else Oval CurX,CurY,16,16,1 EndIf DrawImage CamImg, CX#, CY# Flip ;End Render Wend ;End Program Loop |
Comments
| ||
I couldn't get this to run in Blitz3D, kept getting a "Memory Access Violation" error. It runs fine in BlitzPlus, as long as you provide two bitmap files for it to load (LoadAminImage - 16x112, and LoadImage - 800x600). But it will crash when you exit. |
| ||
It works fine for me and yes, the 800x600 image is the "camera" I created scrolling by collisions. It also doesn't crash for me when I exit. On the other hand, I noticed I hadn't implemented some things in this piece of the code. So I added to the program clean up, when escape is hit. Try it now. ^^ |
| ||
This tile mapper, is receiving a entire remake. As I am planning to use it in my next project, although I'm not sure if I will released the code for it. I cannot/will not fix this version up anymore, if you find any problems and you cannot seem to fix them on your own hit me up and I MIGHT, fix it. Sorry :D |
Code Archives Forum