Creating multiple versions of a character.

How would one go about implementing multiple forms of one characters, say in the case of a werewolf? Each form would have different characteristics, such as carrying capacity, and some different gameplay options (character can break more things as a wolf than as a human). I’m looking to implement this for both the viewpoint character and NPCs. Any suggestions? (I’m using Inform 7)

It is probably easiest to make different objects, and substitute them for each other when the change takes place.

But then what do I do with the original characters? Wouldn’t they still be standing around?

You would do something like this:

[code]To turn Bernie into a werewolf:
move werewolf to the location of Bernie;
remove Bernie from play.

To turn werewolf into Bernie:
move Bernie to the location of werewolf;
remove werewolf from play.[/code]
If your NPCs can carry things, or can enter containers, you may need to add some additional stuff, but this is the basic idea.

I ran into a similar issue with my game. I ended up using the extensions “Dynamic Objects” by Jesse McGrew. With it, you can create multiple instances of any type of object, including NPCs. If you want to create a potentially unlimited pack of werewolves, this is one way of handling it. When you’re done with them, though, be sure to delete the werewolves. Otherwise, they could keep multiplying. I’m not sure if that will eventually lead to game crashes or sluggish performance, but to be on the safe side, have some clause in there to delete the werewolves once you’re done with them.

I think this is solid life advice in general.

Thanks for all your help, guys. And yeah, werewolves multiplying is generally bad.

I think the answer depends a lot on how complex the objects are. If the person is carrying a lot of things or they have a lot of relations or Understand rules connected to them, it may be better to keep the object and use a state property to make the change. The disadvantage of that is you have to check the state variable every time you do something that would work differently depending on the state. But the advantage is you don’t have to redirect all the relations you’ve already set up.