
Ho Ho Sombrero
Welcome to my devlog for the game āHo Ho Sombreroā
At the start of December, the āNew Horizonsā game jam came on my radar. Even though Iād already done two huge game jams in November, and wasnāt really looking to do another, the theme just resonated with me: make a game thatās positive and about new yearās resolutions.
This is the game I made for it. Below you can read all about how it came to be, why I made certain decisions, and hopefully itās both interesting, fun and educational to read :)
Whatās the idea?
Well, yeah, that was a real problem. I was quite busy, so I wasnāt able to come up with some semblance of an idea before the jam started. I waited one or two days, but nothing really came to mind.
So I started brainstorming. Quickly I realized I wanted to do something with āeggsā: they signal a ānew beginningā, they could be a metaphor for your wishes/desires/dreams coming true, it felt fitting.
But it felt too āthinkyā. I already did some puzzle games recently, and didnāt want to add another one about collecting/hatching eggs.
I kept brainstorming. Then I realized that I didnāt have much time left and should do something simple. Something silly. Something āchildishā, perhaps.
Thatās when I wrote down the second idea: youāre just trying to keep something in the air. (When it touches the ground, you lose.)
A few minutes later, I realized I could combine these ideas:
Youāre trying to deliver eggs from A to B
You must keep them in the air, because theyāll break if they touch the ground.
And that became the initial idea!
Making it unique
Delivering stuff, or keeping it from breaking/falling/dying, isnāt new to games. So I wanted a twist on the concept.
Eggs have quite a unique shape, making them really hard to catch, bouncing all over the place. This indicated (to me) that this should be a physics-based game, with proper eggs that realistically bounce around.
Instead of just grabbing an egg and moving it ⦠the player has no hands!
In my head, I envisioned this concept of:
Players have huge rectangular heads
Use them to bounce the egg up, keeping it from hitting the ground.
Until it falls into some egg basket ( = itās delivered)
So I made that. And then I realized: this is way too hard.
I tried the following things:
Make eggs bigger => good for clarity, but thereās a limit here, after which the screen just becomes an ugly mess :p
Give eggs slower gravity => fixes the issue, but makes the game feel slow and boring, and doesnāt match the player speed
Make players way faster => again, fixes the issue, but thereās a limit after which players are just zooming around the field and you donāt know whatās going on
Make their head bigger => yes, itās easier to save eggs, but only if itās so big that the proportions look very weird
Give them something else, like a racket or frying pan, to save eggs => actually a great idea, but not as the core concept of the game, more like a powerup.
Then I realized I was thinking the wrong way.
Why does it have to be the playerās head? Why canāt it be a ⦠huge sombrero?
I gave players a huge disc on their head, and the game instantly became more fun and playable. (The 3D model comes later, for now itās just grey cylinders and cubes.)
But it wasnāt enough. Yes, you can save an egg from falling ⦠but you canāt steer it. The eggs keep bouncing however they like, and you just have to hope they land in the right spot :p
Luckily, the āsombreroā theme gave the answer. If I add a round āballā or āhillā in the center of the disc, you can use that to send eggs whichever way you like.
And thatās how we got here:
Players are just a huge sombrero, mostly flat, but with a ball in the middle.
Eggs do nothing special and just follow physics laws.
Your job is to keep them off the ground and make them land inside the egg basket.
Creating Eggs
I knew I wanted many different types of eggs with patterns on them. (Like chocolate eggs you eat during Easter.)
The inefficient way to do this, would be to duplicate each egg, assign a new material, and repeat the process 20 times.
The efficient way to do it, is this:
Grab the default cube in Blender
Scale down the top face
Give it a subdivision surface modifier => now it looks like an egg!
However, because itās still just a cube, the UV-map is easy to work with!
I created a texture with the pattern for each egg, in a neat grid layout.
In the game, I simply offset the UV coordinates to select which pattern I want.
This way, we only need one model and one material, yet we can get infinite visually appealing eggs!
Destroying Eggs
I also knew I wanted a proper break animation when eggs hit the ground.
Again, we can do this quite easily in Blender:
Activate the āCell Fractureā add-on.
Duplicate the original egg (with the right UV coordinates)
While selected, SHIFT+R, search for the fracture add-on, and click it.
Apply it. (You can play with the settings, but I saw no need.)
Now you have an egg divided into several chunks. The original UV coordinates are maintained, so it still looks the same.
All the extra faces that have been created needed to be mapped again, so I just gave them all a solid color. (The same as the egg itself.)
I imported this to Godot, generated a collision shape for each mesh (using Godots automatic tools for that), and put mesh + shape inside a RigidBody.
Now I had an egg ⦠but scattered among 8 separate bodies! Which is what I wanted!
When an egg hits the ground, we instantiate the āBrokenEggā scene, with the same position/rotation as the original egg, and the same pattern.
For an even nicer effect, we apply a random force to all the parts, to really scatter it.
Cool! Iāll have to check in with performance as the game grows, but it seems fine for now.
Level Layout
I struggled with the layout of the levels ( = world/arena you play in).
Hereās the thing:
Eggs shouldnāt fly off-screen all the time. They should be contained within the level.
But adding invisible walls is annoying, as you donāt know exactly when an egg will bounce, or where players can move.
But adding visible walls, well, obstructs what youāre doing (and looks ugly).
After some thinking, I realized I should integrate the walls with the level design.
What do I mean with that? I should create an environment around the level, that looks natural, but has the extra purpose of keeping you locked in. So, not an invisible wall, but a series of blocks and trees and other things that donāt look out of place.
In fact, I found this crucial enough to work on right now. (While testing, it became really annoying really quickly that eggs would bounce against invisible walls and I didnāt know where I could walk.)
Having never done something like this before (in fact, this is one of my first 3D games), I just gave it my best shot.
The good news? Yes, it works way better! You know exactly where the level stops, eggs bounce back predictably. (The invisible wall is still present, just farther away, to catch the eggs that really go flying.)
The bad news? It doesnāt really look great ⦠yet. This might be because of:
Colors
Lack of actual environment (trees, rocks, etc.)
Scale (it feels like the tiles should be two times bigger, to match better with the players and eggs.)
But those are worries for later, letās continue with more essential stuff!
Remark: For those wondering how I did this. In Blender, I just gave the cube some grass on top and dirt pattern on the side. Then I duplicated the cube a bunch of times and made adjustments: a slope, a steeper slope, etc. Exported it, turned into a MeshLibrary in Godot (there are tutorials for that online), and used that in a GridMap to draw a semi-random environment.
Obstacles
Creating this level did give me an extra idea though. Why give the players a flat, blank, rectangular playing field?
Isnāt it way more interesting if the field itself also had certain obstacles, variations, items that you might use?
There could be a slope that bounces eggs in a less predictable way. There could be a pillow you can shove around, which can safely catch eggs of course. There might just be small rocks and plants that can get in your way when walking around.
It would bring more life to the arena, both in visuals and gameplay.
So far, Iāve just written down a list of ideas, but havenāt implemented anything yet. I donāt think thatās the priority right now.
The simplification step
If youāve read other devlogs of mine, you know this step always arrives: we have a basic concept, we have many possibilities/ideas that could be fun ⦠but we canāt throw them all into the game and expect people to understand it.
Letās simplify instead.
Step 1: powerups
One thing this game surely needs are powerups (or something to change physics properties and play with them). But I donāt just want to randomly place some floating icons in the level.
(Why? It would require players to learn even more icons. It would be random, players have no say in what they will get. It would feel tacked-on.)
Instead, letās make the eggs the powerups!
Hereās the idea:
There are different types of eggs. (Indicated by their color/pattern.)
If an egg breaks, it reveals its powerup. Now it becomes a floating icon of that egg, and you can grab it.
If an egg is delivered, well, nothing more happens.
Why do I think this is a good idea?
Breaking things still gives you a way forward. (Helps with the theme of āpositivityā and ānew beginningsā)
Thereās a strategic choice here: do you want to deliver an egg, or break it for its powerup?
Thereās only one list of things in this game, and thatās the list of eggs that can appear. Their icon/pattern/color stay constant. (In fact, Iām thinking about teaching nothing up-front, and just showing the eggs currently in the game in the top-right corner.)
Step 2: buttons
Over the years, Iāve learned that every extra button is one too many. (At least, if youāre aiming for accessibly, family-friendly, coop games like I do.)
So I want this game to be playable just by moving around (and thus learning the arrow keys/joystick on controller).
However, actions like jumping or dashing seem quite essential to a game like this. So I still want to add them and make them easy to execute.
How do we do that? Well, we make actions (that need a button press) powerups as well!
You can only jump once youāve grabbed the jump powerup. When you have it, the icon appears above your head, plus the button you need to press.
This means no explanation up-front, and a constant reminder in-game if you can do something.
Iāll have to see if this isnāt just annoying (because you canāt jump if you donāt have the powerup), but itās a good idea to keep for now.
Step 3: summarizing the game
Letās do a check for simplicity by summarizing the game.
Objective? Deliver X eggs.
How? Move around and hit them, so they donāt hit the ground, but do land in a basket.
They hit the ground? They break and their powerup can be grabbed.
Any other input is shown when needed. What eggs do is shown in the corner (for all eggs chosen for that particular game.)
I think thatās quite simple enough.
The physics-control step
And as with all physics-based games, there comes a time where you must take some control back into your own hands and restrict the physics system from doing stupid stuff.
(Completely realistic physics are, in most games, not fun or interesting at all.)
These are tiny things that made a huge difference for this game:
Whenever an egg hits something, its bounce is increased. (By quite a large factor.)
Not just that, the upward component is also increased. (So eggs will mostly bounce up into the sky, giving you more time and a clearer view of where they will land.)
Their maximum speed is limited, just in case something odd happens. (Donāt want eggs flying off the field with the speed of light!)
On egg baskets, all bounce code is turned off. (Otherwise, eggs could easily bounce out of it again, or hit the rim and fly all the way across the field.)
Players have a way higher gravity than eggs (or any other elements).
Thereās no realistic damping. Player movement is dampened/stopped quite harshly using my own code, otherwise you get a āslippery slidyā player controller that just makes this game impossible to play.
Thereāll probably be many more things as we go. These are just examples of what you can do to make physics-based games a bit more controlled, instead of random and frustrating.
Creating the content
And nowās the moment where I just buckle down and implement all those ideas I have. Throw everything against the wall and see what sticks.
This means:
Drawing a unique (recognizable) egg pattern
Assigning some powerup or specialty to it
Revealing it when the egg breaks + making it āpickupableā
Creating the functionality in-game for it
Repeat a bunch of times, until I run out of ideas. (Also, preferably, the egg pattern would be a hint towards its functionality. The jump egg gets an arrow pointing up, for example.)
Casual Testing
While doing this, I constantly test the game of course, which yielded the following observations.
Levels & Environment
About the level layout and environment ā¦
If weāre going to spend so much time creating an environment around the arena ⦠why not make the whole arena a unique environment?
The game could have a handful of ālevelsā: one in the desert, one in the forest, one in the city. Each would use that same GridMap as before for the whole thing, and then add new models on top.
This way, I can also get more creative with my boundaries. Instead of āinvisible wallsā, the boundaries of the level could just be buildings, or a tree line.
(Also, I updated the core tileset to be bigger and have more saturated colors, and it already makes it look way better.)
Core Gameplay
Getting the egg inside the basket is really hard. (No matter how big I make the basket and your sombrero for controlling the eggs.)
The basket is also quite high right now, which means itās easy to misjudge, ending with eggs just hitting the side and breaking.
When I make the sombrero model, I should also make sure it has the same hitbox as an actual sombrero. Why?
The ends curl upward a bit on sombreros, which would help keep the eggs on your hat.
The bulb in the center doesnāt have perfectly vertical sides, they are more gradual, which also helps with controlling egg bounces.
Often, it feels like Iād want a way to deliver the egg in the air (like a hoop it should go through)
And that it might be more fun if the level wraps around: both eggs and players simply teleport to the opposite end when they reach the border.
The last thing I was constantly doubting was: āshould the sombrero be high off the ground (so that it stays above baskets and catches eggs earlier) or very low to the ground?ā
In the end, I took the second option. Otherwise, eggs that were already low to the ground simply could never be saved. Additionally, the higher your sombrero, the harder it was to gauge where it actually was and how it would intercept the egg.
So, your character is now just this tiny cube, with the sombrero directly on top of that :p
Conclusions
#1: Yes, with a bigger sombrero, with a better hitbox, controlling eggs is quite doable now.
#2: Level wrapping (things that go off at one side, reappear at the other) was a great solution ⦠until I added the sombrero as a separate physics object. Now Iād need to teleport two bodies, which are linked together (with a ājointā) ⦠yeah, thatās asking for trouble.
I also planned a powerup where you could throw your sombrero, which made the level wrapping definitely a bad idea.
Iāve given up on the idea of ārandomly generated arenasā (so with the egg baskets, cannons, etcetera at random locations).
#3: Instead, I will create ~5 hand-made arenas, where I manually place everything and itās fixed. This way I can find creative, fitting ways to add bounds to the level and add special rules and variety to each arena.
#4: The sombrero is attached to your head with a loose joint. This means it wobbles when you move (which is just fun), but it also means that it realistically adds extra power to eggs!
(When they land on the sombrero, it dips down a bit, then shoots up, adding extra force like a spring. The more an egg lands on the outside, the more force is added ā again, because of the real-world concept of leverage.)
So Iām definitely keeping that and making it a core part of the game.
#5: The sombrero only interacts with eggs. It can go through terrain, egg baskets, other players, etcetera, without issue or collision.
Why? Because you otherwise couldnāt get anywhere (at least without bumping into stuff and being stopped and having to jump your way through). The game flows so much better when you can just position your sombrero anywhere you want.
#6: Some of my powerups change physics on nearby eggs. The most efficient way to do this (by far) is to use Godotās Areas for that and turn on āspace overrideā (with the new physics properties I want). Holding the button? Turn override on. Released it? Turn it off again.
However, it wasnāt working. And I couldnāt for the life of me figure out why.
Then I stumbled upon this comment by someone in the Q&A forums: areas are only updated when they are moved. From my own tests, Iād concluded that areas are NOT updated when you change their space override (toggle on/off).
So I had to change it to the following: the area override is always on. However, the size of the area is set to 0 when itās not active. Additionally, whenever something changes (button press/release), I move the area by a random (tiny) amount to force it to update.
A bit annoying that thereās no clear documentation on this (or an easy method to mark an area as ādirtyā), but at least I figured it out.
Arenas
Okay, so, what do we have now?
A wide variety of eggs can appear
You can balance and push them quite well with your sombrero
They can be delivered into a basket or smashed to get some powerup.
This means that arenas are the final remaining āessential thingā. (After that, itās time to start looking at polish, such as sound effects, prettier graphics, minor fixes, etcetera.)
As usual with these games, I wrote a list of āwhat each arena needs to be goodā:
Unique color scheme and decorations. (Arenas should look and feel distinct.)
A natural way to block off the edges.
Either a special (general) rule ā¦
⦠or a special way of delivering the eggs. (Just dropping identical egg baskets in every environment is not fitting nor interesting.)
And then I brainstormed until I had an answer to all of these questions. It doesnāt necessarily need to be a good answer or the final answer, just something to try for now.
It yielded some interesting ideas for arenas ⦠just not sure if I have the time (or 3D modeling skill) to pull it off :p
For example, Iām thinking of adding āEaster Islandā (you know, with the big stone faces dumped into the ground) and āCloudy Babiesā (set in the clouds, storks holding towels/cloth, your egg must land in there). Thematically speaking, awesome. Attainable? Not sure.
But the only way to find out is to keep working and see where we end up.
Quality of Life
There are always many, many ways to make the game clearer and easier. And they usually only pop up if you actually test and play the game for quite some time (in different situations).
This is what I found:
We need an indicator on the ground that shows where an egg is going to fall.
Similarly, an indicator when an egg is off-screen.
We need outlines around eggs.
A ceiling is also necessary, otherwise eggs can fly super high and you never know when they crash back to earth.
An interactive menu would be great: one that teaches you how to move around, because you need to move to a spot to start that level. (Itās more work than a traditional menu, but itās miles better. It means the game starts right when you launch it, not only after clicking some menus. It teaches the game, without taking extra time, or it feeling like a tutorial.)
More Physics Annoyances
Today I implemented my special sombrero powerups: throw it like a frisbee, put it at an angle, etcetera.
To do so, I need to
Destroy the joint that attaches the sombrero to the player
Position and rotate it correctly
Add the new joint (if needed)
Oh boy, this was a pain. The basic version was working within a minute: create the specific joints (that attach sombrero + player) at runtime, allow destroying the old one.
However ⦠this only worked when the player was at the perfect starting position (0,0,0). And once a certain joint had been chosen, switching to a new one later (by e.g. grabbing that powerup) created all sorts of weird glitches.
Remark: I was also being stupid, as I forgot to write the line of code to actually remove the old joint, instead of just checking if there was one. Thatās why I was confused for 20 minute as to why joints didnāt do the very simple thing they were supposed to do: there were 2 or 3 joints acting on the body simultaneously.
In the end, it came down to what it always comes down to with physics: they are updated in a separate step, which means it might take a frame (or two) before the physics are actually correct and lined up.
So this is what I ended up doing:
Grabbed powerup? Remove the old joint, plan the next one => we wait a few frames
Check the planned joint
First, we position the sombrero correctly for this specific joint. (For example, the regular one is just at the top of our head, with no rotation) => we wait a few frames
Now create the joint and set the right parameters
Removing a joint takes a frame to update. Forcefully setting a physics body position takes a frame to update. Thatās why there need to be pauses between all these things.
Iām sure there is some way to just say ābody.force_physics_update()ā to get it immediately, but I couldnāt find it after searching for hours. (If itās not there, it should really be added. At the same time, thereās probably a reason itās not implemented then ā¦)
Of course, if the player moves during those pauses ⦠the joint is added at a slightly wrong position! So, while the joint is āsettlingā (thatās what I called it in the code), the player canāt move or rotate.
This means youāre locked for a few frames, but itās short enough to not be noticeable.
(The alternative is hard-resetting the sombrero to the correct location every few frames. But thatās very resource intensive and opens up many more troubles, so letās not do that.)
But, after all of this, we now have a bunch of fun powerups for throwing, slanting, repositioning your sombrero. (And they all have some wiggle room, so they look bouncy and react realistically to the eggs.)
Nearing a playable game
Menus
I decided to make the menu interactive. In fact, I decided to simply make that āone of the arenasā.
(So itās built from the same GridMap, follows the same physics rules, etcetera. Only, instead of playing the game, you can log in walk to a spot to load that level.)
This means that I just need to make that arena and add the functionality to complete the āmenusā part of the game.
(A specific button opens up settings, but thatās basic stuff like āVolumeā and āFullscreenā. A pause menu in-game would be nice too, but that also wonāt be much work.)
Iāll start now, but obviously need to wait until I have all the arenas to finish it, because at the moment I only have basic grass tiles.
Solo Mode
Using custom-made arenas, means I canāt really scale them based on player count. That means I need to scale them to allow 4 players at most ⦠which means it feels really big and empty when youāre playing single player. (And that makes it near impossible to play.)
Thatās why I decided to give you two sombreros!
On keyboard, you simply control the first with arrow keys, and the second with WASD.
On controller, you get a button to switch between them. (Might also allow moving the other with the right joystick, but not sure how easy that is to execute for players.)
Tutorial?
I decided to make the first arena a ātraining groundā, based on my experience creating multiplayer games the past few years. Yes, it feels like a āboringā start, but I know it will be the āperfectā start for new players.
This map has some rules and mechanics omitted:
Eggs auto deliver. If you can keep them in the air ( = so they donāt break) for 10 seconds, they are delivered.
When eggs are broken, they donāt spawn powerups. (In other words: special eggs and powerups are disabled.)
Iāll make sure the maps are ordered and numbered so players will start with the training ground.
The next map will then add some rules:
Eggs must be delivered into baskets.
Powerups spawn, but only a few simple egg types are enabled for the moment.
The map after that will add more unique eggs, and so on, increasing difficulty as we go.
How are these things taught? Although relatively effective, Iāve grown to despise hitting players with a āfull screen image tutorialā at the start of a new level/arena. It breaks the flow. They wonāt read it all. (Probably, someone will skip it and say āheck, letās just play!ā)
Instead, each arena has a small image that appears when you come close. It tells you:
The name
A thumbnail of what it (roughly) looks like
Any special rules or newly added mechanics to watch out for.
Thatās all the tutorial needed, and thatās all you get.
Some more help & variety
Although itās now quite doable to control the eggs and keep them from breaking, this also means some of the variety and challenge is gone.
I realized I often really wanted to jump to an egg. Or dash towards it. Things you only get when that powerup appears.
But ⦠we can also give this functionality to you through level design!
If I simply place ātrampolinesā in the levels, you can use those for some jumping. If I place ādash squaresā in the levels that boost you in that direction, you get the same idea.
This does mean, though, that levels get a bit fuller and shouldnāt be so flat.
The current method for checking ādoes an egg hit the ground?ā was, well, just a rectangle on the floor that checks if the egg hits it. Thatās not possible anymore if the ground is all bumpy and uneven.
Instead, Iāll change it to this:
Thereās a separate GridMap called āFloorā.
Only eggs that hit the Floor are broken. (The other GridMap is used for the edges, environment, decorations, etcetera. No fun if those break eggs too.)
Additionally, they only break if the collision normal is pointing upward. (In other words, they fell down on it, instead of hitting e.g. the side of a tile, or a ceiling of something.)
Itās not precise, but then again, physics games are never precise. There will be eggs hitting the floor that should break, but they donāt, and vice versa. But if that only happens 1% of the time, weāre fine.
Some doubts
Right now, we have a perfectly playable game, with two arenas (training and forest) and a menu.
But ⦠itās not great yet. Sometimes itās very boring (youāre just waiting for a few seconds until an egg finally comes down), at other times itās near impossible (itās really hard to aim eggs and get them where they need to go)
Another annoyance are the edges and corners of the map: eggs often get a bit āstuckā there, and it takes a while before theyāre really sent back into the level.
Hereās how I sought to fix this:
I increased the gravity scale on eggs (from 1 to 2, to be specific). This made them fall down way quicker, which just feels better and a more accurate tempo. (To compensate, all bouncing forces on the eggs are stronger.)
The bouncing force on walls is stronger in the direction towards the center of the map. Basically, this direction is artificially made more important in the physics.
The bump in the middle of the sombrero was increased in height and width, allowing you to catch and steer eggs more.
Delivery locations for eggs have a slight force field around them, pulling eggs into it.
I should design maps to always have something in the corners to prevent eggs getting stuck there. Something as simple as a tree, or a slanted stone, would make the bounces more varied and towards the center of the level.
Although these are great improvements, it does feel a bit like applying band-aids.
Maybe I should rethink the core idea of the game and be a bit smarter about that. Some ideas:
Not necessarily an easier way to deliver, but more consistent and something you can improve at over time.
Start off with easier shapes to work with, like a perfect sphere or a cube?
Different methods of delivery: the easiest one is really easy, but only gives 1 point. Harder ones give more points.
An extra rule about how often an egg bounced? Or how many different players it touched? (For example: an egg can only be delivered after X bounces. Or it becomes worth more over time.) => a good idea, but it would be too much for beginners to learn, so itād need to come in a later arena anyways
A quick playtest
I was able to do a (very quick, 15 minute) playtest with someone else. These were the results:
Yes, very fun game, easy to explain and start playing! (And making the extra button an optional thing that appears later was also great.)
But ⦠just slightly too hard to deliver the eggs and control them.
If I donāt manage to make this easier/faster, Iāll have to lower the number of eggs needed. (First arena took 4 minutes to clear, second 11 minutes. For games like these, 5 minutes per level seems to be the sweet spot.)
(And some stupid major issues because I left in debugging code from a few days ago :p)
It just made me realize that controlling the egg will always be a bit chaotic, no matter how big I make the sombrero, or which shape I pick. Thatās what you get with realistic physics and lots of sloped shapes (like, you know, eggs).
So instead of trying to fix things this way, we just need to explore different routes:
Make delivering easier: bigger locations, easier to reach, more of a safety net around them.
Introduce other elements (unique player roles, environment, etc.) that are a certain way to keep an egg safe or send it somewhere.
Iāve learned that itās useless to try and predict (or logically reason) what will work best for your game. So Iām just going to implement a bunch of things and see what feels best.
Swapping the eggs with other shapes => mostly spheres and cubes are more predictable
Making eggs bigger/smaller => the current size was randomly chosen, maybe the game is much more fun in a different scale
Making the egg baskets way bigger => smaller ones still exist and they yield more points per egg. (Iāve created 1x1, 1x2 and 2x2 variations.)
Replacing the baskets with holes in the ground or hoops in the air.
Remark: I also added a ākeep insideā body on top of the baskets. This is a one-way body, which means once an egg goes through it, it canāt get out again. This nicely keeps delivered eggs inside the basket, no matter the rotation, no matter the speed of the egg. Makes a huge difference for such a simple thing.
Results from trying stuff
Observation #1: yes, delivery locations matter a lot.
Making them bigger makes the game considerably less frustrating
Instead of placing them on top of the terrain, itās much better to have them as a hole in the ground or in the air. Why? When on top of the terrain, they restrict the space (canāt walk through them), and any egg thatās close to the ground is basically impossible to deliver. In a game where stuff falls down to the ground, it feels only logical to place the destination in the ground.
The āforce fieldā around egg baskets is great ⦠but it needs some finetuning, as itās now sometimes too obvious (or doesnāt help at all).
Making āeasyā and āhardā baskets, with different point values, is also great. Ensures people can play according to their skill level. Gives an interesting choice, rather than letting the egg randomly lead you somewhere. And just makes sense, as not every location is equal. (And somehow makes the level look better ⦠more focused, or something.)
Observation #2: yes, different shapes (such as a perfect sphere) are easier to control ⦠but thatās all there is to it. It doesnāt make the game more interesting or fun. It also makes it harder to see what type something is.
But, to implement this, I made a general script that could swap the egg shapes to anything I want, at any time.
So I tested mini eggs and huge eggs. They were both quite fun, in their own ways! The huge egg provided a great amount of clarity and consistency, so they might become the default.
Observation #3: one of my ideas was to set the sombrero at an angle by default.
Itās already a powerup, but I thought it might be a good default setting, as it helps you steer the eggs. (As opposed to a flat sombrero that just bounces it up again.)
But ⦠itās too strong. It makes the game more difficult overall (if a slanted sombrero is all you have) and looks ⦠wrong.
So, instead, I loosened the joint between player and sombrero. It can now angle much more (as a reaction to eggs, or your walking) which accomplishes the same thing: it will frequently be at an angle.
Also makes the game more fun, more lively, and helps steer eggs in specific directions.
Observation #4: I also happened to see another game (where things flew through the air, in 3D) which did something I hadnāt thought about: show a white dotted line from the thing to the ground. (So perfectly vertical.) This is a great idea, as it gives players a much better sense of where something is going to land, and where it is in space.
Adding a visual guide like this (without changing actual gameplay) also made the game easier.
So maybe Iām going at this the wrong way: instead of constantly trying new gameplay stuff, I should just focus on giving as many visual guides as possible?
More Arenas
With my gameplay worries sort-of soothed at this point, it was time to finish the content for the game:
The last powerups ( = egg types)
Actual menus and UI for everything
And more arenas.
Things to keep in mind:
Place delivery locations inside the ground (like holes) or on the walls (in the air)
Place stuff in corners to prevent things from getting trapped there.
After a few days, Iām now able to say something about that process.
I ⦠was very tired (worked a lot the past year), didnāt feel motivated, and was frustrated by my lack of 3D modeling skills and weird physics bugs that kept happening.
So I did finish most arenas (5 of them in the end), but I wouldnāt say Iām extremely proud of the work or the game in general.
I also made a unique soundtrack for each arena. (A unique melody of 1-2 minutes that loops in the background.) I actually wanted to be a musician when I was young, so even though Iām not that experience with mixing/recording music, writing some good songs comes very naturally to me.
And thatās when my time was basically up.
I had to finish the marketing side (basic logo, screenshots, game page)
I had to finish the menu so that each arena could actually be chosen (and you saw a preview)
I had to fix some leftover bugs or frustrations. (Such as a specific powerup not working consistently.)
And the game had 0 particles or animations at this point, so I had to add at least some of those.
To finish the devlog, I will therefore state the lessons I learned and how this game could be improved.
Lessons for the Future
Lesson #1
Lesson #1: mind your perspective. Because this game is in 3D (whilst all my previous games were 2D), I was constantly surprised by how hard it was to see something. I had to re-do many models, placements, sprites, UI just to make sure it was all visible from the perspective (and zoom level) we were at.
You just canāt think in the same way as 2D. Iām starting to grasp the basics of 3D modelling and level design, but still not really there yet ā¦
Lesson #2
Lesson #2: actually design your levels while implementing mechanics (and before making models for them).
I thought it would be smart to code and test/balance the mechanics first, and then build arenas around that.
But, as it turns out, you just donāt know if your mechanics are fun and balanced and flexible enough, if you donāt have real levels to properly test them.
So the balance (in speed, power, bounces, level size, etcetera) is all just based on my default test level, which was just a grey plane of a random size. When I started creating later arenas, I constantly noticed I wanted more space, and I shouldāve included mechanics to keep eggs āsafeā for some time or teleport across the map, and that my requirements had changed.
The reason I immediately started making models when creating new arenas, was simply because of the game jam time restriction. Itās better to first sketch the arenas (manually, or with grey cubes and spheres), test them, and only create the final models and textures when youāre satisfied.
Lesson #3
Lesson #3: 3D is still hard and not that suited for a āshort gameā. Even though Iāve designed my workflow to be very efficient (which also comes with experience), I still spent way more time on this game than I wanted. And most of it had to do with the simple fact that it was 3D, so the models took longer, there were more settings/dimensions/physics issues to work out, etcetera.
Everything is just longer and more difficult than 2D, which means even the simplest of game ideas will probably take longer than you want.
Even though I want to grow my 3D skills and work towards full-blown 3D titles in the future, I might stick with 2D for now, especially on my āgame jamā or āone week gameā projects.
Lesson #4
Well, here I just want to put my thoughts for a possible āimproved versionā of the game.
More life and variation to the arenas. (The models there are only bare bones. The essentials for functionality. None of it moves or is animated. Only a few variations.)
Bigger arenas (only slightly).
To compensate, give players a way to combat the space: move faster, teleporters, keep eggs safe, delay the arrival of eggs (by turning off a cannon, for example)
This could be built into the arenas
Or additional ārulesā or āplayer rolesā within the game
Better UI, sprites, and helpers to show the type of an egg or powerup. And where it is or where itās going to come from.
Movable obstacles within the level: ramps to deflect eggs, pillows to catch them before they break, a bowl to just collect eggs.
- I really wanted this from the get-go, as I think itād be a great addition, but didnāt have the time :(
An actual loss condition (or more interesting win condition). Due to the jam being about positivity, there is no way to lose and breaking eggs is actually quite a good thing. But that does destroy much of the challenge ā¦
I think this game could be a really strong party game (local multiplayer, 1-4 players) that sells for 5-10 bucks. But for that to be the case, a significant redesign would be needed, and Iād need to significantly improve my 3D modeling and general design skills.
As I already said, Iām quite tired of working very hard this year (on many big game projects), and the amount of hills to climb for this game is a bit too much.
So donāt expect this improved version immediately after the end of the game jam. But thereās a good chance itāll come, in 6 or 12 months time.
Remark: I only just realized ⦠the solution to my āeggs and players get stuck in cornersā issue ⦠is simply to eliminate corners entirely xD How did I not think of that sooner?! Just make the levels circular! Well, way too late now, but in the improved version I will certainly do that.
Remark (one day later): yeah, now the solutions are coming. Too late, brain! The arenas should have been egg-shaped, obviously, and sitting on top of a sombrero. Extremely thematical, and would solve almost all issues I had.
Conclusion
Thatās it for the game jam version of this game. If I make the improved version, itāll get its own devlog, as I imagine the amount of work (and significant changes) is big enough to warrant it.
Hopefully it was fun or interesting to read. Tried the game? Let me know what you think.
Until the next devlog,
Pandaqi