I wanted to make a topic about changes in ENIGMA. Forum has been quiet for a while and nothing much has been going on. But I'm still here and still working on ENIGMA. So some of the stuff done in the past few months will be described here.

TL;DR

At least 40 bug fixes. At least 297 new functions (about 262 for BasicGUI extension). Texture atlas which can increase FPS up 24x. A much more mature GUI extension. 64bit compilation for windows. ENIGMA not dead.

Texture atlas

It took years, but ENIGMA is officially as powerful as any decent engine in the beginning of last decade. We have texture atlas (or as GM call them - texture pages). It basically packs several sprites into one texture, so there isn't any expensive texture changes. This is extremely useful for 2D games and GUI/UI/HUD, as they usually involve a lot of 2D textures. This is less important for 3D games. Previously a code like this was the worse case scenario for ENIGMA:

draw_set_font(font_0);draw_text(10,10,string(fps));draw_text(10,30,"The quick brown fox jumps over the lazy dog");Here 10k sprites are drawn, but they change image one after the other. So in reality there are only two images - 5k times one is drawn and 5k times the other. Here one sprite is a green pentagon and the other sprite is a red one. Here is a screenshot:

You can see I only get 23FPS here. Reason for that can be seen here:

We can see in one frame we call 70k OpenGL functions. We actually call 10k draw calls (one for each sprite) as well as 1 for the text. So it's 10001 draw calls to draw the frame. You can also the there are 4 textures in memory and one of them is visible in the image (the red pentagon).To use texture atlas I added a few new functions. Right now it is useable at runtime (unlike GM which can only be used in the IDE), so this is the code required:

texture_page =texture_atlas_create();texture_atlas_pack_begin(texture_page);texture_atlas_pack_sprite(texture_page,spr_0);texture_atlas_pack_sprite(texture_page,spr_1);texture_atlas_pack_font(texture_page,font_0);texture_atlas_pack_font(texture_page,-1);texture_atlas_pack_end(texture_page);That is easy right? We create a texture atlas page, then add two sprites and two fonts (including the default -1 one) and then _end(). In the _end() it actually does the packing. It is very efficient and uses the Josh's rectpack which we already used for fonts. Specifying a size for the atlas texture is optional and it is calculated automatically to be the smallest power-of-two texture it can be. After calling this code the texture looks like this:

You can see we only need 12 OpenGL function calls per frame and there is actually only one draw call. There is only one texture as the rest were merged and destroyed. The packed texture is on the right. Now the fonts and sprites can be used as normal and nothing changes, so existing code works fine. You can also see that the font characters are packed per character, not per font texture, so spaces between sprites are packed with fonts. Unlike GM which is quite wasteful (can be seen here).This is the output for the example after running the texture_atlas code:

We get 560FPS instead of 23FPS. That is 24.3x speed up (2430%). This works in DX9, GL3 and GL1 graphics systems and you can pack sprites, fonts and backgrounds (so all textural resources in ENIGMA).

TODO:1)This only works in code and is not implemented in LGM. I like it that way, but it would be useful for LGM to pack textures too so I wouldn't have to do it at runtime (which is extremely fast, but could still be a slowdown with thousands of sprites). Allowing to do it at runtime does seem important, as you can now even pack sprites you loaded externally. GM doesn't allow that.2) There could be a few more options added, like padding. The system also doesn't check if a texture is already packed (if you try to pack the same sprite twice the result is undefined now). And lastly we could allow the same texture to be packed multiple times. So you could optimized the atlas at runtime. Like if you had a desert world it could be packed together with UI. Then the next ice world could also be packed with UI so you can draw as much as possible with one draw call.

BasicGUI improvements

Those who don't know BasicGUI is an extension I'm making for ENIGMA. It adds GUI stuff like windows and widgets. They are not meant to be external of the main window, so they are all drawn inside. Useful for game UI or editor UI. The extension includes windows, buttons, labels, toggles, scrollbars, sliders as well as skins, groups and parenting. It is inspired by Unity system, but it is a little verbose because of EDL limitations. So right now the extensions consists of 262 functions.As simple example:

This shows windows, group toggles (basically radio buttons), sliders, buttons with child labels (the button with the "Lena" picture), scrollbars and labels (the larger "Lena" picture). I get 6600FPS here because I also packed everything into a single texture. This would draw in one draw call if it weren't for a stencil buffer I used that will be described later.Another example is the node editor I'm working on.

Everything you see there is drawn using the BasicGUI extension (excluding the connecting curves, which are drawn using draw_bezier_cubic_color() function). I get 2430FPS and I also use atlas here, so here is the texture:

It takes a lot more OpenGL function calls here because I use surfaces and stencil buffers for cutting stuff off outside BGUI window. If I would hide those windows and not draw surfaces, I would be able to draw the whole thing in one draw call. It is a lot more cooler in action, so if I make a video of it I will post it here. The BasicGUI extension is graphics system agnostic - it uses only generic drawing functions and should work for all graphics systems that implement them. Now they are GL1, GL3 and DX9.

TODO:1) Add textbox widget.

64bit for Windows

I say "for Windows", because I think Linux and MacOS had this working for some time now. But on Windows there had to be some few fixes for this to work. There is actually performance reasons to compile in 64bits, because it can increase fps. Like here (press to enlarge):

The only difference is that one is compiled in 32bits and the other in 64. The difference is not large (about 4%), but it is still 100fps. 64bit of course uses a little more memory. 32bit uses 29.8mb or ram while 64bit uses 32.1mb.Here is the atlas test:

Here we also get almost 100fps or about 14%. 32bit uses 50.9mb while 64bit uses 57mb.

All in all this is great. 64bit's of course also mean we can use more than 2GB of ram. Most 2D games don't care about the 2GB limit and most 3D games rarely hit it too (AAA games of course do). I'm dealing with a lot of data not connected with games and so for me the possibility to use more than 2GB is very useful.

TODO:1) Compile the rest of libraries to 64bit and create a new windows installer which has these libraries. Right now I only compiled the libffi, so I can compile a game. I need to compile OpenAL, ALURE, Box2D and some others.

Stencil buffer

I added some simple stencil buffer functions. They are primarily used in the GUI system so that windows cut off content that is outside of it. It's like using surfaces to do it, but without the additional VRAM. A simple example:

What happens here is that I draw 5000 red sprites. Then I start the stencil mask and draw a circle on it. Then I use the mask to draw the rest 5000 green sprites and the text. The green sprites and the text is limited to the circle I drew. So it is masking which pixels can be written to. This works in GL1 and GL3.

TODO:1) The functions need to be changed so we can use several values in the stencil mask.

Fixes

-Fixed normal matrix. commit-Model_floor and model_wall fixes (changes necessary because of normal matrix change). commit-fixed sprite_create_from_screen and background_create_from_screen. commit-Direction is now rounded. Fixes a problem where vspeed = 5, made direction = 269 instead of 270. commitissue-Added the maximize button if window resizing is enabled. commit-Fixes string_width(" "). Previously if the string only consisted of spaces, then string_width() returned 0. commit-Fixed definition of draw_set_line_pattern. commit-Fixed double define for draw_spline_part with wrong arguments. commit-Removed glsl_program_bind_frag_data from header. It was never implemented and I cannot even find out what it is (it's not a GM function either). commit-Added definitions for font_get_glyph_texture_left/top/right/bottom. They were implemented, but not defined. commit-Remove matrix_ functions and d3d_transform_vertex which were not implemented. commit-Remove export_include_file, discard_include_file and include_file_location as they were not implemented. commit-Added empty functions for d3d_set_software_vertex_processing in GL. Software processing is idiotic anyway, but D3D supports it, and I need to make a stub until we make platform specific functions easier to implement. commit-Fixed d3d_model_part_draw() definitions - they missed vertex_start argument. commit-Removed display_get_orientation as it hasn't been implemented (we don't even support devices with orientation right now). commit-Removed joystick_map_button and joystick_map_axis from PFjoystick.h, as they are not implemented in Windows, but they are added in Linux. As they are defined in LINUXjoystick.h, then I guess they still should work on Linux. commit-Fixed sound_get_pan and sound_get_volume return's. commit-d3d_draw_torus is now defined properly. commit-Removed duplicate draw_mandelbrot define. commit-Fixed room_get_name. For all resource get_name function the default return value was "<undefined>", but room_get_name is implemented differently. It isn't declared in IDE_EDIT like the rest. And when given incorrect room index it would just crash in non-debug version, so I made it return "<undefined>" in this case instead. commit-Surfaces are now using unordered_map instead of regular arrays of pointers. This was causing a memory issue (Dr. Memory crashed on "new surface"). This is more C++ way anyway. commit-Fixed bug in the new surface creation, where I actually increment surface_max count even though the id itself was reused. commit-Fixed memory leak in graphics_copy_texture. commit-graphics_copy_texture now correctly crops the image. commit-Fixed the font packer so it would return power-of-two textures. commit-Some small optimizations in GSbackground. It's very possible compiler on O3 did that anyway. commit-Removed some warning from GL3textures.cpp. commit-Removed GSEnable.h and corresponding .cpp files. They are not used anywhere and they implement functions that are already in d3d_ category. commit-Fixed .obj loading. There was an error that when you load an .obj with normal values, but without texture coordinate values, then the normals were all messed up. This is now fixed in GL1 and GL3. commit-Fixed d3d_set_fill_mode not drawing in GL3. commit-Added NOCHANGEDIR flag to dialogs. Previously the get_open_filename and get_save_filename dialogs changed working directory. It was messing with some other stuff and as we cannot change working directory with any built-in function right now, then I don't think this was intended. So I added a flag that forbids changing of the directory. commit-Disabling zwrite now works correctly in GL3. commit-Widgets now compile for 64bit. Some code in win32 widgets needed to be changed so it would compile for 64bit. commit-Windows widget rc files don't show warning anymore. They were because of the manifest.xml include, but I added include guards in the files themselves just as additional measure. commit-Fixed the for loop in makefile that dealt with windows resources (rc files) as it didn't run on cmd. It was made for sh.exe or something like that, but we can't use it. commit-It is not possible to pass flags to make. This is required to set SHELL=cmd in windows. It fixes problems described here: http://enigma-dev.org/forums/index.php?topic=2488.0commit-Recpack had a limit of 255 rectangles it could pack. That is way too low for a texture atlas which can have thousands. So I fixed that. Texture atlas also had to be changed for this to work. Now the limit is an "max unsigned int". commit-For 64bit's we need to pass a flag to windres. I added this to the e-yaml's and compiler, so it is possible to pass it. commit-The compiler is now compiled with -O3 which does make the parsing faster. commit-Built-in shader is now a C++11 raw literal. This makes it easier to maintain and copy, as we don't need those damn quotes and newlines. commit

Added or implemented

-Added room_first and room_last. commit-Quadratic bezier curve now uses width given by draw_set_curve_width(). commit-Implemented font_get_glyph_left/top/right/bottom. They were fined but not implemented. commit-Implemented triangle_area, which was defined, but not implemented. commit-Implemented sound_get_pan and sound_get_volume in OpenAL, both of which were defined. commit-Implemented display_get_gui_height and display_get_gui_width. commit-Implemented date_get_week and date_inc_week. Apparently I missed it when I wrote the thing in 2011. 4 years later, it's in (though not ISO). commit-Implemented mp_grid_clear_cell which was clearly missing. commit-Implemented sprite_get/set_bbox_mode. This was also done in the .dll. commit-Implemented d3d_light_set_ambient and d3d_light_set_specularity in GL1. commit-Added graphics_copy_texture() which is required for texture atlases. commit-Added graphics_copy_texture_part. This is also needed for texture atlas, as I need a way to copy only part of the source texture in fonts. commit-Added functions d3d_stencil_start_mask, d3d_stencil_use_mask and d3d_stencil_end_mask which allow easy use of stencil masking. commit-Added d3d_transform_set_array and d3d_projection_set_array which take pointer to an array to set the 16 values. commit-Added d3d_transform_add_array, so you can add an array as well as set it. Same with d3d_projection_add_array. commit-Added at least 262 BasicGUI extension functions.-Added 7 texture atlas functions.

I plan to work more on the stuff here as well as other interesting and useful features. But sadly I don't know how much I can do alone. There are not active developers right now besides me. One soar point is the parser. It was mostly written and rewritten by Josh, but he is not that interested in ENIGMA anymore. So there is no one that can actually fix the many bugs and issues we have with the parser. I propose changes to the EDL to make the parser a lot simpler, like getting rid of the dynamically added variables. All variables local to an instance will have to be declared as "local". This is actually a small change that would break little, but could fix a lot of problems we have now with std::maps crashing in the parser. I don't need - or even want - GML compatibility. Or GM compatibility in general. We don't need people porting stuff from GM to ENIGMA. We need people making stuff on ENIGMA. Seeing as GM is slowly dying anyway, I don't think we need to follow them. I would like if EDL was much more closer to c++ and it might as well be a little more strict.Another problem is the IDE. LGM on Windows is extremely unstable. I have to restart it 5 times before the Run button actually runs, otherwise it just freezes. egofree mentioned he might be free at the end of this month and look into it. I heard others have continued to work on NaturalGM, but it doesn't have a commit since last year, so it does seem dead. Together with RadialGM and other IDE's.

So I might end up making a branch from ENIGMA. In it I would try replacing the parser with something much more simple (as I would basically need instance system to work and that is it) and the IDE. That of course is still a lot of work which I don't have resources for to do alone. I will probably make a separate topic about.

ya, the day enigma drops gm compatiblity, the day i delete it and my account, and many others will when they get that news after its happened, whenever they visit here again, as they rarely do enough as is. "they" as in the whole comminity who use enigma outside of staff, contributers, and darkstar2. "they" may not post or log in often, but "they" make up quite if chunk of this small community..

but hey thats life. not always gonna be fluffy pink clouds and rainbows.

Besides you I have seen nobody who cares about GM compatibility. There have been people here who wanted to port their GM games to ENIGMA, but they apparently didn't have problems using ENIGMA in first place. We gain nothing from GM compatibility. Originally the plan was that it would somehow attract people from GMC. That hasn't happened. So we must attract people from game development community in general. ENIGMA wouldn't be massively complex in any case - I want it to be as easy to use as GM, but trying to achieve a one click compatibility has in many ways ruined ENIGMA. We had to put up with so much YYG stupidity that it made the code awful and inconsistent. I want the IDE to function almost the same, together with the new EDL being close to the current one. I don't plan to remake ENIGMA into something totally different, like Josh talked about some "finite state machine editor". I agree that we could make a node system to help development, but we shouldn't drop EDL or coding.

So one-click GM compatibility - which we never achieved in most cases by the way - is a dead dream. We need it so people coming from GM feel at home and start coding instantly. But we don't need their projects to be ported without hassle. It is much easier to start from scratch. And seeing as GM and ENIGMA allows high-quality games to be made in a few weeks, the amount it takes to recreate something is quite minimal. It's not like a switch from JavaScript to Python or something. It's like a switch from C to C++.

Well it's pretty clear that a general development of ENIGMA is dead. I think ENIGMA will stand now solely as something the odd developer may come across and find useful and as such wish to contribute to purely for their personal benefit of wanted functionality. This is how many a developer has been so far anyway. So there is no issue really with ExDeus or any other dev branching and progressing it how they wish, I would be very surprised if anybody joins in and helps with such a branch off though but you never know.

Logged

I honestly don't know wtf I'm talking about but hopefully I can muddle my way through.

ya, the day enigma drops gm compatiblity, the day i delete it and my account, and many others will when they get that news after its happened, whenever they visit here again,

Speak for yourself mate. Harri gets my FULL 10000% support, I think his views are the best that could happen to ENIGMA. What's wrong with learning something new, considering ENIGMA has and will retain the same ease of use - but just won't be tied with limitations and other crap, and sadly, in my opinion I do think GM compatibility has to go, if we want to see ENIGMA stand out, be unique and solid.I'm all for the changes proposed, long overdue, and what a shame that Josh wants nothing more to do with ENIGMA......This is an issue with open source.....you have developer make stuff, break stuff, and then they fuck off, leaving the shite behind !

Good work Harri, brilliant, keep us in the loop, you're the best. It would be great also if we can get more frequent stand-alone updates to the EXE and with updating the documentation with all the new functions.

What bloody use is to keep GM compatibility is it impacts on ENIGMA and many of it is broken, would you rather a half baked product or one that stands out and works better ?Those who want half baked and limited, can continue using GM, YYG made a lot of positive changes to GM anyway why bother porting...... For those of us who want BETTER, faster, smaller and more feature rich whilst at the same time learning C++ and having more control, ENIGMA shines.The only turn off with ENIGMA is its rubbish IDE that is bloody unstable, (actually the enigma.jar component, not the IDE itself). Time to move on, change is good! GM is dying and is so outdated. Right now they are clearly focusing on mobile !!! fucking mobile !

What Harri is proposing is heading in the right direction and right now he's alone and still ambitious, shocking ! 1 developer, anybody else would have simply left ! YYG is going in a different direction with GMS 2, don't you think ENIGMA should also go into a different direction - with GMS2 around the corner ENIGMA GM compatibility will be so fucking irrelevant anyway.I think the timing is great and couldn't be better to cut the cord from GM's sticky knob.......

would like to apologise TheExDeus. your right, a lot of ppl dont agree with me about that. enigma being different is much better than no enigma at all. The changes you are making are great, they may not be gm compatible, but they are still great things the engine needs. sorry about that. i need to get my head on straight.

At least 40 bug fixes. At least 297 new functions (about 262 for BasicGUI extension). Texture atlas which can increase FPS up 24x. A much more mature GUI extension. 64bit compilation for windows. ENIGMA not dead.

Very impressive there nice read. I can already think of many good uses for the GUI functions......Something only GM folks can only DREAM of, short of buying rubbish extensions that don't do even a fraction of that.

One thing that would be nice, buffering function, like for example reading binary data storing it in a variable, and allowing functions like sprite_add/sound_add, etc, to add from memory instead of disk.Example sprite_add_from_memory(spr1, xyz) where xyz is the variable containing the binary data for the sprite and spri1 index.and some more OS specific functions like total memory, memory left, memory used by the running game, type of gpu, cpu, etc.

Quote

Next for ENIGMA

the parser a lot simpler, like getting rid of the dynamically added variables. All variables local to an instance will have to be declared as "local". This is actually a small change that would break little, but could fix a lot of problems we have now with

I agree with that. Like that idea.

Quote

I don't need - or even want - GML compatibility. Or GM compatibility in general. We don't need people porting stuff from GM to ENIGMA. We need people making stuff on ENIGMA.

Words of wisdom, and agree 100% !Besides with big changes YYG is heading for, porting will be irrelevant and so outdated. Time to actually shine and be better and faster. (in more ways )

Quote

Seeing as GM is slowly dying anyway, I don't think we need to follow them.

I agree, this whole acquisition is big sham in my opinion, and in the end people will find out why it was never a good idea for a gambling company to have put its nose in GM....I think it's obvious what interests they are after and where they are heading.

Quote

Another problem is the IDE. LGM on Windows is extremely unstable. I have to restart it 5 times before the Run

lol you're lucky, in my case sometimes it closes taking away everything with it. It is an unstable piece of shite ! from the beginning.....It's actuallythe enigma.jar component that is unstable. Use the IDE without the enigma plugin it will be stable.I think we should get rid of this bloody plugin and simply make compiling EXTERNAL and use externally saved resources instead of memory to memory, I think this is where GMS got it right, why save your project in 1 file when you can save it using folders and files and pass the external files instead..... an external module (separate to the IDE) would take care of this......

Well it's pretty clear that a general development of ENIGMA is dead. I think ENIGMA will stand now solely as something the odd developer may come across and find useful and as such wish to contribute to purely for their personal benefit of wanted functionality. This is how many a developer has been so far anyway. So there is no issue really with ExDeus or any other dev branching and progressing it how they wish, I would be very surprised if anybody joins in and helps with such a branch off though but you never know.

I think ENIGMA has the potential to be a better game development tool/engine than at least 80% out there. I think GM isn't bad design wise, but people are used to tools and editors these days. That is what GM and ENIGMA is really lacking. People want built-in animation editors, shaders editors (ala Unreal4 node one), particle editors, sound editors, 3D world editors, UI/HUD editors and so on. We sadly are low-level enough not to provide that, even though we still allow easy use of all these features. I have no problems creating a node based shader editor or a UI/HUD editor in ENIGMA itself. But then we need a way to tie that with the IDE. This is where LGM creates problems. The only way this can work now is if the editors are external .exe's which LGM calls. Like for editing sprites.

Quote

Thanks a lot. For the IDE, as i said already, since early august i will work on the stability problem and try to fix.

Thanks! Looking forward to it. As Darkstart2 mentioned, the problem is probably in the enigma.jar plugin. Copying the resources in memory seems to be broken somewhere.

Quote

would like to apologise TheExDeus. your right, a lot of ppl dont agree with me about that. enigma being different is much better than no enigma at all. The changes you are making are great, they may not be gm compatible, but they are still great things the engine needs. sorry about that. i need to get my head on straight.

No problem. You do represent part of community we need to take into account. No matter how small. That is why I propose dropping GM compatibility, but that doesn't mean it will be totally different from GM. I know most people don't agree with me, but I like LGM/GM method of development - I would like to preserve that. We just need to allow custom resources, new editors for those resources and modified EDL.

Quote

One thing that would be nice, buffering function, like for example reading binary data storing it in a variable, and allowing functions like sprite_add/sound_add, etc, to add from memory instead of disk.Example sprite_add_from_memory(spr1, xyz)

They are not that hard to do, but we don't really support pointers to memory, which causes some problems with this. Just like we don't support returning arrays. So I can create "sprite_add_from_memory(spr1, xyz)" now, but there is no way to fill xyz with data.

Quote

and some more OS specific functions like total memory, memory left, memory used by the running game, type of gpu, cpu, etc.

This is something I also looked into, but I couldn't find a cross-platform way of doing it. I will search some more, as I also need these.

also while 64x bit may have not been as much work as adding all those functions, thats quite the impact too, a lot of windows users rely on game engines which only support 32 bit natively. So thats a huge plus that we have 64 bit windows now as well. Very exciting! now we can take advantage of those additional bits!

also while 64x bit may have not been as much work as adding all those functions, thats quite the impact too, a lot of windows users rely on game engines which only support 32 bit natively. So thats a huge plus that we have 64 bit windows now as well. Very exciting! now we can take advantage of those additional bits!

I wonder on the increase in speedfor games with lot of scripting,array manipulation, file access,calculations, AI etc, you know thenon GPU stuff, I guess we couldexpect some speed increase

I do a lot of authoring and video work on my PC and most software I use now is native 64bit, so it will be a nice addition to have a 64bit game engine.If I understand correctly, at this current stage we will need to have both the 32bit and 64bit versions installed in parallel right ? Perhapseventually adding the selection in theIDE would be nice.

I'm so pleased that enigma isn't dead. Really like the new changes. Many thanks for your efforts.Personally I don't care at all if enigma is compatible with Game Maker. When I found this engine I didn't even know about GM.My biggest concern though (as already mentioned) is the stability of LGM. Good usability/stability of the tools (IDE) is way more important than a huge set of features imho.

Unfortunately my knowledge of C++ is very limited so touching the code would probably do more harm than good but I would be glad if I could be of help in another way.

I wonder on the increase in speed for games with lot of scripting, array manipulation, file access, calculations, AI etc, you know the non GPU stuff, I guess we could expect some speed increase

I was actually a little surprised by the speed increase. I knew it must be there, but usually the reported figure is in like 5% range max. Here I could get up to 15% increase in GPU heavy stuff. In a real game who knows, you could get more.

Quote

If I understand correctly, at this current stage we will need to have both the 32bit and 64bit versions installed in parallel right ? Perhaps eventually adding the selection in the IDE would be nice.

We already provide MinGW64 with the installer. It can compile both 32bit and 64bit, so you won't need two compilers or two ENIGMA's. The choice is provided in the IDE via the Compiler setting.The only thing I need to do is recompile the libraries in 64bit (which is not that easy) and create a new installer. Then anyone should be able to just choose the bitness in the settings and compile.

Quote

Unfortunately my knowledge of C++ is very limited so touching the code would probably do more harm than good but I would be glad if I could be of help in another way.

LGM (the IDE) is written in Java. That is one of the biggest reasons why I haven't been able to help in that front either. If it was C++ I would probably have been on it a long time ago. I also know how to debug C++ a lot better than Java, so it would be easier for me.

Very nice work Harri I like seeing the contributions you have been making. I am still too stressed out for ENIGMA development. I am working on something very cool right now on my vacation that I hope you will all enjoy very much, a lot simpler than ENIGMA but something you may not be thinking of. However some of the ideas are based on previous prototypes which I am not sure if I've shared.

And for anybody afraid to contribute you shouldn't be, ENIGMA is a great way to not only learn game development but to learn game engine development. I had never used Java before I joined the forums and most would say I really turned LateralGM around. I was not completely new to C++ either but I was fairly novice and managed to accomplish a number of tasks in the engine. It really only takes the perseverance but it is still a lot of work regardless of how much you know.

What's a better way to learn game development than GameMaker? I'll tell you the answer and it's by building GameMaker itself. The opportunity has presented itself, it's right here and it's called enigma-dev.org

Logged

I think it was Leonardo da Vinci who once said something along the lines of "If you build the robots, they will make games." or something to that effect.