Nov 27 – Dec 10
The first Review meeting was up on Dec 8th, so I finally spent a bit of time improving the visuals of the game, and doing some quality of life improvements.
I implemented the Farm, which was a harvesting building that produced wheat; the mill, which turned wheat into flour; and the bakery which turned flour into bread.
Buildings that have a subject assigned as staff now also had a UI button which would move the camera to show the subject.
Along with their buildings, I implemented the farmer, the miller and the baker, which worked in those buildings respectively.
I also implemented the Builder. The builder, similar to the serf, did not live in a house, but moved around freely from construction site to construction site to construct new buildings.
Additionally, Serfs now visually carried items. The animation wasn’t good, and the item was not yet attached to the mesh, and I was missing a few models for items, BUT: it still looked pretty cool, and it gave instant visual feedback.
The school now had a Widget for educating (producing) new subjects. A scrollbox contained all allowed subjects, and besides the one currently being educated, the queue could have up to five additional subjects. Clicking on them in the queue canceled their education.
Instead of an invisible area around the harvesting building’s door, a harvester would now harvest in a specific area that could be set by the player (within limits of course). This meant that multiple farms, for example, could use the same area for their crop, requiring less space to work efficiently.
Allow / forbid Buildings&Subjects
I implemented a list of allowed buildings and subjects to the PlayerState Blueprint. This meant I could create asymmetrical gameplay, by allowing each player to construct different buildings and educate different warriors! The list was set by the level blueprint, so each level could have different settings.
The School education UI, and the building Browser (further down) both dynamically generated the buttons depending on those lists.
I did a bunch of behind-the-scenes stuff during this phase, cleaning up code and stuff like that. Besides the highlighted changes below, I made a whole bunch of minor changes.
I was getting annoyed with some of my naming conventions, so I cleaned those up. BehaviourTree Tasks and Decorators would have a BTTask / BTDecorator Prefix, which actually started to make it difficult to find the right one when I wanted to add them to a behaviour tree. Also, I literally couldn’t build the game the week before, because of filename-length. So I cut the prefix from all BTTasks and Decorators.
I made the Lot and Subject UIs completely modular. The actual UI widget only contained namedslots for where the widgets would go. This just felt cleaner than the previous implementation.
The lumberjack blueprint had still contained a lot of specific functionality and behaviour, which I could easily extend to be generic enough to be used by all harvesters, so I did that. The lumberjack and the newly implemented farmer subjects no longer contained override functions. They did however still have some variables that could be set, such as the duration each job took (planting, harvesting etc).
I had gotten upset, because there was no way to make static blueprint functions, but I found out about Blueprint Function Libraries, which did exactly what I needed. I could now move some bulky functions in there, which would’ve been a pain to update in x different places. The functions were eg GetBuildingClassFrom Enum, which took a buildingtype enum and returned the -hardcoded- corresponding class. Other functions returned icons or meshes for buildings, items or subjects.
The UI used to be ugly as the night. I added a background, and started replacing text with images, and it looked so much better right away! Also, as you can see, subject UI now told the player what the subject was currently doing.
For now – as I often did – I had borrowed elements of the UI from different games (Bonus points if you can guess from which!) until I would find something free I could use.
I also improved the building Browser. I replaced the text with Icons from game-icons.net (and some more borrowed assets…). It also generated dynamically now, showing only those buildings that were currently allowed to be placed.
I had been adding methods of player input as I went, and they had finally become enough to warrant their own document. These two weeks I added a few more.
You could now pause the game, and use the B key to open the building browser. When placing buildings, you could hold R while releasing the Mouse Button to not place it yet (for rotating) and hold Shift to place, and start placing the same building again.
Presentation / Review Meeting
On Friday of the second week, we had our first of three Review Meetings / Intermediate Presentations.
My presentation was extremely successful in my eyes. I used the pitch presentation as a base, and structured the presentation into Recap, Current State, and Future, where I speculated what I could do within the remaining eleven weeks. Link to presentation
At the end of the presentation I was asked to show the game, and I asked someone from the audience to play, and Florian immediately raised his hand.
Actually it was kind of impressive that I could let anyone just play the game, and be confident enough it wouldn’t crash and burn terribly! For the first time, I was running with stable versions throughout the production phase!
While Florian was playing the audience asked questions which I could mostly answer confidently as well. Some questions brought up interesting ideas however, so as always I was glad to have someone see and play the game.
State of the game on December 8th. Far in the back you can see a forest which is being worked by two lumberjacks. In the front you can see Wheat growing (yes that yellow stuff is wheat). If you look closely (click the image to enlarge) you can see a serf in the middle carrying a block, and in the back, in front of the forest, two serfs carrying logs. The block is the default mesh for missing item meshes. I also added a nice moss/grass texture to the floor.