Reducer and Multiplayer Refactor
This week was a bit of a mess. At the end of last week the game was in an ok position but still not fully working. The newly implemented reducer was definitely doing its job but only a few things had been migrated across to it.
I spent Monday doing admin stuff, cleaning up bugs and generally making the project a little smoother. Tuesday focussed on getting some new features in, such as dice modifiers (and a general rework to the dice class), retools and then finishing off dependent tasks like abilities and unit psychology.
But then.. Disaster Turns out that the game would crumble pretty quickly on device.
The issue was down to the way I'd architected the multiplayer classes, LocalMultiplayer and GameKitMultiplayer. For testing (and eventually for local play) I'd built a parallel version of GameKitMultiplayer that just works on my dev machine, but over time the two classes drifted in terms of functionality, meaning that whilst everything worked fine in my editor, nothing worked on device. The reason for this drift was effectively because they tried to manage too much. From handling local player info, to talking directly to the game controller.
Anyway I made the decision to completely rewrite these classes into small, clean interface implementations. This should ensure their functionality going forward, and make them much easier to debug.
That process took the rest of the week. But at least the game is now singing along nicely in both the editor and on devices.
I also spent a bunch of time thinking about how I'll end up monetising Charge, and a whole set of time building out tasks for the lead up to a public alpha (games kinda need some graphics, sounds and UI)
I know I said this last week, but I think next week I'll work on some more fun stuff and less systems-y stuff.
Tasks completed:
(10/03/2023)
- Look into the Project Auditor tool
- First pass at Unit Traits systems
(09/03/2023)
- Rework broken tests
- Complete switch over to Reducer Pattern
- Reducer: Write Tests
- Reducer: Identify further events that need to be transmitted
- Re-implement UI Lobby for local games
(08/03/2023)
- Before hooking the new multiplayer handlers up to the game, test them out in both dev and prod environments
- Unit distance for orders is calculated on leaderpoint. Suggest using corners instead.
- Turn on TDD Build guards again
(07/03/2023)
- Run another playtest of reducer functionality, both in editor and on device
- Unit Psychology
- Reducer: Implement ability logging
- Unit Abilities
- Rerolls & Dice Modifiers
- Change initial deployment to be one big event.
(06/03/2023)
- Write up Monetisation strategy for Charge
- Line up graphical tasks for Charge
- Line up audio tasks for charge
- Line up UI design work for charge
Bugs squashed
- Archers attempted to fire, but were exhausted on first try.
- Game state isn't properly rebuilding across player turns.
- Significant issues with turn replays / board state
- Nullref on game load / create on Device
- Nullref on game load after turn one
- Null ref on loading existing game (iOS)'
- Sometimes the "Complete deployment" button doesn't properly show (iOS)
- Local multiplayer breaks on setting camera position
- Player two can once more see player one's units during deployment
- RaiseGameLoaded and RaiseDataLoadeda are firing too often inside GameController
- Local games. Quitting then attempting to load again causes issues
- KeyNotFoundException: Dependencies keep firing between editor game play runs.
- Loading a match results in units spawning at 000
- Localmultiplayer doesn't properly mirror gamekit multiplayer in the create-game-flow, leading to inconsistencies between the two.
- Camera not swtiching under new multiplayer systems
- Player 2, iOS, After sending complete deployment, Deployment zones are still visible
- terrain doesn't sync on iOS?
- Save games need to be cleared properly on iOS
- New system to cast abilities via order has broken all other abilities aside from Attack