Group Status Report
Everyone has been working super hard as usual. Cora created more models including sun god and finalized the falling star. She has also started placing these towers at various locations on the planet. Alex, Carlos and I worked on making the players and enemies rotate around the planet, which took a lot of time. Carlos also put in some really cool sound effects for the bullets. Evan worked on particle effects and Octrees, which means that we can soon make things go boom! We have all been making progress despite things being busy, and it is always nice to see everything work together.
Individual Status Reports
Alex Garza
Concrete Goals:
- Place the planet model into the game and enable the player to freely rotate around it
- Create Towers that enemies can attack and destroy
- Spawn enemies at random locations around the planet instead of fixed locations
- Migrate away from cube models and start using the actual models of the player, enemies, and towers
- Research a sound system and discuss at a high level how we will implement it
Goals Accomplished:
- Planet is in the game and it looks beautiful! Additionally, the player can now freely traverse the planet (W/S to rotate forward and backwards, A/D to turn/aim left and right)
- Enemy AI has been updated to now rotate about the planet instead of rush the player (to prevent them from going straight through the planet)
- Towers can be spawned and destroyed when they lose health. Enemies will approach a tower or player based on whichever is closer
- Goodbye cubes, hello Cora’s amazing models. Everything in the game is now being rendered with their actual models
- Thanks to Carlos, we have a sound system that we just started integrating. Soon players will be able to hear projectiles and enemies exploding!
Justification for unaccomplished goals:
I was unable to complete my goal of spawning enemies at random locations this week. Although I knew getting rotation to work the way we wanted would be difficult, I still underestimated it. We spent 2-3 days trying different solutions from around the internet, only one of which provided the key we were missing. Once player rotation was working, updating enemy AI to also rotate was a bit more tricky than we expected, especially after already having player rotation working. Regardless, we found a solution for both and are really happy with the results!
Specific Week 7 Goals:
- Start placing towers and trees around the planet and making sure the scale is correct (shouldn’t be too bad with the values Cora recorded from blender)
- When towers get destroyed, spawn a particle affect instead of disappearing immediately
- Look into why enemies are rendered with the wrong rotation
- Start tuning bounding boxes to actually be the size of the model
- Spawn enemies in different locations instead of in one spot on the planet
What I learned this week:
I’ve taken a few classes that use affine transformations and transformation matrices, but the applications in those classes were rather specific to the project. This week, I got a lot of experience (maybe TOO much) with creating our own system on how to handle a parent child relationship (a pivot being a parent of the player/enemy) and applying transformation matrices to them. We dealt with issues such as global rotation versus local rotation and when each is applicable, conversion from model to world coordinates, how to best send this info to the client, etc.
Individual Morale:
There were a couple times this week I wasn’t sure we’d be able to implement rotation around the planet the way we originally imagined, but thanks to Carlos’ and Priyal’s determination, we got through it! I think with this final big hump done (I hope), the next features should go much smoother. Seeing the game in the state it is in now makes me excited for the upcoming week, it feels like a real game now!
Carlos Wirawan
Concrete Goals:
- Correct movement of the player on the surface of the planet
- Research sound engine on how to use 3d sound effects and implement it
- Spawn enemy on random location on the surface of the planet
Goals Accomplished:
- Set up the sound engine and make a class for it.
- Worked with Priyal and Alex for the rotation of the planet, aka movement of the player
- Towers can now lose health when enemy collides with it
Justification for unaccomplished goals:
- We were unable to spawn enemies randomly because implementing the rotation of the planet took us more time than we anticipated. I think the hard part of our game is over, we will be able to achieve this goal next week!
Specific Week 7 Goals:
- Configure the spawning position of the tower to be on the planet
- Random spawn position of the enemy
- Enemies follow either the closest player or towers on the surface of the planet instead of following in a straight line!
What I learned this week:
- I’m not very good with matrices, but thanks to Alex and Priyal, I learned a lot about them during our hacking session.
- How sound effects is implemented in a game
Individual Morale:
- My morale is pretty good, I felt a bit sick on Tuesday but I’ve recovered now. I think the progress of our team is pretty fast and I hope to see the same progress until the end of the quarter.
Cora Xing
Concrete Goals:
- Sculpt and color Sun God statue
- Place all towers onto planet and grab positions relative to planet
Goals Accomplished:
Justification for unaccomplished goals:
- Finished sculpting Sun God statue
- Positioned all towers except Sun God onto planet
- Wrote a script to grab dimensions including location, rotation, and scale for each tower relative to the planet
- Did not get to coloring Sun God because fine-tuning surfaces took a lot longer than I imagined, but hopefully coloring will be faster to do given that I have sculpted mesh down fully
Specific Week 7 Goals:
- Position Sun God onto planet and grab coordinate info
- Color Sun God statue
- Tweak topography of planet to make landmasses smoother
- Make coordinate info of towers work in code/config files so that towers appear on the planet in the actual game
What I learned this week:
- There exists a method of creating models called sculpting in blender, where it almost feels like actually sculpting a physical object where I can carve, inflate, and mold an object like clay; I did not know about this previously and thought everything came from making polygonal mesh woops. Was able to learn and apply this to create a model of Sun God where most surfaces are curved.
- Sculpting with a tablet is easier than trying to sculpt while clicking and dragging on a mousepad
- Sun God’s legs are uneven from the back view in real life; the left leg seems to be a lot thinner at the back than the right leg. Also almost nothing about Sun God is symmetrical at all.
Individual Morale:
- Really excited that I learned how to sculpt to an extent and how the Sun God model looks close to the original (although I did simplify the feet -- did y’all know that Sun God has bird claws hidden underneath the mass of vines?)
- Also happy that I have no more models to make (yay!) and can maybe help teammates more and touch code instead of being in my isolated modeling world for weeks
Evan Laufer
Concrete Goals:
- There is still a performance issue when adding a lot of enemies, and a lot of projectiles. Pretty sure this is because we are just doing an O(n^2) loop over every single object every frame to determine collisions. I think that using something like an Octree or BSP could help make this much more efficient.
- Get some basic particles going, namely for the spaceship flames to make it look cooler, and maybe an explosion for when enemies are killed.
- I’m a bit worried about random memory errors. I want to try to stress test things a bit to make sure that we don’t get random null pointers, vector oobs, or other things that will crash...
Goals Accomplished:
- Basically done with particle effects, though I need to integrate them into the scene graph so we can place them with the models, and probably also be able to specify them within the scene json file.
- Started working on the Octree, but just a little bit. Still need to finish large swaths of it.
- Did some basic stress testing, and it seems things are much more stable after fixing a couple bugs that we found late last week.
- Skybox
Justification for unaccomplished goals:
- Things took a bit longer than I had expected, and have also been busy catching up on other class work unfortunately, so I couldn’t spend as much time as I wanted.
Specific Week 7 Goals:
- Polish above so we can merge it to main
- Unsure exactly what else we need on the graphics end, need to discuss it with team.
What I learned this week:
- I learned a lot about different types of particle systems and their tradeoffs.
- Learned how to write an octree.
Individual Morale:
- Doing okay, excited with how the game is looking, though tired from other work as always.
Priyal Suneja
Concrete Goals:
- bind objects to the sphere
- make gameplay more complicated
- add some logic between towers, enemies and players
- make enemies also spawn projectiles
Goals Accomplished:
- binding objects (players and enemies) to the sphere
- added logic between towers and enemies
Justification for unaccomplished goals:
- I was unable to think about enemies and projectiles and add more complex gameplay between enemies, players and towers as a whole mainly because we spent the majority of our time on figuring out how to bind players to the sphere. It took us 3 days of scouring the internet and looking for ways to implement what we were trying to do, but we figured it out. We also spent some time trying to make enemies follow a path on the sphere when they are following the player, which was easier to achieve since we already have the “move” mechanics for the player.
Specific Week 7 Goals:
- make the enemies and players emit projectiles that respect the curvature of the planet
- add more complex logic between players, towers and enemies
- make game more fun!!!
- add more towers and different models that cora has been creating on the planet
- make enemies spawn randomly
- add some sort of “destroyed” effect to the towers, could be either particle effects or different models depending on the health of the tower
What I learned this week:
- A little bit of how rotation works. Alex had to explain a lot of it to me at the beginning when we were trying to make the player rotate around the planet, but I think I eventually digested some of the concepts. At some point he got his 167 slides out so we could all learn, which was extremely helpful. I’m so glad I paid attention in Math 18 so I could understand all the matrix-related concepts we were using.
- That you don’t need to understand how your code works in order for it to work (lol). This is in regard to our enemy rotation code. We had to flip which angles we were using for which axes for it to work properly, but we don’t know why we needed to do that… I guess understanding that can be considered a post-MVP goal
Individual Morale:
- Feeling okay… I’m very happy that we got everything to work, but I don’t know how I feel knowing that I don’t fully understand most of it. I am not used to not understanding the code I’ve written, so maybe it’s something I’ll learn to live with. Very grateful to have teammates who pushed through 4 hour phone calls where we made 0 progress and still were very positive at the end of it. Hopefully we have smoother sailing from on.