It was a moderately productive week. My average game dev time per week has dropped by 4-6 hours in recent months. My weekend blocks are shorter because I’m not waking up as early. My morning blocks are shorter because I modified my morning routine (previously: wake up, work for 30-60 minutes, go to the gym, continue working for another 30-60 minutes; now: wake up, go to the gym, work for 30-60 minutes). I’m also not working as often in the evenings because I’ve been more tired after work.
- History generation cumulative stats. After reviewing many generated levels, it was evident that some history event types were selected much more often than others, and some were never selected. To fully understand the history event type distribution, I added a JSON file containing each event type and the number of times the event type is selected. Each time a level is generated, the JSON file is updated. The file confirmed my observations and gave me specific event types to investigate. I focused on the event types that were never selected. In some cases, the behavior was working as intended; some events shouldn’t occur in certain section types (example: a throne room shouldn’t be built in a cavern section). In other cases, the event type eligibility criteria or entity placement criteria was misconfigured (example: a shrine couldn’t be placed in a cavern because it only allowed rectangular rooms). I corrected the misconfigured event types, but there were still some event types that weren’t being selected. These event types depend on impossible combinations of prior event types. An example of this is the leader of a faction fighting the leader of an opposing faction. There’s no event type to add a leader to a faction yet, the leader fighting another leader event type always fails to bind to existing entities. I’ll fix these scenarios next week by adding missing dependent event types.
- Override for entity placement path-blocking restriction. Last week’s fix to prevent entities (actors and objects) from being placed in locations that block the path introduced a new issue: enemies weren’t being added in many cases. For example, Gelatinous Cubes stopped appearing in corridors because they blocked the path through the corridor. To fix this, I added a flag to allow the placement of path-blocking entities on a case-by-case basis.
- Entities and events created by the history generator are now associated with physical in-game entities. World history events contain abstract entities. During level generation, physical entities are created from the abstract entities. Before this week, it wasn’t possible to see a physical entity’s corresponding abstract entity and the history events involving the abstract entity. I added this capability for debugging purposes, but it may have other uses in the future.
- Bug fixes
- Entity placement path-blocking restriction not working at the edges of a room.
- When inspecting an actor/object containing items, the items are displayed even if the actor/object is not next to the player.
- Treasure room placed next to the start of the level.
- Cultists don’t do damage when they attack.
- Ghosts are overpowered.
- Wisps shouldn’t appear on level 1.
Next week, the first goal is to filter history event types based on the level range of the items and actors in the event type. This is necessary to prevent underpowered and overpowered items and enemies from appearing in the level. The second goal is to fix the history event types that are never selected by the history generator.