Group Status Report
Week 3 was another productive week for all of us. The graphic team have successfully integrated the models that the art team produced into the game. The server is able to know the events that the client sends to the server now. We have also successfully tested the server and client on the demo machine. Overall, our team is very optimistic about the coming week with a lot of big plans to be executed. We hope to get to the milestone before the midterms start!
Individual Status Reports
Alex Garza
Concrete Goals:
- Create a shared GameObject class between the server and client to share be able to easily share game state information
- Sending actual game data messages between the client and server (i.e position, names, health, etc.)
- Migrate basic game logic into the server and transition the client into basically a terminal to send events
- Basic movement of a player (cube)
Goals Accomplished:
I accomplished all of the above goals in addition to:
- Loading in the scene on the server and converting the coordinates into world space to prepare for collisions/physics
- Designing a standardized general packet for any gameobject to share information between client and server
- Designing our class hierarchy and determining the necessary classes to be shared between the server and client code
Justification for unaccomplished goals:
No unaccomplished goals for the week!
Specific Week 4 Goals:
- A client that sends events to the server and waits for a response to update its gamestate
- Creating a camera that follows the player and has the perspective of the planet from our design document
- Basic collision detection between two cubes
- Spawning “enemies” (cubes) on the server and sending the info to the client to render them
What I learned this week:
I feel like my brain has doubled in size from all this networking knowledge. I gained a lot of practice in Marshalling/Unmarshalling data and sending data through the network. Additionally, I had the opportunity to implement some synchronization/locks when writing the server code – it was really cool to be able to do this in an actual project for the first time!
I also got a lot of experience with learning how Visual Studio projects work due to all our linking errors. I was once scared to see one, but I now have a much better understanding of how to set up projects and how they work.
Individual Morale:
My personal morale is pretty high! We got a lot done this week and have a clear path forward for week 4. I am a bit disheartened that Andrea decided to drop the class since she was a great teammate, but I know we will keep moving forward to accomplish our goals.
Carlos Wirawan
Concrete Goals:
- Create keyboard input class
- Sending actual game data messages between the client and server (i.e position, names, health, etc.)
- Work with Alex and Priyal to integrate the network and the graphic classes
Goals Accomplished:
- I accomplished all my goals
Justification for unaccomplished goals:
- No unaccomplished goals for the week!
Specific Week 4 Goals:
- Create handlers for the client to update local game state after receiving data from server
- Do coding sessions with Alex and Priyal!
- Debug the error for when executing the .exe file when not in debug mode.
- Create enemy spawning and test collision
What I learned this week:
- I learned a lot about visual studio projects and solution
- My memory about marshaling and unmarshaling were refreshed after handling the data sending between server and client
Individual Morale:
- My morale was pretty good, but the upcoming weeks will be very busy weeks for me as midterms are coming. I hope I can still contribute at this pace through the following weeks
Cora Xing
Concrete Goals:
- Texture islands, ocean, Stonehenge
- Figure out proportion of current models to each other; resize assets if needed
- Split up modeling each of the following with Andrea: clouds, Sun God, and the Triton Statue
Goals Accomplished:
- Didn’t need to resize assets since there is a scale factor associated but instead found the bounding boxes of each modeled object; used a Python script to grab object data — origin and x, y, and z distances away from surfaces of the bounding box.
- Started modeling the Triton Statue
Justification for unaccomplished goals:
- Did not texture islands nor ocean; they looked fine untextured and I didn’t want to put more work on texturing on graphics end for things that were nice-to-haves and weren’t a priority
- Did not finish modeling the Triton Statue; I underestimated the complexity of his bearded face, six-pack, and tail 🙂
Specific Week 4 Goals:
- Finish Triton statue, don’t fret over details and just get a basic shape down if need be
What I learned this week:
- What I see on Blender doesn’t have a 1:1 translation onto the graphics engine that Evan is working on ?
- Textures need to be baked to be exportable outside of Blender
- .obj files contain only static model data, and nothing related to material, texture, animation — materials and textures have their own unique files, and animations need to be rigged separately
- I can write Python scripts inside of Blender to get object details; every UI action also seems to have an equivalent Python library method for it
Individual Morale:
- Kind of sad that Andrea left and I keep wondering if we could have done things differently to keep her but the past is the past
- Didn’t have as much as I would have originally liked to have done, and ended up uncovering a bunch of mini tasks that I didn’t expect initially
- Still learned a lot of things this week
Evan Laufer
Concrete Goals:
- Add basic material support so we can actually display the models that Cora made in a color other than red.
- Add basic texture support. This involves refactoring some of the rendering code such that multiple shaders and materials are now supported.
- Try to make the rendering interface a bit cleaner so hopefully the gameplay team doesn’t need to mess with any rendering internals
Goals Accomplished:
- I was able to get the basic materials and lighting done. Afterwards, we realized that some of the Blender features Cora was using involve using the complex blender shader pipeline, which necessitated at the very least adding texture support that we could “bake” some of the effects in.
- Helped with the merge to end all merges, so the rendering code and gameplay code are synced.
Justification for unaccomplished goals:
- I got pretty bogged down in the texture additions, as it required me to refactor parts of the rendering engine to correctly render meshes with the right material and shader.
Specific Week 4 Goals:
- Finish the textures additions!
- At least make the basic QOL improvements to the rendering interface. There are a few low-hanging fruit that are really bad (i.e. at least allow passing in a whole scene to render instead of manually doing each one).
What I learned this week:
- I learned about blender shaders, as well as “baking” them into textures.
- Relearned the classic lesson about the tension between evolving feature requirements and initial implementation: that you don’t want to over-engineer your solution, but that simple solutions can often require more refactoring.
Individual Morale:
- Honestly, down a bit. Pretty disappointed that Andrea left, but I know that she has to do what is best for herself. I am also pretty disappointed that I wasn’t able to get as much work done as I would have liked, especially considering it is already week 4.
Priyal Suneja
Concrete Goals:
- change the server infrastructure so that there is a background thread that receives messages and gameplay thread that polls the messages every tick
- implement synchronization on the message queue
- send data from client to server
- send data from server to client
Goals Accomplished:
- all things mentioned above, which included writing marshalling and unmarshalling libraries and and:
- created the classes and “architecture” for our gameplay
- merged graphics client and networking client
- tested stuff on demo machines
- planned a hike with the group!
Justification for unaccomplished goals:
- no unaccomplished goals this week
Specific Week 4 Goals:
- make gameplay logic more complicated
- add player representation to the client
- start thinking about and programming win/lose mechanics with a single player and enemy
- this might not happen 100% since it would mean adding a tower, player, enemy and giving the player and enemy the ability to shoot and implementing collision detection, BUT we’re gonna try to aim towards adding an enemy and a player, and implementing basic collision detection between them
What I learned this week:
- We added a lot of shared library code between the server and client this week, which led to a lot of linking errors. Learned quite some stuff about how VSCode looks for library files, how C++ include statements work and got some insight into why header-only libraries are preferred by some folks. This was one of the points where the first stack overflow search result was not very helpful, and we had to deep dive into the world of C++ linking mechanics, which turned out to be very enlightening.
- How to implement a locking mechanism where some threads have priority over others. This was a very cool thing to figure out because it sounds like a very obvious thing that people would need, however, C++ doesn’t have any locking libraries that implement this. Again, we had to do some deep dive into C++ lock interfaces, which, I must say, aren’t the most well documented. I’m proud to say that I have finally used synchronization in a real project, and also hope that our code does not have any race conditions (fingers crossed!).
Individual Morale:
- pretty high! This week was very productive, and I am very happy to have team members that are down to code together. we have been getting on calls almost everyday and just pair programming most of our code, which has been good because it helps with finding errors quickly and also prevents extreme frustration because having someone to bounce ideas off of is always helpful. I’m just hoping that we can get to a good milestone before midterms start and peoples’ availabilities become sparser, and that we continue to communicate as well as we currently do.