My Map Editor Is Muck Easier With only a few drawbacks.

How it works.
0.MY VIEW AREA is a 640X480 WINDOW scale is set to PIXEL
1.Click on the tile wanted to use
2.click where to place it.
3.The block of land is set.
4.updates view area

/EXAMPLE

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbKeyLButton Then
MOUSECLICKER Int((X) / 32) + 1 + VIEWX, Int((((Y) - 480) * -1) / 32) + 1 + VIEWY
end sub
/////

/EXAMPLE
Public Sub MOUSECLICKER(X As Integer, Y As Integer)
GAMEGRID(X, Y) = CURT
'MsgBox GAMEGRID(X, Y)
Form1.Refresh

RENDER_ALL
End Sub
/////

whenever it updates this is the sub used to copy images from form2 and put them on the main form.
/Note I wanted the Y to Flip so i put Y = (Y - 480) * -1
in it

Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

Public Sub RENDEROBJECTAND(OBJECTNUMBER As Integer, X As Long, Y As Long)
Y = (Y - 480) * -1
BitBlt Form1.hDC, X, Y, Form2!IMG(OBJECTNUMBER).ScaleWidth, Form2!IMG(OBJECTNUMBER).ScaleHeight, Form2!IMG(OBJECTNUMBER).hDC, 0, 0, vbSrcAnd
End Sub

'Heres my Load/Save Level Stuff

Option Explicit

Declare Function GetPrivateProfileString Lib "Kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, lpKeyName As Any, ByVal lpDefault As String, ByVal lpRetunedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Declare Function WritePrivateProfileString Lib "Kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lplFileName As String) As Long

Global r%
Global entry$
Global iniPath$
Dim HOLDSTRING As String
Dim TX As Integer
Dim TY As Integer
Function GetFromINI(AppName$, KeyName$, FileName$) As String
Dim RetStr As String
RetStr = String(255, Chr(0))
GetFromINI = Left(RetStr, GetPrivateProfileString(AppName$, ByVal KeyName$, "", RetStr, Len(RetStr), FileName$))
End Function
' entry$ = SCENESTUFF(CURS2)
' HJK = Format(CURS2)
' r% = WritePrivateProfileString("SCENE STUFF", HJK, entry$, iniPath$)

Public Sub LOAD_LEVEL_64()
TX = 1
TY = 0
Form3.Show
iniPath$ = App.Path + "\TEST.MAP"
Do While TY <> 65
Form3.P1.Value = TX
Form3.P2.Value = TY
HOLDSTRING = "TILE" + Format(TX) + "X" + Format(TY)
GAMEGRID(TX, TY) = GetFromINI("MAP", HOLDSTRING, iniPath$)

TX = TX + 1

If TX = 65 Then
TX = 1
TY = TY + 1
End If
DoEvents
Loop
RENDER_ALL
Unload Form3
End Sub
Public Sub WRITE_LEVEL_64()
iniPath$ = App.Path + "\TEST.MAP"

TX = 1
TY = 0
Form3.Show
Do While TY <> 65
Form3.P1.Value = TX
Form3.P2.Value = TY
entry$ = GAMEGRID(TX, TY)
HOLDSTRING = "TILE" + Format(TX) + "X" + Format(TY)
r% = WritePrivateProfileString("MAP", HOLDSTRING, entry$, iniPath$)


TX = TX + 1

If TX = 65 Then
TX = 1
TY = TY + 1
End If

DoEvents
Loop
Unload Form3
End Sub