Week 0101 – 5/5/2021

Group Status Report

This week was another productive week! We have added the most important feature for our MVP: the Rainbow shader!!! Aside from that, we also added some less important features like actually making the Scene Graph do things (i.e. applying the transforms down the hierarchy, not sure how we didn’t do this before…). With this, we can finally attach the player, enemies, and projectiles to the world, so they move around it. On the gameplay side, the player can now shoot some basic projectiles, kill enemies, and we added a basic wave system that will spawn enemies. And the enemies will now properly track multiple players, in that they will follow the closest player! Lastly, we found some performance bottlenecks that arose when adding lots of enemies or projectiles (i.e. over 100 or so) that we started working through. We also have a new model: Falling Star! Hopefully next week we can add all these new cool models into the game!

Individual Status Reports

Alex Garza

Concrete Goals:

  • Decide on how to make game objects stick to the surface of a sphere when they move
  • Improve enemy AI to track and follow the closest player
  • Implement more gameplay features like an enemy wave system and projectiles
  • Optimize netcode to enable a large number of enemies and projectiles at once

Goals Accomplished:

  • Expanded enemy AI to track and approach the closest player
  • Enemies now die when they collide with the player
  • Build a Wave-based system to handle spawning enemies in groups to ensure players are not overwhelmed
  • Optimized client side handling of incoming packets
  • Planned out a strategy on how to create the illusion of enemies/players “sticking” to the planet (by using rotation about a pivot point at the center of the planet)
  • Got projectiles working that can kill enemies! (more like helped change one line of code, good job Priyal!)

Justification for unaccomplished goals:

My only unaccomplished goal this week was implementing collision detection with rotating bounding boxes. After discussing this with the team, we decided that we have more important features to focus on and that we can always add more precise collisions later. As of now, our collision detection will be sufficient for testing, and potentially with some fine tuning of bounding boxes, good enough for the final game. We are planning on moving forward with what we have now and only adding complex detection if necessary.

Specific Week 6 Goals:

  • Get a planet (or sphere) in the game and enabling the player to freely rotate around the planet
  • Create Towers that enemies can attack and destroy
  • Spawn enemies at random locations around the planet instead of fixed locations
  • Start using the actual mesh of objects instead of cubes
  • Start considering UI/SFX?? Or other MVP necessary features to start basic user testing

What I learned this week:

This week I learned a bunch about how simple or complex collision detection can really be. I’ve been pampered in the past when creating 2D games or using built in physics engines that abstract away all the logic that can make collision detection super accurate. I also learned about what a Quadtree is from Evan which seems like a really smart way of implementing collision detection, but I think I’ll pass on that until/if we run into issues with our current system.

I also learned that it’s helpful to actually process ALL of the packets the client receives in one tick, instead of just ONE… oops. Sped up our network exponentially and removed any input delay issues we were getting… for now.

Individual Morale:

My individual morale remains high this week! This week I couldn’t focus as much time as normal on the game due to midterms week, but I am still happy with what we got done. Gameplay features are being added super quickly thanks to the structure we set up in the past weeks - I think soon we can have a basic demo ready to start playing which I’m excited about. The biggest hurdle we have left I think is creating the actual movement system for orbiting the planet, but after that it’s just adding features!

Carlos Wirawan

Concrete Goals:

  • Create Towers!
  • Make players shoot projectiles 
  • Bind objects to the planet

Goals Accomplished:

  • Create tower
  • Create projectiles

Justification for unaccomplished goals:

  • Alex, Priyal and I decided to focus on other gameplay stuff first. We decided to make this happen hopefully this weekend!

Specific Week 6 Goals:

  • Focus on making objects stick to the planet
  • Implement more gameplay mechanics, and start implementing game rules for the game.

What I learned this week:

I learned that missing a coding session with Alex and Priyal can cause me a headache! They implemented so many things in just a season!

Individual Morale:

My morale is pretty good, I didn’t do very much this week and I wasn’t able to join Alex’s and Priyal’s hacking session because I had a midterm last week. Thankfully, my midterms are done and I’m ready to hack again!

Cora Xing

Concrete Goals:

  • Color Fallen Star
  • Simplify the Triton Statue

Goals Accomplished:

  • Color Fallen Star, add window decorations

Justification for unaccomplished goals:

  • Had midterm and midquarter commitments so I could not get to simplifying the Triton Statue; at this point I will move on and work on Sun God instead.

Specific Week 6 Goals:

  • Texture windows, roof, chimney, and outer walls of Fallen Star because they are flat planes right now
  • Finish modeling last of the towers and cease to introduce any more models

What I learned this week:

  • Don’t copy over duplicate objects e.g. windows prematurely because that creates extra work trying to select each redundant object to apply material and color.
  • Dissolve faces earlier rather than later. Don’t hold onto extra lines and vertices while modeling thinking that I might need them later on. More often than not, I realize that I actually don’t need them, and these extra lines create face dependencies that are annoying to deal with when I need to remove extraneous vertices.

Individual Morale:

Couldn’t focus as much on modeling this week because of a midterm and other midquarter commitments. My morale is improved from seeing working textures on the graphics end as the texture of the spaceship is closer to how I originally intended for it to look. I’m also excited that we're finally at the point at which we can start rendering the planet, and hopefully placing the towers on the planet soon after.

Evan Laufer

Concrete Goals:

  • Rainbow shader (most important feature)
  • Textures will actually be done.
  • Refactor camera to be a part of the scene graph, so it follows the player
  • Figuring out what other render features I should prioritize next, and start implementing them

Goals Accomplished:

  • Added the rainbow shader. Actually was really easy to add.
  • Got textures done!
  • Refactored the camera and mucked with the scene graph a bit, now the camera follows the player
  • Helped Alex with some performance issues that we were seeing. We fixed the most pressing ones (i.e. traversing the whole graph with strcmp to find objects every frame)
  • After consulting with the team, we aren’t going to prioritize animations, so I started adding particle effects cause we think that will probably be more important?
  • Totally last minute added normal mapping cause Cora's globe object used it.

Justification for unaccomplished goals:

None!

Specific Week 6 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 am worried about random memory errors. Sometimes during testing the game just crashes.... I am going to try to stress test and try to fix these...

What I learned this week:

  • Don’t do O(n^2) collision detection probably.
  • Rainbows are cool and also easy to implement
  • I dislike raw pointers even more than before

Individual Morale:

My morale is pretty  high this week. I’m excited because we are REALLY CLOSE to actually having a working game. Basically all the pieces are there, we just need to finish off the last little touches and we will have some sort of MVP.

Priyal Suneja

Concrete Goals:

  • projectiles
    • for now straight line
    • spacebar for shoot
    • forward vector assuming it looks to the right (that's where the projectile is being spawned)
  • put constants into config file
  • binding objects to the spherical world
  • enemy waves!

Goals Accomplished:

  • everything except binding the players to the spherical world

Justification for unaccomplished goals:

we were waiting for the world to be rendered on the game, which Evan is going to have done soon and so we aim to have that done by Sunday

Specific Week 6 Goals:

  • bind objects to the sphere
  • make gameplay even more complicated    
    • add some logic between towers, enemies and players
    • make enemies also spawn projectiles

What I learned this week:

  • if you make the scale of an object 0, it won’t render on the world 
  • i really enjoy refactoring code
  • projectiles aren’t that complicated! (yet)
  • Evan is in an acapella group called Duly Noted

Individual Morale:

Again, pretty high. It is so cool to see Evan render things and our game logic apply to things that are not just 2d squares. I think we should have an MVP by next week, which will be very exciting as we will then get to focus on making gameplay more refined!