History generation refinement carried on this week. For variety, I also started working on fixing known bugs in the main game loop, which is the goal for May.
- New event types: Actor Exiled from Faction, Actor Went Insane, Alchemist Brewed a Potion, Alchemist Died from a Potion Explosion.
- New history event triggers: Make Truce, Break Truce, Removed from Faction, Added to Faction
- New entity attributes: Era Created, Era Died. The former is only used for debugging purposes currently; I check to make sure actors created before their lifespan are dead. The latter is used to determine whether a dead actor’s remains are a corpse, bones, or nothing.
- New entity binding criteria: Has Status Effect
- New status effect: Insanity
- Added a new timespan, Eternity. This was needed to prevent actors that don’t die from old age, such as undead, from dying when the era advanced.
- Actor remains based on the era in which an actor died. Either a corpse, bones, or nothing is added to the map depending on how long ago the actor died.
- Place entities that don’t have a specific location. This was a use case I knew about but missed when coding entity placement.
- Add a Corpse attribute to Actor Type definitions. Previously, the corpse that an actor spawned after dying was specified in a parameter of the Actor’s Died event. This worked until I needed to determine an Actor’s Corpse in other parts of the code. I could have scanned the events to find this out, but it was more straightforward to add a new attribute.
- Fixed many history event configuration issues, for example:
- Blind actors can get blindness again
- Ghosts can be bitten by vampires and changed to vampires
- Projectiles (which are implemented as items) such as fireballs can be added to the map
- A giant rat can be the leader of the undead faction
- An actor can discover an item already in its possession
- Gameplay bug fixes.
Next week, the main objective is to fill in a few major functionality gaps in history generation, in particular being able to place entities inside of other entities (such as placing a corpse in a coffin). There are some annoying bugs in the main game loop I want to fix too.