In this post:
- What I need to implement to be done with the tutorial.
- Notes on things that could be especially tricky since I went and editorialized all over the design.
- Thoughts on things I want to do differently, and tasks that will go before getting back into the tutorial.
- An overall plan.
Here's a quick overview of features from the tutorial I haven't implemented yet:
- Monsters granting xp
- The player gaining xp
- The player leveling up
- The character screen
- The wait button (This completes part 11)
- Weighted random choice
- Generating the entities in a level based on weighted random choice
- Weights generated from the dungeon level
- Stat rebalancing (This completes part 12)
- Equippable items
- The "Equipment" component, including equipping items
- We see in the changes to Entity.__init__, the cost of my hubris. In my code, there's no obvious way to get the equivalent of "if Equippable, but no Item, create Item". On the other hand, do we want empty Item components? ... Hm. I could have sworn the Item component did something more, but no, an empty Item component is entirely adequate for typical equipment.
- Equipped items provide bonuses
- Place equipment in the map
- Start the player with basic equipment
- Display equipment information in the inventory screen (This completes the tutorial)
Thoughts on these goals:
- It seems wrong to me that the Equippable component requires the Item component to work correctly. I feel like that means it should be an extension to the Item component, instead of sort of its own thing.
- With the adding statistics and rebalancing existing ones, I want to get away from holding stat values on the components, and turn them into references to a structure that contains the information.
- This would push things towards defining a "base" player, and having level bonuses on the Fighter component.
- I want to bring in Structured Data, but that's not happening without having a version of Structured Data that's worth using, so I'll be leaving some TODOs in, probably. However, Appveyor is ready to go now, so I can get on updating things whenever.
So, here's the plan:
Write up a list of every kind of entity the game can currently create.
Move the values out of the Component constructors into several Enums, which are themselves based on NamedTuples.
Maybe just ignore handling serialized data correctly, and start over?
Get up through the end of Part 12.
Switch gears to getting Structured Data in better shape:
- Set up travis builds inside docker
- Just do Appveyor builds as normal
- Update, document, remove old code, etc.
Start on part 13.
I don't know if I'll get all of that done inside a week, and I'm not planning to push myself to, but that's about the order I think things should go in: fix up component structures, re-do saving, do one and a half parts of the tutorial, and switch to Structured Data.
Getting Structured Data working could be huge, so if I don't get it done this week, I'll definitely focus on it next week.
Next time, I document in detail all of the stuff that I want to rewrite.