GoalKeeper 3000
- caderboden
- Feb 2
- 4 min read
Updated: Feb 3
Engine: Unreal Engine 5
Genre: Sports, Tower Defense
Project: Game Jam, Collaborative
Job: Programmer, Lead
Description
GoalKeeper 3000 is a sports game in which the player must defend their goal using objects they can buy with in-game currency. This game was created as a submission to the ScoreJam #37, where the theme was Soccer. The time we had to create this game was from December 19th, 2025, to December 22nd, 2025. It was my first tower defense-like game, so it was a fun new experience.
Video
Pillars
Soccer: As it's the theme of the game jam, we must stay within the bounds of this pillar. Anything that relates to soccer can always be added to the game.
Blocker and Attackers: The player has to defend the goal through the use of other objects and their own body. They have several resources that they can use before each wave to prepare.
Rogue Like: Most of the gameplay will consist of an increase in resources as the level difficulty increases.
Game Programming
Object Placement

Going into this project, one of the key factors in tower defense was the placement of items and their impact on the level. To accomplish this, I had to connect the User interface with different data tables. I find that the use of data tables is a very helpful and easy way to select different items in a large array, as it becomes much harder when you try to make many different items individually. I created 6 different subsections that will be taken into account when adding them to the UI: ID: The Name needed to be referenced when pulling information from the table.
Name: What the Item is called when hovering over the corresponding icon.
3D Object: Representation of what mesh will spawn in the level.
Icon Texture: The texture that will be shown on the UI, such as the soccer ball or trophy
Price: The amount of currency the player needs to buy the item.
Placement: Allows me to referance a object in the table even if it is not a placeable object.
Here are some examples:


NPC Kicking

I found making the NPC kick correctly be the most complicated to program. I attempted different routes to get this to work, such as having the ball in the level and enabling physics when overlapped. The best result I was able to achieve successfully was attaching and then unattaching the object in different parts of the animation. Which also required me to get the exact timing right, or it would go greatly off course.



Directional Vision


A requirement needed to have the NPCs shoot in the correct direction was making it so that upon beginning the game, each NPC in the level would detect where on the map the closest goal was and turn in that direction, as the original intent was to have multiple goals later in the game. I needed to get this programmed to work. To do this, I used a reference to all NPCs that would find the goal actor and face it almost immediately as the level began, so they would appear to be spawned looking in that direction.
Currency, Waves, and Points

I think these were the easiest part of the design process. Out of these, I found Currency the one with the most work, as I had to connect it to the other placement components in the game. With the wave and points, it was a simple creation, as all it consisted of was using a few variables and connecting them to each wave, completing.

Problem | Solution and Lesson |
Last Minute Conflict: Even though we planned this Jam, last minute, a few diffrent things came up that got them pretty busy over the weekend. Due to this, I became mostly the main programmer for the project, and they would help now and then when they could. | This became somewhat overwelming but I didn't want to skip the jam. For future jams, I now make sure to check multiple times before then, so it doesn't result in me mostly working alone on the project expecially if it ends up being an engine I am not familiar with. |
Time Crunch: Getting close to the end, there are a few blueprints that made it very difficult to finish before then. | While I knew that it would be difficult, I felt that we should have lessened the amount of content we should have put in the game expecially with most of us busy during this time. |
Conclusion
Overall, this was a good experience to understand what could happen in a real scenario if extra work would get passed onto me or I run into a similar situation. Referring to the game jam, I thought we made a playable game, but I wasn't a fan of the theme that was chosen, as I felt it lacked a lot of flexibility. Even when seeing many of the games that were submitted, many of them looked almost the same. While I enjoyed working with my teammates, I don't think I would do this specific game jam again due to the impression I got.



Comments