After a lot of thought, I have decided that using actors is a better approach to persistent status effects than sticking modifiers onto an actor's statistics and removing them with events in an event queue.
This way one can have complicated effects that change with time, effects that only occur at certain places or under certain circumstances, effects can be the targets of spells and abilities, and it is much easier to add visuals to applied effects. I feel certain I will find many more uses for this.
I have also grudgingly accepted that my game-play ideas require that the game is three-dimensional, so this weekend I added a third dimension to the map and to the base class for physical actors. I have decided that "proper" 3-D graphics is still not an option, so I am implementing an axonometric graphics renderer.
Isometric graphics makes use of an isometric projection, which is a special case of an axonometric projection. In an isometric projection, each three-dimensional axis is assigned a direction on the plane of the two-dimensional projection, the three directions are 120 degrees apart, and the scale of the axes are the same. This gives a view without perspective, as if the world is seen using only parallel rays, and these rays are all parallel to the vector (1, 1, 1).
In an axonometric projection, the view still has no perspective, but the rays are no longer parallel to (1, 1, 1), but rather to a vector of my choosing. So the axes' directions are no longer separated by 120 degrees, and are no longer at the same scale. Calculating the new angles and scales from the rays' direction vector would be a chore, but fortunately one does not need to do that. As most things in graphics go, getting it to look right is much more practical than making it be right. Since the axonometric tiles will be drawn by hand and the computer will only assemble them accurate to within a pixel, it is sufficient to draw a cube by hand and use its measurements as the basis for all the rest of the tiles.
This way one can have complicated effects that change with time, effects that only occur at certain places or under certain circumstances, effects can be the targets of spells and abilities, and it is much easier to add visuals to applied effects. I feel certain I will find many more uses for this.
I have also grudgingly accepted that my game-play ideas require that the game is three-dimensional, so this weekend I added a third dimension to the map and to the base class for physical actors. I have decided that "proper" 3-D graphics is still not an option, so I am implementing an axonometric graphics renderer.
Isometric graphics makes use of an isometric projection, which is a special case of an axonometric projection. In an isometric projection, each three-dimensional axis is assigned a direction on the plane of the two-dimensional projection, the three directions are 120 degrees apart, and the scale of the axes are the same. This gives a view without perspective, as if the world is seen using only parallel rays, and these rays are all parallel to the vector (1, 1, 1).
In an axonometric projection, the view still has no perspective, but the rays are no longer parallel to (1, 1, 1), but rather to a vector of my choosing. So the axes' directions are no longer separated by 120 degrees, and are no longer at the same scale. Calculating the new angles and scales from the rays' direction vector would be a chore, but fortunately one does not need to do that. As most things in graphics go, getting it to look right is much more practical than making it be right. Since the axonometric tiles will be drawn by hand and the computer will only assemble them accurate to within a pixel, it is sufficient to draw a cube by hand and use its measurements as the basis for all the rest of the tiles.