Most of this day was spent on preparations and support. Since we’re going to work with a new engine there’s much to be decided about the project layout and the workflow. I created a few scripts to improve workflow based on user feedback. I’m also going to do more research on how to improve the workflow for big teams especially.
As I will be working on a big new project with a few new programmers, I spent time today on writing a document containing all kinds of information, tips, tricks and common pittfals about the engine and systems we will be working with. On thursday I will present this document to a group of people that are involved with the new project.
After lunch I had a sprint kickoff meeting, where we used score cards to assign time and value to the user stories and discussed what everyone had to do and what problems there could be. Afterwards we all got together in smaller groups to discuss subtasks and create more user stories for the scrumboard.
Based on the scrum tasks available right now I will start some preliminary work on the new game, prepare for the knowledge transfer presentation and help create a design for the new systems.
Besides that, I’ll also do more work on my project initiation document soon!
As before, I focused on making various settings and variables easier to change to make Rene’s life easier. After that I started testing the game on mobile devices to see what needed improving. I improved the user interface quite a bit based on feedback from myself and Rene. I also did more profiling to remove all spikes and make the code even more efficient. To do this I moved more code away from update loops into asynchronous functions and used more events. I also rewrote some in-game systems from using a lot of raycasting and distance checks to use a physics system. All this greatly improved performance and framerate, and it also made the codebase a lot more manageable.
At the end of the day I was left with a game that was quite fun and challenging already, to my surprise! I have only worked on it for two weeks, and not even full-time, and already the game is in such a shape that it could almost be called a vertical slice.
Next week I will spend time on transferring my knowledge to other developers, start on the new big exciting project and perhaps squeeze in some time to do some work on this first project. The small company that worked on the game before has done some more work after the feedback they received a week ago, so some changes will likely need to be merged.
Today I did more work on the UI code, more profiling and optimization and tried to really get the game going. Before I start on the new major project I’ll be working on the coming weeks, I want to leave this game in a state where the code is neat, adheres to the diagram I designed, all features are working well and the GUI is implemented in a neat and reusable way.
While I will be working on the new project, Rene will be using the latest build of the current game to tweak all kinds of variables and test what kind of gameplay works best. To make that possible the game needs to run well and all settings should be easy to edit. I will set up a system to make this possible today and tomorrow.
Today I created a user interface with the GUI middlware I have chosen. I read all tutorials and documentation on the middlware’s website and after that I created a few buttons and a window with some text and a slider. After that I made the GUI resolution independent; a few important feature that needs to work correctly. My opinion so far is that the workflow is pretty good and everything works as it should. The documentation is somewhat scarce beyond the basics, so the creator could improve on that, but most features are self explanatory so it’s not too bad. Generally I’m satisfied with the middleware!
I tested the game with the GUI on a mobile and a tablet and did some profiling: so far the performance is good and the entire GUI is drawn in 1 drawcall.
After this I’m going to look into the best way to control the UI from code. The user interface will be partially static (pre-made) and partially dynamic, so I need to check what the best way is to create the UI from code. Ideally the code in the domain classes should not be aware of the GUI, so I need to set up a smart system with delegates, events and interfaces to make sure they’re loosely coupled. I won’t do too much work on this though, as the gameplay can still change quite a bit and I don’t want to set up this great generic loosely-coupled system that will be thrown away later anyway.
As planned I did some research into various GUI solutions. It was clear to me that building an in-house system would be too big of a project, so I examined various middleware solutions. I assessed the middleware products based on their feature list, professional support, price, demos and by looking at what people had to say (or complain) about the producs on forums. I also looked at some general forums where people had discussions about the best GUI solutions. After doing this research, I compiled a document with the pros and cons of each solution and explained my personal favorite. I sent the document to Rene, David and Mike and we decided to use the solution I had picked.
My task right now is to do some practical tests with the solution to see if the workflow and performance are good enough and if the solution is stable and has no issues.
Besides that, I also worked on the new project some more, further integrating and expanding the two components that are my responsibility right now.
Today I continued programming the two components that were my main task, while implementing them I also implemented other parts of the diagram I designed as they were needed or when it was simply more efficient because I was touching related code anyway.
In the afternoon I had another meeting with David, Mike, Stijn and Rene about the project. I went through what I had implemented so far and we discussed my tasks for the coming days. I will round up the work I have done so far on the project, after that I will focus on helping a few programmers to switch to the engine I have been working in. Another project will be created using the same engine, so it’s important plenty of my knowledge is transfered to other members of the team. I’ll also be working on the other project for the coming weeks, and it’s a quite big project so I’m excited! For now I’ll also do some research as to how a GUI can be implemented best, either using an in-house system or middleware.
I continued my work from the day before and continued setting up the new project and importing all the assets and code I needed. After completing this phase I started to ease my design onto the existing design. This basically meant that I reduced linkage between components to keep them more flexible and independent, improved code efficiency, removed dead code, made the code adhere to the official coding guidelines and generally just prepared the code to fit into my new design.
Again, the downside was that I deviated from my initial plan of attack, so only at the end of the day I started work on implementing the component that was my main job. In hindsight I should have known that if you make a new design and pick one component to implement, you can hardly expect to just implement that component in a project that doesn’t adhere to the general design in the first place, since your design is new!
At least I did some good work on improving the project and removing some of the inefficiencies and mistakes in the design and implementation. I now have a more solid base to build the new components on, so on monday it’s full speed ahead!
This was also the last day of the first week. Near 5 PM we generally stopped working and said farewell to Harry, who was starting a new job at Fox-IT. After that we started drinking some beers (Grolsch) and there were a few snacks; the infamous Vrijdag Middag Borrel! It was a fun way to say goodbye to everyone and close off the week. Can’t wait until it’s monday again!
In the morning I received feedback from David about the design I created the day before. My design was generally good and only needed a few improvements. One of the errors in my design was actually a mistake I had noticed myself but had forgotten to fix; in one place I needed to have a composition arrow, but I had drawn an inheritance arrow.
After fixing the design I had a general meeting with the project’s Technical Project Manager Stijn, Game Designer Rene, Lead Programer David and Technical Director Mike. In this meeting I delved deeper into the reasoning behind the design and we discussed some of the best ways to implement the game logic.We also discussed my tasks for the coming days, and it was decided that I would start work on one component that had the least chance of conflicting with the work the other company was doing.
After the meeting I took all compiled feedback and created a new version of the design diagram. I asked a few more questions and iterated a couple of times on the layout and after that the design was done!
After completing the design I created a quick plan of attack and wrote up what I would do for the rest of the week and how many hours I planned on spending.
I started work on implementing my component and also spent some time examining yet another new build that we received. Again, some things were broken in the build. I decided to not just “hack in” my component in their project, but to create a new project. I could now layout the project as I liked and reimport all assets and code that I needed from the existing project. As a result I got a new project that was much cleaner, but the downside was that I lost some time as I deviated from my initial plan of attack.
I continued my work on the Technical Document. I went through the Design Document again and wrote down every single bit of information that was either confusing or that had an impact on the technical design. When I was done I was left with a rough idea of how the game’s structure should be set up and a load of questions about the game and how it should work.
After lunch I had a meeting with Game Designer Rene and Lead Programmer David about the Design Document. We both had questions for Rene about various aspects of the game and its design. After all our questions were answered we had a short discussion about how some of the parts could be implemented.
My next job would be to create the game’s final design in diagram form. Basically a kind of Class Diagram created with UML. David told me he liked the program yED best for creating these kind of diagrams, so I installed it and started work on the design.
We also received a new build of the game with some improvements and some newly broken things, so I had another round of examining and feedback.
At the end of the day I sent my design to Rene and David for examination and feedback.