Over the past two weeks I’ve spent some time getting the WorldGenerator integrated with the PokeyGame framework, and level templates are now able to be automatically generated and tested for a valid path from point to point. A template is returned as a dictionary to the game and the logic behind creating a dungeon can be built.
Is it living?
The next step in generating the dungeon will be filling the template with tiles, mobs, chests, traps, doors (some with locks) and more. I decided to refactor the Player class and extract some of the core methods that will be implemented in a more general Entity class – Players, Mobs, and ultimately NPCs will all be children to this Entity class.
As such, I had to consider which attributes and methods will need to be available to all three of these categories. Among shared attributes are :
trigger_seal - true if the entity will trigger seal-type Spells (Players) (bool)
lootable - true if the entity can be looted (bool)
living - true until the Entity ends a turn with health <= 0 (bool)
attack - base damage (int)
defense - base resistance to combat damage (int)
focus - base mana amount (int)
resist_fire - resistance to fire elemental damage (int)
resist_frost - resistance to frost elemental damage (int)
resist_magic - general spell resistance (int)
resist_poison - resistance to poison elemental damage (int)
resist_death - if high enough, mitigate a blow that would kill the entity (int)
blind - eliminates the map from view (Players) (bool)
paralyzed - prevents movement on the map (may still engage in combat) (bool)
slow - limit movement to every other turn (bool)
haste - two movements per turn (bool)
berzerk - grants a bonus to attack and defense when under 20% health (bool)
protected - mitigates all spell damage (bool)
immune - mitigates all status effects (bool)
invincible - mitigates all combat damage (bool)
stunned - prevents combat and movement for one turn (bool)
Players and Mobs will actively use these attributes, NPCs will be protected/immune/invincible so that no status effects or damage can be applied. The methods available require a bit more explanation.