ZFGC
Projects => Other Projects => Topic started by: Xfixium on June 05, 2009, 09:29:17 pm
-
Title: Game Maker Alternative Room Editor (GMare)
Dev Tool: c# VS 2010
Language: English
Requirements: Windows, .net 2.0, OpenGL 1.1
Downloads: http://gmare.codeplex.com/
Description:
GMare is an alternative room editor for Game Maker versions 5 through 8. Offering more user friendly tools to create rooms quickly and easily. It also offers various import export options.
Release Notes:
The collision editor part of GMare does not have any direction at this time, and thus does not work. It is also recommended that you back up your project if you decide to export the room to a Game Maker project file. (GMare will remind you of this before it overwrites a project) There is also some example projects to show how to import a GMare .bin from disk.
Features:
- Rooms are created in separate project files which can be shared easily within a dev team environment.
- Rooms can be exported to an image file.
- Rooms can be exported to a binary file.
- Rooms can be exported directly to a Game Maker project file. (Supports GM5 through GM8)
- Import room from an image. a supported image format (.png, .bmp, .gif)
- Import from Ocarina Room Editor project file (.oref).
- Easy to use tools and intuitive design. Making for less mistakes when switching between tile layers.
- Pencil tool - Paints single or multiple tiles.
- Bucket tool - Fills with a single or multiple tiles. Smart fill.
- Selection tool - Cut, Copy and paste tiles where needed.
- Tile swap tool - Swaps single or multiple tiles.
- Shift tool - Shifts a single or all layers in a desired direction.
- Collision editor - For collision rectangles, and triangles.
- Layer text viewer - lists tiles in text.
- Instance editor - Sets instances based off imported objects.
Screens:
-
Horribly off-topic; so IsmAvatar IS a girl? O_O;; I've known her for like... years and years and I've never known that XD
ANYWAY!
Looks nice, as Ive said via PM :) I can't wait to use this more with pureLA.
-
Horribly off-topic; so IsmAvatar IS a girl? O_O;; I've known her for like... years and years and I've never known that Grin
lol Yup. We discussed using GMare in LGM a long time ago. It never panned out though. I dropped the ball on that one. Not enough experience to get it done. :-\ This version will be completed though.
-
This could prove to be quite useful. I look forward to its release.
-
It's just about done. I need to finish the exports, shapes editor, and the help file.
-
I like the look of this, it's great that it's made specifically for GM.
-
I can't wait til this is finished :)
I've put the additional collision detection/map scripts on pureLA on hold for this lol
-
I wanna start making a game already! :D
seriously though, I'm sort of waiting for this...
but by no means, don't rush it for my sake :P
-
Yeah, I'm really excited for this as well, and plan to use it as soon as it's released!
-
My detailed log of things can be found on my site here:
http://www.pyxosoft.com/forums/index.php?topic=97.0
It's more to motivate me to get it done, and show what is going on right now. I'm very close to the end dev wise. I will be doing some basic testing | optimizing before the release though. I do recommend pre-installing the SlimDX runtimes which can be found on the above link.
EDIT: I will be releasing GMLib earlier than GMare.
-
GMLib is done, and available for download. Please report any bugs.
GMLib is a .net library (.dll) that has functions to read and write Game Maker projects from 5.0 to 7.0. There is also a small example app, that shows this functionality. You can also create GM projects from scratch. GMLib auto ids any major game objects added to a project.
There is room for improvement, but this is a beta, and more suggestions would shape the library better. Now to finish GMare.
-
Well, I downloaded the test. Nicely done there :)
Still, got an error though. I clicked on the gmevent[] array ... thing.
Here's the error:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.ArgumentException: component
at System.ComponentModel.TypeDescriptor.GetDescriptor(Object component, Boolean noCustomTypeDesc)
at System.ComponentModel.TypeDescriptor.GetEditor(Object component, Type editorBaseType, Boolean noCustomTypeDesc)
at System.ComponentModel.TypeDescriptor.GetEditor(Object component, Type editorBaseType)
at System.ComponentModel.Design.CollectionEditor.CollectionEditorCollectionForm.ListItem.get_Editor()
at System.ComponentModel.Design.CollectionEditor.CollectionEditorCollectionForm.CalcItemWidth(Graphics g, ListItem item)
at System.ComponentModel.Design.CollectionEditor.CollectionEditorCollectionForm.UpdateItemWidths(ListItem item)
at System.ComponentModel.Design.CollectionEditor.CollectionEditorCollectionForm.Listbox_handleCreated(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnHandleCreated(EventArgs e)
at System.Windows.Forms.ListBox.OnHandleCreated(EventArgs e)
at System.Windows.Forms.Control.WmCreate(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ListBox.WndProc(Message& m)
at System.ComponentModel.Design.CollectionEditor.FilterListBox.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3074 (QFE.050727-3000)
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
Test
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///C:/Users/Luke/Downloads/gmlib_example/gmlib_example/Test.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
GMLib
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///C:/Users/Luke/Downloads/gmlib_example/gmlib_example/GMLib.DLL
----------------------------------------
System.Design
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Design/2.0.0.0__b03f5f7f11d50a3a/System.Design.dll
----------------------------------------
Accessibility
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/Accessibility/2.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
System.Xml
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3074 (QFE.050727-3000)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
The program continued though.
-
What was not user-friendly about the room editor in GM? :o
-
Still, got an error though. I clicked on the gmevent[] array ... thing.
Here's the error:
Thanks for the feedback. :) The problem here is that I don't have a custom editor to show the data. Since the example is extremely simplified way to show what the data contains. I'm sure it'd error out if the array was null also. This can be ignored however. As it has nothing to do with the actual lib. Later when the beta is more solid, I may make custom UIEditors for the example to handle this.
EDIT: Actually I think there's an attribute you can set for objects to make them expandable, if they're not defined within the parent class. I forgot about that.
What was not user-friendly about the room editor in GM?
No advanced tools like flood fill. The thing slows down significantly when doing a very large map. Since it's GDI based. No magnification tools. I can't tell you how many times I've drawn on the wrong layer. Don't like that you have to hold down the shift key to select multiple tiles. Don't like you have to hold down the shift key to draw rapidly. Can't share rooms with a development team easily. I'm just saying there's room for improvement.
-
Hrmmmmm, seems I forgot some things for GMLib. I meant to have a way to auto increment the LastTileId and LastInstanceId variables. I also forgot a RefactorIds method for the GMList class. I will be updating that today at some point.
-
How's GMare coming?
-
Still working on it. Sadly, haven't had much time lately. I'll have time this week though. For a detailed log of my frustration and misery click here:
http://www.pyxosoft.com/forums/index.php?topic=97.0
-
Update: Fixed the standard offset grid drawing. Finished the image exporter. Going to add yet more features. A cloning tool. Also a solids editor. It works in the same fashion RPG Maker does. Click the tile and it gives you a bunch of shapes. These can be included with the .bin exporter.
-
any idea when you'll release a demo?
-
Looks very nice =3
Lol I managed to get it all working except for the actual room editor part of it XD... Damned Dells of mine...
-
any idea when you'll release a demo?
Your guess is as good as mine. With me actually using it for projects now, It'll be developed faster. Unfortunately, I keep adding things to it. Pushing back it's release. It has a bunch of minor things to be done. My major concern is it's compatibility with people's hardware. Which seems to be hit or miss.
Lol I managed to get it all working except for the actual room editor part of it... Damned Dells of mine...
So was there some additional problems outside of the editor? Or is it just the editor, which is basically Direct3D 9.
-
Well as far as I can tell both of my laptops have issues with DirectX 9 in general. The one I use primarily can't even start the app, and my other one can start it up, but there's a big red X in the editor pane :P
-
any idea when you'll release a demo?
Your guess is as good as mine. With me actually using it for projects now, It'll be developed faster. Unfortunately, I keep adding things to it. Pushing back it's release. It has a bunch of minor things to be done. My major concern is it's compatibility with people's hardware. Which seems to be hit or miss.
Maybe it is time for a beta test. Ask people to try it out. And report there findings, including the system hardware, OS and known issues with directX or XNA or whatever libraries you use.
-
Well as far as I can tell both of my laptops have issues with DirectX 9 in general. The one I use primarily can't even start the app, and my other one can start it up, but there's a big red X in the editor pane
*sigh* yeah. Hey if you have the debug DirectX 9 libraries running, and have DebugView, it should give a hint to what the problem is. Venyux had a hardware issue. I figured out what the problem was, I just couldn't figure out a solution. XD
Maybe it is time for a beta test. Ask people to try it out. And report there findings, including the system hardware, OS and known issues with directX or XNA or whatever libraries you use.
It looks like this is the road to take. I do need to complete some things before that happens.
-
It's looking great, release it when you feel comfortable, although i would like to use it sooner rather than later :p
-
Well, I have the first release of source to lay down of oot2d for dev people. (Probably today) At that point I'm forced to work on GMare. I need to finish the solids editor for a new method within oot2d. So, I'll get the things that I need to get done, excluding the importers. I think that should be enough for a beta. Now, I'm not promising a whole hell of a lot, but maybe next weekend a beta will be released?
-
In the process of finishing the solids editor. I need to add some more basic shapes. Then write data to export it to a binary file.
-
is it possible to have the solids grid a different size to the tile grid?
-
No, not at this time. Although it wouldn't be hard to implement if it was a desired option.
-
that would be a nice addition.
-
im REALLY looking forward to this release. ORE is awesome and has already saved me a great deal of time and effort.
-
Well, your wait will be long. XD I don't plan on finishing GMare till oot2d's first real release. I had plans to do it while we were deving oot2d, but I realize that is impossible now.
-
Update:
GMare is currently in the works again. (Indirectly has been for a week now.) To an official release, since OOT2D needs the update to continue. Making sure the game is kept at low memory consumption, and running smoothly for our next internal build release. GMLib has been updated to read in GM8 projects. Still working on the writing features. I'm re-tooling GMare a bit, so that the code can be used for Horn of Balance. Shooting for it to be done within a month.
-
Update:
Most of my work has been updating GMLib. The image to room importer is almost done. Working on the manual tile re-arrangement editor right now. That would leave the instance editing, clipboard, tile selection tool, and updated binary export options left to be done.
-
Looking good, I see you switched to the Fugue icon set :3
-
:) Yeah, it seems to have more options. It's the first screen with those, but I actually switched up awhile back.
-
I'm using them for my own project, I love the fact that it comes with the PSDs so you can make more combos :3
-
Been helping Xfixium with GMLib, and from what I understand GMare is getting close to finished :3
-
Yep, Antidote has been a big help. GMLib will eventually be able to handle what GMare expects of it. I have been working on the image to room tool once again. I have optimized the tile optimizer part of the code, making it crazy fast. I also made new code to handle any errors that may occur with the new method, versus tile offset and separation code. (I also just now realized I've been spelling separation wrong for a long time now, yikes.) I did come up with a method to manually organize the tileset, but I think it could be better. So that has been the focus of now. I also did some work on the room editors selection tool. Thinking those will be done by the end of the week. Which will leave the instance, and redo/undo left. Probably some optimization will need to be done too.
-
Nice X, keep up the good work :D
-
Update:
Reworked the tile replace tool, so that it can replace multiple tiles. Also have finally come up with a decent method for manual arrangement of tiles for the image to room importer. Included an undo / redo method into the project. Still have some minor bugs to correct. The WIP images are all looking the same. :P
-
Update:
Reworked the tile replace tool, so that it can replace multiple tiles. Also have finally come up with a decent method for manual arrangement of tiles for the image to room importer. Included an undo / redo method into the project. Still have some minor bugs to correct. The WIP images are all looking the same. :P
Sounds excellent, my friend.
-
can this program only create rooms ?
-
can this program only create rooms ?
Not only rooms lol, I think you can set up objs from the gmk so when the room you made is done, and loaded up in you gmk. everything would be there. I am not so sure of gmare since I am use to and currently using ore.
-
it would be cool if you could load a room out of code though from this.
-
it would be cool if you could load a room out of code though from this.
"Export to Bin"
:P
Reasonably positive that functionality is still there. If not, there's still ORE (precursor to GMare), which does export to room files.
-
GMare allows for 4 different types of exporting. Export to a GM project file (GM 5 to 8 ), a custom .bin or .txt file, or a .png image file.
For GM project export it allows for instances with creation code to be placed just like GM. It also has a list of all the instances created within the room, that can be grouped by alphabet, id, or by object type. It also has a collision tool that allows for basic triangles or squares to be placed. (However collision data can only be exported to a .bin or .txt file.)
GMare still supports .ore files, and also makes rooms from .gif, .bmp. and .png files.
-
Update:
Wrote the object loader. Which in the WIP, an ORE room was loaded, and my old LA project objects have been loaded in the object pallet. Which is set up the same way it is within the GM project.
-
Pretty much done with the instance editor parts.
Another WIP:
-
Wrapped up the instance part of the editor. Need to refine some of the other tools associated with instances. Mostly error correction on object import overwrite. Also have to add the instance export on the Game Maker project exporter. I have changed the layout a bit. The tool strips are now contained in their appropriate tabs. Added a magnifier for the tileset as well. Mainly what is left is the new exporter options, the undo/redo functionality, and the rest of the selection tool. I'm rethinking the collisions editor part. Not sure what direction to take it in, where it would be the biggest help. I found this topic at Yoyo: http://gmc.yoyogames.com/index.php?showtopic=463645 Which I found interesting. I was thinking of doing something more geared to this idea. Not too sure at this time however.
NOTE: Trying to attach these 2 WIPs on ZFGC failed:
(http://www.pyxosoft.com/media/images/temp/gmare_24.png)
(http://www.pyxosoft.com/media/images/temp/gmare_25.png)
-
Looking good X :D
-
Update:
- Finished handling object conflicts on object import.
- Added instance export code to GM exporter.
- Fixed some issues with GMLib. Mainly the events array. Added trigger support. Also a flag for compressed image data.
- Condensed some more toolbars and buttons.
- Finished putting together a control for the room editor. As it suffered flicker issues from scrolling.
- Finished the selection tool.
- Fixed some scaling issues.
- Created a pre-render solution for rooms, so that no extra blending needs to be done by the hardware.
- Fixed the rendering for seperation, and offset values. It looks more like GM's background tileset options.
Left to do:
Room Editor:
- Undo/Redo
- Change the isometric grid rendering.
Image to room Importer:
- Undo/Redo.
- Change the behavior when going out of bounds in the tile editor during image import.
- Tile error on end room when overlapping target / source tiles in the tile editor.
Binary Exporter:
- Add instance export.
- Give export options for custom .bin file.
WIP: A test room where I created one dungeon room, and just copied and pasted that as a selection.
-
*just notices zooming*
I love you, sir!
-
Yeah, it's pretty much the same as RPG Maker. 25% 50%, 100% 200%, and an added 400%. For what reason, I have no idea. :P
-
Xfixium, was the events fix the one i found? :P
-
Yup, I looked over it, and saw my old code and realized what I had done. I decided to use an array of Event lists. For some reason when I wrote the code back then I didn't think of main events having more than one sub event tied to them. Pretty bad glitch.
-
lol, I remember scratching my head thinking "How did he mess this up? How can i fix it?" then i just used an array for the main events and a list for the sub events in my code.
So basically it looks like this
mainEvent[0..11]->subEvent->actions
|
->subEvent->actions
and so one.
I also noticed that this fix also fixes the crash when trying to view the events data binding in the test program.
-
Update:
Just about to release an alpha of this thing. Spending time debugging some of the features still. Also testing the binary instance export part of the binary exporter.
- Finished the Undo/Redo parts of the editor.
- Changed the Isometric rendering.
- Fixed the tile error on end room when overlapping target / source tiles in the tile editor.
- Added instance export.
- Added a bunch of new options that were forgotten.
- Hooked the shortcut keys.
Not finished, but not necessary for alpha release.
- Give export options for custom .bin file.
- Out of bounds behavior in the tile editor during image import.
- Collision editor / options.
- Optimize the render method for the editor. (I have a completely new method in mind)
- Change the undo / redo to a action method. It could use a bunch of RAM with the serialization method that is implemented.
-
Update:
Just about to release an alpha of this thing. Spending time debugging some of the features still. Also testing the binary instance export part of the binary exporter.
- Finished the Undo/Redo parts of the editor.
- Changed the Isometric rendering.
- Fixed the tile error on end room when overlapping target / source tiles in the tile editor.
- Added instance export.
- Added a bunch of new options that were forgotten.
- Hooked the shortcut keys.
Not finished, but not necessary for alpha release.
- Give export options for custom .bin file.
- Out of bounds behavior in the tile editor during image import.
- Collision editor / options.
- Optimize the render method for the editor. (I have a completely new method in mind)
- Change the undo / redo to a action method. It could use a bunch of RAM with the serialization method that is implemented.
How do you plan to do custom exports to Bin? Instance creation commands and such stored as a hex value, with arguments as the following values?
-
I had some ideas, but I figured I'd get some feedback from users and go from there. Since it's an area that requires a lot of flexibility.
-
Hmmmm, been messing with the binary file that GMare exports. I was wondering how I was going to use the creation code part of the instances. Since instances have no way of setting the creation code. I sort of have a hackish way of executing the code, but it doesn't mimic the behavior of native instance creation code. The code is executed right AFTER the the instance's create event. Which for me, is just fine, but it might not be for everyone else. Any solutions welcomed. Any who, I pretty much have that done. As well as a some sample projects on how to load a GMare .bin file.
The binary file load script: (Pretty straight forward)
//-----------------------------------------------------------------------------
// A standard room load from a GMare .bin file.
//-----------------------------------------------------------------------------
_file = argument0; // STRING: The GMare .bin file path.
_room = argument1; // STRING: The name of the room to load.
_background = argument2; // REAL: The background to use for the room.
// If the file does not exist, exit.
if (!file_exists(_file))
{
// Show error.
show_message("ERROR: The GMare binary file: " + _file + " does not exist.");
exit;
}
// Open the .bin file to read.
_stream = file_bin_open(_file, 0);
// The GMare binary file magic number.
_magic_number = "";
// Read four character bytes.
repeat (4)
{
_magic_number += chr(file_bin_read_byte(_stream));
}
// If not a valid GMare binary file, exit.
if (_magic_number != "GBIN")
{
// Show error, close file stream.
show_message("ERROR: The file is not a valid GMare .bin file.");
file_bin_close(_stream);
exit;
}
// The offset to the actual room data beyond the header.
_data_offset = -1;
// The amount of rooms in the file.
_room_count = scr_read_bytes(_stream, 2, true);
// Iterate through rooms in the GMare binary file header.
repeat (_room_count)
{
// Read room name.
_search = scr_read_string(_stream, 1);
// Read the room data offset.
_offset = scr_read_bytes(_stream, 4, true);
// If the search string matches the desired room string.
if (_search == _room)
{
// Set data offset, and break loop.
_data_offset = _offset;
break;
}
}
// If the desired room was not found, exit.
if (_data_offset == -1)
{
// Show error, close file stream.
show_message("ERROR: The room: " + _room + " was not found.");
file_bin_close(_stream);
exit;
}
// Seek, to the desired room data.
file_bin_seek(_stream, _data_offset);
// Room data:
_columns = scr_read_bytes(_stream, 2, true); // The number of tile columns in the room.
_rows = scr_read_bytes(_stream, 2, true); // The number of tile rows in the room.
_tile_offset_x = file_bin_read_byte(_stream); // the horizontal tile offset of the background.
_tile_offset_y = file_bin_read_byte(_stream); // The vertical tile offset of the background.
_tile_separation_x = file_bin_read_byte(_stream); // The horizontal separation of the background.
_tile_separation_y = file_bin_read_byte(_stream); // The vertical separation of the background.
_tile_width = file_bin_read_byte(_stream); // Width of a single tile in the background.
_tile_height = file_bin_read_byte(_stream); // Height of a single tile in the background.
_tile_columns = scr_read_bytes(_stream, 2, true); // The number of coulmns of the background.
_layer_count = scr_read_bytes(_stream, 4, true); // The number of layers in the room.
_instance_count = scr_read_bytes(_stream, 4, true); // The number of instances in the room.
_collision_count = scr_read_bytes(_stream, 4, true); // The number of collisions in the room.
// Iterate through layers.
repeat (_layer_count)
{
// Get layer depth.
_layer_depth = scr_read_bytes(_stream, 4, true);
// If the layer uses the sector method, instead of the tile method.
if (file_bin_read_byte(_stream) == 0)
{
// Iterate through rows.
for (_row = 0; _row < _rows; _row += 1)
{
// Iterate through columns.
for (_column = 0; _column < _columns; _column += 1)
{
// Get source tile id from file.
_tile_id = scr_read_bytes(_stream, 2, true);
// Calculate tile destination position.
_dest_x = _column * _tile_width + _tile_offset_x;
_dest_y = _row * _tile_height + _tile_offset_y;
// If the tile id is not empty.
if (_tile_id != -1)
{
// Calculate tile source position.
_src_x = (_tile_id - (floor(_tile_id / _tile_columns)) * _tile_columns) * _tile_width;
_src_y = floor(_tile_id / _tile_columns) * _tile_height;
// Adjust with tile offsets and separations.
_src_x += (floor(_src_x / _tile_width) * _tile_separation_x) + _tile_offset_x;
_src_y += (floor(_src_y / _tile_height) * _tile_separation_y) + _tile_offset_y;
// Add tile to room.
tile_add(_background, _src_x, _src_y, _tile_width, _tile_height, _dest_x, _dest_y, _layer_depth);
}
}
}
}
else // Tile mode.
{
// The number of tiles in tile mode.
_tile_count = scr_read_bytes(_stream, 4, true);
// Iterate through tiles.
repeat (_tile_count)
{
// Get source tile id from file.
_tile_id = scr_read_bytes(_stream, 2, true);
// Read destination position.
_dest_x = scr_read_bytes(_stream, 4, true);
_dest_y = scr_read_bytes(_stream, 4, true);
// Calculate tile source position.
_src_x = (_tile_id - (floor(_tile_id / _tile_columns)) * _tile_columns) * _tile_width;
_src_y = floor(_tile_id / _tile_columns) * _tile_height;
// Adjust with tile offsets and separations.
_src_x += (floor(_src_x / _tile_width) * _tile_separation_x) + _tile_offset_x;
_src_y += (floor(_src_y / _tile_height) * _tile_separation_y) + _tile_offset_y;
// Add tile to room.
tile_add(_background, _src_x, _src_y, _tile_width, _tile_height, _dest_x, _dest_y, _layer_depth);
}
}
}
// Iterate through instances.
repeat (_instance_count)
{
_object = scr_read_bytes(_stream, 4, true); // Instance object id.
_x = scr_read_bytes(_stream, 4, true); // Horizontal coordinate.
_y = scr_read_bytes(_stream, 4, true); // Vertical coordinate.
_code = scr_read_string(_stream, 4); // Instance creation code.
// If the object does not exist.
if (object_exists(_object) == false)
{
// Show error, continue.
show_message("ERROR: The object with id: " + _object + " does not exist.");
continue;
}
// Create a new instance of the object.
_inst = instance_create(_x, _y, _object);
// If there is creation code, execute it.
if (_code != "")
{
// A heck to make sure the code executes within the instance.
// Problem being is this executes after the creation event.
// Solution is needed to emulate native behavior.
_code = string_insert("with (_inst) {", _code, 1);
_code = string_insert("}", _code, string_length(_code));
execute_string(_code);
}
}
// Close file stream.
file_bin_close(_stream);
In the WIP, I use a script within GMare to move the selected shrub to the left.
-
An alpha release has been uploaded: http://gmare.codeplex.com/
Also the source is available for download.
For a list of bugs, use GMare's codeplex space and click the issue tracker tab. Report them as well, it'd be nice. :)
The release also includes an example GM project.
-
It crashes on room creation for me :( I think that's always been the case with GMare and me though XD
One feature that would be particularly awesome to have (but not so much useful for the GM side of it D: ) is the ability to customize what the exporter saves per-tile... Like for example, lets say there's an option that says "Change Tile Fields", it'll let me add whatever I want (along with default values), and set them individually in the map editor. This would primarily benefit other game dev tools because then you can set collision data, palette values (RGB ftw), and other stuff right from the editor.
-
I see what you mean. I will come up with something. Is there anyway you can run the source to see what the problem is? Or if there is any information at all about the crash?
-
It's the exact same error I used to get, but lemme see what I can pull :P
I'll edit this with stuffs
EDIT: Here's the dump from JIT; not really sure how useful it is but *shrugs*. I'll keep digging :p
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at GMare.Forms.RoomForm.tsb_Ok_Click(Object sender, EventArgs e)
at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
at System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ToolStrip.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3615 (GDR.050727-3600)
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
GMare
Assembly Version: 1.0.0.0
Win32 Version: 0.1.0.0
CodeBase: file:///C:/DOCUME~1/ADMIN/LOCALS~1/Temp/Rar$EX00.202/Release/GMare.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3614 (GDR.050727-3600)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
-
That would be awesome.
-
Wow, that's great. Finally a release!
This seems to be an awesome room editor. I haven't figured out, how to use the created rooms in GM Projects yet (I can't open the example GM project because I only have GM7), but once I do, I'm sure this will make room creating much easier.
I love the features like flood fill tiling, moving tiles around and collisions on different layers.
I found some bugs, too:
When I select Edit Mode Collisions and try to place collisions they always appear at 0,0. I can move them around, but it's still very annoying.
Another, really minor one: When you use the Selection tool for tiles and start a selection at the bottom right corner of the area which you want to select, and then move the mouse to the top left corner, the grid inside the selection is supposed to dissapear. Instead it removes the grid starting at the bottom right corner and moving further right and down.
Hope that wasn't too confusing. I added a screenshot to show what I mean.
-
Sorry the collision editor is not done in this version of GMare. This is noted under the download description on codeplex. Mainly I didn't implement it because I wanted a clear path on what the collisions could be used as. As in, do I use it for just points, or maybe a line list for line collisions? Or some other idea that may be nice for users.
Thank you for reporting the bug! For anymore bugs, gmare @ codeplex has an issue tracker, (which I already put a bunch of bugs to fix in there) so that you can see what bugs have already been reported. GMare also has a fill option for a selection after you make one. This is handy to fill a room with the selection copy. I forgot to mention it.
EDIT: I will eventually make a GM7 version of the binary importer. Exporting to a GM project is fairly straight forward.
Also mammy, I just found a bug on room creation. Try changing the room size to something other than the default. I missed a null reference check on if the room has changed. Which will force another version to be uploaded.
-
An updated version of GMare has been uploaded. http://gmare.codeplex.com/
-
Works great now :D Pretty sweet. Like I said, I'd probably use this for all of my projects if there were an option to add custom values to tiles (namely Surface; which requires pixel information per tile D:). Very awesome stuff :D
Probably my favorite feature so far is being able to change the grid size without messing with actual placement. Comes in handy :D
-
Cool, thought for sure it was going to crash on ya. :P Yeah, we will have to collaborate a bit further on what your looking for. Maybe some custom user variables per tile? That would change things a bit, but I sort of anticipated it.
-
Cool, thought for sure it was going to crash on ya. :P Yeah, we will have to collaborate a bit further on what your looking for. Maybe some custom user variables per tile? That would change things a bit, but I sort of anticipated it.
Yeah that would be awesome; really you'd just have to add a few things to the header; something like 'custom variable count' 'custom variable name (index)' (maybe even 'custom variable type (index)' too), then for each tile depending on that have it write the values. Shouldn't require too much work in the long run ;3
-
I tried to export to GM8 and i'm not sure what to expect , the tiles don't appear in the room .
-
Hmmmmm, can you share the project and I can see what's up?
-
Hmmmmm, can you share the project and I can see what's up?
Sorry , i deleted it and can't find it because i got a problem with my recycle bin , anyway i tried exporting it and it sort of messed up the gmk , i couldn't get an object to stay visible , the tileset appeared though but the objects didn't , did you try experimenting?
-
You couldn't get an object to stay visible. As in they don't show up in the room that was exported, or not within the project tree? Not completely following you.
-
after i tried exporting it more than 3 times i created an object in GM but it wasn't visible in the room so i wasn't sure what was causing that problem.
-
I tried doing a bunch of things on the sample projects to try and see if I could re-create the problem, but I couldn't make it behave differently from what was expected. So it must be an option specifically with your GMK that GMare could be writing back incorrectly. I could test the gmk.
-
I can't even recreate the problem, and in general I have the most error-prone computer in existence :P
-
I can't even recreate the problem, and in general I have the most error-prone computer in existence :P
XD
Yeah I gave it a go, but no luck, there are many options within GM, and I cannot test for them all. So it still could be an issue with your project that GMare is having, based on your project settings. In that case I would have to have a copy of the GMK and find it through the reader / writer parts of GMare.
-
I can't even recreate the problem, and in general I have the most error-prone computer in existence :P
XD
Yeah I gave it a go, but no luck, there are many options within GM, and I cannot test for them all. So it still could be an issue with your project that GMare is having, based on your project settings. In that case I would have to have a copy of the GMK and find it through the reader / writer parts of GMare.
so when you export things into a gmk what should appear ? everything or just the tiles ?
-
If you want object instances to be exported, you must check the Write/Overwrite Instances check box in the GM export form. (This is not checked by default, as not everyone may want to export instances) The tiles will always export.
I started doing some documentation yesterday, it's not complete, but may explain some things: (Export Features)
http://gmare.codeplex.com/documentation
-
lol I've been away for a bit lol, quick question, the Gmare Alpha can load the ORE files?
edit:
nvm, it froze when I tried loading an ore file. XD
correcting myself, it works!
-
This is getting me excited all over again.
I know I don't have the time to start converting my game right away, but it's itching. I like the simplicity of the thing, in the sense that it looks very inviting to start using. Once there is more documentation, I'll look for time to try it out for real.
-
Very professional looking docs X, :3
You should get html workshop and package them as a chm with the program.
-
Thanx for the advice meng. I still have a bunch to do. Slowly getting it done. :P
-
Ugh I feel like such a noob for asking, the feature which includes the creation of shapes, what does that do when it is actually imported to the game maker file itself?
-
Not a noob question. The collision parts are not finalized. I want to go over the community project, and some other ideas before I decide what would be the most flexible and painless method to use. When GMare becomes a beta, the collision feature will be implemented.
-
Good to see you're not diving headlong into that. The implementation of collision in GM is a big issue. There is no easy way to do it.
-
A new version of GMare has been released: http://gmare.codeplex.com/
Main changes:
Added shortcuts, for a more image editor type feel. Hand dragging tool (H). The mouse wheel zooms in and out on point. Color blending and tile flipping. Custom brushes.
Release notes:
- Main interface disables collision options for now
- 'Show instances always' button added
- When in instance editing mode, tiles are drawn darkened
- Most tools now have short-cut keys. Hovering over a button reveals it's shortcut
- The mouse wheel now zooms the room on mouse position
- Tile flipping options and short-cut keys on all tile tools
- Color blend options on all tile tools
- Hold shift and left click to erase tiles now when using brushes
- Set a selection as a brush
- Save a selection as a custom brush
- Brushes editor to rename, move, and delete saved brushes
- Holding the 'H' button now allows for room panning
- GM export tree now includes the main room folder
- GM export tree disables the room name field when overwriting an existing room
- Binary exporter includes scaling and color blend options
- Binary exporter disables collision data for now
- Fixed image exporter
Notes:
Color blending is only available in a pro version of Game Maker. Also, color blending data and scaling
data will not export to a Game Maker project file. The format does not support it.
The gmare_binary_examples.bin file uses color blending. So you will have to comment out the blend color
line in the Game Maker project if you don't have a pro version of Game Maker. It is documented in the
script: scr_read_tile_attributes.
-
2 options will be available for collision editing. I will describe the first one at this time:
Simple Object Based Collisions:
This is basically the way that block collisions are commonly done in Game Maker. An object that represents an invisible wall. For most, this method seems wasteful as a room could have hundreds of objects whose only job is to stop another object from moving through it. In Gmare, this is at least made to be easier for simple object based collisions. As there is an editor that works somewhat like RPG Maker. You import objects from your project, and then you place those objects on the desired tiles within the object collision editor. Those tiles will automatically get that object placed over them. As the WIP image shows:
(http://www.pyxosoft.com/projects/gmare/gmare_35.png)
This could potentially cut down on object based block collision editing.
NOTE: I also have added GM 8.1 support for the next release.
-
I just realized that I haven't expressed how happy I am about GMare. I expect this to be an extremely useful resource for lots of people, myself included.
... You import objects from your project, and then you place those objects on the desired tiles within the object collision editor. Those tiles will automatically get that object placed over them. ...
I always wondered why Game Maker never implemented the option for people to do this; extremely useful.
I have yet to test out GMare, but I'm sure it's going to be a great help. Thanks for this, Xfixium! ^_^
-
I think the way you have to change the room size is a little silly ; why can't you just have a box where you intput the width and height instead of rows and columns which is more confusing. On the upside , this is great for creating maps/levels!
-
Agreed, this app was started awhile ago, so it still has some RPGMaker roots about it. Not a big issue IMO. The actual room size is shown in the status bar at the bottom of the form if there is any confusion on the actual pixel size of the room.
Also:
A new minor updated release. Mainly in response to a small issue when exporting to a Game Maker project file. I also updated some other things as well.
Download: http://gmare.codeplex.com/
- Fixed an issue on GM room export, with the instances not exporting when a new room was being added to a Game Maker project.
- Added Game Maker 8.1 support.
- Added new instance replace form.
(http://www.pyxosoft.com/projects/gmare/gmare_36.png)
-
Minor update GMare Alpha 3.2:
Download: http://gmare.codeplex.com/
- Fixed the scaling and blending windows that keep appearing, even after the "Do not show me this message in the future" check box has been clicked
- Fixed an issue when updating room properties, instances disappear from the editor
- Added inverted color blending to the selected instance when editing instances, to make it pop out a bit more
(http://www.pyxosoft.com/projects/gmare/gmare_37.png)
-
Pretty much done with multi-instance selecting. A couple of bugs to work out. I decided to revamp the binary export options. Allowing for more customization. You can also insert your own values in the export tree. Anything from an array, to single values. In any order you choose, in any native type you like. This also spits out a customized script for loading a room when the user clicks the scripts tab.
-
Are you going to introduce this to the GMC or leave it here are ZFGC?
-
http://gmc.yoyogames.com/index.php?showtopic=499060 ;)
It was started here (other than pyxosoft.com that is), but I figured that general GM developers might use it.
-
A suggestion:
Have Gmare able to load up more then one image to use instead of one. Also I am suffering from a problem, when a map is exported to the gmk and you try to tile some areas with a different tileset, it will sometimes delete random tiles in the room.
This is why I brought up the multiple tileset use for Gmare. Yet again just a suggestion.
-
I have multiple backgrounds set-up as a placeholder in the newest format, but will not be worked on till after the newest version has been released. (Since it requires a lot of work)
and you try to tile some areas with a different tileset, it will sometimes delete random tiles in the room.
Do you mean this is happening in GMare after room export, or within Game Maker after room export?
-
I have multiple backgrounds set-up as a placeholder in the newest format, but will not be worked on till after the newest version has been released. (Since it requires a lot of work)
and you try to tile some areas with a different tileset, it will sometimes delete random tiles in the room.
Do you mean this is happening in GMare after room export, or within Game Maker after room export?
Game Maker after room export. It randomly happens when you tile over something or an empty space. I am using Game Maker 8 pro do not know if it does this in the other versions.
-
I've always wanted an external room editor with features such as zooming and others. This looks awesome! Can't try it now though ):
-
Project is on its way to a Beta version. There has been some serious updating the past weekend, and I'm going to try and push it out within the next two weeks. As a reminder GMare supports Game Maker 6 to 8.1. No support for studio version as of this time.
Changes:
Improvements on the user interface, making it less complex but retain all of the original functionality.
More options for instance editing.
Optimized tile exporting when exporting to a GM project.
A custom script compilier for user data when using binary export, so you don't actually have to write the GML script to read rooms into your project.
A history of recent Objects when creating instances make life a little easier when selecting an object
Merge layers together
New Screens:
http://www.pyxosoft.com/projects/gmare/screen_01.png
http://www.pyxosoft.com/projects/gmare/screen_02.png
http://www.pyxosoft.com/projects/gmare/screen_03.png