7 days as a Game Developer: Enterprise Software Engineer Experience

I’m a “regular” enterprise programmer, but recently tried my hand at Epic MegaJam 2023. The experience was vivid and emotional. I immediately wanted to share it. Probably, a professional will read the article with his hand to his face, if at all. But the text is more for those of us who are involved in related industries and are partial to games.

Before that had some experience with Unity around 2015, and later in 2018 I did a small 2D game on LibGDX, it’s a small Java engine. Java is my primary language. It was interesting to evaluate a familiar tool in a new role. I've been wanting to get acquainted with the Unreal Engine since the Unreal Development Kit came out, but it never happened.


At the appointed hour, I watched the broadcast that revealed the rules, special categories, evaluation criteria, and prizes, of course.

The theme became known as the Antiquated future.

Day 1: Finding an idea

I made a mind map and started writing whatever came to mind.

I instantly associate “antiquated future” with stymie-diesel- and other punks. At first, it is the setting that comes to mind. It turns out, we set the setting and make a game in any genre. Maybe so, but I found it boring.

I organized the ideas: to the left, what I like less, to the right, what I like more.

On the right were ideas that had to do with the paradoxes of relativity. You can sort of mix up the order of events, like the pole and barn paradox. But how do you turn that into a game, and in a week?

Armed with a pencil and paper, I began to think how it would look in the game.

I came up with this idea:

  • Act 1: A terrible danger® is looming over the solar system, it is urgent to accelerate to near-light speed. At that point, a wormhole to the past will open, where...

  • Act 2: ...it is necessary to collect a powerful artefact or energy

  • Act 3. Trying to go back in time. There must be a chance to miss, then it’s on to the next round

Day 2: Fear of the blank page

Opened the editor, didn’t know where to start. This proved more difficult than with other projects because of about zero knowledge of the subject.

The stupor ended only when I found suitable video tutorials, just about creating a space simulator. Unreal Engine 4 offered the Flying Game template, but it’s not available in the fifth version and I found out about it too late. Now I understand what to do. I’m going through the tutorials. My anxiety has decreased.

Blueprints liked it, I wanted to try it for general development, plus figure out whether to recommend it to non-programmers I know.

Day 3: Adaptation

After the course, the first thing I did was the space itself, the sky sphere. A search brought up video tutorials on the free program Spacescape, which is sharpened for creating such textures.

As soon as the lessons were over, anxiety rose again — nothing worked.

Figuring out how to:

  1. Accelerate the ship to 99% of the speed of light, but no more;

  2. Slow acceleration towards the end;

  3. Gather resources to increase power.

Final Linear Damping growth curve as it approaches light speed

Final Linear Damping growth curve as it approaches light speed

I don’t remember math very well. I was experimenting with function graphs in Wolfram Alpha with hints from ChatGPT. The idea is that Linear Damping grows to infinity as we approach the speed of light, i.e. the speed of light is an asymptote. At the same time, I changed the physics of the ship to a more “space” one, i.e. the ship is accelerating and not slowing down because there is no atmosphere.

Day 4: Solid

I found out that it becomes extremely difficult to collect resources after the ship’s physics changes. You just can’t get to the right place. It blows past. I would like to have ship control and feel similar to Outer Wilds, but there is no time for this stage. I work with what I have.

Planet material

Planet material

For space setting, we need stars, planets, asteroids and the background. The background is ready. Let’s add planets, for starters — as a visual filler-orientation, where to look for resources. I’m not the first with such a task; there are many instructions. The planet turns out to be alive. Clouds fly. I liked the material editor, looks like the same blueprints, all elements and relationships in plain sight. To make it easier to break at the planet, made a field of “gravity” of the planet, the properties — the atmosphere. The ship gets inside, it has increased Linear Damping.

Faced with a situation: I repeat the actions from the lesson one to one, in the original — works, my implementation — not. I redid it three times, and restarting the editor helped. All I could do was throw up my hands. A week of work in Unreal Engine 5.3 showed that the tool is reliable, but sometimes it crashes with an error or behaves unexpectedly. The software's complexity makes it impossible to achieve absolute reliability. Especially with the continuous addition of new features like Nanite.

Day 5: Time to scatter rocks

Around the planet, let the asteroids roll around. I like them a lot, as you can see from my previous experience with LibGDX.

An unreleased asteroid game

Found a tutorial on how to create lots of randomly scattered asteroids using an Instanced Static Mesh. This thing adds a bunch of instances of the same model while saving resources. The result, in static, looks as intended. I took the boulder from the Quixel Megascans library, free to use in Unreal Engine.

Now the animation, the asteroids should rotate. Together, in orbit, rotation turns out, but not separately. Again found a video, and articles on the forum, but still not working. Another 3 hours disappeared, the asteroids are rotating, but... After spinning half a turn, the asteroids froze. The reason was the frame-by-frame increment of the Rotator, the maximum value of which is 360. The solution was to use the Combine Rotators function.

To interact with specific objects in the scene, there must be a way to place a reference to the object in a variable. Okay, google it, and look for instructions. In Blueprint, we create a variable of the desired type and select the default object for it. But when the variable type is “Object Reference”, the object selection in the drop-down list is not available. I got it when the variable type is “Soft Object Reference”.

I increased the distance between planets for resource gathering to add acceleration and deceleration. Now you can’t see them, it’s not clear where to fly.

Now it is the time to light the stars. I added a sphere and overlaid the material with the texture of the sun. Turned down the brightness of the glow of the material, next to fly now difficult, even burns the eyes, but lets the player suffer a little.

Day 6: Issue with collisions. Removal of the main blueprint.

There is no time for the second and third acts, and even the first one has to be reduced. The end of the first act is the appearance of a wormhole and flying through it to the next level. According to the idea, this happens at near-light speed. You need to create an object in front of the player and accelerate it in the appropriate direction. Otherwise, the player will not have time to notice anything. This is the speed of light, yeah. How to get the direction is already clear from the work on the ship, and vectors with turns are remembered from Unity. It was not so difficult to instantiate objects from Blueprint. For debugging, I made a spawn on the middle mouse button and forgot to turn it off.

From the depths of centuries
I tried to rotate coordinates with matrices in Pascal in 2006, but it didn’t work. About 5 years after that I read an article on the Internet, and it “clicked” — I got it! But I had already lost the source code, and I didn’t want to remember Pascal again.

Next is the momentum. We take the speed of the ship and give acceleration to a fresh wormhole. The speed of the ship multiplied by 1.0001 to appear. It slowed down a little and “crawled” on the ship. Put the Linear Damping at the wormhole a little higher than the ship, so that it could catch up.

Now it’s just a matter of getting the event of the ship crossing the object. It’s not so difficult, as it is already familiar with the collection of resources. I run it; it doesn’t work. There is no intersection. Or there is, but right at the creation of the object... After spending four hours and trying dozens of combinations, I got the desired behaviour. I used a special channel (Object Channel) to filter events. Without it, either impulse or intersection worked.

At one “beautiful” moment, I removed an extra node from Blueprint. I don’t know how, but I deleted the main Blueprint! I decided not to use a version control system for jam because of lack of time, not to deal with Git LFS or even more so Perforce. Did a backup 2 days ago. That’s great. It’s not in the recycling garbage can. I tried to restore with file restorers — no file, and another deleted file was found and restored. Looks like it was a glitch at the level of the file system or the SSD itself.

Having already resigned myself to it, I went to look in the project folder. Autosaves, by default, save the last 10 changes in the Saved folder of the project... I went to drink some water (and, of course, more coffee).

Day 7. Time to collect rocks

Last day, I added a stub to the second level describing the idea and got to work on the UI and sound. There were no problems with the text and a couple of customization buttons. I finished the gameplay and tested the build by 7 pm.

Sent it to my brother. He also tested and asked to add a third star and make them different colours; have a possibility to invert the Y-axis in the control layout and change the reverse to “brake”, because it is too difficult to fly to the planet, too much inertia. The first two things did: the inversion of the axis brought to a separate button. Now everyone can fly as he is used to. But I kept the reversal: without it game completely loses the challenge. I only increased the gravity field of the planet three times as a quick solution. Initially wanted to add the gravitational field of the star, weaker, but bigger.

Need a model of the ship, as before I used someone else’s. I’ve run Blender a couple of times before. It’s installed. Let’s try it.

I open it, my mind is blank — I don’t remember what to do here at all. Okay, back up. The web version of SketchUp, I was designing my dream house there. It’s not working again, emotional overload. Sighing, I open a dusty virtual machine with a 20-year-old 3D package.

Flying brick

With closed eyes: close the curve, extrude into the volume, mirror, and adjust the edges — flying brick is ready. Separate elements made engines and inserts in them. Inserts are needed to make it easier to assign the material of the included engine. I don’t know how to do it with a whole model; there’s no time to figure it out. Exported to FBX, Unreal loads everything in IKEA format, i.e., individual elements. I combined everything except the engine inserts into one model and manually placed it inside the ship blueprint. Assigned materials and made slight adjustments to the gas pedals. The result was a successful test flight. Almost successful, again there are problems with collisions, and the time before the deadline is 7 hours. Instead of one resource-gathering event, we now have three. Of course, one is the ship and two engine elements. I disabled collisions — the collection is fine, as it should — one event for everything.

The sound remains. In the jam’s description, found a couple of jam's sponsors, one gave to download sounds pack, and the second offered to watch online. I spent 10 minutes on the selection — time pressure — but I planned to spend at least a day on the sound. Materials about game development broadcast the idea that sound is almost half of the experience in the game. And I appreciate the good sound, but no luck. Customized for an hour, the quality — on the principle of “at least some sound is better than no sound”.

From the depths of centuries
18 years ago, I sounded a passing spaceship (in a vacuum, of course) with a vacuum cleaner. Couldn’t find it, alas.

So, 2 am, I think I’m done. With a sigh of relief, started the build... And got an unknown error. WHAT?! Restarts, reboots, searches, reading logs. The problem is with the MSBuild version. Was installing modeling software and broke it, probably. I updated it in Visual Studio Installer — it worked. I exhaled.

Assembled, tested, passed. It works. It remains to figure out how to send. There were almost no problems here. I made a description, page, archive, etc. A couple of screenshots. A short video on YouTube 30-60 seconds — no problem, flew, recorded through the built-in Windows overlay Xbox. Have used it for screen recording many times, but this time is special. So the video appears as a black square with the actual video as a square inside. I didn’t understand the reasons why, so I cropped it in the video editor. It turned out crooked, but I don’t care anymore. It’s too late. In the end, I met the submission requirements at 3:40. I can sleep now.

Epilogue

The jam session provided a pleasant and refreshing experience, helping me temporarily forget about chores and global concerns.

No surprise happened. It was not possible to make the Interstellar alone in 7 days. I won’t give you any advice on how to participate in game jams. There are plenty of them on the Internet.

I suggest that everyone can try Blueprints, it’s a cool thing. Next time I will do it myself in C++. Unreal Engine uses a garbage collector — I hope it will be clear to the Java developer.

0
Subscribe to my newsletter

Read articles from Ivan Dubashinskii directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Ivan Dubashinskii
Ivan Dubashinskii