Brandon’s Update: Week 9 (06 June 2017)

Concrete Goals

This week, my concrete goal was to make the game feel better while playing. This involved working on UI elements, making movement smoother, finalizing unit orientation, lasers, and attack sounds. I prioritized fixing game-breaking bugs and stabilizing features. I was not inclined to try anything super ground-breaking.

Accomplished Goals

I accomplished pretty much all my goals for the week. I solidified unit orientation, laser-attacks, attacking sound, and many other stability fixes. I was also able to add in new UI elements for units and cities, as well as create a new UI for the research system, which Ethan will be able to utilize.

Unaccomplished Goals

I think I accomplished all of my goals (and then some!) – I would consider this past week to be extremely productive. Plus, I got to relieve some of that CSE125 stress

Next Week’s Goals

Only a few more days left. I learned a lot about the current state of our game during the Dry Run. This week I’m a little busy do to both CSE125 and CSE191, but I plan on fixing the bugs revealed during the dry run. The most pertinent is a framerate issue for remote clients. We have gathered a list of issues on GitHub that I am going to address.

I’m also going to do my best to constantly battle any thoughts of new features that the team (including myself) might have. We need to focus on ‘MVP’, not ‘OMF’!

This Week’s Learnings

This week I learned a little bit about particles, how the FMOD library works, and more about how our orientation systems work. Other than that,  I can’t say that I learned that much. I was just chuggin’ along, as usual.

Morale

My morale was a little low at the beginning of the day. I was pretty apprehensive about how our game would compare to other teams’ demos. However, seeing how much fun my team had playing our own game definitely raised my morale. It’s all about the learning and fun, it’s not a competition. only slightly a competition.

I’m super excited for the demo day ^_^

 

Brandon’s Update: Week 8 (30 May 2017)

Concrete Goals

Once again, I found my concrete goals revolving around cities. This time, I was tasked with enhancing unit production. My primary goals were to create multiple unit types, have them cost resources, take time to build, and queue. As usual, I also tasked my self with general maintenance and game-improvement tasks.

Accomplished Goals

Unfortunately, I wasn’t able to accomplish all my goals. I did do a decent amount of bugfixing and added the ability to create multiple units. I also made units cost resources, queued them, made them take time to build, and added a leaderboard UI. (Although I didn’t accomplish everything, it was still productive!)

Unaccomplished Goals

Unfortunately, I wasn’t able to put as much time as I wanted doing general maintenance and overall improvement. However, from a feature-first perspective, this seemed like a good week.

Next Week’s Goals

 

We are getting close to the finish line. Next week, I want to drop all of my own personal ideas and help move things along wherever they need to be moved. Specifically, I predict working on the trading system UI, the audio, and making the game experience a little smoother (I didn’t get to spend any time on figuring out what was making our game stutter. I want to fix this. The game in its current state is not good demoing material)

This Week’s Learnings

 

To be honest, I don’t feel like I learned much this week. Just the usual software engineering grind.

Makin’ classes
Makin’ methods
Makin’ templates
Fixing compile errors

Morale

 

My morale is still high due to the good amount of progress I made this week, but I am rather disappointed in the progress we made as a team.

But I have to remain positive. Stay positive. Stay positive. Stay positive.

Brandon’s Update: Week 7 (23May 2017)

Concrete Goals

This week all of my concrete goals revolved around cities. I wanted to create a UI to create cities on slots and a UI to create units from cities. Further, I wanted to make cities properly give players their resources. As a side-goal, I wanted to make sure that no one was blocked on their work by making code reviews fairly high priority.

Accomplished Goals

Things were very productive this week! Although there were the usual hiccups (The unit’s toWorld matrix was being improperly calculated, for instance), I got all of my city goals complete. There is a (crappy, but usable) UI available for creating cities on slots and creating units from cities. Further, I feel like our team was pretty productive this week because things moved right along on the PR front.

I was also able to get some work done on other fronts as well (I helped with unit movement and unit attacking).

Unaccomplished Goals

Unfortunately, the UI elements are not as polished as I would have liked due to a lack of knowledge regarding NanoGUI (I plan to get all this sorted out next week). I was also unable to finish making units cost resources to create.

Next Week’s Goals

Next week, I would like to continue my goal of keeping code-reviews moving along quickly. In addition, I’d like to complete my work on making spawning units cost resources as well as taking time to create. Further, I’d like to polish some of the UI elements with creating cities and spawning units.

Unfortunately, our client is a little sluggish and work on moving units/attacking units has been moving a little slower than expected. Next week is seriously crunch-week, and I will try to prioritize getting unit movement and unit attacking solidified, polished, and in the game. I also want to spend some time looking into some small client-side optimizations (only 80% optimizations .. I will not spend any time on 20%ers).

Next week I plan to do a lot of work on the game.

This Week’s Learnings

This week, I learned a lot about NanoGUI as well as how to better arrange our slot, city, and unit design. I also learned the important fact that quickly tackling code-reviews increases overall team productivity.

Most importantly, when we are all together, we get the most done.

Morale

My morale is high! The game is making steady progress and I contributed a lot this week. I would say that my morale is directly related to how much progress I made during the week..

I’m also very happy to have elements of the UI in. Now let’s tackle some more core gameplay elements!

Brandon’s Update: Week 6 (16 May 2017)

Concrete Goals

This week I had concrete goals of integrating slots/cities with the UI layer, creating a mechanism for attack cooldowns, and helping others with their changes (with emphasis on unit management, unit selection, and the trade system).

Accomplished Goals

Unfortunately, I ended up being pretty busy this week with non-school related things, especially this past weekend. I wasn’t able to do as much as I wanted, but I was still able to accomplish some things. I was able to complete an initial mechanism for attack cooldowns as well as help with unit selection and the trade system. These things aren’t yet merged into the main branch, but they’re on their way!

Unaccomplished Goals

I was unable to refine my solution for attack cooldowns and I was unable to integrate my slots/cities work with the user-interface. This is mainly because of how busy I was during the week, but there were also some issues that came up that I had to prioritize instead.

Next Week’s Goals

Next week, I would like to finalize my new “Attack scheme” as well as help with the unit selection, city, and slot user interfaces. At the time of writing, there are also a lot of outstanding pull-requests that need reviewing. Next week, I really want to strap down on helping people move their code along.

This Week’s Learnings

This week I learned a decent amount about different strategies for implementing the attack and trade systems. However, my learnings didn’t go much beyond that. Of course, I also learned that this class should always be my number one priority, lest I feel bad at the time of writing this status report.

Morale

My morale seems to be restored. I’m really happy with the progress made this week (I think the weeks leading up to midterms really slowed us down). Although I am a little bit disappointed in my own progress, I really like the way that the game is shaping up! YAY TEAM SOLARWARE!

Brandon’s Update: Week 5 (09 May 2017)

Concrete Goals

My concrete goal for this week was simple: Get city slots and cities working, meaning that the player should be able to see slots, establish a city on a slot, and interact with that city. I also had a small concrete goal of doing some optimization work that would help us in the long run.

Accomplished Goals

I did it. I made slots visible and the player can found a city at a random slot with the simple hit of an F5. This, as always, took far more effort than I predicted. I realized that our previous definition for what a “City Slot” would be was a little off, so I had to rethink it. Further, I had to implement a way for us to define positions of objects on the surface of planets. To do so, I implemented a Spherical Coordinate System. Then, I had the slots drawn as spheres in one texture and cities as spheres in another texture.

I also got some optimization work done – namely singly-loaded-textures. This helped reduce our clients’ startup time and memory footprint by about 50%. Wow!

In the above clip, you can see slots being displayed on planets (They are the tiny suns on the sides of planets). You can also see my “founding” a city on the Sun, which creates the city model and displays it (A tiny Jupiter).

Unmet Goals

I definitely didn’t get as much done as I wanted to this week. This was mainly due to some totally awesome food poisoning that I got halfway through the week. Sad.

My unmet goals this week are twofold: First, I was unable to get a full-fledged slot/city system working due to our lack of progress on some other features (We’re running into some hitches in selection). Second, I was unable to meet all of my optimization goals. This was mainly because I had a hard time designing an optimization strategy for models, meshes, and textures since I did not design those systems. I do think I made some decent headway, however.

Next Week’s Goals

As always, my goals for next week are not yet set since we have not met as a team. However, I would personally like to complete my optimization work involving single-loaded-models and single-calculated-mesh-geometries. (Currently we re-calculate geometries every time we load a model or mesh).

Further, I want to get my slot/city functionality integrated with the unit selection system once that is complete. I also want to focus my attention on getting the UI off the ground. For our game, UI will play a very heavy role, and I want to make sure that we have something in place.

This Week’s Learnings

During this week, too much time was spent fixing bugs. I definitely learned my lessons in that OpenGL, by default, does not let you do graphics things in a non-main thread. I also learned a bit about graphics in order to optimize and display my cities.

Most importantly, this week I learned to always carry a trash can around the house with you when you have food poisoning.

Individual Morale

I’d say my morale is higher than last week, but lower than previous weeks. I’m very happy with the individual progress I made. However, I do feel like we have gone a bit stagnant as a team this week. The amount of new features that got pushed was noticeably smaller than previous weeks.

However, we did have an all-day meeting on Thursday where we got a lot of work done. It was a good opportunity for us to flesh out some details and solve some bugs. That event seriously boosted my morale.

I think the biggest hit to my morale is the continuous roadblock I run into while trying to implement features. I find that a lot of the classes we defined and architectures we created during the first few weeks are just far from reality. Our implementations differ from what we imagined. This is fine, however, it’s really a shame that we had to lose ~2 weeks of work in a 10 week class. As I’ve said in previous reports, we should have always prioritized implementation. We’ve learned our lesson and we are definitely doing a good job of prioritization now, but it’s a hard lesson to learn.

Brandon’s Update: Week 4 (02 May 2017)

Concrete Goals

My concrete goals for this week weren’t super concrete. For this week, I told the team I would “fill in where needed”. When I said this, I meant that I would help review teammates’ code, help them in problem points, implement features we needed that no-one was working on, and fix any glaring issues with our game.

Accomplished Goals

Since I was working to “fill in”, the things I accomplished this week seem a bit scattered. Most of my work, as usual, went into networking and server/client communication. Fortunately, I believe that the networking layer is servicable for the rest of our game’s development. The only major remaining logic left is automatic reconnects.. but that can wait until a later time to implement.

I helped plan and implement some server/client integration and offered a lot of advice and feedback on the unit movement system. I think we have a well-functioning system for handling and issuing client updates.

I also helped develop some new features this week. Pending review, I added client support for holding down keys, properly mapping specific textures to specific planets, and adding connection-time player ID assignment.

Also, all of my features from last week that were pending review have been merged in! That means players can now send a PAUSE signal to the server – An early form of server/client interaction

Clean Client/Server disconnect was also merged in!

 

Unmet Goals

Since my concrete goals were, erm, not so concrete, I can’t say that I didn’t meet any goals. However, I really wanted to have the ability to select units done this week (Just click a unit and they will move in a random direction). That remains uncompleted. I feel like a lot of the infrastructure is now in place and selection/movement will only take a few days to finish, but I still think it could have been completed.

Next Week’s Goals

Next week, I really want to start making the game come together.  The infrastructure is in place, and it’s time to get implementing. There is a lot of work going on in the unit selection, movement, and combat space, so I’d like to work on something no one else is. I’ll work on city slots, founding cities, and spawning units from cities. I’m hoping that all of this will be networked and ready to go by the end of next week. I also want to work on keeping the team focused on incremental, visible, intractable improvements.

This Week’s Learnings

From a technical perspective, I didn’t learn all that much this week. I learned a bit more about how to use Visual Studio to accomplish exactly what I want.. but that’s about it.

Again, most learnings had to do with the team and interacting with them. I tried very hard this week to help move things along quickly, and I learned that the more we push to “move forward”, “merge”, and “prioritize iteration over a full initial product”, the more we can get done.

Individual Morale

I’d say my morale is at “normal” levels. It has dropped steadily from week 1 to be considered normal. I was satisfied with the progress we made this week; satisfied with my own progress; and satisfied with how we function as a team. I’m not particularly excited about anything, though. Once our game becomes more interactive and results become visible, I know my morale will become higher.

Brandon’s Update: Week 3 (25 April 2017)

Concrete Goals

This week, my concrete goals were a little less concrete than they were last week, but that’s OK. My primary goal was to create a working model of how the server and client would communicate, as well as a “demo” of them communicating. Of course, this also involved creating the server skeleton as well as cleaning-house, ensuring that the shared server/client classes were setup appropriately.

Accomplished Goals

As advertised, I completed my primary concrete goal and created a demo of networked server-client communication.

This involved a lot more work than I expected. There were a lot of small kinks in the networking code that had to be worked out. There were also some design issues in the client and shared libraries that had to be ironed out.. but it all worked out in the end, and I’m happy with the result!

Unaccomplished Goals

I was hoping to accomplish even more server/client interaction, especially concerning clients clicking or pressing keys. However, there was simply so much groundwork that needed to be laid.

Next Week’s Goals

I’m confident that the necessary groundwork has been laid and that we can really start working on our game functionality. Next week, I’m planning on helping out with the client to help get things moving as far as actually creating the game goes. I’d like to create a demo program where players connect to the server, a player can press a key to “spawn” a unit, the unit “spawn” is broadcasted to all other players, and perhaps the unit may begin moving.

I’d also like to work with another teammate to try and lay the groundwork for the user-interface, so that we have plenty of time to solve any problems that might arise.

Learnings

On a technical level, I learned a lot about the different strategies for doing client/server design as well as some of the problems that could arise when working with multi-threaded servers. (I believe all the kinks are worked out, though!)

Much like last week, my biggest learning was again with the team. I realize that I am very passionate about my ideas and would love to have them implemented quickly. However, I need to remain patient and allow the ideas to propagate throughout the group, grow, evolve, iterate, and eventually come to fruition.

Morale

My morale this week is much lower than my morale last week, but still high. I feel that our group did not accomplish as much as we could have this week. At the time of writing, there are 13 outstanding pull-requests, the majority of which have been sitting for several days. I feel that we are very slow to iterate and make significant progress.

I feel a lot of this is due to our group’s focus on “perfection”. A lot of time in PRs is spent debating over rather-small design decisions. We need to get back to the basics and focus on how to move the entirety of our game forward.

I recently brought this up with the team, and they felt receptive. I feel that we can improve!

Brandon’s Update: Week 2 (18 April 2017)

Concrete Goals

This week, my primary goal was to create and complete a networking back-end. In theory, we would then be able to use this back-end to begin linking parts of our game together.

My initial design for the networking back-end involved an OS agnostic wrapper around sockets, a Server and Client class that asynchronously intercepted messages and let the user handle them via event-handlers, and a “Channel” system, where messages were sent on “channels” (Each channel corresponds to a type and may thus be deserialized and passed directly to a handle function).

My final concrete goal was to provide the team with constructive criticism and feedback on their pull-requests and be as helpful as possible.

Accomplished Goals

I was able to create the OS-agnostic networking layer as well as the “Server”, “Client” and channel systems. I was also able to complete a small demo-programming as a proof-of-concept for the networking architecture that I designed.

Of course, not all of the things I created are in the “stable” branch of the project yet. My changes are undergoing review from my teammates and I will be implementing their feedback for the next few days.

I was also able to provide my teammates with feedback with their PRs, as well as aide them through the development process. All in all, I feel like I definitely accomplished my goals this week.

Unmet Goals

Of course, when a programmer says they “finished” something, it isn’t entirely true. I was unable to clean up my networking code or make it more performant. I am satisfied that I decided to prioritize completion over performance, however. I may come back to performance once we learn more about how the networking-layer interacts with our game.

Next Week’s Goals

This section of my updates will always be a little bit awkward. Our team has decided to manage tasks in week chunks, where our “review” sections are on Tuesdays. Thus, I will only be giving my personal goals, but not those fleshed out by the team.

Anyway, for next week, I am planning on accomplishing the following:

  • Development of a logging utility
  • Add comments to the networking layer (lest I forget what I did)
  • Continue to iterate on the networking-layer until it is merged into “master”
  • Integration of the networking-layer into the game layer (Create Server executable, create the concept of a “game”, allow players to join the “game”)
    • This is a large task. This will be more of a “lobby” functionality, where players are able to connect to each other and share some data (players send the server their names, server sends them their IDs. When another player is connected, that data is sent).
  • As a stretch goal, I will begin integrating the networking into other parts of the game that have already been set up.

Learnings

I am now a master of Smart Pointers in C++ and I highly encourage everyone to use them.

I’ve also become fairly fluent in most layers of the “sockets” networking stack.

My most important learning of the week, however, is that everyone has their own ideas. Without communicating our ideas to each other, we will all be working on our own “individual” versions of the game. Our bi-weekly meetings have cleared up any misunderstandings that we’ve had.

I’ve also learned how important it is to stay on-track during meetings. Everyone wants to talk about their ideas, but in order for limited-time meetings to go smoothly, there must be a clear agenda. In one of our meetings, about 45 minutes was spent discussing a design decision that was ultimately considered non-important.

Morale

My individual morale is fairly high. I am excited about our game and the progress that we’ve made. Our team is just getting started, so we hit a few rough-spots (there was some wasted time, some HUGE pull-requests that sat in review for way too long, and some development-process misunderstandings). However, I am hopeful for the next week — we are ready to make some major progress, I’d say.