I swear I showed this in IGMC2018, but... it is very simple. The maps are just json files, so if you know the syntax, it is pretty easy.
If you have RPGM MZ running at the same time, you can even see it updated whenever you save.
Example of an event in the json:
{"id":24,"name":"Secret Starfish","note":"","pages":[{"conditions":{"actorId":1,"actorValid":false,"itemId":1,"itemValid":false,"selfSwitchCh":"A","selfSwitchValid":false,"switch1Id":1,"switch1Valid":false,"switch2Id":1,"switch2Valid":false,"variableId":1,"variableValid":false,"variableValue":0},"directionFix":true,"image":{"tileId":0,"characterName":"Starfish","direction":2,"pattern":1,"characterIndex":0},"list":[{"code":122,"indent":0,"parameters":[6,6,0,0,0]},{"code":122,"indent":0,"parameters":[9,9,0,0,0]},{"code":111,"indent":0,"parameters":[4,3,3,257]},{"code":0,"indent":1,"parameters":[]},{"code":411,"indent":0,"parameters":[]},{"code":122,"indent":1,"parameters":[6,6,1,0,1]},{"code":0,"indent":1,"parameters":[]},{"code":412,"indent":0,"parameters":[]},{"code":111,"indent":0,"parameters":[4,3,3,259]},{"code":0,"indent":1,"parameters":[]},{"code":411,"indent":0,"parameters":[]},{"code":122,"indent":1,"parameters":[6,6,1,0,1]},{"code":0,"indent":1,"parameters":[]},{"code":412,"indent":0,"parameters":[]},{"code":111,"indent":0,"parameters":[4,1,3,131]},{"code":0,"indent":1,"parameters":[]},{"code":411,"indent":0,"parameters":[]},{"code":111,"indent":1,"parameters":[10,52,true]},{"code":0,"indent":2,"parameters":[]},{"code":411,"indent":1,"parameters":[]},{"code":122,"indent":2,"parameters":[9,9,1,0,1]},{"code":0,"indent":2,"parameters":[]},{"code":412,"indent":1,"parameters":[]},{"code":0,"indent":1,"parameters":[]},{"code":412,"indent":0,"parameters":[]},{"code":101,"indent":0,"parameters":["",0,0,2,""]},{"code":401,"indent":0,"parameters":["You are missing \\V[6] important secrets from this area"]},{"code":401,"indent":0,"parameters":["and \\V[9] important generic secrets."]},{"code":0,"indent":0,"parameters":[]}],"moveFrequency":3,"moveRoute":{"list":[{"code":0,"parameters":[]}],"repeat":true,"skippable":false,"wait":false},"moveSpeed":3,"moveType":0,"priorityType":1,"stepAnime":false,"through":false,"trigger":0,"walkAnime":true}],"x":1,"y":7},
It is really useful because for example, if I accidentally put event To Cave as id 25 instead of id 2, I can just change the "id" field and do some rearrangement.