bas

Revision as of 21:38, 22 February 2023 by CEObrainz (talk | contribs) (→‎BitIndex)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

bas files each represent an animation that can be called by an actor or cutscene. They contain a reference to an animation name, but not the animation file itself. They can be found at Actor/AS/{EventName}/{AnimationSequenceName}.bas in beventpacks and TitleBG.pack/Actor/AS, and Actor/AS/{AnimationSequenceName}.bas in bactorpacks.


Layout

Each bas file is made up of one list of elements, named Elements. Each element (Element0, Element1, etc) can be either a test to figure out what animation to play, or a call to play the animation.

Parameters

All nodes have Parameters, which determine what kind of node they are. They can be a control node, which helps decide which animation to play, or an animation node, which actually plays the animation.

Key Key Type Description Node Type Default value
TypeIndex int Type of node the Element is. Known types are listed below the table. - -
NoSync bool - Control -
JudgeOnce bool Tells the game to skip evaluating this node (and use the previous result) if the input value has not changed since the last time the node was run. Control False
InputLimit float - Control -
FileName str64 Name of the animation to play Animation -
Morph int Time to blend the previous animation into this one. Appears to be measured in frames. Animation -
SequenceLoop bool Determines whether a sequence (Used with TypeIndex 61) is set to repeat Control -

Parameter TypeIndex

Nodes with Blender are generally used to perform the same checks as those with Selector in the name, with a key difference: Blender nodes may evaluate multiple cases as true, and will blend the resulting animations together. Selector nodes will choose only the first case that evaluates to true.[check]

Index Name [1] Description Type
0 AbsTemperatureBlender Current world temperature. Evaluated by float range. Control
1 AbsTemperatureSelector Current world temperature. Evaluated by float range. Control
2 ArmorSelector What armor is currently equipped. Used only in Player_Wait.bas. Only observed working values are NoUpper, NoLower, NoAll.[2] Does not appear to accept armor actor names. Control
3 ArrowSelector Seems to check what arrow Link has equipped. However, the game only ever uses a StringArray of Empty and a default case. This is used to check whether Link has arrows in his bow, to determine how to blend his animations or to play different ones. Control
4 AttentionSelector - Control
5 BoneBlender - Control
6 BoneVisibilityAsset - -
7 BoolSelector Boolean evaluator - See #BitIndex[3][4][5] If false, the element specified by Child0 is evaluated. If true, Child1 is evaluated. Control
8 ButtonSelector - Control
9 ChargeSelector - Control
10 ClearMatAnmAsset - -
11 ComboSelector - Control
12 DiffAngleYBlender - Control
13 DiffAngleYSelector - Control
14 DirectionAngleBlender Compares to the movement analog stick's current orientation, in degrees, in counter-clockwise fashion. Accepts -359 to 360. (e.g. 270 and -90 both point directly to the right). Evaluated by float range. Control
15 DirectionAngleSelector Compares to the movement analog stick's current orientation, in degrees, in counter-clockwise fashion. Accepts -359 to 360. (e.g. 270 and -90 both point directly to the right). Evaluated by float range. Control
16 DistanceBlender Compares distance between Link and his current locked target[6]. Evaluated by float range. Control
17 DistanceSelector Compares distance between Link and his current locked target. Evaluated by float range. Control
18 DungeonClearSelector - Control
19 DungeonNumberSelector - Control
20 EmotionSelector - Control
21 EventFlagSelector Checks whether a GameData flag is true. The StringArray defines the flags to be checked. Known to accept 1 child plus a default case, but in a single instance there's no default case.[7] In another instance, both strings are flags. [8] If both are true, the first case evaluated as true will be run. Control
22 EyeSelector - Control
23 EyebrowSelector - Control
24 FaceEmotionSelector - Control
25 FootBLLifeSelector - Control
26 FootBRLifeSelector - Control
27 FootFLLifeSelector - Control
28 FootFRLifeSelector - Control
29 ForwardBentBlender - Control
30 ForwardBentSelector - Control
31 GearSelector - Control
32 GenerationSelector Int check - Unknown[9] In both referenced cases (used in NPC actorpacks), Value0 is 2, and Value1 is -2147483648, which is the negative 32-bit integer limit. Control
33 GrabTypeSelector Compares the LiftType of the actor that is being grabbed/lifted (from its bgparamlist). Known to accept as many as 24 children and a default case. Control
34 GroundNormalBlender - Control
35 GroundNormalSelector - Control
36 GroundNormalSideBlender - Control
37 GroundNormalSideSelector - Control
38 MaskSelector Checks the MaskType parameter of the currently equipped Head armor. Its children reference other elements to jump to if a matching MaskType is found, and a StringArray in its Extend determine the MaskType(s) to check for. Control
39 MatVisibilityAsset - -
40 MouthSelector - Control
41 NoAnmAsset Play no animation. Used to cancel evaluation. Animation
42 NoLoopStickAngleBlender - Control
43 NoLoopStickAngleSelector - Control
44 NodePosSelector Compares name of a bone, takes StrRef of the bone name. Unknown how it decides which bone name to compare the StrRef to.[10] Can be paired with an axis name (e.g. Toe_L,Z) to measure value on that axis. When used in this way, the node chooses the child corresponding to the highest value among those measured.[11] When no axis name is given, the vector to the origin is measured. [check] Control
45 PersonalitySelector - Control
46 PostureSelector - Control
47 PreASSelector Compares last played animation name, takes StrRef of animation name. Accepts up to 5 children.[12] Control
48 PreExclusionRandomSelector - Control
49 RandomSelector Picks a random node from the given nodes.[check] Control
50 RideSelector Compares the profile of the mount the actor is currently riding. Known to accept one Child, plus a default case, but might accept more or less.[check] Control
51 RightStickAngleBlender - Control
52 RightStickAngleSelector - Control
53 RightStickValueBlender - Control
54 RightStickValueSelector - Control
55 RightStickXBlender - Control
56 RightStickXSelector - Control
57 RightStickYBlender - Control
58 RightStickYSelector - Control
59 SelfHeightSelector - Control
60 SelfWeightSelector - Control
61 SequencePlayContainer Float comparison - Unknown[13] Control
62 ShaderParamAsset Plays material animation, takes StrRef of the animation name. Its Extend uses a secondary animation name for unknown purpose.[14][15] Animation
63 ShaderParamColorAsset - -
64 ShaderParamTexSRTAsset Plays texture transform animation, takes StrRef of the animation name. Animation
65 SizeBlender - Control
66 SizeSelector - Control
67 SkeltalAsset Plays model animation, takes StrRef of the animation name. Animation
68 SpeedBlender Compares actor's current movement speed. Evaluated by float range. Control
69 SpeedSelector Compares actor's current movement speed. Evaluated by float range. Control
70 StickAngleBlender Compares the movement analog stick's current orientation, in degrees, in counter-clockwise fashion. Accepts -359 to 360. (e.g. 270 and -90 both point directly to the right). Evaluated by float range. Control
71 StickAngleSelector Compares the movement analog stick's current orientation, in degrees, in counter-clockwise fashion. Accepts -359 to 360. (e.g. 270 and -90 both point directly to the right). Evaluated by float range. Control
72 StickValueBlender Range evaluation - Unknown[16] Control
73 StickValueSelector - Control
74 StickXBlender Compares the movement analog stick's current horizontal position, as a float value. Fully left is -1.0, fully right is 1.0. Control
75 StickXSelector Compares the movement analog stick's current horizontal position, as a float value. Fully left is -1.0, fully right is 1.0. Control
76 StickYBlender Compares the movement analog stick's current vertical position, as a float value. Fully down is -1.0, fully up is 1.0. Control
77 StickYSelector Compares the movement analog stick's current vertical position, as a float value. Fully down is -1.0, fully up is 1.0. Control
78 StressBlender - Control
79 StressSelector - Control
80 SyncPlayContainer Synchronously plays multiple child elements Animation
81 TemperatureBlender - Control
82 TemperatureSelector Range evaluation - Unknown[17] Control
83 TexturePatternAsset - -
84 TimeSelector Checks the current time. Observed values are Morning_A, Morning_B, Evening_B, Night_A, and Night_B. Evening_A is never used, but is assumed to exist. Known to accept any number of children along with a default case. Control
85 TiredBlender - Control
86 TiredSelector - Control
87 UseItemSelector - Control
88 UserAngle2Blender - Control
89 UserAngle2Selector - Control
90 UserAngleBlender - Control
91 UserAngleSelector - Control
92 UserSpeedBlender - Control
93 UserSpeedSelector - Control
94 VariationSelector - Control
95 WallAngleBlender - Control
96 WallAngleSelector - Control
97 WeaponDetailSelector Compares actor's equipped weapon subtype (from its bgparamlist [ProfileUser] WeaponSubtype value), takes StrRef of weapon subtype name Control
98 WeaponSelector Compares actor's equipped weapon profile (from its bxml ProfileUser value), takes StrRef of weapon profile name Control
99 WeatherSelector - Control
100 WeightBlender - Control
101 WeightSelector - Control
102 WindVelocityBlender - Control
103 YSpeedBlender - Control
104 YSpeedSelector - Control
105 ZEx00ExposureBlender - Control
106 ZEx00ExposureSelector - Control


Children

Control nodes will have Children, in addition to Parameters, which determine which Element to go to after the control node is evaluated. The properties of Children will be named Child0, Child1, etc, and each will have a single integer value, which will correspond to the Element number. e.g. Child0: 7 points to Element7.

Extend

All nodes have an Extend, which contains specific details about the node. Control node Extends will contain details about the comparison being performed, while animation nodes will contain information about the animation being played, such as: during which frames of the animation a weapon will deal damage if it hits something, when user input is ignored, when to draw weapon trails through the air for attack animations, etc.

Typed Array

A list of variables of a given type to use for various control comparisons. Corresponds directly to the Children of the node. i.e. if Value0 matches the value being compared against, the code will jump to the Element listed under Child0. If no comparison of a lower Child number has evaluated as true, automatically evaluates a Child whose value is "default" as true.[18][19]

BitIndex

Used with BoolSelector Parameters. Also has TypeIndex, which are used to perform the check.

  • 2 - Unknown (believed to check if Link has any armor equipped)[4]
  • 5 - Unknown (believed to check if Link is carrying an object)
  • 15 - Unknown. Appears in Player_WeaponEquipOn after an Attention Selector and a BitIndex 30 check, implying that it has something to do with shields.
  • 17 - Unknown (believed to check whether Link is airborne)
  • 30 - Whether or not Link has a shield equipped. (First Child is False, Second Child is True)[3]
  • 33 - Unknown (believed to check if Link is tired)[5]
  • 36 - Unknown (believed to check if Link is locked onto a target)
  • 37 - Whether IsBlunt is set to true in the equipped weapon’s bgparamlist
  • 38 - Unknown (believed to check if the current weapon is on fire). (First Child is False, Second Child is True)
  • 46 - Unknown (believed to check if Link is crouched)

Ranges

Used with control nodes that perform a Range evaluation. If the value being compared is above the Start value and below the End value, evaluates as true. Otherwise, moves on to the next value. (Unknown what happens if none of the Ranges evaluate to true, presumably game crash)

FrameCtrl

Used with animation nodes. The node itself is required, even if it is empty (i.e. none of the keys are specified)

Key Type Description Default value
Rate float Speed at which to play the animation. Higher numbers are faster. 1.0
StartFrame int - -
EndFrame int - -
LoopStopCount int - -
LoopStopCountRandom int - -
UseGlobalFrame bool - false
ReversePlay bool - false
Connect int The only observed values are 1, 2, and 3. -
AnmLoop int The only observed values are 1 and 2. [20] -

TriggerEvents

Used with Parameter TypeIndex 67. Possibly used with other animation node TypeIndexes, but none have so far been observed. Events which are triggered during this animation.

Key Type Description Default value
TypeIndex int Which type of event to fire. Known events are detailed below -
Frame int Which frame to fire the event on, relative to the frame numbers of the animation. Can be negative. -
Value strRef - -

Known TypeIndex values:

  • 0 - Used to play sound effects during animations. Known to accept any attack or enemy attack sound effect, but probably works with other sound files.[21]
  • 4 - Triggers the animation controller to transition back into the idle stance. The Frame value should be a few before the end of the actual animation, so that the controller can make the blending look natural.[22]
  • 7 - Call AS. Passes the strRef to the ASList to retrieve an AS file and starts evaluating it from Element0.
  • 14 - Seems to indicate an enemy has entered a state of being airborne.
  • 28 - Play audio. Able to play any bfwav file in PlayerVoice.bars.
  • 29 - Seems to determine when a weapon will bind to a bone. [23]


HoldEvents

Used with Parameter TypeIndex 67. Possibly used with other animation node TypeIndexes, but none have so far been observed. States that are entered into while the animation is playing.

Key Type Description Default value
TypeIndex int Which type of event to fire. Known events are detailed below -
StartFrame int Which frame to start the event on, relative to the frame numbers of the animation. Unknown if it can be negative. -
EndFrame int Which frame to end the event on, relative to the frame numbers of the animation. A value of -1 is treated as the ending frame of the animation. -
Value strRef - -

Known TypeIndex values:

  • 0 - Seems to allow Link's attack animations to combo into one another. New attack elements will not combo together if there is no TypeIndex 0 present in the Hold Events.
  • 2 - Seems to determine when some attacks (entries in Player_CutJumpSt and others) will connect with targets. Removing TypeIndex 2 causes animations to play halfway through. TypeIndex 2 also tends to have a StartFrame somewhere near the middle of the animation, and an end frame of -1.0, indicating that it may be responsible for blending certain attack animations into one another, particularly those that loop or combine.
  • 3 - Defines when an attack will deal damage. Value is the damage type. Left: slashing. Stab: piercing. Lower: blunt. [check]
  • 14 - Defines when an animation will block attack damage using Link's equipped shield.
  • 17 - Unknown
  • 22 - Unknown. Found in Link's Player_CutShieldRide.bas animation, and seems to correspond to the air effects under the board, but can't be applied to other attack animations.
  • 25 - Unknown. Appears to have something to do with Bone Control, as it is often observed with the !str32 Value "OnlyEye".
  • 35 - Unknown
  • 45 - Defines when to accept input to start the next attack.
  • 48 - Defines when to display the trails in the air during an attack.
  • 49 - Believed to define the animation frames during which an actor is resistant to knock back. Notably used during animations where the actor leaves the ground and in most cases, active during frames when actor is airborne.

References

  1. TypeIndex function table in the 1.5.0 executable
  2. Element32 of Player_Wait.bas, WiiU 1.5.0
  3. 3.0 3.1 Element1 of Player_CutNinja.bas, WiiU 1.5.0
  4. 4.0 4.1 Element0 of Player_FaceDefault.bas, WiiU 1.5.0
  5. 5.0 5.1 Element2 of Player_FaceDefault.bas, WiiU 1.5.0
  6. Element2 of Player_CutNinja.bas, WiiU 1.5.0
  7. Npc_Rito_Hearts_BandVisibilityOff.bas
  8. UR_M_Teba_Teba_DamageVisibility_On.bas
  9. Element7 of UH_C_Face_Talk.bas and Element3 of UH_C_Face_Default.bas
  10. Element0 of Player_LadderJump.bas, WiiU 1.5.0
  11. Element8 of UZ_M_Move_End.bas, WiiU 1.5.0
  12. Element11 of Player_CutChargeWait.bas, WiiU 1.5.0
  13. Element0 of Player_Move.bas, WiiU 1.5.0
  14. Element1 of Player_SkinColor.bas, WiiU 1.5.0
  15. Element2 of Player_SkinColor.bas, WiiU 1.5.0
  16. Element0 of Player_SwimAtnMove.bas, WiiU 1.5.0
  17. Element1 of Player_FaceDefault.bas, WiiU 1.5.0
  18. Element0 of Player_CutNinja.bas, WiiU 1.5.0
  19. Element3 of Player_FaceDefault.bas, WiiU 1.5.0
  20. Elements 10 and 11 of AncientDoctor_C_Face_Default.bas
  21. Compare Event0 of TriggerEvents and Event0 of HoldEvents for most of Link's attack animations
  22. Compare TriggerEvent TypeIndex 4 Frame value for an animation with the number of frames in the actual animation.
  23. Player_WeaponEquipOn.bas