This week, we made strong progress toward polishing the game and tying together the major gameplay and UI systems. The biggest updates included improving the player HUD, adding health and fuel bars, showing teammate distances and statuses, finishing the main menu UI functionality, as well as adding the virus object, merging win/lose animations, improving asteroid behavior, and fixing requested sound effects.
The HUD now gives players much clearer information during gameplay. The main menu also is closer to complete, with role selection, readiness indicators, hover descriptions, and better visual feedback for each player. On the gameplay side, asteroids now explode into smaller fragments that can damage the player and despawn after a short time, which makes the environment feel more dynamic and dangerous.
Our group morale is high! The game feels like an actual game now as we wrap up small details. Within a week, we should have a pretty strong demo ready for Friday. Looking forward to sharing it with the class.
Gameplay (without UI finalized)
Start Menu
This week, we made improvements in both polishing up existing game features and implementing new ones.
We implemented:
Stressed and motivated - we have so many things we want to be in our final product, and only a little over a week left to get them in.
Attempt at fog implementation
Current start menu, with text rendered. Will be updated to look a lot better soon
Current UI, in-world health bars, and healing beam
Updated, scaled mothership model
This week, we focused on visual polish, refactoring the codebase, and fleshing out the game world with more dynamic systems. There is a lot more happening on screen now, and the underlying code is in much better shape.
Firstly, we made significant progress on ship and environment visuals. All four playership color variants (red, blue, green, and purple) were rebuilt with improved geometry and cleaner exports, and the space station item model was completely overhauled with a much higher-resolution texture. A new high-quality planet texture was also added to the game world, replacing the old hemisphere image.
Secondly, we implemented two major visual effects systems. Asteroids now burst into particles when destroyed, using a new particle system with its own custom shaders. The tractor beam also now has a visible line connecting the player to the objects they are pulling, making the mechanic much clearer and more satisfying to use.
We also did work on asteroid gameplay. Asteroids now spawn and despawn continuously during play rather than being static, making the game world feel much more alive. Asteroid color is now driven by each entity's individual color rather than a shared material default, and the Geisel station marker has been placed in the game world as a landmark for players.
We also made good progress on the game's HUD. We planned out and designed a 2D overlay that will sit on top of the game view, containing the health and fuel bars, task list, current inventory, and emergency warnings. The image itself has been created, and we will soon be integrating it into the game and hooking up the interactive elements so they respond to what is happening in gameplay.
Outside of new features, we also did a lot of work under the hood. The model ID system was refactored to use enums instead of magic numbers and preprocessor macros, making the code more robust and easier to maintain., making the code more robust and easier to maintain. Asteroid spawning logic was extracted into its own dedicated class, player laser speed was tuned down, a server tick rate bug was fixed, and Windows networking compatibility was resolved.
Group morale is high! This week had a great mix of planning, collaboration, and getting things done. Seeing the game come to life with particles, better visuals, our planned out HUD, and a more dynamic world has been really rewarding, and we are feeling good about finishing the quarter on a strong note these next few weeks.
UI / HUD whiteboarding concept art.
Players can now tractor beam another player, whether they like it or not.
HUDs vector art, not yet exported to the game.
The HUD that was exported into the game.
Simple thruster particles
This week, we focused on implementing initial versions of the remaining gameplay systems we plan to have in the game. Each of us focused on something different, and there is a lot more the player can do in the game now.
Firstly, we made asteroids able to take damage and be destroyed by the player's laser. Some of these asteroids contain fuel items, which the players can pick up to either use it for a speed boost or deliver it to the mothership to advance the winning objective. The aiming system has also been improved, so players can aim at targets with a crosshair accurately.
Secondly, we added a tractor beam mechanic for player ships. Players can hold a button to turn on a tractor beam, which attracts items in an area in front of the player towards them. This makes fuel collection more fun, and also creates a more specialized role for the fuel collector ship type once we add ship roles into the game.
We also added the task of stealing components from "space geisel" to repair our ship. Currently, the players can do this by dodging the lasers from the four menacing Warren bears and attacking them to make them drop items, which can then be delivered back to the mothership.
There are also now "emergencies" that can happen to the mothership regularly that players will need to watch out for. These can include the mothership catching fire, an alien thief that can steal items, and a space virus that damages the mothership. These emergencies will keep the players on their toes and encourage some players to be ready to defend the mothership while others go complete their tasks.
Outside of the many gameplay mechanics we implemented, there is also good progress in other areas. We added a starting lobby where all players need to ready up before the game starts. We are also finally beginning to add ship materials into the game so that each player has a different texture. Finally, we are beginning to add visual effects, such as a burst of particles when an asteroid is destroyed.
During our weekly check-in meeting, it was reassuring to hear that our group has made good progress and that we are on track to having a finished game. We are halfway through the quarter, and everyone is still motivated despite dealing with the brunt of midterms and sickness. We are still actively communicating with each other and make frequent updates and merges to the project.
Mothership fire event - makes time drop faster
Virus bites mothership and drops time as well
Ships can pull things closer to them with the tractor beam
Very simple debug menu to help with play testing
We are at a good stage of development, so now, we are focused on designing and implementing gameplay. This week, we added a countdown timer, on the server, by implementing text and font. As the game and the client-server system become more complicated, we might end up changing our current implementation of the timer.
For game design, we brainstormed the types of roles each player can choose from, additional game visuals, and specific player tasks. We decided to require four players for our game, and the roles are to be a ship grabber, fuel deliverer, miner, and repairer. The overarching tasks are to fuel and gather key items in order to protect the mothership before the timer expires. We decided that if players succeed in all those tasks, they would achieve the win condition and fly away. The lose condition (if the timer runs out) would be witnessing a planet colliding with the mothership.
Some initial gameplay comes in the form of moving around in space as a ship. The game's collision detection has some updates. We can visualize the collision boundaries, which is especially helpful for debugging. We also improved the ship controls and added more ship physics such as steering, braking, drag, and speed boosts. The ship can now also shoot laser projectiles and have health that reduces upon collision with asteroids. We are also working on a better aiming system, and even an enemy ship in the form of a floating Geisel with 4 Warren bears all shooting lasers at you.
However, now that the server is listening for more inputs from multiple clients, we did experience some bugs. We could not switch between boosting and not boosting, and more concerning was the fact that we had low and lower FPS. It could be an issue with specific operating systems since we want the simulator to run on Mac, Windows, and Linux; we are still working on this issue. Some issues also arose with desyncing of client's frame and server's tick per second depending on the OS / the client's compute capability.
For the game art, we spent this week working out the kinks on the asteroid Blender files. Initial designs were too complex and were not centered around the X and Y axis. This caused some delay and some glitches while rendering in-game. Additionally, with the new and necessary game visuals, we need to pivot and stray away from realistic, hard sci-fi visuals in order to produce more models and have them working in-game.
During our weekly check-in meeting, it was reassuring to hear that our group has made good progress and that we are on track to having a finished game. We are halfway through the quarter, and everyone is still motivated despite dealing with the brunt of midterms and sickness. We are still actively communicating with each other and make frequent updates and merges to the project.
We made a lot of progress this week! And getting to this point required a lot of work across various departments of the codebase. As an overview, we're now able to connect multiple clients from different devices onto a server and control a ship that can be steered using our mouse and keyboard controls. There are additionally some random floating asteroids and the initial mothership design is almost complete.Some incomplete features that have made substantial progress include collision detection / scaling and applying material textures to meshes.
On the graphics and client side, we have to modify the rotation code such that the client would now listen to mouse inputs and make the ship face the direction that the mouse is pointing. This is to follow an intuitive "looking around" feel, which also required adding a rotation component to our client -> server messages. One side task that was also completed is being able to attach child objects to a parent, allowing for world and local transforms where objects would move relative to each other. Finally, we also added a simple 2D UI. Currently it's just a bar at the top of the screen. Clients can now also specify an IP address to connect to in order to reach other machines.
On the server side, the general structure of the game loop and data flow remained much the same. We mainly had to expand on existing code logic to assign client_ids to incoming connections, and send the ids to the clients so each client renders the proper perspective and players can interact with other players in game. One fix made was also ensuring clients could disconnect and leave the game gracefully without causing a crash. Additionally, we updated server game state to be able to handle rotations, as well as some initial collision detention code which seems to be able to work, but is still a little buggy in the collision boxes and calculations.
Finally, on the art side, we now have material textures for the playership models, and the mothership has made good progress. This will help the ships to feel much more detailed and realistic. We just need to figure out how to apply the textures in OpenGL. We also will start to model some of the game environment, such as asteroids.
As a whole, everyone seems motivated to do work. Everyone has put in some hours outside of class time to contribute to the project, which is a good sign as there isn't really anybody who stands out as not contributing. Some people have had circumstances come up and gotten busy, but it's well communicated and those that do fall busy usually make up for it as well. Things are likely also only going to get better as the project starts looking more and more like a game.
This week, we've furthered our goal in establishing a working foundation for our games, and we're very much nearing this part of the project's end. It currently features a fully functional movement and rotation of objects, including a player object that is followed by the camera. Along with this, we've also streamlined our OOP such that the classes and infrastructures used are now exactly what the full game should use.
On the client / rendering side, we've implemented mesh loading such that 3D models from the art side can be rendered; we also made a simple skybox as a background. As also mentioned before a prototype on how the camera should be has also been implemented so the camera will now follow a player. It also now supports rendering multiple objects that the server sends. Some more controls (for testing or otherwise) have also been added for vertical movement and rotation. We've also implemented the logic for a simple UI.
On the server side, we've fully implemented classes and structs such as the server's entities list, which means now multiple object ID, model ID, positions, rotation, etc can be saved such that it's now more rich and able to convey and send almost everything a game needs to the client to be rendered. Furthermore, the communication to the client is now fully implemented to be able to send multiple GameObjects (their entities), as mentioned before.
Other than this, we also made it so our programs can be launched in Windows without WSL, and basic multi-client functionalities testing have also shown some signs to be working in the lab computers.
On the art side, we finalized all the important concept art of the ships and started modelling the player ships and mothership. It was frustrating to customize basic shapes into plane wings and thrusters. Eventually, we completed the low-poly versions for early testing, and at least one of the ships and a test cube is accurately rendered in game.
Overall, this week's work continued upon last week's work in nearly completing the very basic foundation of the game. The concepts from last week have been expanded to now have more complexities and more of them can be saved and rendered, along with the implementation of some small, but very crucial details to the game.
The group's morale for the week has some hiccups, though it's overall still great, as some of us have begun having homeworks and tasks from other classes as we slowly enter the middle of the quarter; nevertheless, we are all still feeling very energized and excited to work on the project and seeing our game beginning to take a very noticeable shape: looking more like a game instead of just code.
This week, we made strong progress in establishing the foundational structure and core systems. The project is a working early prototype with a functional client-server architecture. We successfully set up a CMake-based build system that compiles both client and server binaries, along with a shared library for common data structures and networking logic.
On the client side, we implemented a OpenGL rendering pipeline using GLFW, GLAD, and GLM, including camera controls, shader management, and rendering of a basic cube. We also integrated keyboard input handling and built a networking layer that sends input to the server over TCP while asynchronously receiving updated game state through a separate thread.
On the server side, we implemented a TCP server that accepts client connections, processes input, maintains an authoritative game state using universal classes like GameObject and Entity, and broadcasts updates at a fixed tick rate. We also defined shared data structures (e.g., GameStateSnapshot, InputSignal) to standardize communication between client and server.
Overall, the system now supports a complete loop where client input is processed by the server and reflected back visually in the client. While the project is still in an early prototype phase and lacks gameplay systems, physics, and full multiplayer support, this week established the core architecture for networking, rendering, and input handling that future development will build upon.
Furthermore, this week we also finalized most of the crucial game art concepts. We have an idea of what the mothership should look like, and we are working to finish concepting the player ships. These ships are to look like functional, real life space ships that can defend themselves and the mothership while carrying a few supplies. We are also pulling references and environments from hard science-fiction games like The Expanse.
Our group's morale is high, as we feel energized and motivated to continue developing the project. It was especially exciting to see how quickly we were able to get a working prototype up and running. Watching individual components come together into a cohesive system has been a great confidence boost for the team.