

Palmg
Pong Game
Year Created: 2025
Software: Construct 3
Palmg was a super fun project I made for my Rapid Games course. I had one week to design and make this project with the prompt of "Make a Pong Game." It is a single player infinite version of the classic game of pong.
Palmg Design Thoughts


While going through the module content I was getting ideas for what kind of Pong game I would like to create. I liked the breakout version of it the most so once I saw that I started to figure out how to build off of it to create my own style of it. I like the idea of extra balls being added to the game throughout but don’t want to punish the player for not interacting with them. When thinking about a theme I went towards a forest where the ball is a coconut. I think this will fit perfectly as a theme as I can have the player launch the coconut up into a forest of palm trees and get bonuses for hitting trees that have “grown” a coconut. This should allow for both the addition of specific targets to try and hit, and a reliable spawnpoint for new balls to add to the game. I am especially sold on it now that I’ve come up with the name “Palmg”
Initially I was thinking I’d be destroying this forest with the coconut and it would act much like a traditional breakout version. I was planning on adding a fireball powerup that would let the ball overlap trees and take out many in a line at a time. I decided to keep thinking about different ideas because I don’t exactly like the theme of burning a forest for fun, and the idea seemed a little simple.
Now that I’ve got a pretty good idea of the type of game I’m making, how I’m making it becomes priority. I’m choosing to make it in construct because it will be by far the easiest engine to make this kind of game in the amount of time allotted.
The first step in the engine is to create a few of the necessary sprites so once I start scripting I can reference what I need without going back and forth.
Next is to decide how the pong ball will move. I’ve decided to skip physics and go for a MoveTo behavior approach. This option will make it much more controlled and less buggy overall.
The paddle movement is the next to be figured out. I’m also going to use the MoveTo behavior on it. It will quickly follow the mouse X but not track it identically. Will tune throughout development/testing.
Next is the interaction between ball and paddle. I would like to keep the mechanic of angling where the ball goes based on where on the paddle it hits. The way I’m choosing to accomplish this is by checking if the ball is on the left or right side of the paddle, and scaling the direction it will be hit in based on how far to the left or right of the center of the paddle it is.
This method ended up changing during the process when I changed to using Bullet movement rather than MoveTo for the coconuts. Now it gets the angle from the coconut to the center of the paddle and launches it in that direction.
I’m not sure I can make this easily work for every object hit in construct so I may have to copy and paste this math around to each object type which is a drawback of construct, but certainly manageable.
Now that the core mechanics are coming together I’m starting to think about scoring. What gives points? How do you lose? Multipliers? Do trees respawn? Should there be a large score or just a number of trees knocked over? Or maybe the game is just scored by coconuts dropped from trees?
There doesn’t need to be a win condition but the lose condition should scale to be unavoidable to near unavoidable. It will take some tuning to figure out where that line is so I should put a version of it in sooner than later to allow for more time to test it.
I had a lot of trouble with the MoveTo system for bouncing the coconuts. At some point it seemed that it was the engine having some error along with my scrappy version. Basically it was telling me that both X >= Y is true while X < Y is also true. So I abandoned that method and went to a simpler system where each coconut uses bullet movement with bounce off solid objects enabled. Overall this is an easier system to make and use but has some shaky collision at times with the directional bounces.
Once I got the bouncing done properly I could move onto the rest of the mechanics.
The rest of the mechanics:
Spawning more coconuts. This was definitely something I wanted in the game. The idea that its a breakaway game that doesn’t actually breakaway also seemed fun. Having palm trees grow coconuts and drop them when hit was immediately working as an idea when I got it in. No real problems there just had to make sure they dropped properly with collision.
Score was something I wanted so now that I had the amount of hits that would occur I could make a system. Score calculation is pretty simple, coconut hits a tree, add to score equal to number of coconuts on screen. Works well, balances itself. The more coconuts, the harder the game is to manage, the more points you are getting.
How does the player lose? Coconuts getting past the paddle shrink the paddle. Once the paddle has 0 width the game ends (or if there are no more coconuts bouncing but that is uncommon). This became difficult and punished the player for playing too quickly. To offset this I implemented a hit streak system that allows the player to gain back width on the paddle. Every three hits with the paddle without missing a coconut grows the paddle. If at max width the player saves the combo and is not punished for a coconut making it by, but loses the streak.
Potentially I could add special coconuts that grow and give powerups. Powerups could include:
-
Overlap trees - goes through trees hitting entire lines
-
AOE - Hits a 3x3 grid area of the tree it hits
-
Grower - Instantly grows coconuts on trees it hits
-
Double Points - Doubles points for as long as it's on screen but falls faster
-
Double Width - Doubles paddle width for duration of time
-
I’m sure there’s more

