Hello there Everyone

Greetings

I’m Jim. Trying out GDevelop after a string of testing other Game Dev platforms.

I started out initially back in the day using STOS Basic on the Atari ST and then AMOS Pro on the Commodore Amiga (which ought to give you an idea as to how ancient I am!)

I then stopped any kind of programming until about 5/6 years back. I began to see that indie devs were suddenly a thing again and there were inclusive platforms appearing to make the process a lot easier. It reminded me of those earlier days and I began to get back into it.

I initially attempted to use GameSalad, which was functional but limiting. I’m not scared of coding or learning a new programming language, so it wasn’t long before I figured that I could do this stuff in code far quicker and easier. And the price of a proper licence for GameSalad was, well, completely over the top.

I briefly tried out Unity but got terrified by the complexity of the interface!

I then moved to GameMaker Studio 1.4, initially with the free version, then I bought the full package in their fire sale they had before GMS 2 came out. I spent a few years working in GM, even producing 12 episodes of a podcast interviewing fledgling developers. I got a couple of concept projects to a fairly advanced stage, but began to wish I could work in 3 dimensions so I didn’t upgrade to GMS 2 (again, it was fairly expensive to get everything I wanted) - instead I…

Had a proper go at Unity. I did a Udemy course this time and got a lot further. I got a bit of an understanding of C# and finally sort of got to grips with the interface, but…

Everything in Unity takes far longer, and 3D space is so much more complicated. It feels like a climbdown - but I really became sick of all the hassle required to get 3D assets created and working in Unity, even before you could get anywhere with the business of doing anything with it.

I missed GMS because I was getting to grips with it. I was looking at alternatives and found GDevelop. I’m still trying to understand how most of it works, but it is very interesting.

Currently, I’m trying to find out how to do the things I learned how to in other engines. Using GMS and Unity certainly is helping here, but I’m having a bit of trouble often finding all the answers.

I appreciate it’s a different engine altogether, I’m not looking for exact equivalents, but from a couple of weeks experimentation, this is what I’m finding.

  1. Structure.

I know the key to a manageable project is often knowing the correct/efficient/coheasive ways to structure things. The way to organise your events, etc. This was certainly the case in the three previous platforms I referenced above. Right now, I don’t quite know how best to do this in GDevelop. I’m literally still learning what should be in the main scene events list, what external events and functions do and I haven’t touched how object behaviours interact with other events, or how best to use it all.

  1. Use of code.

I know a little Javascript, usually from seeing direct translations of the Unity C# equivalent in old forum posts online, but I’m still new to the syntax.

And I’m really not clear on how to use it in GDevelop. I know there are ways to add code blocks into events, and I’ll be researching that soon, but I’m not clear as to whether this works in the same way as GMS uses code. Can you actually replace a whole load of events with equivalent blocks of code? Or even replace all events with an all inclusive script? I’m not clear whether the event commands are still essential to some part of it, or if you can become entirely sufficient using code? I’m not clear what the intention is - is the use of code there to eventually replace the event system if the user so chooses, or is it designed to purely extend GDevelop to provide advanced functioning tht isn’t possible with the event block system? What is the best way for an enthusiatic individual, eager to use code, but not totally clear on the syntax, or the structuring as per item 1, to learn how to use it effectively in GDevelop?

  1. Seeing the code.

One thing I’d like to know is if there is a way to easily see the code that each block event generates ‘under the hood,’ so to speak? This was a bugbear in GMS with it’s drag and drop functionality. I’ve no idea if this is possible in GDevelop, but it would give me a much greater understanding.

  1. Optimism

Despite my lack of clarity of the above, I’m very impressed with GDevelop as a platform, and the level of sophistication.

It looks like it’s not trying to be GameSalad or Buildbox or any of the ‘codeless’ tools that seem to be purely aimed at making exceptionally simple casual games.

I’m hoping it has got that balance I’m looking for - steady but not overwhelming learning curve, but with the potential to produce fairly complicated games in terms of logic and AI.

All the same, I’m discovering a few ‘gotchas’ in terms of little things. For example, there is a simple way to impliment 8 way topdown movement, but no built in setting to normalise diagonal movement - a newbie error that I’ve made in GMS. It makes me think that the situation in GDevelop might be similar - you can use the built in set commands, but for a really polished finished product, you have to code around or even replace their functionality with custom code.

Anyways, so far, as I said, it’s proving very interesting. And because of the pricing (or lack of it) - I’m pretty sure if I can get to grips with the points above, and it turns out to as fully functional as some people advise it is, it could well end up being my game dev weapon of choice. At least I hope so :slight_smile:

Jim

6 Likes

Welcome to the community!

If you are a familiar with unity, you can compare behaviors to scripts you attach to objects and the event sheet to a Scene Script called each frame.

Code events are meant to be a thing that let’s you not be blocked by missing features. With that I mean to make things the standard events and conditions can’t do. But the entire API used by the event sheet is accessible. You should see every Js event as a function that will have 1 argument passed: runtimeScene, the instance of the scene. From here you can get the Game instance and the objects instances. To do that, use runtimeScene.getGame() and runtimeScene.getObjects("objectName"). The second one returns an array of all the objects with the given name and of all the objects of the scene if there was no name passed. While you should pretty much find the entire API in those 3 objects, There are additional utilities in the gdjs namespace. In the gdjs.evtTools namespace there are many functions that are only for actions / conditions (each action and condition is a function) but sometimes you can find some useful ones.

To see your code, type Ctrl-Shift-I in the preview to open the inspector and open the code.js file. Each file is for one scene.

Have a great day and welcome again!

2 Likes

Welcome to the community, Jim! :smiley:

3 Likes

Many thanks @arthuro555 and @Phenomena for the welcome :slight_smile:

@arthuro555 - yes, I’d been likening the object behaviors akin to attaching scripts in unity, or adding drag and drop actions or code blocks to objects in GMS. I think the great unknown for me is that in both of those systems, and if I remember rightly, in GameSalad to, the game logic is completely played out by the elements you add to objects. Even overall elements of game logic have to added to ‘control’ objects. GDevelop has, in addition to behaviours and logic that can be applied to objects, the main event list that exists and runs regardless what you have in your scene. To give an example, in Unity I could put all the details relating to making a player move in a script attached to the player. In Gdevelop I could do that using an object behavior, but the first beginner examples show you how to add movement and all other manner of controls into the main event list. So which to use, and under what circumstances? It’s little things like that I’m trying to figure out. But, I like the fact that there are multiple ways of doing things - naturally these decisions might just come down developer preferences. some ‘best practices’ guidance/documentation would be a welcome addition for a newbie to the platform like me, but I’d guess it becomes self explanatory eventually.

And massive thanks for the bit of guidance regarding the Javascript. Will be doing lots of research there. Certainly, I can see me gradually utilising code to broaden functionality. Would you say that a very advanced user could probably expect to drop reliance on the built in actions altogether and do everything in code, or on some levels the built in actions have their advantages even for them?

Overall, though, with the bit of extra insight you’ve given me, I’m very impressed with the scope of GDevelop. I can see the huge potential. It is fairly beginner friendly, but I’m seeing the ways in which it can be utilised for advanced things.

Possibly all GDevelop is lacking is an example of a ‘killer app’ to garner a higher level of attention, then the community would probably grow exponentially. Something akin to the effect that Sperlunky, Hotline Miami or Hyperlight Drifter had for GMS. Something that would really make people take notice. Have there been some pretty high profile games already that have been done with GDevelop that I’m not aware of?

Many thanks

Jim

2 Likes

For code usage, personally, I prefer the usage of normal events as they are faster to use than code but Everytime I want to do something a bit more complicated, saving or something doesn’t work correctly after working on it after 10 minutes I create a function with the extension feature to do what I want and use it in the event sheet. IMO you should try to stick with the events when possible but when you just have a quick solution in Js, then use it. I recommend to use extensions functions to keep the event sheet clean and readable. I think I forgot the link for the JS Doc: GDevelop JavaScript game engine

I feel just like you, a really killer game like you say. There are some games that worked well with GDevelop but you can’t say it’s a killer game (Miko’s adventure, lil Bub’s Adventure). But (and it may sound bad/egoistical) I personally prefer the community to never grow too much. I sure like GDevelop and wish it to become more, but this community is just perfect as it is. There are no toxic people, everyone’s nice, there is always someone to respond to questions but questions don’t just disappear in the mass and we can care and take time for smaller games/beginners, unlike other engines where experimented users just don’t/can’t help all the beginners and take some time for them independently from if the code is interresting or complicated, and it’s just everything you do as a beginner or not in other engines seems insignificant compared to the mass and gets lost in the mass, while here we can show everything and everyone we care and they are being cared about :slight_smile:

2 Likes

Welcome, i hope i will be able to play your game someday :slight_smile:

1 Like

Hello all

Thank you @L_e_m_o_n_T_e_a - I’ve no doubt, everyone on here does indeed seem very kind :slight_smile:

And VegaPix - thank you, I just hope I actually get to finish a proper game. I’m terrible for that, I have so many unfinished demos from previous attempts in other game engines!

@arthuro555 - thanks again for your guidance. It’s an interesting approach. I’ll admit, the built in functions are very well designed and logically structured. I picked up right away in GMS that although the drag and drop features were there to draw in the non-coders, it began abundantly clear that to really unlock the functionality of the engine you had to use code. And over time that became easier. I’m getting the feeling that making GDevelop as functional as possible using the build in actions is the actual aim of the exercise here, not to ween people away from it in order to make them coders, but to geniunnely give people a true, functional alternative to coding. Would you agree? I do find it intriguing.

I’m still slightly struggling a little - and it’s not the logic of the built in actions themselves. But I can see I can put conditions and actions in the main scene events list. And Behaviours on an object. I also see the Functions/Behaviours section and the External Events bit. How does it all fit together? I’ve seen a very rough tutorial about turning an event into a function - this seemed to be a simple exercise designed to make the main events page less cluttered, but I’m sure it has many purposes and possibilies I’m yet to understand. But what are external events for? Is there a step by step tutorial or series of tutorials anywhere designed to introduce new users to these bits of functionality and to demonstrate practically why, when and how all these things should be used?

I’m sure a killer game can’t be too far away, will probably be created by someone already active on this foum :slight_smile:

And I do see your point about how a good yet small community has it’s advantages. I always felt a bit intimidated asking questions on the Unity forum (although there were some very helpful people there, to be fair.) At least it’s not like Stack Overflow where being made to feel inept seems to be part of the whole experience! I’ve no doubt I’ll have a whole range of daft, newbie questions to ask on here shortly! :slight_smile:

Many thanks

Jim

2 Likes

I would agree. The point of this is to let people who don’t want to learn programming, like artists that want to change their media, have the video game as an accessible option. It is made to provide the closest game engine to 0-coding. Coding is considered as a specially better thing, it’s even often the other way around where the best are events to keep the event sheet clean.

The engine is a lot about sharing too, that is why extension are a thing. Think of one as a namespace in Wich you can declare functions and behaviors. Behaviors are adding to an object they are applied to the possibility to use behavior specific functions and automatically calls some functions on special events (instanciation of the object, destruction of the object, on every frame etc). Functions are like in programming somewhere where you can write code that can use arguments to be used in many situations. The principle of making the custom made function and behaviors in an extension is that extensions are exportable and sharable.

The event sheet is what you want to be using for most of the logic. You use it to also change the behavior of behaviors attached to objects.

If it can help you, consider each event as a block.

{

}

Now each event has conditions and actions. They are actually function calls. That means for example that the an event would look like this in code:

if(condition1() && condition2(anArgument)) {
    action1(anyArgument);
    action2();
}

When you create a function, you create a real code function that will be either an action or condition and calla le through the event sheet or behaviors or other places.

External events are some events that come again in many scenes, for example when making a platformer and separating levels with scenes, the platformer code will probably stay the same. With platformer code, I mean the code that interracts with the platformer behavior through behavior functions, for example for setting up animations. Sure you could use a conditionless event with a function but this wouldn’t be as clean an understandable. You could imagine them like this: the code is being generated Event per Event. When it comes to a link to an external event, it will generate the code of it and Insert it as the next code block.

I hope I clarified your questions! I also agree with your opinion on developer forums. You can always ask questions! If it is about how to do something specific in the engine consider creating a new post in How do I...? :wink:

1 Like