A character's statistics, damage modifiers, and similar are derived traits, modified by equipment, temporary effects, intrinsics, and the like. It is clearly not desirable to recalculate all of these continually, instead, some means needs to be found to ensure that they are correct at all times but not recalculated from scratch every segment. There seem to be two approaches to doing this, as well as mixed approaches. One approach is to have a recalc function that causes the status to be recalculated from all the relevant sources, and have it be called whenever one of these things change. An alternative approach is to have each effect's removal routine undo whatever it did. The second clearly would give better performance, but there are weaknesses for certain kinds of status changes in that some changes are not easily reversable and effects are arbitrarily stackable. Any stat that is handled as a fractional multiplier has two associated risks -- firstly that mathematical operations like * and / destroy precision when used on fractions, and secondly that arbitrary stacking makes it possible to destroy consistancy because of multiplicative oddities (I think). If these kinds of stats can be avoided, then perhaps using the second method almost exclusively is possible. An additional argument for the first method is handling the loading of a savefile and thus the calculation of derived traits. It is undesirable to actually use the normal initialization for each object during savefile load -- there may be messages and side effects for initially wielding an object or quaffing something. However, it is also undesirable to save this state -- as it is supposed to be recalcuable, it's a waste of space in the savefile. We might want to use a recalc for this even if we use the second method, or alternatively have a safe initialization for the effects that merely reapplies the relevant effects to the calculated state.