Difference between revisions of "0x006A"

From SimsWiki
Jump to: navigation, search
(Use)
Line 12: Line 12:
 
==Use==
 
==Use==
 
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.
 
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.
 
[[Image:BHAVoperands.JPG|thumb|300px|right|Operand editing]]
 
  
 
{| class="wikitable"  
 
{| class="wikitable"  
 
|-
 
|-
!Operand!!Description!!Operand Values
+
!Operand!!Description!!colspan="2"|Operand Values
 
|-
 
|-
|0 & 1||colspan="2"|Variable number used for '''Animation'''. See operand 2 - bit 3 for clarification on what it refers to.
+
|0 & 1||colspan="2"|Variable number used for '''Animation'''. See operand 2 - bit 3 for clarification on what it refers to.||rowspan="3"|[[Image:BHAVoperands.JPG|thumb|300px|right|Operand editing]]
 
|-
 
|-
 
|2 - bit 1||Controls "Flip Flag"||off: False<br>on: True<br>Over-riden by operand 8 - bit 1
 
|2 - bit 1||Controls "Flip Flag"||off: False<br>on: True<br>Over-riden by operand 8 - bit 1
Line 25: Line 23:
 
|2 - bit 2||Controls "Anim Speed"||off: --<br>on:Temp 0x0002
 
|2 - bit 2||Controls "Anim Speed"||off: --<br>on:Temp 0x0002
 
|-
 
|-
|2 - bit 3||Controls animation number||off: Literal, operands 0 and 1 give the [[Byte Order|low and high order byte]] respectively.<br>on: Param, operands 0 and 1 give the [[Byte Order|low and high order byte]] respectively.
+
|2 - bit 3||Controls animation number||colspan="2"|off: Literal, operands 0 and 1 give the [[Byte Order|low and high order byte]] respectively.<br>on: Param, operands 0 and 1 give the [[Byte Order|low and high order byte]] respectively.
 
|-
 
|-
|2 - bit 4||Controls "Interuptable"||off: False<br>on: True
+
|2 - bit 4||Controls "Interuptable"||colspan="2"|off: False<br>on: True
 
|-
 
|-
|2 - bit 5||Controls "Start at tag"||off: --<br>on:Temp 0x0000
+
|2 - bit 5||Controls "Start at tag"||colspan="2"|off: --<br>on:Temp 0x0000
 
|-
 
|-
|2 - bit 6||Controls "Trans to Idle"||off: False<br>on: True
+
|2 - bit 6||Controls "Trans to Idle"||colspan="2"|off: False<br>on: True
 
|-
 
|-
|2 - bit 7||Controls "Blend out"||off: True<br>on: False<br>i.e. opposite way around from normal
+
|2 - bit 7||Controls "Blend out"||colspan="2"|off: True<br>on: False<br>i.e. opposite way around from normal
 
|-
 
|-
|2 - bit 8||Controls "Blend in"||off: True<br>on: False<br>i.e. opposite way around from normal
+
|2 - bit 8||Controls "Blend in"||colspan="2"|off: True<br>on: False<br>i.e. opposite way around from normal
 
|-
 
|-
|3||Animation speed||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 ---.
+
|3||colspan="3"|'''Animation speed'''<br>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||colspan="2"|Event tree [[BHAV]] to run while the animation is playing, [[Byte Order|low and high order bytes]] respectively.
+
|4 & 5||colspan="3"|Event tree [[BHAV]] to run while the animation is playing, [[Byte Order|low and high order bytes]] respectively.
 
|-
 
|-
|6||colspan="2"|Reference a specific '''Animation''' string set. The choices are any of the [[STR#STR.23|String Resources]] that represent animations, for example 0x81 is AdultAnims. operands 0 and 1 give the [[Byte Order|low and high order byte]] respectively of the animation string within that animation set.
+
|6||colspan="3"|Reference a specific '''Animation''' string set. The choices are any of the [[STR#STR.23|String Resources]] that represent animations, for example 0x81 is AdultAnims. operands 0 and 1 give the [[Byte Order|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<br>01: semiglobal<br>02: global
+
|7||The "scope" of event tree specified in operands 4 & 5||colspan="2"|00: private<br>01: semiglobal<br>02: global
 
|-
 
|-
|8 - bit 1||Controls "Flip Flag"||off: See operand 2 - bit 1<br>on: Temp 0x0003
+
|8 - bit 1||Controls "Flip Flag"||colspan="2"|off: See operand 2 - bit 1<br>on: Temp 0x0003
 
|-
 
|-
|8 - bit 2||Controls "Sync to last anim||off: False<br>on: True
+
|8 - bit 2||Controls "Sync to last anim||colspan="2"|off: False<br>on: True
 
|-
 
|-
|8 - bits 3 & 4||colspan="2"|Unused?
+
|8 - bits 3 & 4||colspan="3"|Unused?
 
|-
 
|-
|8 - bit 5||Controls "Use controlling object as anim souce||off: False<br>on: True
+
|8 - bit 5||Controls "Use controlling object as anim souce||colspan="2"|off: False<br>on: True
 
|-
 
|-
|2 - bit 6||Controls "short blend out"||off: False<br>on: True
+
|2 - bit 6||Controls "short blend out"||colspan="2"|off: False<br>on: True
 
|-
 
|-
|2 - bit 7||Controls "both normal AND flipped anims"||off: False<br>on: True
+
|2 - bit 7||Controls "both normal AND flipped anims"||colspan="2"|off: False<br>on: True
 
|-
 
|-
  

Revision as of 14:58, 25 April 2011

Animate Sim
OpCode:0x006A
Game Version:The Sims 2


Contents

Overview

This is the Animate Sim primitive. Any time a sim moves, it uses this function.

Animate must call an ANIM file refered to by placing the name in a text string and refering to the string by number, and can also call another BHAV file as well. Animate sim is a fairly complex primitive, and this article (as of now) doesn't explain it all.

Use

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.

Operand Description Operand Values
0 & 1 Variable number used for Animation. See operand 2 - bit 3 for clarification on what it refers to.
Operand editing
2 - bit 1 Controls "Flip Flag" off: False
on: True
Over-riden by operand 8 - bit 1
2 - bit 2 Controls "Anim Speed" off: --
on:Temp 0x0002
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
on: True
2 - bit 5 Controls "Start at tag" off: --
on:Temp 0x0000
2 - bit 6 Controls "Trans to Idle" off: False
on: True
2 - bit 7 Controls "Blend out" off: True
on: False
i.e. opposite way around from normal
2 - bit 8 Controls "Blend in" off: True
on: False
i.e. opposite way around from normal
3 Animation speed
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. The choices are any of the String Resources that represent animations, for example 0x81 is AdultAnims. 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
01: semiglobal
02: global
8 - bit 1 Controls "Flip Flag" off: See operand 2 - bit 1
on: Temp 0x0003
8 - bit 2 Controls "Sync to last anim off: False
on: True
8 - bits 3 & 4 Unused?
8 - bit 5 Controls "Use controlling object as anim souce off: False
on: True
2 - bit 6 Controls "short blend out" off: False
on: True
2 - bit 7 Controls "both normal AND flipped anims" off: False
on: True
3 The Object for which animations are to be stopped. The choices are any of the many variables and attributes that are part of SimAntics. Where the variable type can have many of them, e.g. Local variables, operands 4 and 5 give the low and high order byte respectively.
4 & 5 Variable number used for Object
6 Reference a specific Animation string set. The choices are any of the String Resources that represent animations, for example 0x81 is AdultAnims. operands 0 and 1 give the low and high order byte respectively of the animation string within that animation set.
7 Controls the type of Animation to stop 00: a specific animation as detailed by operand 6
01: all Overlay animations
02: all Full Body animations
03: all animations
04: Carry Poses
05: Idle Animations
06: Gesture Animations
07: Reaction Animations
08: Normal Animations
09: Faial Animations
0A: Facial Idle Animations
0B: Receptivity Animations
8 Controls "Priority" 00: low
01: medium
02: high
9 thru 15 Unused

See also


The Details

Like all BHAVs, Animate sim is called in it's own line, and is passed certain info from the operand list. Just for clarity, this is how I numbered the operands:


A lovely screenshot

Animate Sim essentially works like this: When called, it finds the necessary animation (stored in an ANIM resource) by looking in a STR# (text list) file for the name of the animation, and finds the animation with the right name. Then it applies any changes made in the relevant operands to the animation, and plays it.

I am not going to cover the Operands in order, because it's too much of a pain (they all interrelate so much).


Operand 7

Operand 7 contains the last two digits of the instance number of the default STR# file. (the one it finds the ANIM name in)

Instance number 0x00000081 is the most commonly-used STR#. It contains all the names of the ANIMs that adults can perform relative to the object. At runtime, sims 2 looks for this STR# in the same group as the calling object; if not found there, it "fallsback" and looks in the object's semi-globals.

STR# instances 0x82 (ChildAnims), 0x89 (ToddlerAnims), 0x8A (TeenAnims), 0x8B (ElderAnims) and 0x91 (Baby) all work exactly the same way, and one needs to exist for every age group that can use the object. Instance number 0x84 accesses the Locomotion Anims file. Selecting either adult anims (0x82) or global anims (0x80) will cause the game to select the animation from the text list necessary for the age group of the performing sim.

Note: There doesn't need to be a seperate call to Animate Sim for every age group. Animate Sim 
will find the appropriate STR# file for the age of the sim it applies to. If a STR# file does not 
exist for teens, young adults or elders, the adult animation may be played in its place.

Any other instance number (including 00), if not found in the group, falls back to the semiglobals, and looks in the ObjectAnims STR# 86. Obviously, object animations cannot apply to sims unless they share a common bone structure, and Animate Sim will throw an error and immediately stop whatever the sim was doing.


Operands 2 & 1

Why 2 and 1? Why not 1 and 2? Because, like anything else in BHAVs, all 4 digit numbers are stored with the 16s and 1s first, then the 65536s and 256s (these are hexadecimal). Example: the hex number 1234 would be stored in two BHAVs as 34 12.

Operands 2 & 1 can be two things. Either they define the line in the STR# file (defined in opcode 7) that has the desired animation's name, or they define the parameter that has the number that defines the line in the STR# file. (try saying that three times fast!)

Whether these numbers refer to the actual text line, or the parameter, depends on the next operand.

Operand 3

This is THE operand. It defines so much stuff it's easier if I make a graphic.


These are controlled by Opcode 3

Basically, anything highlighted in red is decided by this opcode.

Going through them one by one....

  1. Flipped If flipped is false, the animation plays as normal. If flipped is 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.
  2. 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.
  3. [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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.

Operand Flipped Anim speed Parameter Interruptible
00 F F F F
01 T F F F
02 F T F F
03 T T F F
04 F F T F
05 T F T F
06 F T T F
07 T T T F
08 F F F T
09 T F F T
0A F T F T
0B T T F T
0C F F T T
0D T F T T
0E F T T T
0F T T T T

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 4

Operands 6 & 5

Another 4-digit hex number, this one specifies the event tree to run while the animation is playing. Anything you could run in a BHAV line, you can run here. If set to 0000, no event tree is run.

Operand 8

This operand deals with the "scope" of event tree specified in operands 6&5, and has no effect when there isn't an event tree. Possible values are 00 (private), 01 (semiglobal), and 02 (global).

Operand 9

Operand 9 is like operand 3: it's several flags in one.

  1. 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.
  2. 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.
  3. Use controlling object as anim source Don't know, to be honest.
  4. 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.

Operand 10

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.

Operands 12 & 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.

Operand 13

Priority. 00 is low, 01 is medium, 02 is high. I have seen priority 03, but SimPE doesn't know what to do with it. Exactly what the priorities do...?

Operands 14, 15 & 16

As far as I can tell, these are all unused. Opcode 14 seems to be set to FF most of the time, but I don't see any difference when it's changed.

See also

Personal tools
Namespaces

Variants
Actions
Navigation
game select
Toolbox