New Game-dev. Holding myself accountable by starting an ongoing devlog. Long-term goal: Colony Ship RPG. Short-term Goal: Develop a little mini-game (gamelet) where I can walk up to a NPC. I plan on posting once a week on progress.
and start a brief conversation with some choices / replies gated by skill checks. Currently all UI is via debug streams. Eventually, I will add an actual dialogue window instead.
Devlog #2 - [Gamelet1]:grey-box colony ship RPG”
Week #2 - Steady Incremental progress.
- Added delegates and listeners for conversations (Dialogue Updated & Dialogue Ended)
- Added a rudimentary dialog window for the conversation
- Added a simple Attribute Skill Check
- Updated replies to show Skill Check Percentage Chance.
- Refactored the previously hard coded conversation using debug output into another Listener on the Dialogue Delegate(s).
- Started a rudimentary inventory system (not yet finished)
Week #3 - Finished Gamelet1.
-
Finished the rudimentary Inventory system
-
Created a PickupComponent to support picking inventory items off the ground and storing in inventory.
-
Added Dump to Log (debugger) support to the inventory system
-
Added Inventory Component to Player Character class
-
Made various changes to game system to sup
port picking inventory objects off ground and putting them in the PC’s inventory
-
Created a inventory cube that could be picked up off the ground and added to inventory
-
Added Save / Load support to the dialogue system
-
Added Save / Load support to the inventory system
-
Created A Game Instance Subsystem for inventory changes to survive in the World (outside of the player character). Added my GameInstanceSubsystem to the WorldSubsystem object
-
Made various changes to the rest of the game system to support save/load and to destroy objects (currently in the world) that have actually moved into the players inventory (load game state).
-
Tested entire system end to end (dialogue, skill-check, pick object off ground and put in inventory, change attributes, re-test skill-checks, save/load, verify attribute changes, verify dialogue changes (based on attributes), verify inventory changes (objects get destroyed in world and end up in players inventory).
-
Definitely not perfect but a good start in learning to write a game
-
Accomplished main goal of Gamelet1 (rudimentary dialogue system, rudimentary inventory system, save/load world state – attributes, dialogue, inventory, etc.)
-
Ready to figure out what to learn in gamelet2 and design that new gameplay and then start implementing it.
Devlog #4 - [Gamelet2]:grey-box colony ship RPG"
Note: No Image to show as Gameplay hasn’t fundamentally changed yet, still working through Game Flow State Machine design and implementation…
- Finished Gamelet1 - Rudimentary Attributes, Dialogue, Inventory, Simple save/load
- Started Gamelet2 - building on Gamelet1, improving game by adding game flow state machine
- Started by understanding how to pause, quit, save/load in UE
- Decided that I need to have a Game Instance class instead of a Game World class for supporting state outside of levels (World)
- Wrote initial ColonyGameFlowSubsystem class derived from GameInstanceSubSystem
- Designed rough Game Flow State machine (States, Triggers)
- States: MainMenu, Playing, Paused, QuitGame, etc.
- Triggers: Death (Player died), NewGame, Continue, Key, Quit, etc.
- Refined Game Flow State Machine (added Actions on Transitions)
- Actions: Pause Game, Resume Game, Save Game, Load Game, Continue (Load most recent game), etc.
- Wrote Initial State Machine as static table of Transition Rows (OldState, Trigger, NewState, Actions)
- Wrote HandleTrigger(Trigger) method using Transition Table to implement Game Flow represented by State Machine.
- Added actual pause/resume mechanics to game flow (trickier than expected)
- Realized that complicated states can fail, rewrote Game Flow to deal with failed attempts to save / load / etc.
- Refactored HandleTrigger to call RunAction() subroutine (giant switch statement) for each requested action.
- Added Save Game to game flow
- Still need to refactor LoadGame into BeingLoad, OnBeingLoaded() to keep UE constantly running.
- Still need to write several actions like MainMenu, NewGame, Continue, etc which eventually resolve to calling OpenFile(…) on the appropriate level.
- Still need to test throughly