Post-mortem - DWA - My GD experience for my first finalized prototype

Hello People.

I have recently finalized my prototype Dickwurst Adventure, and I would like to post a bit my contact with Gdevelop, to sort my though, maybe it also helps some people around.

About me:

I am a mid-life father, with few spare time. I studied embedded computing, worked a lot in railways. I used to play pen & paper RPG a lot, both player and master, and sketched sceneries myself as master. I also played lot of and prototyped boardgames. I like to cook without recipes, but inspire myself what I see here and there. I like to build things the way, no matter if it’s a game or a furniture, learn and create system.

I have a functionnal ADHD/ASD prediag, which means that I have a layered non linear thinking, with lot of attention for details assimilation, and I am quite used to use things the way they were not planned for and workarounds, for instance I used excel formula (not the macro/VBasic) to do management tools in the work, which sounds crazy for lot of people. I am used to failure and retries, and my frustration tolerance is quite high. However, I can get very disappointed if I feel limited by the tools.

Of course I love videogames, and enjoy now more game with a bit of management or RPG, which have not too long gamespan, that you can pause anytime. I used to try unity >10 years ago, made some prototypes, enjoyed the C#, Linq and Objectsazion of things. I gave up on unity when I was in a previous complicated relationship, because it was impossible to focus for long enough in a row.

When I heard about GDevelop in AMaze festival (in 2024 I think), and it’s promise of taking on lot of complex layer, particularly the multiplayer one, I felt I should gave it a try. I have regular remote game evening with old friends of mine, for instance Arkham Horror CGG (storys with chapter of 3-5 hours of game), and I though having a video game in this direction would be great for me. Before starting, I watched youtube tutorial in my lunch breaks, and I felt confident with the engine.

My previous prototypes with GD, and why I didn’t worked:

For the first prototype, I picked up the hex-based builder example, and wanted to make a god-game/terrain builder with Giants similar to Reus, but with hex. Placing and moving the giant around, moving/rotating camera, having a placing cursor for building went very fast. However, I became quickly frustrated because of the buttons present in the example, with variant and the management of custom objects children which are not visible in the editor but visible in the event sheet. I was very confusing for me and gave up, saying to myself that custom object will be not my thing for the moment.

For the second prototype, I decided to pick something easier, so I decided to make a mix of dice rolling and civilization, where the faces are supposed to represent regions & buildings. In my mind, I wanted the dice faces to be singles flat 3D objects, on which the building are added as 3D sprite, so you have a cool animation that when the dice stop rolls, it flattens and you see the building on it. The 3D logic (3D rotation particularly) of GD drave me crazy, and I exceptionnally tried to use the help of AI which made the things even worse, so I gave up on this prototype too. However, it felt nice to see GD update about direction vector appeared exactly at this time.

For the third prototype, I decided to pick something even more easier, having watching the hobbit film few days ago, I thought it would be nice to have a game which allow to create maps like the one of the book/film. So I decided to create a game close to terrascape, with hex placement, building card drawing, where you get points depending on what is in range of the building you place, and you can some neighbouring building into a super-building. I took on the previous lessons, kept on 3D sprite for the board, and 2D sprite for the UI. I was able to implement the placement system, the condition for scanning things in range and score. However, the group management behave buggy if you use structure. Plus group variables are automatically transferred from group elements to group, which duplicates variables if objects belong to several groups, and made very complex to assign an object to several group with different variables. I also wanted to have a way to have the same sprite object and game stats on the card in the 2D UI and for the placed building in the 3D world, but having this transfer revealed not easily possible. Both issues being discovered at the same time convinced me to stop this prototype. I was particularly disappointed with the group issue.

I started to thought that GD was not for me, and that this was a waste on time. On the other hand, considered my lack of free time, starting to learn a new engine felt to much time cost that I didn’t had. So I didn’t knew what to do.

Starting Dickwurst Adventures:

There was the birthday of my stepdaughter coming, I knew she liked hidden folks and some other search games, and I thought OK, with my knowledge of GD, I may be able to make a search game were her cat that she is fond of will be the main character, where the sprite would be done by myself on basis of paper drawing. I usually nickname the cat ā€œdickwurstā€ (german ā€œlarge sausageā€), so I got my game name. But, contrary to all my other prototypes, this one had to be finished on a fixed deadline (the coming birthday).

I started sketching a few pictures of the cat, and some furniture in isometric view, on some standard notebook with lines/squares. I decided to exceptionnally go with AI to get the lines removed without damaging my painting, but it was way more complicated than expected. I still had to rework the pictures with GIMP a bit for transparency and separation in sprite, but once I had the workflow, it was quite fast.

Doing the audio was quite smooth too. I used 1 bit dragon with a midi/MP3 converter for the music, and phone records of the cat.

I picked as GD basis the 2D RPG example, the one you talk to character which disappears. I copied most of those mechanics. With this, the moving of character around was alread done.

The first part of making the game, was to create a challenge, where you can wins things, like a skill test in a P&P RPG. This part was made in quick and dirty mode, and went very fast.

Then there was the part about having the level objects around and click on object. The Z management quickly became dirty, but as I had limited time, I accepted the glitches with it. I started to create my own custom behaviours in hope to make things clean, and I still had this group variable issue in mind. My first understanding of behaviour makes me believe it could be close to object in computer language, but it is not, because instance of a behaviour only access itself or parent behaviour, and you cannot catch all objects with a behaviour by any way, which make very complicated to create clean classes which works together. I thought some tricks, but it was quickly limitating (see topic).

As said move was already managed by the example, and also the animations. Other animation management was easy.

Then I had to implement the interactions, I used custom behaviour here again, but I felt dirty, because I had to put some of the actions of the behaviours in the event sheet (ex: check if behaviour have string of this value, then do this). Still I managed to create the interactions, some easier than other.

Doing the metric management gave me a bit of difficulty, not because of the management itself (I created behaviour but I could have used globals), but the position of the object where unclear when I was trying to create VFX. I solved the problem by switching the VFX on different layers.

I also created a small waypoint system for the NPCs to move around, with a timetable. It was without behaviour, only event sheet and group, and it felt not re-usable.

To be noted, I received lots of help in the discord and the forum, which I am thanksfull. I observed that I got more adequate answer from the community (mainly ZeroX4, but not only) than from the GD staff. It surprised me a bit that when I presented things from official examples, there were commented as not adequate.

I delivered the game 1 week late (browser version), it is clunky but still enjoyable, however it needs out-game instructions.

My experience and opinion:

I still don’t know if I will recommend GDevelop. As in every engine, there are pros and cons. Considering I am planning a new project, I will assume I somehow like it.

Those were my personals for the Dickwurst Adventures Project:

Like:

  • Love Management of player controller, movement and animation, shaking, 3D flip, tweens, buttons through established behaviour
  • Custom behaviour are very helpful, although limited
  • Active community and help
  • No code, I first I was sceptic, but I realise the added value that I take less mental ressources, more adapted for a busy guy like me
  • I appreciate that you have several way in the event sheet to create the same event, with different order of selection.
  • Lots of easy visual effect integrated native in the engine

Don’t like:

  • Behaviour cannot accesses to other behaviours (even same type), making them very, very, limited
  • Behaviour object don’t have array
  • You cannot search object by behaviour, you have to create group, with manual add
  • Instance selection and research in editor not easy, particularly in level with lots of instance
  • There is no way to create static string or number for the event sheet, meaning that you are very prone to typo issue when managing string
  • Positionning is not easy to manage where outside the base layer
  • Debugging is difficult
  • Group management have lots of bugs (variables, naming of object, …)
  • Linking have no ID or tags
  • Some issue/limitations which are known should be clearly documented, for instance that ā€œonly onceā€ will not repeat for each object of a loop.
  • It seems quite common that people use global string for transferring message from one object to another, or similar use of variable, that’s not mine.

The game:

Note that the game was conceived for one person only.

Here the link:

GD games Link

  • Walk around to find stuff
  • Click on object to interact with them
  • If an object become gray, it is inaccessible for some reason, maybe it is to high
  • You can climb on furniture by interacting with them. You can jump down by clicking on the furniture you are
  • If you start a challenge, you have to beat the target (Ziel) by drawing gems. Points you make over the target gives bonuses. If you have drawn to gems with ā€œ!ā€ sign, you automatically loose the challenge no matter of your value, so be cautious when drawing new gems.
  • The games end at 0 Energy. The score is chaos multiplied by food, so a good balance of both is more points than a min/max.
  • Human gives bonuses if you do things around them.
  • The clinking noise is the food automat being activated.
  • Some things may appears on specific conditions, search for it.

Hi That was an interesting read! But I think that it it could benefit from a few screenshots of the cat action!
Starting your press release with the words ā€˜post mortem’ is the sort of thing that i’d do! lol,and reading your biog i recognized myself in there a bit …eg…

I had a quick play - love the artwork!
It does need a visual indication that you can click on objects and also an indication of the objects that you can click on.
I think that the movement should be isometric. I don’t know what you’ve used movement wise but i think it needs changing. I don’t particularly like isometric movement but players will expect it when placed in an isometric room. The collision judder needs sorting out, possibly by not having the cat as the object with the collision mask and instead using a hidden object and lerping the cat position to the position of that object.
When you’re on an object like a bed you expect to be able to move about but you can’t. I can think code wise why you have done this, but you need a visual indication that you now you can’t move up,down,left,right.
I think that this is great though and I wish you all the best with its development!

one additional thought is that it feels very cramped for an introduction to the game and it’s mechanics. Perhaps it needs a hallway as an intro where you learn the mechanics of the game with less objects to think about. I did love that the humans were just legs btw - bit like the old ā€˜tom and jerry’ cartoons.

A lot to parse here, but I ran through it to give some thoughts based off my own experiences with the engine. I think a lot of the points you put make sense, although some of these I don’t necessarily agree with.

I’ve asked for context on a few in hopes that it makes it easier for the devs to understand if they look in on this thread.

Agreed. Extensions in general (including functions and not just behaviors) being hyper-focused on being portable, rather than allowing extensions to interact more directly with the project if they’re meant to be private extensions, has always felt extremely frustrating or limiting.

There was a lot of conversation about this back in the day but the general viewpoint was that having another way for extensions to behave, at the same time as the variable system was changing, would cause too much confusion in the newer developers at the time. There was also a lot of thought that custom objects would solve for some of this, but those are still much more complex (and portability focused) than just letting the behaviors see each other and the project itself. I hope this gets re-evaluated at some point.

I’d probably need examples to comment on this more specifically, but I know a ton of work has been done on object groups over 2026 and specifically the past few months, so I wouldn’t be surprised if some of the underlying feeling here has since been resolved.

This specific example in the wiki (which is the documentation) has included guidance around trigger once and per-instance behavior for years. Although it has been expanded upon with alternatives in the last year-ish. If you have other examples that might be more specific it could be helpful on contributors or the devs on getting them updated.

I would have agreed with this one last year, although this one should have become easier lately, they made the instance panel much more condensed so there’s less scrolling, and added a search too.

Do you mean in the properties or as a variable in your extension? Extension variables should support arrays just fine, as far as I can see.

If you mean string variables, this is generally true for all engines, and I’m not sure how you’d solve this otherwise. You generally do not parse a variable’s value into a type ahead, because the variable’s value can change at any time (especially via events).

If you mean something else I’m not sure what you’re meaning here.

Not sure what you mean here either. Can you add more context?

Positioning is the same on every layer. Unless you mean the camera position? Each layer has a unique camera, which is generally the same on all 2D engines. Usually you just sync up the camera positions if you need things to be placed the same on those layers. Might be misunderstanding what you mean, though.

Yep, agreed that having some way to categorize an object link could be helpful.

Either way, congrats on your prototype!

Edit: weird, I originally went through the post in order and responded to each in order, but after posting it they reordered my responses/quotes? Either way the responses still link up with the quotes above.

Thank you very much for your feedback. As said it was more to share my experience than to advertise the game.

I agree that the game lack of visual feedback on what you can interact with, and why you cannot move when on furnitures (you’re supposed to jump form furniture to another, but only walk arounf when on the ground), and that a tutorial would have been helpful.

For the movement, I just picked the movement from 2D RPG example without asking me questions. I was happy it worked.

And some screenshot:
Early version with 2D RPG example remains:

Sitting on a table:

Eating some food

Thank you very much for your comments, I will try to clarify my points.

I will submit a feature request here, I have no big hopesm but I think there is way to improve without jeoparding the closed portability concept.

As far I have experienced, the issue related to array and structure is still present, and if you rename an object it disappear form your group.

For this kind of thing, I would have expected this to appear clearly in the GDevelop engine Event creation, when I select this condition.

Well, the things is that if you have lot of instances stacked, it is very hard to pick the one you want. You select at best, a large group of instance, and you cannot unselect object which are not in front (Z), or only as a square selection. Maybe by multiple selection, the instance list could be reduced to the select object list. I will submit here also a feature request.

The type ā€œarrayā€ or ā€œstructureā€ is not in the list of the possible type for behavior properties for an object behavior.

To be clearer, I use in other language something like in C:

static enum interaction_types = {
 None=0;
 Hide=1;
 Push=2}

When you call your value, you cast interactions_type.Hide in a variable of type interactions_type for instance. This way, if the typo is wrong, you directly have a compile error called at the right line, so you don’t have to search around where you have a typo error. And unity had it too, it even gave you a choice list for the property if you used the enum type.

I had issue when trying to create custom object inside 2D fixed UI at position based on the position of an object base layer. I scratched my head a while, and I had to use a workaround to set the new object on another layer than the fixed UI, I cannot say now what was made wrong.

I will put a feature request too here.

Thank you very much for your comment.