Created by Coltaho let me know of any issues/suggestions here: Mega Man Zero Romhacking Server BETA TESTING IN PROGRESS there will be bugs!
Note: This editor was built and tested in Chrome! It might also work in Firefox but no guarantees. Also Cactank's stage is super fudged due to some strange stage mechanic not yet figured out.
First choose a Zero 3 Rom. This can be JP or US, including the practice Rom. No need to back it up as we are just getting the needed information from it and will be creating a new one once you save. Do not ask me where to get roms.
Once a valid Rom is loaded the UI will appear. The website is built with static locations of UI elements and as such will not scale or move based on browser window size. For the best user experience I recommend ensuring there are no scrollbars in the main window.
The UI will auto-load into Flizard's stage, room 138 (starting room), and with layer BG1 map displayed. The left canvas will have BG1, BG2, BG3, and Object layers with a grid on top. They can all by toggled on/off but the Grid must be shown to select blocks or draw anything. For the object layer, these are only enemies/pickups/doors - any dynamically moveable object or special things that load in like the bucket drops in Flizard aren't part of this. The right canvas is the "block drawer". It holds all available blocks for the current tileset.
Note: The block drawer currently includes only blocks ever used in that tileset
in the loaded rom and doesn't differentiate between intended layers. Except for when there is
a proper list available in manualcode.js
. Check the block type after selection
to know if the block has collision or not (explained later).
At the bottom is a map of the currently selected layer for that stage. Solid collision is denoted with purple, kill blocks are in red, and white is no collision. Be aware that moveable objects, triggers, and minibosses/bosses are all unchange-able at this time. You can softlock the player if a cutscene forces them to walk right and there's a wall in front of them.
Note: Editing a room modifies it globally for that stage. So any rooms that are re-used elsewhere would also see the changes.
Selecting a room on the map will load that room and correlated layers at that location. Some rooms are special and will not have a visible BG2/3 layer but instead ingame use a dynamically generated one. These can't be changed at this time. Another thing of note is that the game can move what layers are displayed where - I haven't been able to automate this process in the editor. So you have to manually re-order the BG sorting if you'd like to see how the room will look in the final state.
Hitting load room will load that specific room only. Since it doesn't have a stage grid position to relate to (and could be in more than one position). Save room will save any changes you made to the room.
On the block drawer left or right click will select a block which will make it appear in the currently selected block canvas along with the ID and block type next to it. Left clicking on the room canvas will draw a currently selected block. Right click on the room canvas will also select whatever block is at that location. You can click and drag while drawing. There's a filter on the right, you can select a specific block type to filter by. Block type 17 is a kill trigger, 0 is no collision, 1 is full collision. Slopes, ladders, ice, and conveyers have their own type as well.
Note: All drawing is always on the "BG1" canvas, regardless of what layer you're actually on. It is recommended to "Load Room" in order to see more accurately what you are drawing.
Current tileset is shown in the select options - this is automatically picked in nearly all instances. However if you want/need to manually select one, you may change it. Note this won't override what the game thinks the tileset should be but can help with places like the 2 extra towers in intro, or Cactank where my code janked some of the tilesets up. Toggle VRAM shows visually what tiles are available (in a default palette) to be drawn with. This is just informational, you can't do anything with it directly.
For interacting with the OBJ layer you must turn the grid off. Clicking on an object makes it the "active" object. If you click elsewhere you can select X/Y coordinates of where to place your object. Hitting Update will adjust the ID of the object (selected from available in dropdown) and the X/Y coordinates. Load a room from the map to see the updated placement, as you can pick any X/Y from any room to place the object in. If the ROM is expanded you can add up to 500 objects to the stage. At this time only objects already in the stage are allowed to be placed. Object reference table is complete and should automatically show you what objects are what in the drop down list.
E-Reader button will bring up E-Reader options. If any of these aren't set to default, all references to the e-reader functions will be redirected to read from ROM instead of RAM. This allows us to pick options at will. This will likely break normal e-reader functionality. If you set all options back to default, then this should be properly restored. Not all options are available for changing at this time. Check the reference link if you need examples of what changes will be done.
Checkpoints will show you all the current stage checkpoint X, Y, and Face values. I've manually named them for easy reference. Be aware that you can REALLY MESS THINGS UP if you try doing stupid things with this. I recommend keeping them in order and not touching the boss ones. The final stage checkpoints aren't all shown because the game handles them really wonky. This is mostly useful when you want to change the positions you spawn in initially (but also helpful to adjust later ones for when a player dies). Intro cutscene spawn is a bit special, that's the point you are spawned and then walk forward via a hardcoded script. You'll want to use the Object layer tooltip to get X/Y values to adjust a CP.
Camera scrolls are controlled via grid positioning. After clicking on a room in the mini-map, you have access to both the scroll information and what room is in what layer. You can also set what tileset belongs in that room (but for now keep it to what exists in the list for that stage). For Scroll type:
0 is free range 2-D are "sticky" scrolls so if the number next to it differs by more than 2, it will not scroll there unless the room boundary is crossed E keeps the camera from scrolling up into the room but won't stop/kill the player F means don't scroll camera into that room and kill player if they enter
Expand ROM will take the normal 8MB ROM and double it in size to 16MB. This allows us more room for fun! It will also repoint the stage pointers so that we can have up to 255 rooms per stage. Repoints object placement pointer to allow up to 500 total objects. More to come later!
Save ROM will save the modified rom to your downloads folder (defaults to browser setting)
with filename modified_Zero3.gba
. To create a patch for your rom use this
Patcher Webpage (BPS).
Credit to interdpth of the MAGConst Discord Server for the original LZ77 uncompression I modified from C++.
Credit to somerando(caauyjdp) found in the MAGConst Discord Server for figuring out Camera/Screen Scrolls
The following people deserve special thanks for helping with ideas/code/algorithms/testing: