This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 »
781
Off-Topic / Re: Windows XP's demise will help linux ?
« on: April 12, 2014, 02:39:04 pm »
Use Win8.1 mainly because it's very fast compared to Win7. Especially the boot time on Win8.1 is almost less than 10sec on my PC. In Win7 it always was like 30-40 or something.
I do think the stuff they did with the design is asinine. It takes a lot more clicks/motions to do something than before (like opening settings or even turning off the PC). There are some "tricks" to learn to make it all faster, but on a normal, good designed, OS you wouldn't have to learn "tricks".
So I like the performance changes, but I hate the design.
I do think the stuff they did with the design is asinine. It takes a lot more clicks/motions to do something than before (like opening settings or even turning off the PC). There are some "tricks" to learn to make it all faster, but on a normal, good designed, OS you wouldn't have to learn "tricks".
So I like the performance changes, but I hate the design.
782
General ENIGMA / Re: Unicode Fonts
« on: April 11, 2014, 06:10:02 pm »Quote
So anyway, all of our strings including literals are already UTF-8 encoded, we just need to fix draw_text with the new LGM, and then we add multiple character ranges in a map to replace glyphstart glyphcount.But LGM's code editor's encoding has nothing to do with C++ std::string or it's capabilities. I don't see how std::string suddenly supports UTF-8.
783
Off-Topic / Re: Outcast Reboot HD
« on: April 11, 2014, 04:04:48 pm »Quote
Wow holy shit, you should put up a different image in your post.The image in his post is the ORIGINAL game. The fact that you missed it shows how awesome it was then and even is now.
Also, I don't think they are using voxels now. Fresh3D (the company doing this) made the FreshEngine, which is a very cool, but polygon engine. Probably because GPU's are quite useless at rendering voxel geometry.
784
General ENIGMA / Re: Unicode Fonts
« on: April 11, 2014, 10:31:24 am »Quote
Here is the download for the soon to be released new plugin and LateralGM.I see you have made a lot of other changes as well.
I also remembered a bug I keep forgetting. It should be relatively trivial to fix. When you load a sprite and want to set the offset with the mouse, the offset is set relative to top-left of the window, not the sprite. So when you press on the sprite you always get bottom-right (because that is what it is limited to). Basically the sprite preview window doesn't take the centered drawing into account and so you cannot effectively use the mouse to set the offset.
And for a suggestion: Can you make so that when you type in the font dialog box it filters out the fonts? I am sure the Java's widget already has an option like that, but it must somehow be enabled. Right now when you type in the font box (like "Times") it won't actually move the selection to "Times New Roman", so if you want to type in a font name, you must type the whole name from memory. Or scroll trough the fonts, which is hard as it has hundreds of fonts for me while it lists only 8 at a time.
Quote
If the infinity symbol is still out of range I'm going to be pissed.It's there. As Robert mentioned Java supports 16bit Unicode and so it supports a lot of characters, but not the whole set. But it does depend on the font as well. For example, I cannot draw Japanese or Chinese characters with Arial font, while I can with some others.
785
General ENIGMA / Re: Unicode Fonts
« on: April 10, 2014, 10:20:37 am »
I personally think that this is basically as good as it can be. These ranges are necessary because we still render everything using textures and so it isn't practical to render all Unicode characters on a texture.
Maybe you can give download link for LGM so I can play with the font dialog? I know that it won't work right now with ENIGMA, but I don't need ENIGMA to run LGM.
We still need to implement this in ENIGMA, but as I mentioned to Robert, I am not entirely sure how. Maybe Josh will have a more solid idea.
Maybe you can give download link for LGM so I can play with the font dialog? I know that it won't work right now with ENIGMA, but I don't need ENIGMA to run LGM.
We still need to implement this in ENIGMA, but as I mentioned to Robert, I am not entirely sure how. Maybe Josh will have a more solid idea.
786
Announcements / Re: Project Mario
« on: April 06, 2014, 05:27:45 pm »Quote
Visualizing parameters to objects/components like Josh described is another example of being higher level. This does not, in any way, turn it into a less versatile engine. It makes it a more powerful editor because you can iterate faster, describe your intent more directly, etc. GM:S's room editor, build mode, etc. are examples of improvements in this direction.Maybe it's not less "versatile", but it does make you go into one direction. Like they basically softly force you to make what the tool better supports for making. Same is true with GM, but until recently there was less of this. Like if we add transformation parameters (scale, rotation and so on for sprites) to instances in the room editor, then how would they help me if I want to make a code editor? Looking at that I will feel that this is not the tool for making that editor, while without them I will less forced on this idea. While in reality I can make a code editor in GM just like I can probably do it Unity. Built-in functionality is in no way a bad thing, but at one point it all turns into forced thinking about a tool.
Like if I said "Is UE4 the best tool to create ray-tracer?", "Is Unity the best tool into which to make a sound mixer?", "Is Source engine the best tool in which to make a electrical circuit simulator?", "Is Frostbyte engine the best tool to make a web browser?". For all of these answers are probably no. And it's a no, because they are not meant for that. And so making these things in those tools/engine will take you a lot extra work. While GM also might not be the best tool for these jobs, it is a tool that can do these jobs without much extra work however. Or at least less work than it probably would take in pure C++, C# or whatever. So I feel I might be very unclear on what my original comment (about "limitations") was referring too. Sorry about that. If you still don't feel what I might be on about, then I doubt I can be more clear about the mindset.
Quote
One issue with GML that limits this kind of thing is the type system. Because everything that's not a string or double is hidden behind an index, the editor and debugger can't do much to help you out- they have no idea of that variable is a number, a ds_list, a sprite, whatever. Because variables are dynamically typed, the editor/language can't catch errors as early (you often have to wait until runtime when it's actually triggered and it's not guaranteed that that will happen even before you release the game). Not only that, but hiding most types behind indices (basically weak typing) means that many of these errors won't even be caught, but rather just cause weird behavior.This is true. I also would want a better debugging system where we could give a better feedback on what you are doing wrong. But I think we can do it transparently without asking users to give types to all variables. I believe we could even support structures and classes without breaking existing code. But I am not entirely sure and Josh should have a better input on this. I will post again my previous thoughts on this. Maybe Josh can comment:
Quote
Also, would it be worse if we actually returned objects or pointers? Like if "grid = ds_grid_create(10,10);" returned an actual grid object instead of an integer ID? Couldn't we make it work with that and be transparent? Because the only time it would break something is if user actually tried to use an integer as ID, like "ds_grid_set(0,10,10,"Ass");", but that is almost never used and is a bad practice anyway. I do remember some codes from like 2005 where someone actually relied on everything being an integer and doing things like:
Code: [Select]
grid = ds_grid_create(10,10);
ds_grid_create(20,20); //This is grid2 but no way to access it
ds_grid_set(grid+1,15,15,"ass"); //This actually accesses grid2
But as I said. No sane person should be doing this and it's not something we should necessarily support. I guess it was just way to save memory for a few variables (so variable grid2 isn't needed... yey a few bytes).
I think if we started returning real objects, then 99% of the games and examples would still work.
Quote
This kind of thing is why it's harder to make nice games in GM, and easier in something like Unity. This is why GML is an objectively less powerful language- you can describe the same results, but there are fewer/worse tools to get there (and make sure you actually are where you intend to be).Depends on the result you want I guess. My previous "Is TOOL/ENGINE good at THING" should give you the idea what I meant previously.
787
Announcements / Re: Project Mario
« on: April 06, 2014, 11:15:27 am »Quote
One of my talking points from a long time ago was a plan for the ability to specify additional parameters in objects that can be edited visually through the room editor. These would come in four basic types:I like that. I do also like that GM:S allows setting basic transformations for sprites in the editor as well. Sadly as LGM is in Java and it's not that great at rendering things, then editors side of the implementation would probably be an ass. And Robert is the only one who would have to probably do that.
Quote
Look at your examples. Everything that took you only X lines of code in GM/ENIGMA/whatever was a built-in feature of the two. Largely because of your code, I'll add and acknowledge, but that doesn't change the point. ENIGMA is conducive to audio manipulation and path plotting. It has bottled code for them with which you are intimately familiar as the author.I will admit the audio part is totally done by 3rd party solutions. But the path thing was totally done in ENIGMA/GM without built-in motion planning functions. We only have A* for path-finding. I needed RDT, Feedback, Vertical Decomposition and other algorithms. I also needed to show them step by step with closed/open sets and so on, and so I had to reimplement A* in pure GML/EDL as well. And even then it took small amount of code. Like RDT implemented even in such "high-level" languages as C# in .net takes several hundred lines of code, while the same implementation in ENIGMA took me only 140 (actually even less than that). My professor was even impressed how easy it is to write all of that in ENIGMA. I have also implemented FastSLAM, Markov Localization, Bug (those are easy everywhere, but not 32 lines of code easy), Hough-transform based map stitching and so on. And none of those took me more than few hundred lines. In any other universal tool/language they would take a lot more (unless the tool wasn't "universal" and was specifically targeted at these things. Like if you use Matlab, then you don't need to implement Kalman filter or anything like that. It's already there).
Quote
Your circuit example is the only thing there that doesn't relate to ENIGMA's central purpose, so of course it took you thousands of lines. It involves recursion and keeping track of what kinds of elements you are rendering. Look at the JDI code that renders ASTs as SVGs—a somewhat similar operation. It's a few hundred lines. Of C++. And its only dependency is the generic SVG elements code: another hundred lines. And that's with me rounding up to the next hundred and including the license. Without that, we're at 335 lines to render an AST to an SVG, all-inclusive. I'll grant that including the headers that lay out the structure of "what is an AST node" brings the line count up significantly, but we still don't reach a single thousand lines.It didn't just let you make an element and then save as SVG. It was a graphical WYSIWYG program. I just did "Export all scripts" in GM and had a total of 5090 lines (about 200 or so hundred are with the GM's "#define script" stuff, but I will ignore that) and 2653 of those lines were to implement all the drawable elements. They could of been external in either svg format or whatever, so it doesn't really count. That leaves 5090-2653 = 2437 lines of code for the actual logic of the program. The objects had in total about 1490 lines (just added up all "Show information" dialogs for objects) and that is total of 3927 lines of code for a tool that renders everything using vectors that can be placed, rotated, colored with text being parsed to allow subscripts, superscripts, greek letters, electrical symbols etc., and can render to transparent png, svg (that also preserves the same text features) with working Ctrl+C, Ctrl+V and Saving/Loading in a custom format. And of course the whole thing is visual as well. Your basic SVG implement was 82 lines, while mine was a total of 296 lines of code, but allowed much more (like transformations), so it would basically be the same.
So I don't see how a program like that could be less than 4k lines in any other programming language or tool. And surely not in C++. I will port it to ENIGMA later and post it EDC or the forum. The only unsupported functions it used was "variable_exists()" in some places.
Quote
TheExDeus: You could always have made your own 2D components in Unity (in a much nicer language than GML), it was just geared toward 3D with the builtins. I could easily pull the same kind of crap on GM by showing a bunch of 3D stuff that you'd have to implement from scratch that Unity has built in. This is unrelated to my point. My point is that once you'd done that (and while you were doing it), Unity would provide much better tools for designing, iterating, and debugging. I don't really care what's possible or even easy to implement the first time, I care how easy it is to model data, visualize, tweak, iterate, etc. GM fails here; ENIGMA has the potential to be a lot better with build mode, Josh's post above, etc.I am not of course arguing that GM or ENIGMA can't be improved upon. Of course it can. Especially in debugging. GM:S now has a lot better debugging interface than it had previously. We sadly don't have barely any. I don't agree with that "in a much nicer language than GML" though, as it's subjective (especially which one you meant - JS, C#, Boo?). But here it comes down to what has been discussed to death before - Unity, like many more purpose built engines, have A LOT built-in. The editor has a million tabs for everything. And I have said before (and it's partly what we discuss here) is that GM is "low-level" compared to Unity. And that is why it's for a long time been much more versatile. At the same time even with this "low-level" nature it's have been easy to use and easy to get things done. That is the only thing I have been arguing. I haven't been saying "Unity is shit, don't use it" or "Make next Crysis in GM". I am saying that GM does perfectly what it was meant for (which is 2D) and at the same time it's very good at everything else as well. Which is a lot more than what could be said about other engines.
Some other interesting ideas for property editors would involve animation stuff.
Quote
You know what would be better though? How about actual classes.Well let's hope with Josh's new parser they can be made. I for example want templates as well, but that is because I made the Matrix extension for ENIGMA which is implemented in C++ classes with templates. Of course I could have implemented it in EDL or GML and I wouldn't have this problem. I am not arguing classes would make GML/EDL worse. It's just that GML/EDL is not necessarily bad without them.
788
Announcements / Re: Project Mario
« on: April 05, 2014, 08:26:16 am »Quote
1) They are destroyed when you change the room by default. You have to make sure to set them all to persistent. PITAA (pain in the ass alert).So you are arguing that GM destroys objects and frees memory by default and when you don't want it to do so, then it doesn't? Because how and when do you think it should do so? Rooms are the biggest scope (besides global) GM has. If you want something to go out of Room, then it is the same as declaring everything in global scope in C++... it will never be deleted until the program ends. So I really don't see how this is a problem. Even if we implement structs or classes, they would still be inside objects. And that means you would have the same imaginary problem.
2) When set to persistent, they behave as if they were allocated with new/malloc, so you have to manually destroy them when you don't need them anymore. Otherwise you'd be leaking memory. Leaking memory in Game Maker. It's so ridiculous it even sounds funny. PITAA.
Quote
3) They have a bunch of variables by default that are probably useless to you but can't be disabled. Some of them you have to be careful not to use because they may have undesirable effects when modified (like hspeed affecting the x variable). PITAA.They wouldn't have any effects if you didn't use them. Like it doesn't matter what x/y position the object has or if its going left in 1000pixels/step. If you don't use them, it won't change anything. And the useless variables do take a bunch of bytes which otherwise could be free. I actually once (years ago) mentioned that to Josh and how we could make the default variables optional. Like maybe create a default variable manager in LGM and you could change for each object whether you want to use that variable or not. It should technically be possible to implement with just some #ifdef's in the code. There would be some problems when disabling x,y and then trying to draw default sprite. But that all of that could be checked in LGM's side.
Quote
If you don't miss structs, Harri, then my guess is that A* is the most complicated algorithm you've ever written in GML. Because if you had to store more than three values for any given node or grid cell, you'd quickly go insane. Three values in a grid requires three grids. N values in a grid requires N grids. Each value requires a call to ds_grid_*, which is bulky and ugly. Enter map. Now it's also slow.Why do you need a grid for every value? I have implemented A* even in pure GML and I just did this:
Code: [Select]
grid = ds_grid_create(500,500);
for (i=0; i<ds_grid_width(grid); ++i){
for (c=0; c<ds_grid_height(grid); ++c){
ds_grid_set(grid,i,c,ds_grid_create(1,4));
}
}
And now every node has 4 values. I could change that 4 to 1000 and that node would have a 1000 values. This is how I made all my "widget classes" in GM and ENIGMA. I have, for example, "scr_init_buttons()" which creates the larger grid (size of 0 at start) holding all buttons (as it is local, then I can have different buttons for different objects) and then I have "scr_button_add(x,y,"Text",enabled,toggleable,...etc);" which resizes the grid to add a button and in the second dimension add all the values. And then in draw I have "scr_buttons_draw()" which also take care of all the logic. Usually I created a "scr_button_execute()" which had a "switch(name)" in it that would add behavior to a button when pressed, but I could also just add a script callback to the scr_button_add as in scr_button_add(x,y,"Text",scr_to_execute_when_pressed) and then use execute_script(). So I essentially made a struct with not only values (data), but also functions. And it didn't take much more time than it would take to make it with structs or classes (maybe even less). Technically I could ditch grids and just use 2D array for that and it would be a little faster.Quote
4) The lack of a well-defined passing convention. Want to pass an array? Create a list structure, pass the ID. See problem list in (3).GM:S actually allows you to pass and return arrays from scripts. They even allow deleting arrays now, by just "= 0". So they have a way to differentiate. They even have it set up that the array is passed by reference if the array is not modified in the script, so it works a lot faster. Read more here: http://docs.yoyogames.com/source/dadiospice/002_reference/001_gml%20language%20overview/401_06_arrays.html
These functions also use arrays by reference: http://help.yoyogames.com/entries/28707818-Matrix-Functions
I personally think there should be a method to implement everything you want from C++ in ENIGMA, because the only difference is that everything has an integer ID instead of an address and a pointer. So even things like out-of-scope automatic deleting should be possible.
Also, would it be worse if we actually returned objects or pointers? Like if "grid = ds_grid_create(10,10);" returned an actual grid object instead of an integer ID? Couldn't we make it work with that and be transparent? Because the only time it would break something is if user actually tried to use an integer as ID, like "ds_grid_set(0,10,10,"Ass");", but that is almost never used and is a bad practice anyway. I do remember some codes from like 2005 where someone actually relied on everything being an integer and doing things like:
Code: [Select]
grid = ds_grid_create(10,10);
ds_grid_create(20,20); //This is grid2 but no way to access it
ds_grid_set(grid+1,15,15,"ass"); //This actually accesses grid2
But as I said. No sane person should be doing this and it's not something we should necessarily support. I guess it was just way to save memory for a few variables (so variable grid2 isn't needed... yey a few bytes). I think if we started returning real objects, then 99% of the games and examples would still work.
Also, the GM way of returning an integer is actually like returning a reference. Because "b = grid;" wouldn't ever copy a grid, it would give b the same grid and thus be faster. That is why passing everything by reference actually makes calling scripts faster than it would be otherwise.
Quote
So yeah, you basically have to wait one fucking step for your "class" to be actually fully instantiated, not to mention take care of all of this boilerplate when creating a new "class". MPITAA (major pain in the ass alert).I used user defined events for that. You can call them instantly and don't have a 1 step delay.
Quote
Unity just happens to have been built for 3D, and they only recently tacked on 2D.But that is actually my point. If rendering 2D sprite correctly required changes by Unity DEV's, then clearly something is very limited. GM and now ENIGMA on the other hand allows you to code whatever you want. And that sadly creates feature and performance problems. Like we could also add shit-ton-of-stuff that allows you to make really cool looking 3D games just like Unity or UE4, but then you wouldn't be able to make ray-tracer or robot planner. Just like you cannot really make anything like that in Unity or UE4. You must choose - limited to certain things (like 3D), but do it really good - or - unlimited, but slower and harder. And while GM leans towards the latter I personally think it's the only tool which at least made a partial merge between the two. Because 2D games ARE EASY in GM. Any 2D game ever.
edit: Like would Unity or UE allow me make this:
or
or
in the same tool with all projects taking from 100 to 1000 lines of code? Okay, the circuit drawer was several thousand, but that's mostly because the elements were hard coded and I didn't make an external format to load them. Otherwise it was also like 2-4k max.
Also, I didn't add any 3D stuff because I just haven't made much 3D in GM. The reason I showed them was not to make a point about 2D or 3D capabilities, but just to show that all 3 of those examples are totally different in every way. One is a sound mixer, another a tool to draw circuits (both with latex style text syntax and output to .svg files) and the other is a planner for robots. They are not "3D FPS shooter", "3D 3rd person shooter", "3D side scrolling shooter" and so on which are basically everything you make when using ready made 3D engines. Like the circuit drawer would probably be impossible or at least very impractical even when using 2D engines.
789
Announcements / Re: Project Mario
« on: April 04, 2014, 02:13:34 pm »Quote
I didn't say dynamic typing was bad. But don't you think it'd be good if you could specify something like "this function should always take one int" and then the compiler telling you if you ever call it wrongly? Don't you think that might help you find and squash some (potentially subtle) bugs?It might, but it would also mean I need to have several functions for several data types (or templates in C++). But if you use templates, then it wouldn't trow an error when you tried to pass one 'string' instead even though you only want it to take double, int, long etc. So saying "function takes one int" wouldn't make it necessarily better. You get some, you lose some. And so the way GM does it isn't a limitation.. it's just a different (I get a feeling I have to say it too much in this topic).
Quote
Don't tell me GM objects are the same as classes. They're not. You can make them work as classes, sort of, but it's a pain in the ass.For what kind of things wouldn't it work correctly? There are subtle differences, but they are essentially classes. You have constructor, destructor, parenting, overloading (when using parenting), they have data in them, functions in them (thou in this case it would be "User defined event", as "functions" are "scripts" in GM and they are not tied to objects). The biggest difference really are that in C++ classes you have member functions, while in GM you cannot have them inside the object and you need to use "User defined event" to simulate them. That is actually a downside I think we should fix. Basically allow having script like resource inside the object. It would probably be creatable as a custom event (Robert you think it might be feasible?).
Quote
You can make your own containers in C++ because C++ has -guess what- classes. Actual classes.If you used an object as the container, then it would be a lot more trivial to implement garbage collection.
Quote
So you accept that if GM isn't limited, is not because you can use it to remake Bastion. Otherwise you'd be making no sense.Bastion was just the example. Because originally this wasn't about the specific of GML. It was the specifics of GM and how people create crappy games with it just because its "limited". I pointed out that it is not because GM is limited. It's because GM is just easy to use.
To expand on my point about "limits" is the FPS creator Darkstart mentioned. There are also RPG creator and so on. THEY are limited. They are limited because they allow you to do make basically only 1 type of game. Even if they have some kind of scripting language (like RPG creator) even then ALL of the games made in it will look and play basically the same. And I just wanted to differentiate between GM (which doesn't have these limits) and these creators, which have.
790
Announcements / Re: Project Mario
« on: April 04, 2014, 10:32:06 am »Quote
So you never found yourself missing, say, classes, when programming in GML?Not at all. Objects are classes in GM/ENIGMA. They at least fulfill most of the requirements classes are used for.
Quote
Or static-typing?Dynamic types aren't really bad. GM had a great system for detecting undeclared variables anyway and it worked like a charm. But this wholly is the programmer preference. And it sure as heck doesn't make the code smaller as you actually have to type more in static-typing. It doesn't make a language limited in any way. Just different.
Quote
Or exceptions?Never been a big fan of exceptions. I almost never use them in C++ either. And GM just doesn't require them. Like how exactly this makes a language better:
Code: [Select]
ifstream file;
file.exceptions ( ifstream::failbit | ifstream::badbit );
try {
file.open ("test.txt");
while (!file.eof()) file.get();
}
catch (ifstream::failure e) {
cout << "Exception opening/reading file";
}
Than this?:Code: [Select]
file = file_text_open_read("test.txt");
if (file == -1){
show_error("Cannot load the file!",false);
}
while (!file_text_eof(file)) { file_text_readln(file); }
file_text_close(file);
It's actually easier to understand the GML version than the C++ one. And even in C++ I never use extensions, because, for example, file.good() returns whether you successfully opened it. So GM's lack of exceptions is also not a limitation. It's just a different.Quote
Or how about some sequence type that you can actually pass around without having to bother to clean up after you don't need it?You mean std::containers? I guess the fact that we don't have reference counters or out of scope garbage collection is a limitation. But it's not necessarily a language problem, but the implementation problem. This is harder to do because scopes are not as strictly defined as in C++. But this is the only of your examples were I agree it could be done better and could be considered a limitation. Garbage collection is a little problem with GM/ENIGMA.
Quote
Wouldn't you at least agree that, if GML had these features, you could get more done in less time, structure your programs more efficiently and/or write more robust and understandable code with it?By the examples I given no, I don't think those features would make GML any better (except for reference counting). But EDL does support (or plan to at least) some of the features together with GML. So you can give types if you want (that doesn't make it statically-typed of course). You can technically make classes and structs as well (but I think they currently don't work because of parser bugs). But using the features won't make your code smaller (it will probably make it bigger) or more understandable. They might make the code more efficient of course, but that is not a limitation of the language, but the parser/compiler. GCC wasn't built to compile parsed EDL into super optimized exe.
Quote
Right. So either you're going to argue that assembly isn't limited (even if it lacks such things as, say, variables and functions), or your "GM isn't limited, I could use it to remake Bastion" argument is invalidated.I don't argue that. It's just that you took assembly as an example and I made a step further. It's not really relevant to the discussion.
791
Announcements / Re: Project Mario
« on: April 03, 2014, 07:15:57 pm »Quote
I don't think it's wrong to say GM's design makes it easier than some other designs to make sloppy games. Obviously it doesn't force it or even make it too hard to avoid, but neither is it anywhere near the best possible design.Any engine that is easy to use will allow sloppy games. You can create a window and draw sprite using few lines in Python as well (including the right libraries of course) and that usually ends up as crappy pac-man's as well. I don't think GM's design is the reason there are sloppy games (as in GM's design is bad or limited), but I think it's because of it's simplicity. If you write in C++ 95% of new people trying to make a game will fail to draw a triangle (especially in GL3 and above). Even if they use ready made graphics engines it's often very hard to do in C++. In that case people will give up before they can even make a sloppy game.
Quote
I agree more with what Harri told me the one other time, that GM provided a basic abstraction framework that allowed more advanced things to be done through extensions.Yeah, and with that I also meant to show that high-level/low-level thing going on with GM's design (and specifically GML). It's easy to make what you want, but you actually have to make it yourself. Like all the engines I have ever touched are either in two groups - very high-level - implements everything you would ever need, their own AI, specific scripting, function for drawing GUI's that are different from functions drawing on textures etc. And the other ones are very low-level - if you want to draw text, then create a texture, load the file, specify texture coordinates, draw the quad, maybe even write a shader to draw that quad etc. GM somehow managed to be in between both of those and I always admired that. I am yet to find an engine that allows me to write text on screen using one line of code (without any other lines) and the same time make my own 3D ray-tracing engine. Like try making a ray-tracing engine inside UE4 without recoding their whole source.
Quote
Anyway my point was that even though you can get pretty much anything done in GM, its language is rather limited, as you should clearly be able to see, being a C++ programmer yourself.I truly don't see that. I don't find "different" to be the same as "limiting".
Quote
You could do it in assembly if you really wanted.True. You could do it even writing only 1 instruction for a million times (on a one instruction set computer http://en.wikipedia.org/wiki/One_instruction_set_computer).
792
Announcements / Re: Project Mario
« on: April 03, 2014, 01:42:10 pm »
I wasn't arguing whether language X is better than language Y. I was just saying that "GML/EDL is limited, because just look at the games made in them" argument is wrong. I have personally never encountered many limitations in GM. If I can make a Diablo2 clone, a Bastion clone or any other type of 2D game, then I don't see how they are limited. They have clearly succeeded, as they are 2D game tools. Right now slowly going into 3D.
And I don't believe in this "Power continuum", because never language X is totally better than language Y. Every language has it's own uses. I now program in C++ daily and while it might be higher in the "power continuum", it is still not my number one language when I need to make a 2D graphical program. Actually I might never make a 2D game or a program in anything else than ENIGMA.
Also, "feature" doesn't mean "better". Python has a lot of features and is higher level than C++, yet I dislike that language to the bone. It's not better in anything. Except maybe in eduction just because it's easier. But then again you could just use GML/EDL for that.
And I don't believe in this "Power continuum", because never language X is totally better than language Y. Every language has it's own uses. I now program in C++ daily and while it might be higher in the "power continuum", it is still not my number one language when I need to make a 2D graphical program. Actually I might never make a 2D game or a program in anything else than ENIGMA.
Also, "feature" doesn't mean "better". Python has a lot of features and is higher level than C++, yet I dislike that language to the bone. It's not better in anything. Except maybe in eduction just because it's easier. But then again you could just use GML/EDL for that.
793
General ENIGMA / Re: Splash Functions
« on: April 01, 2014, 04:19:19 pm »Quote
I thought we didn't have to worry about our game exes getting bigger, because ENIGMA Extensions can be managed in LGM via the checkboxes in the ENIGMA settings window.That is true. But I meant ENIGMA itself getting bigger. The OpenCV2.4.6 I have on my PC now is 5.32mb in lib form (when checking the world lib - libopencv_world246.dll.a which is basically a superlib for easier distribution) and 23.2mb in dll's (which are required in my case because the libs are actually dynamic). I guess if you link to static libs then they would take about 20mb but require no dll's. This means ENIGMA's installation would grow like 30% just because of OpenCV.
And the .exe you compiled with ENIGMA with OpenCV extension enabled would also probably be like 25mb.
794
General ENIGMA / Re: Splash Functions
« on: April 01, 2014, 12:19:21 pm »Quote
Could OpenCV handle all of our Linux video stuff we need it to though?It works on everything (also Android and IOS) and has basically the same interface in all of those places. But as I said, I am not sure how to implement it painlessly in ENIGMA, as OpenCV by default is extremely large. I originally had the idea of just making an OpenCV extension that came with compiled lib's for Windows and Linux, but if it was done that way, then we need to create an extension manager (web based or built-in LGM or whatever), because packing ENIGMA with all these functions that 1% of users will use is not a good idea. We need at least a page here on ENIGMA site with extensions and links to get them.
795
Programming Help / Re: Find the Memory Leak
« on: April 01, 2014, 12:01:42 pm »
After about 15min of debugging I tracked the problem to collide_inst_inst() [Collision_Systems/Precise/coll_impl.cpp:295] and subsequently to enigma::iterator::iterator() [Universal_System/instance_system.cpp:82]. It seems the problem is that the iterator is not released because the function returns a pointer (enigma::object_collisions*) and it is never deleted. The problem itself I guess manifests in the fact that collide_inst_inst() is ENIGMA namespace function only used by generated collision events. In IDE_EDIT_objectfunctionality.h we have this generated for that collision event:
edit: To see that the problem is somehow there I suggest commenting out for(){} in collide_inst_inst() function in coll_impl.cpp. Then the leak is gone.
Also, there seem to be a lot more leaks in ENIGMA, like in sprite structures which are never released. I used DrMemory to find leaks. Recommend trying it from here: http://www.drmemory.org/ .
Code: [Select]
variant enigma::OBJ_obj_monster_basic::myevent_collision_0()
{
if (!((instance_other = enigma::place_meeting_inst(x,y,0)))) return 0;
for (enigma::iterator it = enigma::fetch_inst_iter_by_int(0); it; ++it) {int $$$internal$$$ = 0; instance_other = *it; if (enigma::place_meeting_inst(x,y,instance_other->id)) {if(enigma::glaccess(int(other))->solid && enigma::place_meeting_inst(x,y,instance_other->id)) x = xprevious, y = yprevious;
{
{
x = xprevious;
y = yprevious;
if((abs(hspeed)>= abs(vspeed)&& not place_meeting(x + hspeed, y, obj_wall_basic)))
{
x += hspeed;
return 0;
;
}
if(not place_meeting(x, y + vspeed, obj_wall_basic))
{
y += vspeed;
return 0;
;
}
if(not place_meeting(x + hspeed, y, obj_wall_basic))
{
x += hspeed;
return 0;
;
}
}
}
;
if (enigma::glaccess(int(other))->solid) {x += hspeed; y += vspeed; if (enigma::place_meeting_inst(x, y, $$$internal$$$)) {x = xprevious; y = yprevious;}}}}
return 0;
}
I think the problem here is the use of pointers to iterators. That means C++ doesn't get rid of them (they don't destruct when going out of scope) and so they are never destroyed. This line "instance_other = *it;" just keeps making more of them. I at least think that is the problem. Josh maybe has better insight as he made the system. I personally think pointers are very ISO99 and we should use smart pointers or no pointers at all.Quote
Also, I thought you said you use Windows? I guess you dual boot then don't you?I do use only Windows on my laptop and main PC. But I do use Linux when programming on RaspberryPi.
edit: To see that the problem is somehow there I suggest commenting out for(){} in collide_inst_inst() function in coll_impl.cpp. Then the leak is gone.
Also, there seem to be a lot more leaks in ENIGMA, like in sprite structures which are never released. I used DrMemory to find leaks. Recommend trying it from here: http://www.drmemory.org/ .
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 »