***UPDATES DISCONTINUED***Title: Ocarina Room Editor
Dev Tool: c# .net 2.0
Language: English
Requirements: .net 2.0
Downloads:Ocarina Room Editor 1.0:
Download:http://www.pyxosoft.com/downloads/ocarina_room_editor.zipOcarina Room Editor 2.0 Beta:
IF USED FOR PERSONAL PROJECTS PLEASE BACKUP PROJECTS BEFORE USING!!!!!!!!!!Download:http://www.pyxosoft.com/downloads/ocarina_room_editor_200.zipDescription:Ocarina Room Editor (ORE) is a freeware tool geared towards Game Maker games. The purpose of ORE is to make room editing simple and fast. Originally intended for use with ZFGC.org's house project OOT2D, it can still be used for other games using 16 X 16 pixel sized tiles, and also where smaller rooms are used through out if version 1.0 is used, and only need 2 layers of tiles. ORE also comes packed with a simple mask editor which can be exported to the clipboard as a script for switch/case statements.
Features:- Can make up to 500 X 500 tiled rooms, that uses 16 X 16 pixels tiles
- The ability to save the room for later editing (.oerf files)
- Allows up to 2 layers to be painted, a lower and upper layer
- Easy to use tile brush, you can select a bunch of tiles to paint with at one time
- Left click to paint, right click to erase, it's that easy
- Intuitive room designer that informs the user the current layer being edited
- Swap tiles, shift tiles or resize your room at any time
- Simple fill tool lays out a base ground tile
- Background color can be customized
- A built-in mask maker for collision masks, cuts down on block objects
- Creates a .png of your room to work off of, or just show off
Version 1.0:- Creates a .bin file of all the tile ids for Game Maker to read, or any other custom room reader
Version 2.0:- Actually exports the room to a selected GM project.
Known Bugs:- The tile selector allows the user to select one tile row or column too many
- Graphical glitches when the mask edit is used
- Tiles paint to the left if painting happens outside the right side
Screens:

GML Scripts For Version 1.0:Example use:// In room creation code
scrCreateTiles(bgTiles, "tiles.bin");
// bgTiles is a background resource that you have added to your GM project
// "tiles.bin" is the string pointing to the ORE .bin file that you created with ORE
Script: scrCreateTiles:
//-------------------------------------------------------------------------------
// Reads tile ids from file and creates tiles for current room
//-------------------------------------------------------------------------------
var background, stream, file, col, row, cols, rows, srcX, srcY, destX, destY;
var tileId, tileCols, count;
background = argument0; // The GM background resource to use for the tiles
file = argument1; // The ORE .bin file path
cols = room_width / 16; // The amount of room columns
rows = room_height / 16; // The amount of room rows
// The amount of background columns
tileCols = background_get_width(background) / 16;
// Open a file stream
stream = file_bin_open(file, 0);
// Add tiles to the room
for (row = 0; row < rows; row += 1)
{
for (col = 0; col < cols; col += 1)
{
// Get lower tile id from file
tileId = scrReadShort(stream);
// Calculate tile destination position
destX = col * 16;
destY = row * 16;
// If the tile id is not empty
if (tileId != -1)
{
// Calculate tile source position
srcX = (tileId - (floor(tileId / tileCols)) * tileCols) * 16;
srcY = floor(tileId / tileCols) * 16;
// Add lower tile to room
tile_add(background, srcX, srcY, 16, 16, destX, destY, 1000000);
}
// Get upper tile id from file
tileId = scrReadShort(stream);
// If the tile id is not empty
if (tileId != -1)
{
// Calculate tile source position
srcX = (tileId - (floor(tileId / tileCols)) * tileCols) * 16;
srcY = floor(tileId / tileCols) * 16;
// Add upper tile to room
tile_add(background, srcX, srcY, 16, 16, destX, destY, -1000000);
}
}
}
// Close file stream
file_bin_close(stream);
Script: scrReadShort:
//-------------------------------------------------------------------------------
// Reads a 16bit signed short from given file stream
//-------------------------------------------------------------------------------
// Local variables
var stream, short, byte1, byte2;
// Stream to read data from
stream = argument0;
// Read 2 bytes
byte1 = file_bin_read_byte(stream);
byte2 = file_bin_read_byte(stream);
// Ceate short from bytes
short = (((byte2 & $FF) << 8) + ((byte1 & $FF)));
// If negative
if (short == 65535)
short = -1;
return short;