|Game Version:||The Sims 2|
This is the Animate Sim primitive. Any time a sim moves, it uses this function.
Animate Sim finds the necessary animation (stored in an ANIM resource) which is referred to by placing the name in a text string and referring to the string by number, and can also call another BHAV file as well. Then it applies any changes made in the relevant operands to the animation, and plays it. Animate Sim is a fairly complex primitive, and this article (as of now) doesn't explain it all.
There is an instruction wizard for this instruction, but several parts of it don't work, so the following table details the meaning of each of the operands allowing you to edit the instruction by hand instead.
|0 & 1||Variable number used for Animation. See operand 2 - bit 3 for clarification on what it refers to.|
|2 - bit 1||Controls "Flip Flag"||off: False - the animation plays as normal|
on: True - the animation is, well, flipped, along a plane dividing the sim into left and right. The best example is the bed. If a sim gets in on one side, the animation plays normally. If the sim gets in on the other, the animation is flipped.
Over-riden by operand 8 - bit 1
|2 - bit 2||Controls "Anim Speed"||off: Animation speed is contained in Operand 3|
|2 - bit 3||Controls animation number||off: Literal, operands 0 and 1 give the low and high order byte respectively.|
on: Param, operands 0 and 1 give the low and high order byte respectively.
|2 - bit 4||Controls "Interuptable"||off: False|
|2 - bit 5||Controls "Start at tag"||off: --|
on:Temp 0x0000 - This forces the animation to play from a starting point mid-way through the animation. If selected, the animation will begin at the event tag referred to by the value in Temp 0x0000. Event tags are defined in the original ANIM file, and so this option will not work on all animations.
|2 - bit 6||Controls "Trans to Idle"||off: False|
|2 - bit 7||Controls "Blend out"||off: True|
i.e. opposite way around from normal
|2 - bit 8||Controls "Blend in"||off: True|
i.e. opposite way around from normal
This operand controls the speed of the animation. The default value is 0x20, but it can be set to anything between 0x01 and 0xFF (0x00 results in an error). Values from 0x01 to 0x7F make the animation play forward, with the higher the number, the faster the animation. HOWEVER: Values above 0x7F (or from 0x80 to 0xFF) make the animation run Backwards, with larger numbers making the animation slower. So 0x7F would make a fast, forward animation, and 0x80 would make a fast, backward animation. For the technically minded, this value is stored in a fixed point format (1 sign bit, 3 integer bits, 4 fractional bits). Consequently, 0x20 represents a speed multiplier of 1 (the normal rate), and 0xE0 represents a speed multiplier of -1 (normal rate played backwards). Note, that in SimPE's textual display of this operand, nothing changes the display away from ---.
|4 & 5||Event tree BHAV to run while the animation is playing, low and high order bytes respectively.|
|6||Reference a specific Animation string set by instance ID (or specifically by the last byte of the instance ID). The choices are any of the String Resources that represent animations, for example 0x81 refers to AdultAnims (which has an instance ID of 0x00000081). More details in How SimAntics chooses and Animations. Operands 0 and 1 give the low and high order byte respectively of the animation string within that animation set.|
|7||The "scope" of event tree specified in operands 4 & 5||00: private|
|8 - bit 1||Controls "Flip Flag"||off: See operand 2 - bit 1|
on: Temp 0x0003 - It should be noted that the global function 0x0151 loads the Sim's handedness into temp 3, so that animations with a handedness preference (i.e. - writing left or right handed) can use this flag to play the correctly flipped version of this animation.
|8 - bit 2||Controls "Sync to last anim||off: False|
|8 - bits 3 & 4||Unused?|
|8 - bit 5||Controls "Use controlling object as anim source"||off: False|
|8 - bit 6||Controls "Not hurryable"||off: False - Animation will play about twice as fast if the Sim is in the middle of an emergency (i.e - there's a fire on the lot)|
|9||Plain and simple, it defines the IK (inverse kinematic) object. IK objects, as far as I understand, deal with aligning sim animations to objects. For example: when a sim opens a fridge, an IK object deals with making the sims hand grab the handle. And that's about all I know.|
|10 & 11||Yes, yet another 4-digit hexadecimal number, dealing with the IK object identifier. Since I know almost nothing about IK objects, I know nothing about the identifiers.|
03: max - Overrides carrying animations
I'm assuming these priorities control what overlays and background animations are overriden by this primitive
|13 thru 15||Unused|
Going through them one by one....
- Anim Speed in temp 2 Normally, the animation speed is contained in Operand 4 (more on this later). When this is true, however, the animation speed is called from temporary 0x0002. This is usually not useful if you're modding the original Maxis stuff, since temp 2 is often used for something else.
- [parameters 0x0000] As mentioned in opcodes 2 & 1, this defines whether 2&1 refer to the literal number of the needed text line, or to the parameter that contains the text line.
- Interruptible When true, the animation can be interrupted, and the BHAV continues on to the next line. I haven't seen this used much, probably because it only interrupts this one animation. If you cancel an action in the middle, and this is true, the animation will be stopped, but nothing else in the calling BHAV will be.
- Start at tag in temp 0 This forces some animations to play from a starting point mid-way through the animation. If selected, the animation will begin at the event tag refered to by the value in temp 0. Event tags are defined in the original anim file, and so this option may not work on all animations.
- Trans to idle Same as above, I have no idea. I think it means the animation finishes by blending the end of the animation into the idle pose, but this is only a hopeful guess.
- No Blend Out First, my conjectures on blending: when an animation is blended with the one before or after, Animate Sim treats them as one long animation, and meshes them together, producing a smoother overall movement. This seems to be supported by what I saw in the game, but keep in mind, I found out all this stuff by changing a file, then watching it in-game, so it could just be my eyes. But I think it is blending the animations.
- No Blend In Same as above. Another note: I have seen a few animations (somewhere, I lost them) that looked like blending animations. For all I know, maybe these tags refer to them.
So that's what they do. How they're all contained is in flags, which use the binary number. In short, when this number is translated into binary, a 1 means true, a 0 means false. Using the above list, a 1 in the ones place means flipped is true. a 1 in the tens (or is it twos?) place means anim speed in temp 2 is true. And so on, throughout the list. Since that can be a bit confusing, here's a table of a few of the first values.
And so on, and so forth, throughout all the possible values from 00 to FF. And I know, the table is confusing too. Sorry.
Operand 8 is like operand 2: it's several flags in one.
- Flip flag in temp 3 This states that the flip flag can be found in temp 3 (and not in operand 3). It should be noted that the global function 0x0151 loads the sim's handedness into temp 3, so that animations with a handedness preference (ie - writing left or right handed) can use this flag to play the correctly flipped version of this animation.
- Synch to last anim I presume this means to synchronize this animation with the previous one. Since most in-game objects that involve object-sim interactions have the object animation right before the sim animation, this makes sense.
- Use controlling object as anim source Don't know, to be honest.
- Not hurryable Also don't know.
Unfortunately, these flags aren't as simple as operand 3. Flip in temp 3 and Synch are in the expected places in the binary (bits one and two respectively), but Anim resource is bit 16, and Not hurryable is bit 32! This leaves two flags in the middle that don't seem to do anything. I don't know if this is just an oversight in SimPE, or an unusual anomaly in the program itself. More testing would be appreciated.