wiihackerz101
Posts : 49 Join date : 2010-03-07 Location : In the Wii's Nand
| Subject: Brylt & Brlan Documentaion ( How to edit ) Tue 9 Mar - 21:04 | |
| We will First be Talking about Brylt:Note in order to follow this tutorial you must have a working benzin. BRLYT Outline StructureThe starting point to all xmlyt files looks a lot like the following. There are a few tweaks that can be made to this, but not many, and these are not required. Comments have been added and these are marked with '#'. - Code:
-
<?xml version="1.0"?> <xmlyt> <tag type="lyt1"> # LYT1 Start - defines screen resolution <a>00000001</a> <size> <width>608.000000</width> <height>456.000000</height> </size> </tag> # LYT1 End <tag type="txl1"> # TXL1 Start - lists the images used in the banner <entries> <# REPLACE START> <# See Texture List below> <# REPLACE END> </entries> </tag> # TXL1 End <tag type="mat1" count="0"> # MAT1 Start - defines certain properties that are applied to the images in the banner. The images were listed in TXL1 above. <# REPLACE START> <# See Material List below> <# REPLACE END> </tag> # MAT1 End <tag type="pan1" name="RootPane"> # PAN1 Start - marks the start of the pane header <flags>01-04</flags> <alpha>ff-00</alpha> <coords> <x>0.0000000000000000</x> <y>0.0000000000000000</y> <z>0.0000000000000000</z> </coords> <flip> <x>0.000000</x> <y>0.000000</y> </flip> <rotate>0.000000</rotate> <zoom> <x>1.0000000000</x> <y>1.0000000000</y> </zoom> <size> <width>608.000000</width> <height>456.000000</height> </size> </tag> # PAN1 End - end of the pane header, but not the end of the pane <tag type="pas1" /> # PAS1 Start - marks the starts of the pane <# REPLACE START> <# See Picture List below> <# REPLACE END> <tag type="pae1" /> # PAS1 End (PAE1 = Pane End) <tag type="grp1" name="RootGroup"> # GRP1 Start <subs> </subs> </tag> # GRP1 End </xmlyt>
At the moment, this xmlyt does not include any images, it is necessary to add detail to the three points (Texture, Material, Picture) in the xmlyt above that are marked by <# REPLACE>. Detail on each of these sections is presented below: Texture List
The xmlyt starts by listing the images (TPL Textures) that are in the banner. To add/delete an image start here. - Code:
-
<name>Background.tpl</name> Material ListThe xmlyt then defines the materials. Materials are like sheets of paper that move around as defined in the brlan. In the materials section you give the material a name and define which tpl image sits on that material - it must be one of the images specified in txl1. To add or delete an image, also add or remove a section like this: - Code:
-
<entries name="BackgroundMaterial"> <colors> <black_color>0</black_color> <black_color>0</black_color> <black_color>0</black_color> <black_color>0</black_color> <white_color>255</white_color> <white_color>255</white_color> <white_color>255</white_color> <white_color>255</white_color> <unk2>255</unk2> <unk2>255</unk2> <unk2>255</unk2> <unk2>255</unk2> <tev_k>0xffffffff</tev_k> <tev_k>0xffffffff</tev_k> <tev_k>0xffffffff</tev_k> <tev_k>0xffffffff</tev_k> </colors> <flags>00800111</flags> <material name="Background.tpl"> <wrap_s>00</wrap_s> <wrap_t>00</wrap_t> </material> </entries>
Picture ListNext you define the attributes of the material (they are listed by material name as defined in ('mat1', . You can define the size of the image here, and also it's position on the pane. To add/remove an image from the banner you also need to add/remove a section like this: - Code:
-
<tag type="pic1" name="BackgroundPicture"> <flags>01-04</flags> <alpha>ff-00</alpha> <coords> <x>0.00000000000000000000</x> <y>0.00000000000000000000</y> <z>0.00000000000000000000</z> </coords> <flip> <x>0.000000</x> <y>0.000000</y> </flip> <rotate>0.000000</rotate> <zoom> <x>1.0000000000</x> <y>1.0000000000</y> </zoom> <size> <width>256.000000</width> <height>256.000000</height> </size> <tpl name="BackgroundMaterial"></tpl> <colors> <vtx>0xFFFFFFFF</vtx> <vtx>0xFFFFFFFF</vtx> <vtx>0xFFFFFFFF</vtx> <vtx>0xFFFFFFFF</vtx> </colors> <coordinates> <set> <coord>0.000000</coord> <coord>0.000000</coord> <coord>1.000000</coord> <coord>0.000000</coord> <coord>0.000000</coord> <coord>1.000000</coord> <coord>1.000000</coord> <coord>1.000000</coord> </set> </coordinates> </tag>
Here is a full sample XMLYT Code - Spoiler:
- Code:
-
<?xml version="1.0"?> <xmlyt> <tag type="lyt1"> <a>00000001</a> <size> <width>608.000000</width> <height>456.000000</height> </size> </tag> <tag type="txl1"> <entries> <name>Background.tpl</name> </entries> </tag> <tag type="mat1" count="1"> <entries name="BackgroundMaterial"> <colors> <black_color>0</black_color> <black_color>0</black_color> <black_color>0</black_color> <black_color>0</black_color> <white_color>255</white_color> <white_color>255</white_color> <white_color>255</white_color> <white_color>255</white_color> <unk2>255</unk2> <unk2>255</unk2> <unk2>255</unk2> <unk2>255</unk2> <tev_k>0xffffffff</tev_k> <tev_k>0xffffffff</tev_k> <tev_k>0xffffffff</tev_k> <tev_k>0xffffffff</tev_k> </colors> <flags>00800111</flags> <material name="Background.tpl"> <wrap_s>00</wrap_s> <wrap_t>00</wrap_t> </material> </entries> </tag> <tag type="pan1" name="RootPane"> <flags>01-04</flags> <alpha>ff-00</alpha> <coords> <x>0.0000000000000000</x> <y>0.0000000000000000</y> <z>0.0000000000000000</z> </coords> <flip> <x>0.000000</x> <y>0.000000</y> </flip> <rotate>0.000000</rotate> <zoom> <x>1.0000000000</x> <y>1.0000000000</y> </zoom> <size> <width>608.000000</width> <height>456.000000</height> </size> </tag> <tag type="pas1" /> <tag type="pic1" name="BackgroundPicture"> <flags>01-04</flags> <alpha>ff-00</alpha> <coords> <x>0.00000000000000000000</x> <y>0.00000000000000000000</y> <z>0.00000000000000000000</z> </coords> <flip> <x>0.000000</x> <y>0.000000</y> </flip> <rotate>0.000000</rotate> <zoom> <x>1.0000000000</x> <y>1.0000000000</y> </zoom> <size> <width>830.000000</width> <height>456.000000</height> </size> <tpl name="BackgroundMaterial"></tpl> <colors> <vtx>0xFFFFFFFF</vtx> <vtx>0xFFFFFFFF</vtx> <vtx>0xFFFFFFFF</vtx> <vtx>0xFFFFFFFF</vtx> </colors> <coordinates> <set> <coord>0.000000</coord> <coord>0.000000</coord> <coord>1.000000</coord> <coord>0.000000</coord> <coord>0.000000</coord> <coord>1.000000</coord> <coord>1.000000</coord> <coord>1.000000</coord> </set> </coordinates> </tag> <tag type="pae1" /> <tag type="grp1" name="RootGroup"> <subs> </subs> </tag> </xmlyt>
BRLAN Specifies how to animate the items prescribed in the brlyt. There are three types: banner_start.brlan - specifies a different animation when the banner is first opened banner_loop.brlan - specifies a repeating (looping) animation to play once the banner_start.brlan has finished banner.brlan - is like a banner_loop.brlan, but starts immediately, i.e. there is no starting animation All of these files look identical. The filename tells the wii when to play them. there are more complicated brlan names in the disc channel to handle different animations for different scenarios (e.g. disc in / disc out), and in the System Menu you will find brlan's with random and various names. framesize
Specifies how many frames are in the animation, then it will loop again. a framesize of 60 will give approximately one second of animation. all brlans start with a - Code:
-
<?xml version="1.0"?> Then there is a xmlan tag with the version of benzin used, number of frames of animation, and the flags. - Code:
-
<xmlan version="1.1.0BETA" framesize="7" flags="00"> then there is the name of the pane or material we are animating. This also has the type with 1 for material, and 0 for pane to animate. - Code:
-
<pane name="4x3" type="0"> then there is the type of animation done to the material or pane - Code:
-
POSSIBILITIES: ============= RLPA - Pane Animation RLTS - Texture Sequence ? RLTP - Texture Pattern ? RLVC - Vertex Colors RLMV - Material Colors RLVI - Vertex Index ? example: <tag type="RLVC"> <entry type="16"> <triplet> <frame>0.00000000000000000000</frame> <value>210.000000000000000000</value> <blend>0.00000000000000000000</blend> </triplet> <triplet> <frame>6.00000000000000000000</frame> <value>0.00000000000000000000</value> <blend>0.00000000000000000000</blend> </triplet> </entry> </tag> </pane> </xmlan>
and that is a sample xmlan file. that is just a very simple example. Detailed Descriptionnow we'll try to explain a little more. RLTP, RLPA, RLTS, RLVC, RLVI currently all use the same entry type list - Code:
-
"X Translation" "Y Translation" "Z Translation" "X Flip" "Y Flip" "Angle" "X Zoom" "Y Zoom" "Width" "Height" "0x0A" "0x0B" "0x0C" "0x0D" "0x0E" "0x0F"
the items in this list are mainly to do with RLPA. the other types just use this list RLMC has gotten it's own list as it has certain attributes - Code:
-
"0x00" "0x01" "0x02" "0x03" "Blackcolor R" "Blackcolor G" "Blackcolor B" "Blackcolor A" "Whitecolor R" "Whitecolor G" "Whitecolor B" "Whitecolor A" "0x0C" "0x0D" "0x0E" "0x0F"
unfortunately the numbered ones in this list have not yielded results that I have been told yet. RLVC has been given it's own list now too - Code:
-
"Top Left R" "Top Left G" "Top Left B" "Top Left A" "Top Right R" "Top Right G" "Top Right B" "Top Right A" "Bottom Left R" "Bottom Left G" "Bottom Left B" "Bottom Left A" "Bottom Right R" "Bottom Right G" "Bottom Right B" "Bottom Right A" "16" == Alpha Transparency for whole image
these are the colors for the different corners of the pic1 section Here is a Sample XMLAN Code - Spoiler:
- Code:
-
<?xml version="1.0"?> <xmlan framesize="60" flags="01"> <pane name="SpinMat" type="0"> <tag type="RLPA"> <entry type="Angle"> <triplet> <frame>0.000000000000000</frame> <value>-360.000000000000000</value> <blend>-6.000000000000000</blend> </triplet> <triplet> <frame>60.000000000000000</frame> <value>-720.000000000000000</value> <blend>-6.000000000000000</blend> </triplet> </entry> </tag> </pane> </xmlan>
Thats all on how to edit Banners with Benzin. Below is a more detailed documentation... - Spoiler:
= brylt files= A guide to working with these files is maintained [[Editing_Banners_with_Benzin|here]]. ===lyt1=== Defines the screen resolution to print the elements on. :* counter, purpose unknown :* Screen resolution in pixels :** Width in pixels :** Height in pixels
===txl1=== Lists the associated image names :* Generic entry header :** Lists the filename of the associated images
===fnl1=== Specifies a brfont file for use in plain text rendering :*
===mat1=== Defines the materials. Materials are essentially layers containing specified elements. Material entries contain images and other elements, which must be specified in txl1. Materials do not need to contain images, and can contain data for overlays, strokes, text or other animation effects. :* Defines the name of a material sheet :** Specifies colours to apply to the element :*** Four sequential tags from 0 to 255 representing RGBA values. Multiplies the color over the black part of the Alpha Channel. :*** Four sequential tags from 0 to 255 representing RGBA values. Multiplies the color over the white part of the Alpha Channel. :*** Four sequential tags from 0 to 255 representing RGBA values. Unconfirmed as representing unknown color values within an image. :*** Four sequential tags from 0x00000000 to 0xFFFFFFFF. Defines the vertex colours. Essentially, the colours of each corner. :** A 4 byte flag. Unknown values. :** Image file from the txl1, if there is one :*** Open_GL wrap tag for X :*** Open_GL wrap tag for Y :**** 00 = No wrap. Repeats edges if picture is too small. (Clamp) :**** 01 = Repeats. Continuously repeats the image across the panel while keeping orientation. (Repeat) :**** 02 = Mirrors. Mirrors across the panel, print the following image as a reverse of the previous. (Mirror) :**** 03 = MaxTex. I.... don't know what this is. :** Specifies values to apply to element, change if using wrap tags. :*** = usually set to 0.0000000000 :*** = usually set to 0.0000000000 :*** = usually set to 0.0000000000 :*** = usually set to 1.0000000000, if using enter the amount of times the image needs to repeat to fill. :*** = usually set to 1.0000000000, if using enter the amount of times the image needs to repeat to fill. :** Unknown tags, where X represents a value. Contains some sort of data tags.
===pan1=== Defines the panes. Each brlyt must contain a RootPane as the base, with other panes placed on top. Panels can contain multiple materials for manipulation by the brlan file. Each pan1 is associated with a pas1 and a pae1 file. Pan1 tags are also found within all sections associated with pan1. Referred for size constraints. :* Flags to determine the type of panel. This alters how the images are rendered in widescreen and 4:3. ::01-04 - used for RootPane? Unknown effect ::03-04 - Does not adjust pane - x dimensions are fat on widescreen and normal on 4:3 ::05-04 - Reduces x dimensions to 75% when Wii is set to widescreen mode, no adjustment for 4:3 :::"x dimensions" includes image width and x coordinates. If you have a pane and a child pane there is no need to use 05-04 on both of them, otherwise it doubles up and the image will be too narrow even on widescreen TV. :::To be confirmed - using these flags appropriately an image can be set to resize to fit 16:9 and 4:3 or is can be set to be cropped to fit a 4:3 screen. This behaviour is seen in Lonpos (WiiWare) icon and banner. :* Displays the alpha range. If unsure, keep this value as FF-00 :* Defines the location of the center of the pane relative to the parent pane. RootPane is relative to the size of the screen. :** x, y, and z co-ordinates in pixels :* Flips the panel. :** x and y reflection point in pixels :* Rotates the image, measured in degree. Support positive and negative degrees. :* Resizes the image by multipliers. 1.0 = Normal size, 2.0 = x2 size, 0.5 = Half size, etc. :** x and y multipliers :* Determines the size in pixels of the pane. Should not be smaller than any associated image, or larger than the screen resolution. :** Width in pixels :** Height in pixels
===pas1=== Marks the beginning of a panel. Subsequent tags will be contained on the panel.
===pic1=== An element for use within a panel structure. Identifies a picture. :* Common elements to pan1 (all) :* Defines the name of the material sheet referring to the desired image. :* :** Four sequential tags from 0x00000000 to 0xFFFFFFFF. Vertex colours, leave at 0xFFFFFFFF if unsure. :* Please see: [[brlyt coordinates]]
===txt1=== An element for use within a panel structure. Identifies text. :* Common elements to pan1 (all) :* Number of characters in hex. Not certain why it repeats it twice. :* Index number for the font :** Unconfirmed. Suspect spacing in pixels. :** Unconfirmed. Suspect leading in pixels. :** Uncofirmed. Likely size of the characters. :** Unconfirmed. Likely either line maximum dimension or baseline. :** Unknown :* Color in hex. RRBBGGAA, where R = Red, B = Blue, G = Green, and A = Alpha. Not certain why this repeats. :* The text line in UTF16 Big Endian hex.
===bnd1=== An element for use within the panel structure. Unknown use. :* Common elements to pan1 (all) :* no other tags
===pae1=== Marks the end of a panel. Nested panels become child panels.
===grp1=== Defines a group of panels and/or materials. :* Contains group members :** A specific group member, referenced by name.
===grs1=== Deliminates a group of groups. No tags.
===gre1=== Defines the end of a group of groups.
=brlan files=
Specifies how to animate the items prescribed in the brlyt. There are three types: banner_start.brlan - specifies a different animation when the banner is first opened banner_loop.brlan - specifies a repeating (looping) animation to play once the banner_start.brlan has finished banner.brlan - is like a banner_loop.brlan, but starts immediately, i.e. there is no starting animation All of these files look identical. The filename tells the wii when to play them. there are more complicated brlan names in the disc channel to handle different animations for different scenarios (e.g. disc in / disc out).
A guide to working with these files is maintained [[Editing_Banners_with_Benzin|here]].
===framesize=== Specifies how many frames are in the animation, then it will loop again. a framesize of 60 will give approximately one second of animation.
===pane name=== Specifies which item (pane / picture) the next set of instructions are for.
===tag type=== States what type of animation is about to be described (at a basic level, e.g. movement, colour, transparency). :RLPA - movement :[[Brlan_RLTP|RLTP - frame animation]] :others are listed on the benzin github (to copy across)
===entry type=== States what type of animation is about to be described (at a detailed level, e.g. rotation, x zoom, y translation).
===triplet / pair=== States the type of information that is about to follow, a triplet will have three entries, a pair will have two. Whether a triplet or a pair is appropriate will be determined by the "entry type".
====frame==== This specifies the frame at which this part of the animation will occur. The Wii will interpolate values between sequential triplets/pairs to create the animation between the specified frame points.
====value==== This specifies a location in pixels, or an angle in degrees, or a zoom factor in decimal etc. This value will occur at the frame number specified immediately above. These are absolute values, not a change from the current position. So in the example, the item should be at an angle of -360* at frame 0, and at an angle of -720* at frame 60.
====blend==== Blend specifies how the animation moves from one triplet/pair to the next. Generally 0.000 is acceptable and will give smooth transitions, however if you don't want smooth transitions, or you get jerky animation and you don't want it, see the documentation on [[brlan_blend|blending]].
==Sample xmlan== 0.000000000000000 -360.000000000000000 -6.000000000000000 60.000000000000000 -720.000000000000000 -6.000000000000000
Below this is other useful info on coordinates, fine tuning movements, and Frame animation...CoordinatesThese are used for mirroring an image. See image below: There are 8 values between the coordinates tags and these specify the location of each of the corners A, B, C, and D, on the axis shown. Therefore to display an image as it is drawn the coords are A(0,0), B(1,0), C(0,1), D(1,1) which is the sequence of 1's and 0's that you see most of the time in a brlyt. - Code:
-
<coordinates> <set> <coord>0.000000</coord> <coord>0.000000</coord> <coord>1.000000</coord> <coord>0.000000</coord> <coord>0.000000</coord> <coord>1.000000</coord> <coord>1.000000</coord> <coord>1.000000</coord> </set> </coordinates>
To flip it along the x-axis so that A and B are at the top and C and D are at the bottom you would need: A(0,1), B(1,1), C(0,0), D(1,0). - Code:
-
<coordinates> <set> <coord>0.000000</coord> <coord>1.000000</coord> <coord>1.000000</coord> <coord>1.000000</coord> <coord>0.000000</coord> <coord>0.000000</coord> <coord>1.000000</coord> <coord>0.000000</coord> </set> </coordinates>
To flip it along the y-axis so that A and C are on the right and B and D are on the left you would need: A(1,0), B(0,0), C(1,1), D(0,1) - Code:
-
<coordinates> <set> <coord>1.000000</coord> <coord>0.000000</coord> <coord>0.000000</coord> <coord>0.000000</coord> <coord>1.000000</coord> <coord>1.000000</coord> <coord>0.000000</coord> <coord>1.000000</coord> </set> </coordinates>
Clearly you could do both. To determine: what happens if you use numbers other than 0 and 1, and what happens if you map two corners to the same coordinate. The disc channel uses numbers other than 0 and 1 on the title bar, it has a stretching effect, but exact link between the specified values and the output on screen is currently unknown. Fine Tuning AnimationThe following is GUESSWORK from some investigation, and may change as we become more knowledgeable. is a tag within a xmlan file. This specifies how the animation will move from one set of instructions in the brlan to the next.
Determining the value to use is somewhat tricky, and requires further investigation. However, this is what I have deduced so far:
If you are trying to smooth a jerky animation you need to determine which triplet is causing the jerk. This will involve watching the animation and considering the animation specified in the brlan. It is worth noting that the blend number appears to have the same units as the value, rather than being a factor:
- if the value is a number of pixels to move in a translation, the blend will also be measured in pixels - if the value is a number of degrees to rotate, the blend will be measured in degress
It appears that the blend value should be calculated as follows:
rep * (vn - vn-1) / (fn - fn-1)
- Code:
-
rep = number of times the animation goes through this cycle in the complete brlan loop (note 1). fn = frame number specified in current instruction fn-1 = frame number specified in previous instruction vn = value specified in current instruction vn-1 = value specified in previous instruction
(note 1) If the framesize specified in the animation is 60 frames and the object rotates every 15 frames, then rep = 4. (from 60/15=4)
Some examples should help:
Example 1 - rotate once per loop
- Code:
-
<xmlan version="1.1.317BETA" framesize="60" flags="01"> <pane name="Image" type="0"> <tag type="RLPA"> <entry type="Angle"> <triplet> <frame>0.000000000000000</frame> <value>-360.000000000000000</value> <blend>-6.000000000000000</blend> </triplet> <triplet> <frame>60.000000000000000</frame> <value>-720.000000000000000</value> <blend>-6.000000000000000</blend> </triplet> </entry> </tag> </pane> </xmlan>
to work out the blend for the second triplet: 60/60 * (-720 - -360) / (60 - 0) = 1 * -360 / 60 = -6
If the image rotated twice is this time, i.e. change -720 for -1080, the calculation and blend number would be as follows: 60/60 * (-1080 - -360) / (60 - 0) = 1 * -720 / 60 = -12 (This one to be confirmed - is the "rep" wrong? should this be -6 too?)
Example 2 - moves like a see-saw (teeter-totter) twice within the framesize
- Code:
-
<xmlan version="1.1.317BETA" framesize="1000" flags="01"> <pane name="ControllerPicture" type="0"> <tag type="RLPA"> <entry type="Angle"> <triplet> <frame>0.000000000000000</frame> <value>0.000000000000000</value> <blend>-0.112000003457069</blend> </triplet> <triplet> <frame>125.000000000000000</frame> <value>-7.000000000000000</value> <blend>0.000000000000000</blend> </triplet> <triplet> <frame>375.000000000000000</frame> <value>7.000000000000000</value> <blend>0.000000000000000</blend> </triplet> <triplet> <frame>625.000000000000000</frame> <value>-7.000000000000000</value> <blend>0.000000000000000</blend> </triplet> <triplet> #Previous position start <frame>875.000000000000000</frame> <value>7.000000000000000</value> <blend>0.000000000000000</blend> </triplet> #Previous position end <triplet> #Current position start <frame>1000.000000000000000</frame> <value>0.000000000000000</value> <blend>-0.112000003457069</blend> </triplet> #Current position end </entry> </tag> </pane>
Becuase the animation moves from one extreme to the other (+7* to - 7*) in the middle part of the animation there is no need to blend. By default the animation is made so that it slowly comes to a stop at each extreme point. However, at the end of this animation, if the blend was 0.000 the picture would move from +7* and smoothly come to a stop in the 0* position (as specified in frame 1000 and then accelerate away from 0* to -7* - the momentary pause in the middle was not wanted, and was removed with blend as calculated below.
2 * (0 - 7) / (1000 - 875) / = 2 * (-7 / 125) = -0.112
rep = 2, calculated as follows: frames taken to go from one extreme (-7*) to other extreme (+7*) = 875 - 625 = 250 frames taken to move from last postion to current position = 1000 - 875 = 125 rep = 250 / 125 = 2 (as used above)
Example 3 - X translation of pane
The following animation does:
-the pane moves from the middle of the screen to the right and off the screen -the pane then start again off the left hand side of the screen and moves to the centre of the screen -and loops, thus creating a "conveyor belt" type movement -all of this is done at constant speed by specifying the blend correctly.
-if a blend of 0.00 were used the pane would start with zero speed and accelerate, and then decelerate so that it had zero speed at the frame numbers specified in the animation below.
- Code:
-
<?xml version="1.0"?><xmlan version="1.2.0BETA" framesize="1000" flags="01"> <pane name="CharacterPane01" type="0"> <tag type="RLPA"> <entry type="X Translation"> <triplet> <frame>0.000000000000000</frame> <value>512.000000000000000</value> <blend>2.048000097274780</blend></triplet> <triplet> <frame>250.000000000000000</frame> <value>1024.000000000000000</value> <blend>2.048000097274780</blend> </triplet> <triplet> <frame>250.000000000000000</frame> <value>-1024.000000000000000</value> <blend>2.048000097274780</blend> </triplet> <triplet> <frame>1000.000000000000000</frame> <value>512.000000000000000</value> <blend>2.048000097274780</blend> </triplet> </entry> </tag> </pane>
Blend calculated as follows:
1 * (1024 - 512) / (250 - 0 ) = 512 / 250 = 2.048
The "rep" factor is still somewhat unknown, but in this case "1" is used because the pane moves from left to right once in the framesize of 1000 frames.
Frame Animation
RLTP tags within a xmlan file allows more traditional animation where multiple images are quickly displayed in succession creating the impression of animation. The following was discovered through inspection of the Crystal Defenders banner.
RLTP xmlan Example
- Code:
-
<?xml version="1.0"?> <xmlan version="1.1.317BETA" framesize="460" flags="01"> <timg name="AnimFrame0000.tpl" /> #only the first frame is referenced in the brlyt, it is also listed here with the rest. <timg name="AnimFrame0001.tpl" /> #they do not need numbers at the end, but clearly this makes it easier <timg name="AnimFrame0002.tpl" /> #while it's not explicit in the xmlan each of these has been given a reference number <timg name="AnimFrame0003.tpl" /> #the number is in hex, starting at 0, i.e. 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,10,11,... <timg name="AnimFrame0004.tpl" /> <timg name="AnimFrame0005.tpl" /> <timg name="AnimFrame0006.tpl" /> <timg name="AnimFrame0007.tpl" /> <timg name="AnimFrame0008.tpl" /> <timg name="AnimFrame0009.tpl" /> <timg name="AnimFrame000A.tpl" /> <timg name="AnimFrame000B.tpl" /> <pane name="AnimPicture" type="0"> <tag type="RLVI"> #this tag states whether to display / hide this animation. It is hidden by default so this must be used and set to 0001 to show it at all. <entry type="X Translation"> <pair> <data1>0.000000000000000</data1> #at frame 0 <data2>0000</data2> #hide the animation, 0=hide, 1=show <padding>0000</padding> #unknown purpose? always 0? </pair> <pair> <data1>200.000000000000000</data1> #at frame 200 <data2>0001</data2> #show the animation <padding>0000</padding> </pair> <pair> <data1>260.000000000000000</data1> #at frame 260 <data2>0000</data2> #hide the animation <padding>0000</padding> </pair> </entry> </tag> </pane> <pane name="AnimMaterial" type="1"> <tag type="RLTP"> #this tag cycles through the images <entry type="X Translation"> #this description is inaccurate in benzin but it does not cause an issue <pair> <data1>200.000000000000000</data1> #Frame Number. Means... at frame 200 <data2>0000</data2> #Image Index Number. Means... show the first image from the list at the top (it has internal reference 0000, this is - AnimFrame0000.tpl <padding>0000</padding> #(not from file name, from referencing implicit in the xmlan) </pair> <pair> <data1>205.000000000000000</data1> #at frame 205 <data2>0001</data2> #Image Index Number. Means... show the second image from the list at the top (it has internal reference 0001, this is - AnimFrame0001.tpl <padding>0000</padding> </pair> <pair> <data1>210.000000000000000</data1> <data2>0002</data2> <padding>0000</padding> </pair> <pair> <data1>215.000000000000000</data1> <data2>0003</data2> <padding>0000</padding> </pair> <pair> <data1>220.000000000000000</data1> <data2>0004</data2> <padding>0000</padding> </pair> <pair> <data1>225.000000000000000</data1> <data2>0005</data2> <padding>0000</padding> </pair> <pair> <data1>230.000000000000000</data1> <data2>0006</data2> <padding>0000</padding> </pair> <pair> <data1>235.000000000000000</data1> <data2>0007</data2> <padding>0000</padding> </pair> <pair> <data1>240.000000000000000</data1> <data2>0008</data2> <padding>0000</padding> </pair> <pair> <data1>245.000000000000000</data1> <data2>0009</data2> <padding>0000</padding> </pair> <pair> <data1>250.000000000000000</data1> <data2>000a</data2> <padding>0000</padding> </pair> <pair> <data1>255.000000000000000</data1> <data2>000b</data2> <padding>0000</padding> </pair> </entry> </tag> </pane> </xmlan>
These updates are for the Benzin team if they are reading. Alsom a big thank you for your excellent work.
- Spoiler:
220.000000000000000 0004 0000
* "X Translation" is not the correct description in this instance. The information within the tags describes animated frames. * should be * should be something like or
0.000000000000000 0000 #hide the animation, 0=hide, 1=show 0000
* "X Translation" is not the correct description in this instance. The information within the tags describes whether to show or hide a picture. * should be * should be something like . 1 is show, 0 is hide
Matching xmlyt example - Code:
-
<?xml version="1.0"?> <xmlyt version="1.1.317BETA"> <tag type="lyt1"> <a>01</a> <size> <width>832.000000</width> <height>456.000000</height> </size> </tag> <tag type="txl1"> <entries> <name>AnimFrame0000.tpl</name> </entries> </tag> <tag type="mat1"> <entries name="AnimMaterial"> <colors> <forecolor>0</forecolor> <forecolor>0</forecolor> <forecolor>0</forecolor> <forecolor>0</forecolor> <backcolor>255</backcolor> <backcolor>255</backcolor> <backcolor>255</backcolor> <backcolor>255</backcolor> <unk2>255</unk2> <unk2>255</unk2> <unk2>255</unk2> <unk2>255</unk2> <tev_k>0xffffffff</tev_k> <tev_k>0xffffffff</tev_k> <tev_k>0xffffffff</tev_k> <tev_k>0xffffffff</tev_k> </colors> <flags>00000111</flags> <texture name="AnimFrame0000.tpl"> <wrap_s>00</wrap_s> <wrap_t>00</wrap_t></texture> <tex_coords> <x1>0.0000000000</x1> <y1>0.0000000000</y1> <angle>0.0000000000</angle> <x2>1.0000000000</x2> <y2>1.0000000000</y2></tex_coords> <ua3> <data>01</data> <data>04</data> <data>1e</data> <data>00</data> </ua3> </entries> </tag> <tag type="pan1" name="RootPane"> <flags>01-04</flags> <alpha>ff-00</alpha> <coords> <x>0.00000000000000000000</x> <y>0.00000000000000000000</y> <z>0.00000000000000000000</z> </coords> <flip> <x>0.00000000000000000000</x> <y>0.00000000000000000000</y> </flip> <rotate>0.00000000000000000000</rotate> <zoom> <x>1.0000000000</x> <y>1.0000000000</y> </zoom> <size> <width>832.000000</width> <height>456.000000</height> </size> </tag> <tag type="pas1" /> <tag type="pic1" name="AnimPicture"> <flags>00-04</flags> <alpha>ff-00</alpha> <coords> <x>0.00000000000000000000</x> <y>50.00000000000000000000</y> <z>0.00000000000000000000</z> </coords> <flip> <x>0.000000</x> <y>0.000000</y> </flip> <rotate>0.000000</rotate> <zoom> <x>1.0000000000</x> <y>1.0000000000</y> </zoom> <size> <width>128.000000</width> <height>128.000000</height> </size> <material name="AnimMaterial" /> <colors> <vtx>0XFFFFFFFF</vtx> <vtx>0XFFFFFFFF</vtx> <vtx>0XFFFFFFFF</vtx> <vtx>0XFFFFFFFF</vtx> </colors> <coordinates> <set> <coord>0.000000</coord> <coord>0.000000</coord> <coord>1.000000</coord> <coord>0.000000</coord> <coord>0.000000</coord> <coord>1.000000</coord> <coord>1.000000</coord> <coord>1.000000</coord></set></coordinates> </tag> <tag type="pae1" /> <tag type="grp1" name="RootGroup" /> </xmlyt> Applying this to other base wads
Given this it should be a relative simple process to take an image in any other wad and add frames to it. If the other tags in the base wad xmlyt are left alone then the image will still move around as before, just it will cycle through the frames. It should be a case of:
No change to the brlyt
Listing the images near the top of the xmlan file, in the form:
One of these must be the image that is already in the brlyt
Adding the following:
- Code:
-
<pane name="AnimMaterial" type="1"> <tag type="RLTP"> <entry type="X Translation"> <pair> <data1>200.000000000000000</data1> <data2>0000</data2> <padding>0000</padding> </pair> <pair> # repeat lots of pairs here, data1 = frame number, data2 = image index. I recommend having a new pair every 5 frames and data1 should start at 0 and got the end (end = framesize specified at the top of the xmlan) </pair> </entry> </tag> </pane>
* needs to match the relevant material name already in the brlyt. In the xmlyt it will look something like: and will be within tags *Clearly there will need to be more "pairs" which specify the other image index numbers (in hex) and the frame number at which that image index will be displayed
need to pack the new images into the wad alongside the old ones, dimensions should be the same as the original image.
*The "framesize" data at the top of the xmlan will need careful consideration to make this work. It may be necessary to repeat the data within the RLTP tags to ensure that the image keeps cycle for the duration of the animation loop. For example if the framesize is 240, but it only takes 60 frames to cycles through the images it will be necessary to repeat the RLTP pairs 4 times in order to fill up the space.
Excel Animation Calculator - Aniimator
Excel spreadsheet to help write the cell animation part of the XMLAN. You need to understand this part of the XMLAN before this is useful, but after that it will save hours.
http://spreadsheets.google.com/ccc?key=r3EQA6W69jlbqfea-g2blcg
Thats Pretty much it for now
Last edited by wiihackerz101 on Thu 11 Mar - 21:27; edited 2 times in total (Reason for editing : To add more info) | |
|