Document a formula
Move peeve/like application to their structs.

Technically this could cause behaviour differences, but only if
a god both likes and dislikes the same action.
Answer a comment.
Simplify

Since we don't need the iterator later, it's simpler to erase from the
set by value, rather than find() followed by erase-by-iterator.
Implement and use a map_find template function.

The safe way to get a value from a map is to find() and only if that
returned a non-end iterator dereference the iterator to get the value.
Unfortunately, map iterators don't convert to bool, so it's hard to
do this in an if condition, leading to the iterator being declared
before the if, in a higher scope than necessary.

map_find is a wrapper around map::find that returns a pointer to the
value (or null if not found).  Since pointers do convert to bool, this
function is easier to use in conditionals.