My role: Blueprint Programmer
Team Size: 10
Engine: Unreal Engine 4
Language: UE4 Blueprint
Development time: 4 months, 3 hours a day
Space Smack! is a 1 to 4 player party game exploding with chaos and sabotage. Enter into the vast expanse of space and clash in a variety of minigames. In this controller-only game, cooperate or undermine your friends to become victorious!
Space Smack! is a 1 to 4 player controller only party game. Play with your friends locally or online with Steam Remote Play. Smack your friends and relish in your victories as you compete in a variety of chaotic minigames.
The most important job for me in the team is implementing all the functionalities for the player characters. We have two different types of player characters for different minigames: One is a pair of hands and the other is a single hand.
One problem I and our level designers encountered was how to make the grabbing action for the two hands. We want the player to be able to move two hands independently, close two hands on objects to grab them, then move and drop objects to another place.
In the beginning, we simply use the UE4 build-in physics for that. And we realized that was extremely hard to grab and move anything. So we ended up "cheating" and had the grabbed object "sucked" to the center of two hands.
After we had a working two hands character, we made another character with only one hand. We specifically made a single hand for the game is because in certain minigames we do not want the players to grab objects. The single hand was not that a big problem, because it does not support grabbing, and most of the other functionalities we need were already done in the two hands.
Other than making/debugging hands, I also made several minigames. Like Bomb Brawl, which is our only multiplayer exclusive game where players have to push a bomb away from their own areas and try to have the bomb explode in someone else's area. Another minigame I made is our only single-player exclusive game, called Bridge Blitz. In this game, the player has to perform a series of tasks to keep a space shuttle moving.
And I also did the Chinese localization for our game. This was not a hard task since UE4 has some pretty nice features for localization, such as the localization dashboard and asset localization folder. But the translation part still took some time.
Little note: This game was initially designed as a chopstick-theme game, and later the theme changed into hands. So you can see many of the functions/variables are named after chopsticks.
One thing I have to solve is the collision problem. We move the hands by applying velocity on them, and when the hands are pushed against walls/grounds, they start to shake a little and move less smoothly due to the collision and friction. The way we solve this was doing raycast against walls/ground. For example, when a hand is touching the right wall and the player is still pushing it towards the right, it will not add any more velocity to the right direction. Here is some code to show how it looks like.
This is the function that does raycasting to tell if the right hand is getting too close to a wall on the right. If it is, the movement towards the right is not available. Notice that I have to ignore some actors since we do want the hands to be able to push against movable and pickable objects.
There are some other limits we have when we move the hands.
The is XDistance Too Far function is to tell if the hands are splitting too far away, and the Is Relative Position Wrong function is to tell if the right hand is at the right of the left hand. The Is Right Chopstick Close To Right/Left functions is to close at the wall. Therefore, the movements will be only applied when the hands are not too far from each other, have the correct relative position, and have some distance against walls.
Here is how the grab works.
In the lower picture, there are three highlighted volume: Two boxes attached to left/right hands, and a sphere in the center. The sphere will always be located at the average position of the two hands.
In the blueprint above, when the left/right box overlaps an object, I first check if this object is pickable, then check if this object is also overlapping with the other box and the sphere in the middle. If a pickable object is overlapping with all three volumes, it will be set as the target object of the hands, which will be attracted to the center of two hands. At the same time, the relative position of the hands will be locked. So even if the player is only moving one of the hands, the other hand moves together. This is to make sure it is easy enough to grab and move objects.
To unlock the hands and drop the object, the player can move two hands in the opposite direction.
If this Detect Chopsticks splitting function returns true, the hands will unlock and drop the object.
If this Detect Chopsticks Spliting function returns true, the hands will unlock and drop the object.
Everyone was careful about the Covid-19, kept the mask on, and did the test when feeling bad.
The performance was fixed with the effort of programmers and artists.
Most of the tasks were delivered in time.
We were able to finish basically all the features planned.
Programmers and level designers communicated well and made several interesting levels.
Task distribution was very clear thanks to the lead programmer.
Didn't have enough time for Steam achievement.
The game title we decided at first was not available.
Left some localization issues before shipping.
Think of a way to support keyboard and mouse control.
Paid more attention to QA.