I want to talk about bodyparts for a bit. There are a couple
separate pieces of relevant information Simpler first:

* Who maintains bodypart information? Does every living object have
its own, separate body-part information, or is it only stored once, in
a race object, which each living points to?

Arguments for storing body part info on livings:
Simpler, easier to manage, more flexible (chopping off arms, etc).

Arguments against:
Big memory hog.

The argument against can be alleviated if we can store the body part
information *efficiently*, so I'll go on to that.

I am thinking that rather than defining custom bodyparts for each
living object, we simply make a standard "Mr Potato-Head" style
archive of bodyparts, and assemble our living objects out of them
That way, we can store simple binary flags for the monsters for which
body parts they have (and use no more than a single integer :)

Here's a tenative list of body parts; if we use an integer, we're
allowed a max of 32:

1. Head
2. Neck
3. Chest
4. Stomach
5. Groin
6. Left Arm (Upper Arm)
7. Right Arm (Upper Arm)
8. Left Wrist
9. Right Wrist
10. Left Hand
11. Right Hand
12. Left Leg
13. Right Leg
14. Left Knee
15. Right Knee
16. Left Calf
17. Right Calf
18. Left Foot
19. Right Foot
20. Back
21. Extra Left Arm
22. Extra Right Arm
23. Middle Left Leg (for insects)
24. Middle Right Leg (for insects)
25. Back Left Leg
26. Back Right Leg
27. Tail

This is a LOT of bodyparts, yes. However, watch what you can do:
Say I want a large, platemail vest. Which body parts does it protect?
I can fine-tune it using bit flags quite nicely, like this:

where_worn = NECK | CHEST | BACK | LEFT_ARM | RIGHT_ARM | STOMACH

To check if this creature is capable of wearing plate mail in general,
all I have to do is

if( where_worn | victim()->query_parts() == where_worn ) ... yes, they
have all the body parts used by plate mail.

And to find out whether the body parts for platemail are free:

if( where_worn | victim()->currently_worn() ) ... there is a conflict.

And finally, once they put it on, in the victim:

set_worn_flags( int where_worn ) {
   my_worn_armour_flags |= where_worn;
}

etc. etc. Bit flags keep things pretty simple.

As far as getting names of bodyparts, I suspect we'll just have some
kind of centralized object to query (similar to the race objects
mentioned above). The results given would probably be based off
of the creature's type.

Anyway, getting this message typed and sent has been way more effort
than I wanted to put in, so I'm stopping now (my browser crashed
and I had to go searching through RAM to get my message back).
Enjoy. Reply. Bye.

-- Acius