Show Posts

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.

Messages - Josh @ Dreamland

Trying to sort through you two's bickering is frustrating, so I'll just reply to everything I see without linking the posts together.

First, Poly's original post:

1. Referencing multiple instances

In Game Maker, the only way to do this is multiple inheritance. Most worthwhile scripting languages today offer multiple inheritance, but this isn't compatible with GM's system at face value due to ambiguity in event inheritance. I am still abstracting ideas on how to resolve this, but some of them depend on Ism. I've actually been thinking about this myself for my own purposes, and this is what I have so far:
  • Introduce weighted multiple inheritance. The objects are traversed from least important to most important, each overriding the code of the previous one so any conflicts are resolved by taking from the most important. (In any case, the current instance is given highest priority). In the case of empty objects used as groups, all instances of all objects inheriting from that group object are identifiable by the ID of that group object.
  • A separate "tag list" deal for grouping. Like objects, only with no wasted space in the object table (or what have you).
  • Varied object types. Game Maker games have a lot of controller instances and parent objects for the sole purpose of grouping. Being able to add an object of each kind could improve efficiency and organization in general, and also solve this problem (you reminded me of it). This strikes me as the ideal solution, but depends GREATLY on IsmAvatar, who may not be easily sold on the idea, as well as on a new format for ENIGMA games, which will eventually be necessary but is not yet implemented.
2. Referencing resources as strings

I've never thought of this. It could be implemented but is not in any plan thus far. As you may be aware, maps are much easier to use in ENIGMA, but if you feel this is beneficial, file a suggestion in the tracker and I'll see about implementing it.

3. Exiting Code

I've been chewing on this issue for tears. Presently, scripts and DND are homogeneous; one exit means all exit. And, game_end() is instantaneous at the moment because I've not standardized an exit method. I've been waiting for someone to complain about this behavior before I modified it; suggestions are always welcome. I may define "exit" as goto <label generated at end of this script> and leave "return" as an omnipotent breaker. I Intended to do this about the time I index the code for quick position lookup on C++ compile error.

4. get_real

Already implemented in GTK interface; will be implemented in WinAPI when the widget APIs are finished and made available.

5. Pausing The Game

In the beginning, when the earth was young, young me wanted a pause feature that would put that kind of functionality in the hands of the user. Back then, it was intended that ENIGMA would have its own interface, and I would have a special resource to implement draw code for the pause screen. I haven't even presented the idea to Ism, because I have enough things on my wish list for her. Do you suppose it will require more than a single script executed each paused step? And should it paused immediately, or just after the frame? (You mentioned this point in another issue on this list).

6. Multiple collisions issue

Good suggestion! When I was new to Game Maker, I had this problem. I wanted to play a sound when crashing into an instance. An abs(hspeed)>0 check wouldn't work, because I just set the hspeed every time you pressed an arrow. So I ended up just checking that the sound wasn't playing. Your example's an even better one, though. The problem hasn't occurred to me in a while, and I never thought up a solution in ENIGMA. I'm a bit tired to think one up now, but I'll put some thought into it over the next while and tell you if I come up with something. My first impulse is a flag called "collision_fresh" which is set to TRUE or FALSE according to whether or not a key exists in a 2D map with the IDs of both instances. I have no idea the implications of the efficiency or simplicity of use, so I'll have to think about it further.

7. Timers
Rusky got me thinking about this problem not long ago. His solution didn't strike me as practical because I didn't see how to implement it (especially in ENIGMA), but the idea is an instantiable event (his proposal involved closures). Presumably this could be resolved by having easily forged first-class functions, but with the current state of both C++ and GML this just doesn't seem practical in full scale. They're illegal inline in C++, and var doesn't allow storing anything but real and string. What I may end up doing is allowing in-place declaration of alarms, which would mean no less bloat, but an easier interface. Again when the earth was young, I was thinking it'd be neat to have a when() {} statement, but I hadn't the foggeiest how to implement it. I may as well use the same mechanism to do so.
Or I can simply implement when() to mimic for(), and it could be used like this:
Code: (EDL) [Select]
when (i=0; i==10; i++) {
  //Alarm code
But that's kind of ugly. What do you think? My original idea was just when(condition), but I'm not sure the typical user is smart enough to say timer_explode = 0; when (timer_explode++ == 10) explode();

Upon reading the rest of the replies, they seem to have resolved themselves or have already been answered above. I don't have an API to iterate instances other than rooms, which you can do in GML like so:
Code: (EDL) [Select]
for(r = room_first; r != -1; r=room_next(r)) map[room_get_name(r)] = r; I could add such an API for all resources, if you like.

Proposals / Re: Script Editor Improvements
« on: December 21, 2010, 07:46:55 pm »
I just wanted something more elegant than JEdit, which wasn't designed for much of anything by the looks of it (It doesn't seem to have an interface to number lines or highlight a certain line number, for example. Or if it does, Ism needs a good smack). I am not great with Java by any stretch, so I asked Ism to isolate JEdit's code so I could work with it to add some functionality specifically tailored to ENIGMA. She was unable to do so, so I dropped it. (thingsihateaboutjava++)

Announcements / Re: Collisions update
« on: December 21, 2010, 07:18:59 pm »
All I can say is, we'll see. I have no idea whatsoever (which is somewhat unusual; I usually thoroughly investigate the implications of any differences before acting, but in this case I have nothing to go by).

I've thought about it, and the idea that scares me the most is that a GM game in which the character could not fall through a 32px gap between blocks of the same size would do so in ENIGMA, or vice versa.

All I can say is, we'll do our best and pay careful attention to reports.

General ENIGMA / Re: Compiling on OS X
« on: December 19, 2010, 09:21:29 pm »
I've never gotten Java to work on a Mac to which I had access. If LGM runs for you, all you need is the developer tool set mentioned by Ism above. It's about a gigabyte and a half, if I recall correctly (I recall TGMG telling me it was more, but I'm not sure how much more).

You will need an account with Apple at in order to obtain their supermassive tools. Most of them aren't necessary for the correct performance of ENIGMA, but I haven't found any way of obtaining the required tools individually.

Announcements / Re: Collisions update
« on: December 19, 2010, 11:16:16 am »
I'm telling you, there's got to be someplace where they sell Java programmers by the crate. The purebred kind, the ones that don't know any other languages and can't think for themselves. If we buy a whole crate full, we can just throw out the defective ones and keep a few good ones for you to put to work.

Oh, and I fixed some stuff in those thirty revisions, too. I don't feel like reading through them to figure out what they were, but two I can readily recall are a glitch in the syntax checker and another in the motion handlers.

Proposals / Re: Random speed ups and slow downs with compiled games
« on: December 15, 2010, 09:58:27 pm »
It was a syntax error the checker missed. Most of the parsers didn't give a shit (the formatter never gives a shit), but the variable harvester was pretty pissed about it.

Fixed r566.

Function Peer Review / Re: move_towards_point + move_snap
« on: December 15, 2010, 06:11:55 pm »
Hello, Mith. I didn't realize you were still around. I think what you implemented there as move_towards_point is actually mp_linear_step. I don't see a problem with the code at all, though. Nicely done.

Function Peer Review / Re: clamp()
« on: December 14, 2010, 07:56:34 pm »
Clamp is more efficient than median, unless median is specialized for each argument count.

General ENIGMA / Re: Cross-compiling
« on: December 13, 2010, 12:07:51 am »
No, there is no special form for links. I was indicating that systems like Box2D would be added to the collision system list. Setting custom links is messy; that should only be required when the system can't be integrated elsewhere. But yes, that much is necessary.

As far as changing the compile flags, we have a lot more than that to change, as is becoming more and more evident. Someone signed into the IRC who was having problems getting ENIGMA to coexist peacefully with DevKitPro's Msys. It was a complete clusterfuck. It didn't help that Tortoise SVN was betraying us the whole way, either...


General ENIGMA / Re: Cross-compiling
« on: December 11, 2010, 10:17:39 pm »
Opened ENIGMA settings lately, Retro?

General ENIGMA / Re: Cross-compiling
« on: December 11, 2010, 11:40:17 am »
Not just Mac. We're sticking to Mac because I've not yet started the Wii port and I don't own any other consoles for which I'd like to see ENIGMA work in the near future. It may happen that I'll end up thinking up a spec tailored to the Wii, and TGMG will make it work for Mac, iPhone, and Android.

Not to be a dick or anything, as TGMG has contributed some ideas to this mix, but it's so far been me who ends up writing the big picture shit that just needs to work, anyway. (I'd never expect anyone to mess with any of the parsers; it was neat enough that TGMG made the necessary modifications to the compiler source to get it working for those platforms at all). It's just that, as far as I can tell, this cross-compiling nonsense isn't going to happen until I have a release ready for Wii (which may in fact be sometime near New Year's).

General ENIGMA / Re: Cross-compiling
« on: December 11, 2010, 10:12:30 am »
This isn't something that can be done with the three of us PMing each other. We need to discuss a spec that provides for the needs of all supported platforms.

General ENIGMA / Re: Cross-compiling
« on: December 11, 2010, 01:10:25 am »
Just leave that to me.

It's been a planned part of the iPhone/Android integration. By the same mechanism you chose a compiler for those devices, you will be able to choose a cross-compiler.

Issue is, Ism, TGMG, and myself are never on concurrently.

Function Peer Review / Re: NEEDED FUNCTION LIST
« on: December 07, 2010, 08:43:15 pm »
That folder's TBR. But I was considering renaming Platforms... I'm still not positive about that layout.
We do need a new directory called "Widgets"... I've not decided how to link that up with GL/DX....

General ENIGMA / Re: Linux Repositories
« on: December 07, 2010, 06:53:31 pm »
Yeah, I read that but forgot to acknowledge it. I probably won't be adding anything to the downloads page until I can get nothing but (Y) from a release.

...Presently, ENIGMA doesn't work out of the box on Mac without acute modification, so I'm withholding release until it works. By the time it does, collisions will probably be in, too. So.