Need advices on how to build my new game

Hello everyone!

I’ve been using GDevelop for about 5-6 years now. I’ve already made a few games (mainly demo rooms for Escape Games and a digital Escape Game), along with plenty of other small home-made apps for my daughters’ birthdays, the school carnival, and things like that.

But this time, I’m diving into creating a real puzzle game, which will eventually be published on Android and iOS stores.

The game mechanics and structure will be very different from what I’m used to doing, so I’m turning to you to make sure my general development logic is on the right track, so I don’t have to redo everything after making significant progress =p I also have a few questions regarding specific points.

It will be a puzzle game in pixel art, made of different levels unlocked sequentially. Once unlocked, all levels will be replayable and accessible again from a level selection menu (mainly to improve high scores). To cite a few classics that share this structure and serve as my inspiration: Cut The Rope, Where’s My Water?, Pudding Monsters, etc.

To be even more specific, the Pudding Monsters menu is exactly what I’m aiming for: from a single menu, players can access every level across all different worlds just by swiping or using the “Left” and “Right” arrows at the top of the screen.

I’ve already built a prototype with:

  • Scene 1: Developer Splash Screen

  • Scene 2: Game Splash Screen

  • Scene 3: Main Menu (Play, Options, etc.)

  • Scene 4: Level Select Menu

  • Scene 5: Game Board

The main topic I have questions about is: how should I build the levels? How do I map them? When a player selects a “level” from a “world”, I have two variables that tell me exactly what they want to launch. Is there an existing system or extension in GDevelop that handles this kind of setup? If not, has anyone already implemented something like this and could share their approach?

I plan to design the levels in Excel. Following the example prototype below, you can see that I can easily generate a text string that could then be used for mapping:

I went with an arbitrary 8 x 12 grid, which outputs a mapping “code” like this (I won’t paste the whole thing, but you get the idea =p):

w;w;w;w;w;w;w;w;w;;;w;;;;w;w;;;w;;h;;w;w;;;w;;h;;w;w;;;;;h;;w;I;;;;;;;w;w … etc … could also be without separator and with a “n” for example when there are no object to put on a tile.

In your opinion, is this the best approach?

I also have a question about external events. The character (the player controls one single character) will have its own external event, grouping its animations, movement system, audio, “equipment”, etc. Other elements (holes, walls, switches, etc.) will be placed directly in the “Game Board” scene with their respective animations, behaviors (kill player, push player, teleport player, etc.), and everything that goes with them.

Is this the right way to do it? Or should I also create external events for all these elements? More broadly, when should external events be used—for instance, for tutorials popping up at level start, end-of-level score pop-ups, or a hint system…? I’m not entirely sure at what point an event should be externalized rather than kept directly in the scene!

Finally, I have a question about save files. I’ve NEVER made one before =p How do I store player progression, scores, unlocked equipment, etc.? I’m asking from a local device perspective, but ideally, is there a account-based save system available for cross-platform progression?

Sorry for the wall of text =p If you need any further details, feel free to ask! I don’t think specific details about the core gameplay mechanics are necessary here, which is why I didn’t clutter the post any further. But if those details matter, I’m available! Thanks in advance!

Why don’t you load the levels as external layouts? I number the layouts and use the user level number variable to load the corresponding layout. so you have one game scene and create objects from external event user.currentlevel. You can set the grid up on the layouts and it’ll be like you’re doing in Exel. For cross platform progress you could probably use firebase …ive only used it for leaderboards so far though

Thanks for your help !

So in your case, your different levels are already build and then loaded right ?

I am going to have a lot of lvl, like 75-100 for the begining. If I understand your answer correctly, I am not sure it is the “right” way.

you could possibly read all the level info from one text file or json. the thing is that you need to keep testing levels to see if they work and if they’re playable and doable and creating them as layouts is the easiest way to do that. when i did this game there’s a level editor and the levels are saved to firebase as json and you could have all the 100 levels loaded in one json. This game has 30 levels and some of the levels on this were created as layouts and some were created using the level editor and i copied the json text file from firebase

I was actually thinking about adding a level editor sor I can create level “anytime anywhere”.

So your tips could be the way. Thing is I dont know anything about firebase, json and even layouts (never used it).

Any chance you could share some of your work please ?

Thanks again.

these are all things that i didn’t know anything about until not that long ago! Layouts! You’ll wonder where they’ve been all your life! I found firebase a bit of a pain but got there eventually. Even with a brain made of cheese!

I’ve started to take a look at external layout and deal with it.

Just to be sure, you have ONE layout for each level ? That seems huge to me Oo

I don’t know what you mean by huge ….the layouts are just information on where to create a bunch of objects. You could have a structure variable or json and load the objects from that but the layouts are easy to edit
You can duplicate a layout once you’ve set the grid and layers up and if you’ve named it 1 then the duplicate will be ‘2’ and then you move things about a bit

Great ! I thought it was more than just informations and that it would slow down the game by making it “heavy”.

Hi again petlimpet !

I am using a grid on an external layout and its actually working great, like you said ! Thanks.

Now I can easily build levels on my computer (with the mouse, draging objects and then saving the whole layout with a proper name e.g. level 1_1 1_2 etc…

But how could I do this directly on my phone ?

I can off course create a scene “map editor phone” for example and create all the necessary events to drag and release all the needed objetcs on the screen grid. But then, when a level is achevied, how do I “save” it as an external layout and give it a name ?

I’ve checked in the event and cant find anything like this.

Thanks !

Ive never used gdevelop on my phone. I strongly believe it would lead to reduced productivity at work. I created a few levels on mobile on the game above using the games level editor though. The structure variable that’s created when you save a game is saved to the players profile on firebase in a string variable. I basically copied these string variables and put them in an array of level strings in the global variables. You could probably just copy the strings from the games storage file on your phone if you knew where to look, but i wouldn’t know where to start!