Credits: Add Enrique García Cota for middleclass
Player: Add one skill point each level-up

The current design is to only give the player one skill point per
level although we do not strictly enforce that.  More specifically,
the code does not prevent other parts of the game engine from giving a
Player object an arbitrary amount of skill points.
Skills: Mention ‘create-skill.lua’ in the ‘Level System’ document
Player: Move some statistics into the ‘stats’ table

This patch moves some of the stats that we built into the Player
object into its recent ‘stats’ table.  WTe also define those
statistics in the ‘stats’ table itself, i.e. making each a valid
Statistic object.  This allows to collect all of the statsitics for a
player in a single place.  As it is they are currently spread out
across multiple places in the player code.  For example, the
experience points and skill points of a player are in the Player
object but the hit points are in the ‘stats’ property.  This is part
of a series of patches that will move all of those values and related
code into that ‘stats’ property so that we have a single place to look
for when it comes to player stats.
Player: Make ‘stardust’ a statistic and delete the ‘PlayerStats’ table

Currently we store stardust in the global ‘PlayerStats’ table, which
has no relation (via code) to any particular Player object.  In this
patch we delete that table and store stardust as part of the ‘stats’
property of each Player object.  We update the call-sites to use
‘ThePlayer’ since we still want to use our global Player singleton.

This patch breaks the game.  The inventory is also part of
‘PlayerStats’ and by deleting it we break some logic.  So the game
will not run with this patch as we do not yet re-implement the
inventory property, divorcing it from player statistics.
Document that leveling-up is not the only way to get skill points

Currently we provide no other way for Violet to obtain skill points
but we want it to be clear (to developers and designers) that the
engine supports the addition of multiple ways to earn skill points.
Player: Make the ‘Events’ table static

We want the events to have class-wide scope so they should be static.
Clean-up and clarify some sentences in the ‘Level System’ document

This patch makes changes only for readability and clarity.  The only
content it affects is the deletion of the task list, which is now in
another document (outside of this repository).
Skills: Clarify that setLevel() does not trigger ‘onLevelUp’ events
Skills: Add stubs for ‘onLevelUp’ events to all individual skills

This is the result of re-running the ‘create-skill.lua’ utility for
every skill in the game.
Skills: Add a file listing the default skills

This patch introduces a file that contaisn a table with all of the
skills that Violet can learn throughout the game.  We will use this
file as the authoratative source for which skills are available in the
game and we will write any code that needs to loop over all skills to
use this list.  This will help prevent the game and related utilities
from going out of sync whenever we decide to add or remove skills.
Player: Load skills from the list of default skills

This changes the constructor to loop over all of the skills listed in
the default skill file when creating a new Player object.  Now we can
be sure each Player object has those skills by simply changing the
contents of that one file.
Skills: Automatically generate stubs for all skills at once

This patch renames the ‘create-skill.lua’ utility to the plural
‘create-skills.lua’ since it now generates output for every skill
listed in the ‘defaults.lua’ file.  This makes it easier to generate
the stubs for all skills.

The patch also modifies the template to comment out the generated call
to addAction().  Luvent will raise and error that stops the game if we
call that method without an argument.  So the template for each skill
now comments-out that line so that we do not raise that argument with
stub skill implementations.
Player: Rename the ‘Stats’ class to ‘PlayerStats’

This is for consistency with the code in ‘src/Player/stats.lua’, which
defines a class named ‘PlayerStats’.  This has no effect on the
program behavior.
Player: Document just exactly what the ‘dead’ boolean means

Necessary.
Player: Put ‘grazeRadiusAddition’ near the other graze-related stats
Stats: Add more statistics from the Player class to ‘PlayerStats’
Stats: Give stats a default value of zero instead of a table

We were creating stats as tables that had a ‘value’ key containing the
actual value.  In practice this is not necessary as we do not have any
statistics represented by the ‘PlayerStats’ class which need anything
more than a simple, numeric value.  This patch gets rid of the table
with its ‘value’ key and instead creates statistics as a more
‘natural’ table that maps stat names to numbers (zero by default).
Fix bug where certain enemies would be oriented incorrectly.
Fix Level.spawnStardustInRectangle (it stopped spawning stardust).