Events As Behaviors Confusion?


#1

Hello. I’ve been looking for a Free Software Licensed game engine for some time. Many years ago I used to make games in game maker studio. So, I’m trying to find something like that to replace it with.

Because of this, I am more used to thinking in terms of game maker and because of that I am struggling a little in transitioning to GDEVELOP.

The Events are easy to understand, use, and powerful. However, they seem attached to the scene. This is completely backwards to how I am used to thinking from game maker. In game maker, the ‘events’ are instead attached to the objects. The ‘scene’ is just a place to place objects for the purpose of level design lay out. Not a place to do any real game logic. I mean, you could through scripting, but I only ever really used that for stuff like play background music.

Is there some way I can kind of force GDEVELOP to attach game logic to Objects instead of to the scene itself? The reason I ask is because it would make much more sense to me to do it this way based on how I am used to making games. Mostly because Objects will be used from scene to scene. It doesn’t really make a lot of sense to me to have to copy and paste each scene to make a new level and retain game logic. Also, the Events list is going to quickly grow to be huge and unmanageable.

Earlier this evening I thought I found the answer in creating custom behaviors to handle all the game logic and then tagging them onto the Objects. A sort of work around that could be very nice as by separating the Behaviors I could use them across different Objects and people can share them with each other. I think this was the main point in separating game logic Events lists from Objects themselves into Behaviors. So that they could be managed separately, applied to multiple objects, and shared. If so, that is brilliant.

However, the only problem is that I can not figure out how to actually make any Events work this way. I created a Behavior and then attached it to my Object that I then spawned into the scene on my scene editor. I hit the key. No event happened. The event works if I do it this way in the Event Sheet for the Scene. But, not like this.

I tried escape key release quit game. Nothing. On numpad 1 key released play sound file. Nothing.

I think Behaviors are supposed to be able to be separate Event Sheets that I can tag onto Objects. That seems to be the point. But, I can’t figure out how to make it kick in once I attach it to the Object. It’s like the Object is just ignoring everything I put into the Event Sheet.

Please help. Thank you.


#2

Indeed, yes with the behaviors.
GDevelop5 allow you to create your extension, and in this one you can create behaviors for yours objects.
It’s completely a different approach than scenes, but it’s easyly doable.

I’ve never seen user think objects based in GD, so you will be one of first. Your feedbacks and suggestions will be important for the team.

For avoid to copy/paste the event block you can use external events and external layout.

In the behavior the scope is limited to your object. All global action can’t work inside. Because the behavior is like method from a class, the object is a class.

When you add an event you can choose “action” or “other action”, all stuff in action can work i guess, and “other action” are stuff useable only outside the behavior. This can be wrong but it’s the idea.
you are the first person to think like that in GD, so if you encounter problem with action feedback are welcome :slight_smile:


#3

Okay. So, I kind of made it work by adding my events to “doStepPreEvents.”

But, now I’m running into a situation you pointed out. Everything I do here can only effect the object that I attached the behavior to. For instance, I wanted to create an object. So, I have a GHOST character and I wanted release key numpad 0 to create object puke. This worked in scene event editing. But, here in behavior, the only object it lets me interact with is “object.” I can not call on creating object puke; which is an external object, as GHOST’S projectile attack.

So, I am very confused now. Is there a way to create globally independent objects that are not tied to specific scenes that I can add to whatever scene I create? I don’t want to sound picky. But, that’s how I’m used to operating.

Let’s say I have a collectable like a gold coin. I’m used to creating the gold coin once in a global objects list and then dropping it into whatever scene/level/room I create; no matter how many scenes I create. I’m used to thinking of creating game logic for something like a gold coin as a one and done thing. Then, whatever level I go into I can just add it from a global object drop down list.

This way the behavior of the object only has to be created once, is separate from all the scene and other objects and everything else, and can be easily added to whatever scene I want to drop and position the object into.

I don’t understand how to create something like that in GDEVELOP. Am I missing something? It almost seems like objects are tied to the scene and event lists are tied to the scene and behaviors are linked only to the object you assign them to and can not do all the event functions normally as they can’t call out to create other objects and can only effect the object itself that the behavior is assigned to.

I feel like I’m spinning out and going in circles. All I’m trying to do is make things so that I can create objects that I can control their behavior through events that are persistent in that they can be dropped into whatever scene I want to drop them into globally. Is that possible to do here? If so, how do I do it?

If not, I’m having a real difficult time in wrapping my head around how to make a game with more than one level if I can’t transition my objects and their event lists between levels globally. And just duplicating the levels is going to make a giant mess of my event list; which I want to separate from a scene list and have ‘attached’ discretely to each object for easy organization as their own ‘object list.’

I want individual objects, each with their own event list, that I can go into any new scene I create and drop into place. How do I do that?

Not to be rude, but my main goal here is to find something that works basically just like game maker; but is Free Software (Libre Software) and not proprietary like game maker is. I donate to the Free Software Foundation and run a GNU + Linux Operating System. So, I no longer want to be dependent on game maker as proptriatary software.

GDEVELOP is licensed correctly, and is powerful, and people review it well. But, I feel like I’m missing something. It feels like I’m trying to bend the engine backwards to make it object based instead of scene based and it feels like going against the grain. Is there another Free Software game engine I should try instead? Because, I just can not wrap my mind around things being scene based. It’s completely backwards to me and I don’t see how in any way this is going to work for more complex games that don’t take place on a single screen with many, many, many different kinds of objects. My scene list is going to grow huge quickly and organization is going to go right out the window.

Why was the choice made to not be object based when everything about game creation is how objects interact with other objects? Would it not have made the most sense, then, to have the events controlling object interaction take place inside the, well, objects themselves instead of the levels? The objects are what will be persistent between levels; not the levels themselves. Levels are ‘disposable’ scenes that should not carry such weight because all they should be used for is placements of objects on the grid and maybe background music. The idea of embedding all my game logic in ‘disposable’ level containers is blowing my mind and I have no idea how to divorce the game logic from the levels and stick it with the game objects where it belongs. It all just feels completely backwards to me and I don’t understand how my game logic is going to scale past a single screen arcade style game from the 80’s.

If you can help by pointing something out that I’m missing to make this all work the way I want it to; please do and I would like to continue to use this program. Otherwise, are there different drag and drop engines you could recommend that are Free Software (Libre Software) licensed that work more like game maker?

Thank you.


#4

You understand how the game engine works, you don’t miss a thing.
It’s only very recently that behaviors are available on objects.
The way of thinking object is relatively new in GD.
As you say there are limitations that advanced users encounter.

To create an object from behaviors, it is for now an unconventional method, learn more about it on this
topic.


#5

"They are called external events. You can then link to these “External events” whenever you need them. If you need to use a collection of events often, and in different places, you can make them external and call them from your scenes rather than adding the same events multiple times. "

It just seems like the growing pains that this engine is going through right now is realizing that it should have been object based instead of scene based and is now trying to use external events and behaviors as band-aids to fix this structural flaw rather than redesign the core of the engine itself to make more sense and be object based.

I just don’t understand the organizational thought process that went behind making this engine scene based. As an educational tool, or for creating really simple arcade style games, I can see scene logic being a tad easier to work with and maybe a tad more user friendly. But, for anyone wanting to make larger projects it’s going to be a real unpleasant chore to have to constantly work around this design flaw.

I don’t want to have to squirrel away commonly used events into a global event list. I don’t want to have to create new objects every time I create a new scene. Nor do I want to copy and paste entire scenes just to retain the objects I already created.

You asked for feedback. Here’s mine.

1: Objects should exist globally so that they can be persistent in the object menu between scenes. Make once. One and done. There should be no remaking objects, convoluted copy pasting of scenes, or messy giant global event list. That’s an organizational nightmare that will never scale well to large projects.

2: Game logic (events with their conditions and actions) should be attached to objects and not to scenes. That way it’s easy to keep track of what’s going on with the game logic because everything is where it’s supposed to be. All logic needed for the player is with the player. All logic needed for a collectable is with a collectable. All logic needed for a projectile is with the projectile. All logic needed for a solid wall is with the solid wall. There should not be a giant list where I have to constantly be clicking and dragging things around to group them; constantly searching for where in this giant list the specific event is that works with a specific object. That’s a nightmare for organization.

3: It’s not wrong to allow game logic in the scene as an option. Simple stuff like play background music, add an effect for the scene, and a few other things might make more sense to do in the scene because they actually pertain to the scene. But, about 99% of game logic should be completely divorced from the scenes and instead be done in the objects because it’s the objects that the logic will be effecting. So, for organizational purposes it just makes good sense to place the logic with the objects.

So, in short, my feedback and that they should figure out how to transition this engine into being an object based engine instead of a scene based engine because that’s what makes sense. I have no idea how difficult that would be or if that means gutting the engine or not. But, based on how game maker taught me to make games, this engine is basically completely unworkable for me right now. I feel like I’d have to do mental gymnastics to bend over backwards to try to make any of this make sense in my mind for making a game that’s more than one level. Which is a shame because, beyond this, the events look powerful and the rest of the design is clean. I was hoping I finally found my replacement for game maker and now I feel like I want to cry because I’m realizing just how wrong I was.

Essentially, the organizational idea at the core of how this engine works is flawed and needs replaced to be object based instead of scene based. How it is now is just plain wrong to me. Maybe it makes sense to other people. But, right now it looks like I have to jump through a bunch of hoops to make multi-level games that I wouldn’t have to jump through if this engine was just organized to be object based from day one.

I know I probably sound mean. I’m sorry if I do. But, you asked me for feedback. But, this is all basic functionality that game maker had about 15 years ago when I first started making games with it and you all are talking about this all like it’s some sort of new and fresh idea. That fact doesn’t give me a lot of hope for this engine. I think my effort might be better spent looking for another engine than in hoping that this engine turns itself inside out to catch up to the basic organization of game maker from 15 years ago.

I just still don’t understand why GDEVELOP was designed with such emphasis placed on scenes in the first place. Who wanted it to work this way? What was the perceived advantage? Why did they think this would be able to scale and be dynamically flexible?


#6

On an object in object list, right-click-> set as global.

@4ian


#7

I would recommend to give GDevelop a bit more time.

Scenes and events sheet related to scene are here because it maps easily to the concept of screens in the mind of beginners.
If you’re creating a large game and are an experienced game developer, you should:

  • make your levels in external layouts. You have a single scene for your game, and then load the external layout of your game.
    • Note that it’s interesting that your object are not global, so in a scene like the menu, they are not living in memory for nothing.
    • or you can make your object globals :slight_smile:
    • in the future, we might introduce groups of scenes, with objects that are scoped to these scenes.
  • create behaviors for your objects. In other engines this is called an “entity-component” architecture. In other words, we don’t have events related to objects in GDevelop, because we have better. You create events in behaviors and then associate behaviors to your objects. It’s scalable and efficient.
    • better, these behaviors are actually considered as extensions internally. And you can make them using events. It’s a feature that no other “visual” game engine was ever capable to do.
  • use the events sheet of the scene just to call the “high” level feature: music, launch behavior conditions/actions, basically the first reading level of your game logic.

Again I would encourage you to spend more time in GDevelop. Moving from one game engine to another is hard. Game Maker is nice, but it’s also more a programming language than a nocode game engine - you can hardly make anything large without having to code in a propertiary language.

I agree that there is still work to do to modularize a bit more the software and main concepts (like introducing objects that are “containers” composed of sub objects). But just the fact that you can create new actions/conditions and new behaviors in GDevelop itself using GDevelop events is a testimony that the architecture is unmatched so far and scalable.

It’s not perfect, but we’re getting there :slight_smile:


#8

I think pretty much every important stuff has been covered already but I would like to pint out that

What you are saying is, if I understand correctly, that because it’s not like game maker it is bad?

There are behaviors, you can attach events to objects. I would also like to point out that ue4 works exactly the same way: you can attach scripts to objects and have a global scene script to do actions on objects and/or the scene, like in GDevelop. Now explain to me why Epic Games would have choosen a “flawed” design? Full object orientation isn’t always the Best.

Like Bouh said, it is already possible (even if I wouldn’t recommend it as it takes more memory at runtime)


#9

Bad would be too strong a word. But, bad for me. Different isn’t inherently bad. But, it is when you spent years learning to do things one way and then you’re trying to learn something new and it’s done entirely differently. I’m bad at middle ground. I either couch my answers so deep in apologetic language that no one takes my criticisms seriously or I cut loose and sound like a mean person. I’m not saying this engine is bad. I’m saying that it feels backwards to me and that’s making migrating to it a bad experience for me. It’s like everything I want to do is going against the grain of how this engine was designed to function.

Here is the workflow I’m used to for making my games.

1: Create object.

2: Attach sprite.

3: Place object in level.

4: Most game logic is collision based because that’s what I learned first in game maker and so that’s how I’m used to thinking of interactions.

5: Stuff like health is done in variables.

So, I was trying to make a top down game here in GDEVELOP where I control a GHOST and I attack a human.

So, I wanted to make numpad0 release create ectoplasm puke. So, I created the puke and gave it a sprite.

In game maker these would be two unique objects. I would then set the release key event for numpad0 in Object GHOST to create object puke based relative to object GHOST at an offset. So, maybe two pixels to the left or right. I could check the sprite direction and make something like. If sprite = player 1 right create object puke relative to ghost at 3 pixels to the right on the x axis. If left, do the same but 3 pixels to the left. Or, whatever looks best after some trial and error. Puke would have a creation event that would play sound once, or I would attach this to the release of the key. However I felt would function best. Then, all of Puke’s behavior would be created in object puke.

After playing around in GDEVELOP a bit, I was able to make this type of thing work with doing the events logic in the scene. But, I plan to create many types of attacks for GHOST. At least one on each numpad key. I feel like this is going to get messy in the scene list because I am going to have many, many entries for every actions of object GHOST. At least 10 right off the bat, maybe more.

So, that’s when I wanted to get the game logic out of scenes as quick as possible because this just wasn’t going to scale well at all going forward. So, I deleted my entire project and started from scratch; thinking that I could build things with behaviors the same way I did in scenes and that they would work the same. Then, I could attach them to the objects and this would work like the objects I’m used to working with.

While this worked for making escape key quit the game. This did not work for allowing object GHOST to call object puke relative to his own position like it did in the scenes. This is because GDEVELOP’s object creation event doesn’t really work the same way as game maker. I can’t just make a key release create an object relative to my object by just placing it in my object’s logic and then picking the object I want to create from a drop down menu.

What I had to do to get this working in scenes was to reference the x and y position of object GHOST to get the engine to create puke relative to object GHOST. A simple work around, that in scene logic created the same result as Game Maker’s object creation action. So, I was happy with that.

But, when I tried to do the same thing in behaviors the engine fought me on it. The behavior attached to object GHOST wouldn’t let me effect anything but object GHOST. So, it wouldn’t let me create object PUKE relative to object GHOST.

All I know how to do is create objects next to each other, form collision logic, and do some light variable work. Not being able to have one object call another without embedding the game logic in the scene is creating problems. I either have to leave all game logic in the sheet, or figure out a new way to have a behavior call another object into existence relative to the position of the first object in behaviors. If that’s even possible.

I don’t know how to program. This is how I made demos for a platform game, fighting game, DDR game, top down GTA game, so on and so forth. It was all done with collusion and light variables and invisible objects.

I tried to create this same type of work flow here in GDEVELOP. I can do it in the scene. But, I don’t like all my game logic stored in the scenes; as that’s convoluted and confusing to me. I learned from game maker that everything should be separated out into objects.

For instance. In a platform game I made things work like this. If object coin collides with object player, destroy self, play coin.wav, add 1 relative to variable coin count in object player.

If object bullet collides with object player, delete self, -10 relative to variable health for object player.

If object block collide with object player set x to 0 relative and y to 0 relative for ‘other object.’

As little as possible would be stored in object player. Only movement, keys to do attacks, and basic variables that made sense to object player. If too many variables went in, I’d create a persistent invisible object in the top left corner of the screen on the first screen that would exist and persist through the entire game and do variables there as a sort of ‘global variable.’

All interactions with player object would be done in the other objects. Each to what each does; wall, coin, bullet, block.

That’s how I made games. But, I can not figure out how to make behaviors call other objects relative to player object when behaviors won’t let me call out.

So, I can’t create object PUKE, or any other projectile attacks anymore like fire balls or bullets from behaviors.

It just feels like everything that I do to try to recreate how I’m used to making games is running into a wall where the response I get is ‘it might be possible, but the engine wasn’t really designed to work that way and you’re one of the first person to think that way here.’

I don’t know what else to say. Thank you for telling me to right click to make objects global. That solves that problem. But, how do I make behaviors call out and effect other objects besides just the one it’s assigned to?

I can’t make them call out to other objects like they should. I tried and when I tried to select the other object it just kept referencing back to GHOST.

I’m just very frustrated with this right now. I’m at the ‘please just work’ phase every time I try something. And, usually, the response I get is, nope.

I know it takes time to learn something new. But, I could have made this and much more in an hour how I’m used to making it and right now I spent a whole day trying to learn this engine and feel like I’m still nowhere close. Essentially, the engine is not structured to work the way I work and is fighting me. I am fighting the engine to try to force it to work the way that I feel it should based on how I learned to make things work.

Logic must be placed in the scene (a mess) or in Behaviors that are not a replacement for objects because when placed here than can only effect the object they are placed on, not other objects. So, as far as I can tell, GEDEVLOP has no real ‘object’ that works the same way as objects in game maker work. So, this throws off my understanding of what I’m supposed to be doing and how completely. I’ve spent several days now just ‘arguing?’ back and forth on the forum and basically gave up on the program itself and now this is getting boring too.

How do I make an object that acts like objects in game maker so that I can make games the way I understand how to? Because I can’t make all the events work inside of a behavior.

I am looking at Godot and it looks like it has a 2D engine. They say it has visual scripting, but I was also told in videos that this is not the same as ‘drag and drop’ programming’ that I am used to from game maker. Yet, thankfully, everything is a node. And it looks like in the videos I can attach nodes to nodes. Sort of ‘sub-nodes.’ In that way, essentially assemble an ‘object’ the way I’m used to having one; but piecemeal. A node within the player node for movement. A node within the player node for camera functions. So on, so forth. But, in the end, a player node that can be an ‘object’

I have never learned a programming/scripting language before. Would my time be better spent trying to force GDEVELOP to have objects and behave like game maker? Or, would my time be better spent trying to learn GDScript? That’s what I’m trying to figure out. I also see another engine called Superpowers. Is that closer to what I’m looking for? I couldn’t figure out how to open the download and make it run.

I am just at the point of frustration with this engine. Nothing is working ‘right’ (the way I expect it to) and instead is fighting me every time I try to make it do something. I work in customer service and everything going on right now is making that even more frustrating than it usually is. I was hoping I could make a game and have some fun, but right now I’m spending more time fighting the engine than making the game.

Can I fight this engine and make it work how I think it should, or am I better off looking elsewhere?


#10

Oh, I see what you mean now.

I understand your pain, an actually I don’t understand why. There is internally no such restrictions, and afaik the scene is passed automatically to the behavior functions, so they should be able to interact with each other. I looked quickly at the code and can’t find why this behavior even applies. You are totally right, this is confusing and weird. If you would have known how to code I would have given you a possible workaround but as you already said you cannot this wouldn’t be any use.

I would say it depends from many factors. From what you are saying, I think unity would be the most appropriate engine for you but it would require learning how to code. The node system from Godot is IMHO very bad, and so is GDScript too, but if you manage to work with it, then I guess it is good. If GDevelop doesn’t works for you, try other alternatives. In the end after trying out other ones, you will be able to have a better self-opinion on each of them and will be able to make the best choice.

Anyways, thanks for choosing GDevelop before other engines Like Godot, and I hope you’ll have a great day and you’ll manage to solve your problems! :slight_smile:


#11

Well, I am looking for a Free Software Licensed engine. So, something either GPL or MIT Expat. So, that would disqualify game maker, unity, unreal; all thing propitiatory.

Well, now I feel conflicted. This engine is licensed correctly. The events seem powerful and are easy to understand so far. And now I know how to make objects global.

So, really the only sticking point is trying to bring game logic out of the scene and into the behavior so that I can attach them to objects. But, as it stands, it breaks some types of events.

Such as not being able to have my behavior have my object create another object next to it because it can only work on the object is it attached to. As far as I can tell, if this hurdle can be overcome I should be able to migrate over with some trial and error.

Next day I get a day off I might try working with GDEVELOP again. It’s frustrating because it feels so close. In scenes, I can make the engine do what I want it to do. But, I’d rather work from behaviors I can attach to objects because that matches the workflow I’m used to from game maker and that makes organization more logical to me because it would match what I spent years doing instead of learning how to do something new from scratch.

At that point, if I got that working, the rest would just be learning what events in GDEVELOP match the events from game maker so that I can start doing over here what I was doing over there. That was a process that I already started on and was having pretty good success with.

I was so happy last night when I finally got behaviors kind of working. But, once I realized that they couldn’t effect other objects it became a giant wall for me. Basically telling me there was no good way to be object based. Behaviors are limited to just the object they’re tagged to. And scenes would be a nightmare to manage because the logic for all the objects in the scene would be in one giant object list instead of bundled up with the objects they relate with.

I suppose at this point my complaint isn’t about function but rather about organization. I could work this way, but it would not be ideal and would become very crowded.

Where did I put that event? Did I take care to drag and drop it in this list of hundreds of events next to the other events that reference this specific object? No, probably not. I was likely excited and trying to make something new work. Who knows where I put it. Probably at the bottom. Mixed with events covering another object or two. Oh deer, time to spend five to ten minutes sorting out this spaghetti blob of events into placements that make sense so that I can find them later. I guess I’ll have to do this at the end of every day working on this project. Everything tied to either the scenes or to one master global even list. How unfortunate. Either way, a spaghetti mess.

It’s not that it couldn’t work. It’s just that I would be spending as much time going back and reorganizing my mess as I would be creating anything new. All of which could be avoided if logic was placed either in objects or in behaviors that could actually effect other objects. Because then it wouldn’t all dog pile into one giant list of events.

That’s my problem now. With what people have told me, it could work. It’s just that organization is going to be a wild beast that I’m going to have to constantly be taming. That doesn’t sound fun. That sounds like a chore. A completely unnecessary chore if the engine just worked like it ‘should.’

I could manage to think of behaviors as objects. Just attach them to my objects and do all the editing in behaviors instead of objects. That’s fine. I could live with that. There’s even the advantage of tagging the same behavior to multiple objects.

But, the way behaviors are working seem very limited currently. Because they only effect the object they’re attached to instead of having all the events work normally as they would in the scene event editor. If they worked the same, I would have no problem and I could start working with this engine.

But, as it stands, I can’t use the events I want to use for most things. Such as having one object create another. So, I feel like ‘if it were a snake it would have bit me.’ It’s like I’m right next to having things work how I want them to, but there is a wall standing in my way shouting “NO!”

So, I don’t really know what to do now.


#12

Appreciate the feedback!

Not having the time to answer to everything but basically I would recommend to either:

  • Try Godot if you prefer the node based approach, and are willing to spend a bit of time learning GDScript
  • Give more time to GDevelop. It will never be 100% exactly what you were dreaming of (neither Unity, Godot or any game engine).

Learn how to use events group, comments, external events, external layouts and how to create behaviors.
Behaviors can’t access other objects for your own good. If they could, you would create a spaghetti mess. I’m 100% sure. I’ve seen it. GDevelop is shielding your from that, forcing you to make simple behaviors.

You seems to be very worried of this organisational thing, telling that everything is spaghetti.
After programming years and years, I can tell you: it’s not the engine that make you create spaghetti code. It’s not the paradigm. It’s you, the game developer, that is making a mess :wink: (it’s a joke right, not telling about you personnally :wink: )

You can create perfectly organized code in GDevelop, with a super readable, english like events sheet, nicely using groups and using nicely done behaviors.
Or (and this probably will happen, whatever the game engine is), you can end up with dozens of nodes or events or code or class or visual thingy thing (or whatever you are using) that are not making sense, that are coupled and not understandable and that are a huge spaghetti mess.

My advice: just go ahead and make a game with GDevelop :slight_smile: Try. If it’s not fun, you’ll stop. You’ll have learn in any case some valuable stuff.

Just don’t try to make everything perfect and don’t stop at the first thing you don’t understand.

I’ll stop following this thread for now because I think it’s not valuable use of time to continue to argue. The best way to argue is to try to make something - then if there are things to improve (and there will be some - whatever the engine is!), we’ll see how to do that.


#13

A giant list with groups I have to sift through is the exact opposite of organization. Maybe others can make sense of that. But, I will never be able to. It’s too centralized. I never created a mess with game maker in my several years of working with it. I had a mess in GDEVELOP after several hours of working with it.

But, clearly, this does answer a question for me. This is a design decision, and a flaw, and I wasted my time here. Don’t blame me for making a mess when you deign the tool to force me to. That’s on you, not me. I never had a mess with game maker. If its license fit what I’m going for, I would never had left it.

This is a tool for beginners that teaches them bad practices. Not something that can expand that can be used to build something decent with.

If you want your tool to be useful to a larger amount of people, then perhaps you should realize that different people prefer to organize differently. Trying to force an organizational method onto your users is hampering them, not helping them. Especially one that is geared only to beginners. It makes the entire engine feel like training wheels.

What? As penance for not knowing how to program I should be punished to by having absolutely everything geared toward working as if I was in first grade? I’m 31.

I prefer to have objects (or at least behaviors that I can tag to objects to simulate working like objects) because it sepparates things out logically. Think of each object as a ‘folder’ in a file cabinet. Only the things that belong to it belong in it. Things pertaining to player belong with player. Things that pertain to block belong with block. Things that pertain to fire ball belong with fire ball. You can’t get more logical and organized than that. Instead, you want me throw all my ‘folders’ out and just throw all my papers into the file cabinet. Then I can click and drag them around so that they make sense. Grouping them, like maybe putting separators between papers. That’s… a lot of colorful adjectives I will avoid here for polite conversation. I just want my ‘folders’ back.

Or, we could throw out all those band-aid work arounds and just have objects and solve that entire mess of a suggestion.

‘Thank you’ for ‘protecting me’ from organization and wasting my time.


#14

I think there are 2 different things being discussed here:

  1. How to make GDevelop work like Object Oriented Programming (OOP)?
  2. Are event sheets or sequential logic programming better or worse than OOP?

I think the answer to #1 is you really shouldn’t. You can do things to make it more Object focused (Behaviors), but you’re basically fighting the design of the engine. This isn’t a flaw of the engine, this is how the engine is meant to be.

The answer to #2 is neither. It’s just different.
In fact, just like some people feel OOP are the way to do things, in the past few years a lot of people have been researching pitfalls and deciding OOP isn’t the best way.

Here’s some resources that talk about it: http://harmful.cat-v.org/software/OO_programming/ There’s even a large presentation by Sony Computer Entertainment’s R&D devision about why OOP isn’t the best answer.

If you’re coming from another engine that is sequential logic based, such as Construct 2 or 3, you’ll be able to apply a lot of methods directly and have a leg up.

However, coming from Game Maker as you are (and as I did) mean that while you can still apply logic patterns on how you should organize your code, you should not try to apply the same methods of developing code. This is not a node focused logic engine. It’s just not. It’s no more a design flaw for GD5 than it is for Construct. This does, unfortunately, mean you need to re-learn best practices about enacting ideas in the game logic.

All of the above said: If you can explain what you believe to be the bad practices being taught, maybe I can spend some time to write up some documentation in the wiki to help guide people away from those?

I’m not a contributor on the engine, but I do greatly enjoy using it, and I want to do what I can to help anyone (yourself included) get up to proficiency with the engine if I can.


#15

Which is why I’m no longer interested in this engine. I really don’t want to take the time to learn something this huge of a difference from scratch. I understand moving to a new engine means learning new things. I assumed conditions and actions would have some different names and that it would take me some time to figure stuff like that out as well as user interface things. But, I didn’t imagine at all that game engines could change so radically in basic functionality and design at the base of how games are made. I just assumed everything was object based because that’s all I knew from game maker, it works perfectly, and so why would anyone ever choose to do it differently when perfection was already reached?

At it’s core, I’m looking for a GPL or MIT EXPAT knock off of game maker. I was hoping this was it. The project lead just told me it’s not and will never be. So, clearly, I’m done wasting time learning this.

That said, if anyone can point me to an engine that is closer to how game maker functions while being GPL or MIT EXPAT, please let me know. I really just want the functionality of game maker under a Libre License. I don’t want to learn how to make games again from the ground up. I think there was an attempt at one point with pygame to recreate the conditions and actions of game maker in a gui. Does anyone know if that’s still being developed?

This is just too radically different an approach to game design. I didn’t’t re-learn the basics of using a text editor or a spreadsheet program when I moved from ms office to Libre Office. I had to learn some new things. But, the basics of how these programs worked were fundamentally the same.

I keep googling ‘open source game maker’ ‘open source game maker studio’ ‘open source game development tools’ ‘open source alternatives to game maker’ ‘open source replacement for game maker.’

The results kept directing me to GDEVELOP, Godot, Superpowers, and Coco.

I don’t want something that requires me to re-learn the basics that game maker taught me. That’s too much of a burden that isn’t worth the effort output. I shouldn’t be expected to clear such a massive hurdle just to migrate to a Libre alternative. I don’t want a knock off construct. I want a knock off game maker.

It’s not that organizing this way isn’t possible. Maybe some people would even prefer it. (Though I personally don’t see why they would.) It’s that it makes absolutely no sense to me and I don’t care to take the time to learn it.

Take game maker, for example. You can run its scripting language from an object or a level if you really wanted to. Sometimes, I would use the level to play background music. That saved me from having to create individual invisible objects to plan in each level just to play music.

Some things make sense to be done in the level. Background music, effects, so on. I’m not saying scenes shouldn’t be able to do things. If someone really wants to do everything from a scene; I don’t see why they should be blocked from doing that. But, to me, I’d like the option of being able to do even scripting directly in the objects. That’s what makes sense to me. Or, if that isn’t going to happen, from behaviors.

If the lead dev wants to keep behaviors simple, self contained only to the object that they are on so that they can be easily shareable. That’s fine. But, then, add a tab in objects to do event scripting in. When I open up an object, there should be three options. “Properties, Behaviors, Event list.” I was shocked when I didn’t see that. I am trying to jimmy-rig behaviors to be that event list because that crucial feature is absent. But, I can’t do that because events don’t work correctly in behaviors because they only effect the object they’re attach to.

I am literally being forced against my will to do event logic in the scene entirely; the absolute worst place for the vast majority of it to go into for the method I use for organizing. I don’t want a giant list of events that I have to group and drag around. That’s (colorful adjective.) I want to be able to do event logic in the object where it makes sense for it to be in my mind.

That way, when it comes time to change something about fire ball, I can just open up fire ball object, tab over to events, and make the change. I don’t have to spend an hour searching through groups of events in a giant list trying to find fire ball first. That’s (colorful adjective.)

I suppose if I’m making a knock off of a 1980’s arcade game as a sort of ‘learning tool’ for myself with an event list that might only be a hundred or less events that this would be manageable. So, if I want to make knock off galaga this engine is perfect. If I want to make a larger game, maybe containing hundred of ‘objects’ and thousands of events; this is going to be a total (colorful adjective) nightmare. A total (colorful adjective) nightmare every, single, step, of, the, way.

This is what I mean when I say it teaches bad practices. It’s like a set of training wheels. A good engine if you’re in elementary school and wanting to make knock off galaga. A bad engine if you’re actually planning to make a large project. I would have to bend over backwards using

to solve the problem that my training wheels doesn’t have a real tool in them; actual objects the way game maker has them.

That’s what

and

and

translates to me for. It comes off as code for ‘this engine is training wheels for grade schools kids and you’ll be doing a lot of work arounds to use it as a real engine like game maker.’ That’s how I’m reading these comments.

I’m not looking for a ‘teaching tool.’ I’m not looking for someone to tell me how to organize their way instead of my way. And I’m not looking for something that ‘maps easily to the concept of screens in the mind of beginners.’

I’m looking for a tool that I can learn to work with that is Libre licensed that can replace game maker. That works like game maker, or at my option I can work like game maker in.

I feel like I’m being given three options.

1: Go back to using windows and game maker just to make games.

2: Learn to program if I want to use anything Libre licensed that isn’t GDEVELOP.

3: Or use GDEVELOP and realize that it’s training wheels and not a real engine like game maker and that I’m going to have to figure out a lot of work arounds to get this engine to work how it’s should work for me.

None of these options are good for me. And to know that this functionality is only absent because the dev feels he needs to ‘protect’ me from organizing the way that makes the most sense to me is (colorful adjective.) While, at the same time, the same dev goes on to say that any programmer can make a mess out of any organizational system. Really? Is that so? Then why not give me the option to ‘make my mess’ in the way that makes the most sense to me. Rather than telling me that the only way to use this program is to ‘make my mess’ in the way that you ordain as best?

Who are you to tell me how I should organize? Clearly there is more than one organizational method people prefer. If the engine is flexible enough to add an events tab to objects and let users add events there; then why not add it? Let us organize, or ‘make a mess,’ in whatever way we find makes the most sense to us. But, please, do not pretend to tell me how I should organize as if it’s for ‘my own good’ and to ‘protect me from myself.’ Who are you to judge that? Isn’t the entire point of Libre Software to give users the freedom and control to have options? Isn’t that why we have so many graphic user interfaces? It’s because everyone organizes differently.

I can’t stand KDE. I can live in GNOME 2 / MATE, but I don’t like it. I love GNOME 3. Other people hate GNOME 3. Some hated it so much they forked GNOME 2 off into MATE to not have to use GNOME 3.

By appointing yourself organizational King you are essentially telling everyone that they should use KDE and like it because that’s what makes sense to you and it’s ‘for they’re own good.’

I can see if the engine isn’t flexible enough to make this type of change easily. I can see if you would have to poll people to see if there is interest in this. But, you just seemed to have made this a choice based solely on your own personal preference while we have a thread of at least three other users besides myself trying to figure out a work around your design choice.

I want a way to have behaviors have an object to create other behaviors. At least four of us seem to find that useful. Or, myself, I could also do with an event list added directly to a tab in objects.

But this idea that I somehow can’t have game maker style object based event creations and that the events NEED to be placed in a scene, or in a behavior (who’s functionality is diminished to only working on itself and not other objects on purpose) or anywhere else besides in the object where I feel it most logically belongs; for no other reason than you feel I should organize that way, and that way alone, is absurd! The idea that this is done by you, to me, for apparently no other reason than that you feel that it’s ‘for my own good’ is insulting.


#16

It also looks like others are struggling to try to do the same type of thing in this engine. So, clearly, this is functionality that people would like to have and that the developer would rather ‘protect’ us from.

Sense GDEVELOP is licensed the way it is, how difficult would it be for someone to create a fork of the engine that is object based? Or, at the very least, allows behaviors to effect objects outside of them? I can’t program. Is this something we could fund raise for and hire a programmer to do for us? Because, clearly, he doesn’t intend to do it. The rest of the engine seems functional and useful. Is there a way to create a branch that would be useful to those wanting this type of functionality?

Bouh posted a link to an entire topic of people trying to figure out how to get around this engine limitation to create better functionality for this engine. Ironically, centered around the exact same problem I have with it. Not being able to use a behavior to have one object create another object because behaviors only effect the object they’re attached to. (For absolutely no good reason other than the dev decided to have it work this way.) So, clearly I’m not the first or only person finding the engine difficult to work with for this reason. It’s pretty bad when the users have to bend over backwards to try to jimmy-rig together a solution to a problem that the lead dev has decided to straddle us with that is hampering our work.

I can’t find anything else licensed this way that comes close to a gui based programming that I’m used to. Godot, even in visual mode, still assumes I know programming. I can’t get anything else to run. Is this a small change that would need to be made, or a large one? Would this be something I could throw $50.00 or $100.00 at a programmer to get solved? Or, would it be more extensive than that?


#17

I think there are some misunderstanding in this thread.
I come back to the very first question of the thread:

This works for me :slight_smile: Not “quit game” because it’s only working when you package your app, but for example changing the background color of the scene, or playing a sound, is easy to do.

Let me explain:

1. How to create events “for an object” using a behavior:

Create an extension containing behaviors, name is up to you. We’ll add folders later:
image

Create a behavior. Name it according to your object, or the capability you’re adding:
image

Add a “doStepPreEvents” behavior function:

So that you have this:
image

Then I made these two events:

Finally I added the behavior to my object:

And it works, I’ve made events that are tied to the object and that are not in the events sheet of the scene. And they work well, check out the export here: https://s3-eu-west-1.amazonaws.com/gd-games/game-ed060631-d48e-4ab9-b4ab-28b0d42d60ef/index.html
If I press space, the background is changed.
If I press p, a sound is played.

Does that work for you so far?

2. Ok, now how to interact with another object

Now, we may want to go one step further and create some logic related to one object, like the player, and other objects, like enemies.
For this, we can’t use “doStepPreEvents”, as we can’t pass it objects. We need to create a new behavior function:

We can see it added in the list of behavior functions:
image

Let’s rename it according to what it will do:
image

Then in this function, let’s add a parameter: the objects that are our enemies.
For this, we add a new parameter of type “Object”. Then, we can use this parameter in the events.
As an example, we will make the enemies play a sound when the player is colliding them:

Let’s finish by adding a nice name and sentence in the configuration of this function:

Now the last step is to call the function in the scene events sheet.
You may be disappointed at this point! “I don’t want to ever add again an event in the events sheet”. Alas, for now as we can’t pass objects to behaviors, you still need to call the function. You’ll find it in the scene events sheet, in the Player actions, as we previously added the behavior to the player.

We add an action, choose Player:
image

Then choose “Handle enemies”, our new action, and configure it with our enemies.
Tip: I use a single object, “SlimeWalk”, for the enemies… but you could use a group of objects:

Here is the result:

Let’s run the game. It works!
If you run the game (see an example), you’ll see that when the player collides with the enemy, a sound is played.

Not bad for a single event in the scene events sheet! And we can more objects and make the behavior more complex. Or we can reuse it for another object that should behave the same as player. We can even disable this behavior if we want the player not to play a sound when colliding with enemies.

It’s up to you to decide how “far” you want to push your behavior.

3. Let’s now interact with other object behaviors!

Let’s now say that you’re game is getting more complex. For example, enemies now have also their own behavior. And this behavior has an action to make the enemies blink.
We want the enemies to blink when the player touches them (as they are hit - we could imagine make them lose some health or play an animation, etc…).

First, the “Blink” behavior already exists. Let’s add it to our enemies. First, we find and install it to our project:

Then we add it to our enemy:

It’s added, we can configure it:

Now, let’s go back to our Player behavior. We go in the HandleEnemies function and add a new parameter, which is of type “Behavior”, just after the “Enemy” object parameter:

:warning:Rough edge here: it’s not super obvious that you have to select a behavior as a parameter to make it part of the previous object. Happy to take feedback on the UI on this part!

And now the function knows that the enemies have a behavior called “Flash”! Let’s use the action to make them blink:

:warning: Another rough edge here: as you added a parameter, you now have to go back to the events sheet and edit the action to be sure that the behavior is passed as parameter:

(Note the third parameter). Alas if you don’t do this, the action will be missing the last parameter and the game will crash. I’m thinking how to automate this.

Now you should be able to run the game and when the player touches a enemy, this enemy is blinking! See the result.

4. How can I make multiple levels with this.

You can now either create a single scene with external layouts for your levels. Or you create multiple scenes and use global objects to avoid having to always recreate your objects in each scene. You can use an external events so that all the scenes are sharing the same events.
This way, you have all your objects global, a scene for each level (or each “world”, and the levels can be in external layouts), and the scene events (there should be very few) in an external events (or 2/3), that includes each other.
Most of the game logic for your objects are in behaviors.

I hope this was understandable. As I said there are some rough edges - I’m happy to take suggestions or bug reports about them.

the lead dev has decided to straddle us with that is hampering our work

Please let’s assume good intent :slight_smile: I’m spending 100% of my spare time on this engine, mentoring people that want to contribute on GitHub, running this forum, offering this program for free.

I do appreciate your feedbacks, I put it in the roadmap:

We also already have a card in the roadmap about allowing to compose behaviors with others, making creation of new behaviors as simple as assembling others!

I also think it’s a problem of not enough articles on the wiki/examples using the approach I described.
To address this, I will convert my explanations into a wiki article. Most examples are using the simple approach of "everything in the scene events’. This is partially because creating behaviors is kind of new in GDevelop and most people are still making there game in the “old style” as it’s more simple when you get started.

Again, happy to take feedbacks about how to improve the UI to make it more obvious that behaviors can be used like I described.


#18

Thank you. Sorry for being mean. It’s been a hard week and I was getting very frustrated. I will try again with what you have shown me here. Thank you for taking the time to make that. I have done a quick read of it and I will read it side by side with what I am making. I want to see if I can get it to work.