Mappo is a work in progress 2D tile map editor for retro games. Currently, only VERGE file formats are supported for loading. A comprehensive set of command-line tools for loading and exporting all VERGE file formats (to PNG/GIF/JSON) are included. One of these can export any VERGE map to a Tiled .TMX
file.
Grue showed me his cool maped4 project. It exploded when I tried to use it, so I created this project to isolate the issues and understand why. Node and Electron and VERGE are cool, so I kept going. It's a fun way to probe unfamiliar territory (Node and Electron) with a familiar face (VERGE).
In ancient times, I worked on my own map editor. http://chuckrector.com/old/ So, I have a soft spot. Partly, this project is about "Can I do what I once did more easily?" Partly, it's also about "How much more powerful am I now?"
Triplefox | what is the plan for the loaders? just to have everything in json?
@aen | binary formats can be viewed as a bit of a barrier
@aen | conversion to json/png/whatever simply lowers that barrier
@aen | and allows us all to stripmine everything
- Yarn (an alternative to npm)
- Node >= 5.10.0 (
Buffer.from
)
- git clone https://github.com/chuckrector/mappo.git
- cd mappo
- yarn
- yarn start
| VERGE1 | VERGE2 | VERGE2.7 (ika) | VERGE2k+j | VERGE3 --- |:---:|:---:|:---:|:---:|:---: PCX | ✅ | ✅ | ✅ | ✅ | ✅ BOX.RAW | ✅ | n/a | n/a | n/a | n/a CHR | ✅ | ✅ | ❓ | ✅ | ✅ CR2 | ✅ | n/a | n/a | n/a | n/a EQUIP.DAT | ✅ | n/a | n/a | n/a | n/a ITEMICON.DAT | ✅ | n/a | n/a | n/a | n/a ITEMS.DAT | ✅ | n/a | n/a | n/a | n/a MAIN.FNT | ✅ | n/a | n/a | n/a | n/a MAP | ✅ | ✅ | ✅ | ✅ | ✅ MISCICON.DAT | ✅ | n/a | n/a | n/a | n/a PAL | ✅ | n/a | n/a | n/a | n/a PARTY.DAT | ✅ | n/a | n/a | n/a | n/a SMALL.FNT | ✅ | n/a | n/a | n/a | n/a SPEECH.SPC | ✅ | n/a | n/a | n/a | n/a TRANS.TBL | ✅ | ✅ | n/a | ✅ | n/a | n/a VSP | ✅ | ✅ | 😭 | 😭 | ✅ VC | 😭 | 😭 | n/a | 😭 | 😭 VCS | 😭 | 😭 | n/a | 😭 | n/a save games | 😭 | n/a | n/a | n/a | n/a
Emoji | What does it mean? |
---|---|
✅ | I did it! |
😭 | I didn't do it yet. |
🛠 | I'm working on it! |
💥 | I've done some parts of it. |
Feature | Implemented? |
---|---|
Show all maps in launch folder (even subfolders) | ✅ |
Click any V1/V2/V3 map to load it | ✅ |
Save maps | 🛠 |
Auto-save | ✅ |
Tile selector | ✅ |
Plot tiles | ✅ |
Basic undo/redo (plots) | ✅ |
Fill region with tiles | 😭 |
Auto-tiling | 😭 |
Draw map layers in correct order | ✅ |
Draw tile animations | 😭 |
Edit tile animations | 😭 |
Draw characters/entities | 😭 |
Edit characters/entities | 😭 |
Edit map layer order | 😭 |
Draw obstructions | 😭 |
Edit obstructions | 😭 |
Draw zones | 😭 |
Edit zones | 😭 |
Show all map layers | ✅ |
Toggle layer visibility | ✅ |
Scroll viewport w/ keys | ✅ |
Scroll viewport w/ mouse near edges | ✅ |
Scroll viewport w/ mouse dragging | ✅ |
Zoom map (ctrl +/-) | ✅ |
Multi-tile brushes | 😭 |
Multi-tile templates w/ zones & obstructions | 😭 |
On launch, load previous map | ✅ |
On launch, remember previous window size & position | ✅ |
On launch, remember previous session undo history | ✅ |
On launch, remember previous zoom level | ✅ |
On launch, remember previous selected tile | ✅ |
On launch, remember previous selected layer | ✅ |
On launch, remember previous layer visibilities | ✅ |
Drag & drop maps to load them | 😭 |
Drag & drop tilesets to load them | 😭 |
Drag & drop images to load them as tilesets or characters | 😭 |
What does support mean? Currently, at least one loader. Optionally, one or more converters.
Tool | Description |
---|---|
map2tmx | Convert any VERGE map to Tiled .TMX |
pcx2png | Convert any PCX image to 32-bit PNG |
v1boxraw2png | Convert VERGE1 BOX.RAW to 32-bit PNG |
v1chr2gif | Convert VERGE1 character animation frames to animated GIF |
v1chr2json | Convert VERGE1 character animation data to JSON |
v1chr2png | Convert VERGE1 character animation frames to a single 32-bit PNG sprite sheet |
v1chr2pnglist | Convert VERGE1 character animation frames to individual 32-bit PNG images |
v1cr22png | Convert VERGE1 character portrait cels to 32-bit PNG |
v1equipdat2json | Convert VERGE1 EQUIP.DAT to JSON |
v1itemicondat2png | Convert VERGE1 ITEMICON.DAT to a single 32-bit PNG sprite sheet |
v1itemsdat2json | Convert VERGE1 ITEMS.DAT to JSON |
v1mainfnt2png | Convert VERGE1 MAIN.FNT font to a single 32-bit PNG sprite sheet |
v1map2json | Convert VERGE1 map to JSON |
v1miscicondat2png | Convert VERGE1 MISCICON.DAT to a single 32-bit PNG sprite sheet |
v1partydat2json | Convert VERGE1 PARTY.DAT to JSON |
v1smallfnt2png | Convert VERGE1 SMALL.FNT font to a single 32-bit PNG sprite sheet |
v1speechspc2png | Convert VERGE1 SPEECH.SPC cels to a single 32-bit PNG sprite sheet |
v1transtbl2json | Convert VERGE1 TRANS.TBL to JSON |
v1vsp2png | Convert VERGE1 tileset to a single 32-bit PNG sprite sheet |
v2chr2gif | Convert VERGE2 character animation frames to animated GIF |
v2chr2json | Convert VERGE2 character animation frame data to JSON |
v2chr2png | Convert VERGE2 character animation frames to a single 32-bit PNG sprite sheet |
v2chr2pnglist | Convert VERGE2 character animation frames to individual 32-bit PNG images |
v2kjchr2gif | Convert VERGE2k+j character animation frames to a single 32-bit PNG sprite sheet |
v2kjchr2json | Convert VERGE2k+j character animation frame data to JSON |
v2kjchr2png | Convert VERGE2k+j character animation frames to a single 32-bit PNG sprite sheet |
v2kjchr2pnglist | Convert VERGE2k+j character animation frames to individual 32-bit PNG images |
v2map2json | Convert VERGE2 map to JSON |
v2vsp2pal | Convert VERGE2 tileset palette to VERGE.PAL |
v2vsp2png | Convert VERGE2 tileset to a single 32-bit PNG sprite sheet |
v3chr2gif | Convert VERGE3 character animation frames to animated GIF |
v3chr2json | Convert VERGE3 character animation frame data to JSON |
v3chr2png | Convert VERGE3 character animation frames to a single 32-bit PNG sprite sheet |
v3chr2pnglist | Convert VERGE3 character animation frames to individual 32-bit PNG images |
v3map2json | Convert VERGE3 map to JSON |
v3vsp2png | Convert VERGE3 tileset to a single 32-bit PNG sprite sheet |
v3vspob2png | Convert VERGE3 tile obstruction types to a single 32-bit PNG sprite sheet |