diff --git a/BrawlboxHelper/SharpYaml.dll b/BrawlboxHelper/SharpYaml.dll
new file mode 100644
index 00000000..8ed6dbac
Binary files /dev/null and b/BrawlboxHelper/SharpYaml.dll differ
diff --git a/BrawlboxHelper/Syroot.NintenTools.Bfres.dll b/BrawlboxHelper/Syroot.NintenTools.Bfres.dll
new file mode 100644
index 00000000..b398c199
Binary files /dev/null and b/BrawlboxHelper/Syroot.NintenTools.Bfres.dll differ
diff --git a/BrawlboxHelper/Syroot.NintenTools.Bfres.pdb b/BrawlboxHelper/Syroot.NintenTools.Bfres.pdb
new file mode 100644
index 00000000..ede065b7
Binary files /dev/null and b/BrawlboxHelper/Syroot.NintenTools.Bfres.pdb differ
diff --git a/BrawlboxHelper/Syroot.NintenTools.Bfres.xml b/BrawlboxHelper/Syroot.NintenTools.Bfres.xml
new file mode 100644
index 00000000..645500dd
--- /dev/null
+++ b/BrawlboxHelper/Syroot.NintenTools.Bfres.xml
@@ -0,0 +1,5740 @@
+
+
+
+ Syroot.NintenTools.Bfres
+
+
+
+
+ Represents an animation curve used by several sections to control different parameters over time.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the data type in which are loaded and saved. For simplicity, the class
+ always stores frames as converted instances.
+
+
+
+
+ Gets or sets the data type in which are loaded and saved. For simplicity, the class
+ always stores frames as converted instances.
+
+
+
+
+ Gets or sets the curve type, determining the number of elements stored with each key.
+
+
+
+
+ Gets or sets the memory offset relative to the start of the corresponding animation data structure to
+ animate the field stored at that address. Note that enums exist in the specific animation which map offsets
+ to names.
+
+
+
+
+ Gets or sets the first frame at which a key is placed.
+
+
+
+
+ Gets or sets the last frame at which a key is placed.
+
+
+
+
+ Gets or sets the scale to multiply values of the curve by.
+
+
+
+
+ Gets or sets the offset to add to the values of the curve (after multiplicating them).
+
+
+
+
+ Gets or sets the difference between the lowest and highest key value.
+
+
+
+
+ Gets the frame numbers at which keys of the same index in the array are placed.
+
+
+
+
+ Gets an array of elements forming the elements of keys placed at the frames of the same index in the
+ array.
+
+
+
+
+ Represents the possible data types in which are stored. For simple library use,
+ they are always converted them to and from instances.
+
+
+
+
+ The frames are stored as instances.
+
+
+
+
+ The frames are stored as instances.
+
+
+
+
+ The frames are stored as instances.
+
+
+
+
+ Represents the possible data types in which are stored. For simple library use,
+ they are always converted them to and from instances.
+
+
+
+
+ The keys are stored as instances.
+
+
+
+
+ The keys are stored as instances.
+
+
+
+
+ The keys are stored as instances.
+
+
+
+
+ Represents the type of key values stored by this curve. This also determines the number of required elements to
+ define a key in the array. Use the
+ method to retrieve the number of elements required for the of that curve.
+
+
+
+
+ The curve uses cubic interpolation. 4 elements of the array form a key.
+
+
+
+
+ The curve uses linear interpolation. 2 elements of the array form a key.
+
+
+
+
+ 1 element of the array forms a key.
+
+
+
+
+ 1 element of the array forms a key.
+
+
+
+
+ 1 element of the array forms a key.
+
+
+
+
+ 1 element of the array forms a key.
+
+
+
+
+ 1 element of the array forms a key.
+
+
+
+
+ Gets or sets the memory offset relative to the start of the corresponding animation data structure to
+ animate the field stored at that address. Note that enums exist in the specific animation which map offsets
+ to names.
+
+
+
+
+ Represents a buffer of data uploaded to the GX2 GPU which can hold arbitrary data.
+
+
+
+
+ The size of a full vertex in bytes.
+
+
+
+
+ The raw bytes stored for each buffering.
+
+
+
+
+ Represents a 16-bit fixed-point decimal consisting of 1 sign bit, 10 integer bits and 5 fractional bits (denoted
+ as Q10.5). Note that the implementation is not reporting over- and underflowing errors.
+
+
+ Examples:
+ SIIIIIII_IIIFFFFF
+ 0b00000000_00010000 = 0.5
+ 0b00000000_00100000 = 1
+ 0b00000001_00000000 = 8
+ 0b01000000_00000000 = 512
+ 0b10000000_00000000 = -1024
+
+
+
+
+ Represents the largest possible value of .
+
+
+
+
+ Represents the smallest possible value of .
+
+
+
+
+ Initializes a new instance of the struct from the given
+ representation.
+
+ The raw representation of the internally stored bits.
+
+
+
+ Gets the internally stored value to represent the instance.
+
+ Signed to get arithmetic rather than logical shifts.
+
+
+
+ Returns the given .
+
+ The .
+ The result.
+
+
+
+ Adds the first to the second one.
+
+ The first .
+ The second .
+ The addition result.
+
+
+
+ Negates the given .
+
+ The to negate.
+ The negated result.
+
+
+
+ Subtracts the first from the second one.
+
+ The first .
+ The second .
+ The subtraction result.
+
+
+
+ Multiplicates the given by the scalar.
+
+ The .
+ The scalar.
+ The multiplication result.
+
+
+
+ Multiplicates the first by the second one.
+
+ The first .
+ The second .
+ The multiplication result.
+
+
+
+ Divides the given through the scalar.
+
+ The .
+ The scalar.
+ The division result.
+
+
+
+ Divides the first through the second one.
+
+ The first .
+ The second .
+ The division result.
+
+
+
+ Gets a value indicating whether the first specified is the same as the second
+ specified .
+
+ The first to compare.
+ The second to compare.
+ true, if both are the same.
+
+
+
+ Gets a value indicating whether the first specified is not the same as the second
+ specified .
+
+ The first to compare.
+ The second to compare.
+ true, if both are not the same.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Gets a value indicating whether this is the same as the second specified
+ .
+
+ The object to compare, if it is a .
+ true, if both are the same.
+
+
+
+ Gets a hash code as an indication for object equality.
+
+ The hash code.
+
+
+
+ Gets a string describing this .
+
+ A string describing this .
+
+
+
+ Indicates whether the current is equal to another .
+
+ A to compare with this .
+ true if the current is equal to the other parameter; otherwise, false.
+
+
+
+
+ Represents a 4-byte value which can hold differently typed data.
+
+
+
+
+ The data as an .
+
+
+
+
+ The data as a .
+
+
+
+
+ The data as an .
+
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new instance.
+
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new instance.
+
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new instance.
+
+
+
+
+ Converts the given value to an instance.
+
+ The value to represent in the new instance.
+
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new instance.
+
+
+
+
+ Converts the given value to an instance.
+
+ The value to represent in the new instance.
+
+
+
+
+ Returns the for this instance.
+
+ The enumerated constant that is the of the class or value type that
+ implements this interface.
+
+
+
+ This operation is not supported.
+
+
+
+
+ This operation is not supported.
+
+
+
+
+ This operation is not supported.
+
+
+
+
+ This operation is not supported.
+
+
+
+
+ This operation is not supported.
+
+
+
+
+ Converts the value of this instance to an equivalent double-precision floating-point number using the
+ specified culture-specific formatting information.
+
+ An interface implementation that supplies
+ culture-specific formatting information.
+ A double-precision floating-point number equivalent to the value of this instance.
+
+
+
+ This operation is not supported.
+
+
+
+
+ Converts the value of this instance to an equivalent 32-bit signed integer using the specified
+ culture-specific formatting information.
+
+ An interface implementation that supplies
+ culture-specific formatting information.
+ An 32-bit signed integer equivalent to the value of this instance.
+
+
+
+ Converts the value of this instance to an equivalent 64-bit signed integer using the specified
+ culture-specific formatting information.
+
+ An interface implementation that supplies
+ culture-specific formatting information.
+ An 64-bit signed integer equivalent to the value of this instance.
+
+
+
+ This operation is not supported.
+
+
+
+
+ Converts the value of this instance to an equivalent single-precision floating-point number using the
+ specified culture-specific formatting information.
+
+ An interface implementation that supplies
+ culture-specific formatting information.
+ A single-precision floating-point number equivalent to the value of this instance.
+
+
+
+ This operation is not supported.
+
+
+
+
+ Converts the value of this instance to an of the specified that has
+ an equivalent value, using the specified culture-specific formatting information.
+
+ The to which the value of this instance is converted.
+
+ An interface implementation that supplies
+ culture-specific formatting information.
+ An instance of type conversionType whose value is equivalent to the value of
+ this instance.
+
+
+
+ This operation is not supported.
+
+
+
+
+ This operation is not supported.
+
+
+
+
+ This operation is not supported.
+
+
+
+
+ Represents a 16-bit half-precision floating point value according to the IEEE 754 standard.
+
+
+ Examples:
+ SEEEEEFF_FFFFFFFF
+ 0b00000000_00000000 = 0
+ 1b00000000_00000000 = -0
+ 0b00111100_00000000 = 1
+ 0b11000000_00000000 = -2
+ 0b11111011_11111111 = 65504 (MaxValue)
+ 0b01111100_00000000 = PositiveInfinity
+ 0b11111100_00000000 = NegativeInfinity
+
+
+
+
+ Represents the smallest positive value greater than zero.
+
+
+
+
+ Represents the largest possible value of .
+
+
+
+
+ Represents the smallest possible value of .
+
+
+
+
+ Represents not a number (NaN).
+
+
+
+
+ Represents negative infinity.
+
+
+
+
+ Represents positive infinity.
+
+
+
+
+ Initializes a new instance of the struct from the given
+ representation.
+
+ The raw representation of the internally stored bits.
+
+
+
+ Gets the internally stored value to represent the instance.
+
+ Signed to get arithmetic rather than logical shifts.
+
+
+
+ Returns the given .
+
+ The .
+ The result.
+
+
+
+ Adds the first to the second one.
+
+ The first .
+ The second .
+ The addition result.
+
+
+
+ Negates the given .
+
+ The to negate.
+ The negated result.
+
+
+
+ Subtracts the first from the second one.
+
+ The first .
+ The second .
+ The subtraction result.
+
+
+
+ Multiplicates the first by the second one.
+
+ The first .
+ The second .
+ The multiplication result.
+
+
+
+ Divides the first through the second one.
+
+ The first .
+ The second .
+ The division result.
+
+
+
+ Gets a value indicating whether the first specified is the same as the second
+ specified .
+
+ The first to compare.
+ The second to compare.
+ true, if both are the same.
+
+
+
+ Gets a value indicating whether the first specified is not the same as the second
+ specified .
+
+ The first to compare.
+ The second to compare.
+ true, if both are not the same.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Gets a value indicating whether this is the same as the second specified
+ .
+
+ The object to compare, if it is a .
+ true, if both are the same.
+
+
+
+ Gets a hash code as an indication for object equality.
+
+ The hash code.
+
+
+
+ Gets a string describing this .
+
+ A string describing this .
+
+
+
+ Indicates whether the current is equal to another .
+
+ A to compare with this .
+ true if the current is equal to the other parameter; otherwise, false.
+
+
+
+
+ Returns a value indicating whether the specified number evaluates to not a number ().
+
+ A half-precision floating-point number.
+ true if value evaluates to not a number (); otherwise false.
+
+
+
+ Returns a value indicating whether the specified number evaluates to negative or positive infinity.
+
+ A half-precision floating-point number.
+ true if half evaluates to or ;
+ otherwise false.
+
+
+
+ Returns a value indicating whether the specified number evaluates to negative infinity.
+
+ A half-precision floating-point number.
+ true if half evaluates to ; otherwise false.
+
+
+
+ Returns a value indicating whether the specified number evaluates to positive infinity.
+
+ A half-precision floating-point number.
+ true if half evaluates to ; otherwise false.
+
+
+
+ Represents the non-generic base of a dictionary which can quickly look up instances via
+ key or index.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets the number of instances stored.
+
+
+
+
+ Gets all keys under which instances are stored.
+
+
+
+
+ Gets all stored instances.
+
+
+
+
+ Returns only the publically visible nodes, excluding the root node.
+
+
+
+
+ Gets or sets the instance stored at the specified .
+
+ The 0-based index of the instance to get or set.
+ The at the specified .
+ The index is smaller than 0 or bigger or equal to
+ .
+
+
+
+ Gets or sets the instance stored under the specified .
+
+ The textual key of the instance to get or set.
+ The with the specified .
+ An instance with the same
+ already exists.
+ An instance with the given
+ does not exist.
+
+
+
+ Gets or sets the key under which the specified is stored.
+
+ The instance of the key to get or set.
+ The key of the specified .
+ An instance with the same key already exists.
+
+ A key for the given does not exist.
+
+
+
+
+ Removes all elements from the dictionary.
+
+
+
+
+ Determines whether an instance is saved under the given in the dictionary.
+
+ The textual key to locate in the dictionary. The value can be null.
+ true if was found in the dictionary; otherwise false.
+
+
+
+ Searches for the specified and returns the zero-based index of the first occurrence
+ within the entire dictionary.
+
+ The textual key to locate in the dictionary. The value can be null.
+ The zero-based index of the first occurence of within the entire dictionary
+ if found; otherwise -1.
+
+
+
+ Changes the key of the instance currently saved under the given to the
+ .
+
+ The current textual key to rename.
+ The new textual key to use.
+ An instance with the same
+ already exists.
+
+ The given does not exist.
+
+
+
+
+ Removes the first occurrence of the instance with the specific from the dictionary.
+
+ The textual key of the instance which will be removed.
+ true if the instance under was successfully removed; otherwise
+ false. This method also returns false if was not found in the
+ dictionary.
+
+
+
+ Removes the instance at the specified of the dictionary.
+
+ The zero-based index of the instance to remove.
+ is less than 0 or equal to or greater
+ than .
+
+
+
+ Returns true if an instance was stored under the given
+ and has been assigned to , or false if no instance is stored under the
+ given and null was assigned to .
+
+ The textual key of the instance to get or set.
+ The variable receiving the found or null.
+ true if an instance was found and assigned; otherwise false.
+
+
+
+ Adds the given under the specified .
+
+ The textual key under which the instance will be stored.
+ The to add.
+ An instance with the same
+ already exists.
+
+
+
+ Determines whether the given is in the dictionary.
+
+ The instance to locate in the dictionary. The value can be
+ null.
+ true if was found in the dictionary; otherwise false.
+
+
+
+
+ Searches for the specified and returns the zero-based index of the first occurrence
+ within the entire dictionary.
+
+ The instance to locate in the dictionary. The value can be
+ null.
+ The zero-based index of the first occurence of within the entire
+ dictionary if found; otherwise -1.
+
+
+
+ Removes the first occurrence of a specific from the dictionary.
+
+ The instance to remove from the dictionary. The value can be
+ null.
+ true if was successfully removed; otherwise false. This
+ method also returns false if was not found in the dictionary.
+
+
+
+ Copies the elements of the dictionary as instances to a new
+ array and returns it.
+
+ An array containing copies of the elements.
+
+
+
+ Returns true if a key was found for the given and has been assigned to
+ , or false if no key was found for the value and null was assigned to
+ .
+
+ The to look up a key for.
+ The variable receiving the found key or null.
+ true if a key was found and assigned; otherwise false.
+
+
+
+ Returns a generic which can be used to iterate over the items in the dictionary.
+
+ An enumerator to iterate over the items in the dictionary.
+
+
+
+ Returns an which can be used to iterate over the items in the dictionary.
+
+ An enumerator to iterate over the items in the dictionary.
+
+
+
+ Returns the instance of the node with the given using the
+ Patricia trie logic.
+
+ Nodes are looked up linearly by iterating over the node list internally, this method has been
+ implemented for test and validation purposes only.
+ The name of the node to look up.
+ The instance referenced by the found node.
+
+
+
+ Loads an instance from the given .
+
+ The to load the instance with.
+ The loaded instance.
+
+
+
+ Represents a node forming the Patricia trie of the dictionary.
+
+
+
+
+ Represents a dictionary which can quickly look up instances of type
+ via key or index.
+
+ The specialized type of the instances.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets all stored instances.
+
+
+
+
+ Gets or sets the value stored at the specified .
+
+ The 0-based index of the instance to get or set.
+ The instance at the specified .
+ The index is smaller than 0 or bigger or equal to
+ .
+
+
+
+ Gets or sets the value stored under the specified .
+
+ The textual key of the instance to get or set.
+ The instance with the specified .
+ An instance with the same already exists.
+
+ An instance with the given does not exist.
+
+
+
+
+ Adds the given under the specified .
+
+ The textual key under which the instance will be stored.
+ The to add.
+ An instance with the same
+ already exists.
+
+
+
+ Determines whether the given is in the dictionary.
+
+ The instance to locate in the dictionary. The value can be
+ null.
+ true if was found in the dictionary; otherwise false.
+
+
+
+
+ Returns a generic which can be used to iterate over the items in the dictionary.
+
+ An enumerator to iterate over the items in the dictionary.
+
+
+
+ Searches for the specified and returns the zero-based index of the first occurrence
+ within the entire dictionary.
+
+ The instance to locate in the dictionary. The value can be
+ null.
+ The zero-based index of the first occurence of within the entire
+ dictionary if found; otherwise -1.
+
+
+
+ Removes the first occurrence of a specific from the dictionary.
+
+ The instance to remove from the dictionary. The value can be
+ null.
+ true if was successfully removed; otherwise false. This
+ method also returns false if was not found in the dictionary.
+
+
+
+ Copies the elements of the dictionary as instances to a new
+ array and returns it.
+
+ An array containing copies of the elements.
+
+
+
+ Returns true if a key was found for the given and has been assigned to
+ , or false if no key was found for the value and null was assigned to
+ .
+
+ The to look up a key for.
+ The variable receiving the found key or null.
+ true if a key was found and assigned; otherwise false.
+
+
+
+ Returns true if an instance was stored under the given and has been assigned
+ to , or false if no instance is stored under the given
+ and null was assigned to .
+
+ The textual key of the instance to get or set.
+ The variable receiving the found instance or null.
+ true if an instance was found and assigned; otherwise false.
+
+
+
+ Loads an instance from the given .
+
+ The to load the instance with.
+ The loaded instance.
+
+
+
+ Represents a which is stored in a .
+
+
+
+
+ The textual represented by this instance.
+
+
+
+
+ The with which this string was read or will be written.
+
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new instance.
+
+
+
+
+ Converts the given value to an instance.
+
+ The value to represent in the new instance.
+
+
+
+
+ Returns the value of the property.
+
+ The value of the property.
+
+
+
+ Set the Browsable property.
+ NOTE: Be sure to decorate the property with [Browsable(true)]
+
+ Name of the variable
+ Browsable Value
+
+
+
+ Set the Browsable property.
+ NOTE: Be sure to decorate the property with [Browsable(true)]
+
+ An instance of the object whose property should be modified.
+ Name of the variable
+ Browsable Value
+
+
+
+ Represents a 2D transformation.
+
+
+
+
+ The size of this structure.
+
+
+
+
+ The scaling amount of the transformation.
+
+
+
+
+ The rotation angle of the transformation.
+
+
+
+
+ The translation amount of the transformation.
+
+
+
+
+ Represents a 3D transformation.
+
+
+
+
+ The size of this structure.
+
+
+
+
+ The scaling amount of the transformation.
+
+
+
+
+ The rotation amount of the transformation.
+
+
+
+
+ The translation amount of the transformation.
+
+
+
+
+ Represents a 2D texture transformation.
+
+
+
+
+ The size of this structure.
+
+
+
+
+ The with which the transformation is applied.
+
+
+
+
+ The scaling amount of the transformation.
+
+
+
+
+ The rotation angle of the transformation.
+
+
+
+
+ The translation amount of the transformation.
+
+
+
+
+ Unkown space used in some games
+
+
+
+
+ Represents a 2D texture transformation which is multiplied by a 3x4 matrix referenced at runtime by the
+ .
+
+
+
+
+ The size of this structure.
+
+
+
+
+ The with which the transformation is applied.
+
+
+
+
+ The scaling amount of the transformation.
+
+
+
+
+ The rotation angle of the transformation.
+
+
+
+
+ The translation amount of the transformation.
+
+
+
+
+ A pointer to a 3x4 matrix to multiply the transformation with. Set at runtime.
+
+
+
+
+ Represents the texture transformation mode used in and .
+
+
+
+
+ Represents a reference to a instance by name.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances. Typically the same as the .
+
+
+
+
+ The referenced instance.
+
+
+
+
+ Represents custom user variables which can be attached to many sections and subfiles of a .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ The data type of the stored values.
+
+
+
+
+ Returns the stored value as an array of instances when the is
+ .
+
+ The typed value.
+
+
+
+ Returns the stored value as an array of instances when the is
+ .
+
+ The typed value.
+
+
+
+ Returns the stored value as an array of instances when the is
+ or .
+
+ The typed value.
+
+
+
+ Returns the stored value as an array of instances when the is
+ .
+
+ The typed value.
+
+
+
+ Sets the stored as an array and the to
+
+
+ The value to store.
+
+
+
+ Sets the stored as a array and the to
+
+
+ The value to store.
+
+
+
+ Sets the stored as a array and the to
+ or depending on
+ .
+
+ true to store data as UTF-16 encoded strings, or false to store it
+ as ASCII encoded strings.
+ The value to store.
+
+
+
+ Sets the stored as a array and the to
+
+
+ The value to store.
+
+
+
+ Represents the possible data types of values stored in instances.
+
+
+
+
+ The values is an array.
+
+
+
+
+ The values is a array.
+
+
+
+
+ The values is a array encoded in ASCII.
+
+
+
+
+ The values is a array encoded in UTF-16.
+
+
+
+
+ The values is a array.
+
+
+
+
+ Represents extension methods for the class.
+
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The number of instances to read.
+ The instance.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The in which values are stored.
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The in which values are stored.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The in which values are stored.
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The in which values are stored.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The in which values are stored.
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The in which values are stored.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Returns the conversion delegate for converting data available in the given
+ into a instance. Useful to prevent repetitive lookup for multiple values.
+
+ The extended .
+ The of the data.
+ A conversion delegate for the data.
+
+
+
+ Reads a instance converted from the given and
+ returns it.
+
+ The extended .
+ The of the data.
+ The instance.
+
+
+
+ Reads a instances converted from the given and
+ returns them.
+
+ The extended .
+ The number of instances to read.
+ The of the data.
+ The instances.
+
+
+
+ Represents extension methods for the class.
+
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+ The in which values are stored.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+ The in which values are stored.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+ The in which values are stored.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+ The in which values are stored.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+ The in which values are stored.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+ The in which values are stored.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Returns the conversion delegate for converting data available in the given
+ from a instance. Useful to prevent repetitive lookup for multiple values.
+
+ The extended .
+ The of the data.
+ A conversion delegate for the data.
+
+
+
+ Writes a instance into the current stream with the given
+ .
+
+ The extended .
+ The instance.
+ The of the data.
+
+
+
+ Writes instances into the current stream with the given
+ .
+
+ The extended .
+ The instances.
+ The of the data.
+
+
+
+ Represents extension methods for instances.
+
+
+
+
+ Returns an instance represented by the given number of , starting
+ at the .
+
+ The extended instance.
+ The first bit of the encoded value.
+ The number of least significant bits which are used to store the
+ value.
+ The decoded .
+
+
+
+ Returns the current with the bit at the set (being 1).
+
+ The extended instance.
+ The 0-based index of the bit to enable.
+ The current with the bit enabled.
+
+
+
+ Returns the current with the given set into the given number
+ of starting at .
+
+ The extended instance.
+ The value to encode.
+ The first bit used for the encoded value.
+ The number of bits which are used to store the value.
+ The current with the value encoded into it.
+
+
+
+ Returns the current with the bit at the cleared (being 0).
+
+ The extended instance.
+ The 0-based index of the bit to disable.
+ The current with the bit disabled.
+
+
+
+ Returns a value indicating whether the bit at the in the current
+ is enabled or disabled.
+
+ The extended instance.
+ The 0-based index of the bit to check.
+ true when the bit is set; otherwise false.
+
+
+
+ Returns the current with all bits rotated in the given ,
+ where positive directions rotate left and negative directions rotate right.
+
+ The extended instance.
+ The direction in which to rotate, where positive directions rotate left.
+ The current with the bits rotated.
+
+
+
+ Returns the current with the bit at the enabled or disabled,
+ according to .
+
+ The extended instance.
+ The 0-based index of the bit to enable or disable.
+ true to enable the bit; otherwise false.
+ The current with the bit enabled or disabled.
+
+
+
+ Returns the current with the bit at the enabled when it is
+ disabled or disabled when it is enabled.
+
+ The extended instance.
+ The 0-based index of the bit to toggle.
+ The current with the bit toggled.
+
+
+
+ Represents extension methods for instances.
+
+
+
+
+ Returns an instance represented by the given number of , starting
+ at the .
+
+ The extended instance.
+ The first bit of the encoded value.
+ The number of least significant bits which are used to store the
+ value.
+ The decoded .
+
+
+
+ Returns the current with the bit at the set (being 1).
+
+ The extended instance.
+ The 0-based index of the bit to enable.
+ The current with the bit enabled.
+
+
+
+ Returns the current with the given set into the given number
+ of starting at .
+
+ The extended instance.
+ The value to encode.
+ The first bit used for the encoded value.
+ The number of bits which are used to store the value.
+ The current with the value encoded into it.
+
+
+
+ Returns the current with the bit at the cleared (being 0).
+
+ The extended instance.
+ The 0-based index of the bit to disable.
+ The current with the bit disabled.
+
+
+
+ Returns a value indicating whether the bit at the in the current
+ is enabled or disabled.
+
+ The extended instance.
+ The 0-based index of the bit to check.
+ true when the bit is set; otherwise false.
+
+
+
+ Returns the current with all bits rotated in the given ,
+ where positive directions rotate left and negative directions rotate right.
+
+ The extended instance.
+ The direction in which to rotate, where positive directions rotate left.
+ The current with the bits rotated.
+
+
+
+ Returns the current with the bit at the enabled or disabled,
+ according to .
+
+ The extended instance.
+ The 0-based index of the bit to enable or disable.
+ true to enable the bit; otherwise false.
+ The current with the bit enabled or disabled.
+
+
+
+ Returns the current with the bit at the enabled when it is
+ disabled or disabled when it is enabled.
+
+ The extended instance.
+ The 0-based index of the bit to toggle.
+ The current with the bit toggled.
+
+
+
+ Represents the common interface for exporting data instances.
+
+
+
+
+ Loads raw data from the data stream into instances.
+
+ The to load data with.
+
+
+
+ Saves header data of the instance and queues referenced data in the given .
+
+ The to save headers and queue data with.
+
+
+
+ Represents the common interface for data instances.
+
+
+
+
+ Loads raw data from the data stream into instances.
+
+ The to load data with.
+
+
+
+ Saves header data of the instance and queues referenced data in the given .
+
+ The to save headers and queue data with.
+
+
+
+ Loads the hierachy and data of a .
+
+
+
+
+ Initializes a new instance of the class loading data into the given
+ from the specified which is optionally left open.
+
+ The instance to load data into.
+ The to read data from.
+ true to leave the stream open after reading, otherwise false.
+
+
+
+ Initializes a new instance of the class from the file with the given
+ .
+
+ The instance to load data into.
+ The name of the file to load the data from.
+
+
+
+ Gets the loaded instance.
+
+
+
+
+ Starts deserializing the data from the root.
+
+
+
+
+ Reads and returns an instance of type from the following
+ offset or returns null if the read offset is 0.
+
+ The type of the to read.
+ The instance or null.
+
+
+
+ Reads and returns an instance of arbitrary type from the following offset with the
+ given or returns null if the read offset is 0.
+
+ The type of the data to read.
+ The callback to read the instance data with.
+ The optional offset to use instead of reading a following one.
+ The data instance or null.
+ Offset required for ExtFile header (offset specified before size).
+
+
+
+ Reads and returns an instance with elements of type from
+ the following offset or returns an empty instance if the read offset is 0.
+
+ The type of the elements.
+ The instance.
+
+
+
+ Reads and returns an instance with elements of type
+ from the following offset or returns null if the read offset is 0.
+
+ The type of the elements.
+ The number of elements to expect for the list.
+ The optional offset to use instead of reading a following one.
+ The instance or null.
+ Offset required for FMDL FVTX lists (offset specified before count).
+
+
+
+ Reads and returns a instance from the following offset or null if the read
+ offset is 0.
+
+ The optional encoding of the text.
+ The read text.
+
+
+
+ Reads and returns instances from the following offsets.
+
+ The number of instances to read.
+ The optional encoding of the texts.
+ The read texts.
+
+
+
+ Reads a BFRES signature consisting of 4 ASCII characters encoded as an and checks for
+ validity.
+
+ A valid signature.
+
+
+
+ Reads a BFRES offset which is relative to itself, and returns the absolute address.
+
+ The absolute address of the offset.
+
+
+
+ Reads BFRES offsets which are relative to themselves, and returns the absolute addresses.
+
+ The number of offsets to read.
+ The absolute addresses of the offsets.
+
+
+
+ Saves the hierachy and data of a .
+
+
+
+
+ Gets or sets a data block alignment typically seen with .
+
+
+
+
+ Initializes a new instance of the class saving data from the given
+ into the specified which is optionally left open.
+
+ The instance to save data from.
+ The to save data into.
+ true to leave the stream open after writing, otherwise false.
+
+
+
+ Initializes a new instance of the class for the file with the given
+ .
+
+ The instance to save.
+ The name of the file to save the data into.
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the saved instance used for exporting data.
+
+
+
+
+ Gets the current index when writing lists or dicts.
+
+
+
+
+ Starts serializing the data from the root.
+
+
+
+
+ Reserves space for an offset to the written later.
+
+ The to save.
+ The index of the element, used for instances referenced by a .
+
+
+
+
+ Reserves space for the file size field which is automatically filled later.
+
+
+
+
+ Reserves space for the string pool size and offset fields which are automatically
+ filled later.
+
+
+
+
+ Reserves space for an offset to the written later.
+
+ The type of the elements.
+ The to save.
+
+
+
+ Reserves space for an offset to the written later.
+
+ The type of the element values.
+ The to save.
+
+
+
+ Reserves space for an offset to the written later with the
+ .
+
+ The data to save.
+ The to invoke to write the data.
+
+
+
+ Reserves space for an offset to the written later in the string pool with the
+ specified .
+
+ The name to save.
+ The in which the name will be stored.
+
+
+
+ Reserves space for offsets to the written later in the string pool with the
+ specified
+
+ The names to save.
+ The in which the names will be stored.
+
+
+
+ Reserves space for an offset to the written later in the data block pool.
+
+ The data to save.
+ The alignment to seek to before invoking the callback.
+ The to invoke to write the data.
+
+
+
+ Writes a BFRES signature consisting of 4 ASCII characters encoded as an .
+
+ A valid signature.
+
+
+
+ Represents a sorting empty strings to the end of lists.
+
+
+
+
+ Represents a file attachment to a which can be of arbitrary data.
+
+
+
+
+ Gets or sets the raw data stored by the external file.
+
+
+
+
+ Opens and returns a on the raw byte array, which optionally
+ can be written to.
+
+ true to allow write access to the raw data.
+ The opened instance.
+
+
+
+ Represents GX2 settings controlling additional alpha blending options.
+
+
+
+
+ Gets or sets a value indicating whether alpha testing is enabled at all.
+
+
+
+
+ Gets or sets the comparison functions to use for alpha testing.
+
+
+
+
+ Represents GX2 settings controlling color and alpha blending.
+
+
+
+
+ Gets or sets the color source blend operation.
+
+
+
+
+ Gets or sets the color combine operation.
+
+
+
+
+ Gets or sets the color destination blend operation.
+
+
+
+
+ Gets or sets the alpha source blend operation.
+
+
+
+
+ Gets or sets the alpha combine operation.
+
+
+
+
+ Gets or sets the alpha destination blend operation.
+
+
+
+
+ Gets or sets a value indicating whether alpha blending is separated from color blending.
+
+
+
+
+ Represents GX2 settings controlling additional color blending options.
+
+
+
+
+ Gets or sets a value indicating whether multi writes are enabled.
+
+
+
+
+ Gets or sets a value indicating whether the color buffer is enabled.
+
+
+
+
+ Gets or sets the bitmask used for blending.
+
+
+
+
+ Gets or sets the ROP3 logic operation.
+
+
+
+
+ Represents GX2 settings controlling how depth and stencil buffer checks are performed and handled.
+
+
+
+
+ Gets or sets a value indicating whether depth testing is enabled.
+
+
+
+
+ Gets or sets a value indicating whether writing to the depth buffer is enabled.
+
+
+
+
+ Gets or sets the depth buffer comparison function, controlling whether a new fragment is allowed to
+ overwrite the old value in the depth buffer.
+
+
+
+
+ Gets or sets a value indicating whether stencil testing is enabled.
+
+
+
+
+ Gets or sets a value indicating whether back-facing polygons are allowed to write to the stencil buffer or
+ not.
+
+
+
+
+ Gets or sets the front-facing polygon stencil comparison function.
+
+
+
+
+ Gets or sets the stencil function configuring what to do with the existing stencil value when the stencil
+ test fails for front-facing polygons.
+
+
+
+
+ Gets or sets the stencil function taking effect when the stencil test passes with the depth buffer for
+ front-facing polygons.
+
+
+
+
+ Gets or sets the function taking effect when the stencil test fails with the depth buffer for front-facing
+ polygons.
+
+
+
+
+ Gets or sets the back-facing polygon stencil comparison function.
+
+
+
+
+ Gets or sets the stencil function configuring what to do with the existing stencil value when the stencil
+ test fails for back-facing polygons.
+
+
+
+
+ Gets or sets the stencil function taking effect when the stencil test passes with the depth buffer for
+ back-facing polygons.
+
+
+
+
+ Gets or sets the function taking effect when the stencil test fails with the depth buffer for back-facing
+ polygons.
+
+
+
+
+ Represents the AA modes (number of samples) for a surface.
+
+
+
+
+ Represents the format of a vertex attribute entry. Possible type conversions:
+ UNorm: attrib unsigned integer is converted to/from [0.0, 1.0] in shader.
+ UInt: attrib unsigned integer is copied to/from shader as unsigned int.
+ SNorm: attrib signed integer is converted to/from [-1.0, 1.0] in shader.
+ SInt: attrib signed integer is copied to/from shader as signed int.
+ Single: attrib single is copied to/from shader as Single.
+ UIntToSingle: attrib unsigned integer is converted Single in shader.
+ SIntToSingle: attrib signed integer is converted Single in shader.
+
+
+
+
+ Represents how the terms of the blend function are combined.
+
+
+
+
+ Represents the factors used in the blend function.
+
+
+
+
+ Represents compare functions used for depth and stencil tests.
+
+
+
+
+ Represents the source channels to map to a color channel in textures.
+
+
+
+
+ Represents the vertex order of front-facing polygons.
+
+
+
+
+ Represents the type in which vertex indices are stored.
+
+
+
+
+ Represents the logic op function to perform.
+
+
+
+
+ Black
+
+
+
+
+ White
+
+
+
+
+ Source (Default)
+
+
+
+
+ ~Source
+
+
+
+
+ Destination
+
+
+
+
+ ~Destination
+
+
+
+
+ Source & Destination
+
+
+
+
+ ~(Source & Destination)
+
+
+
+
+ Source | Destination
+
+
+
+
+ ~(Source | Destination)
+
+
+
+
+ Source ^ Destination
+
+
+
+
+ ~(Source ^ Destination)
+
+
+
+
+ Source & ~Destination
+
+
+
+
+ ~Source & Destination
+
+
+
+
+ Source | ~Destination
+
+
+
+
+ ~Source | Destination
+
+
+
+
+ Represents the base primitive used to draw each side of the polygon when dual-sided polygon mode is enabled.
+
+
+
+
+ Represents the type of primitives to draw.
+
+
+
+
+ Requires at least 1 element and 1 more to draw another primitive.
+
+
+
+
+ Requires at least 2 elements and 2 more to draw another primitive.
+
+
+
+
+ Requires at least 2 elements and 1 more to draw another primitive.
+
+
+
+
+ Requires at least 3 elements and 3 more to draw another primitive.
+
+
+
+
+ Requires at least 3 elements and 1 more to draw another primitive.
+
+
+
+
+ Requires at least 3 elements and 1 more to draw another primitive.
+
+
+
+
+ Requires at least 4 elements and 4 more to draw another primitive.
+
+
+
+
+ Requires at least 4 elements and 1 more to draw another primitive.
+
+
+
+
+ Requires at least 6 elements and 6 more to draw another primitive.
+
+
+
+
+ Requires at least 6 elements and 2 more to draw another primitive.
+
+
+
+
+ Requires at least 3 elements and 3 more to draw another primitive.
+
+
+
+
+ Requires at least 2 elements and 1 more to draw another primitive.
+
+
+
+
+ Requires at least 4 elements and 4 more to draw another primitive.
+
+
+
+
+ Requires at least 4 elements and 2 more to draw another primitive.
+
+
+
+
+ Requires at least 2 elements and 2 more to draw another primitive.
+
+
+
+
+ Requires at least 2 elements and 1 more to draw another primitive.
+
+
+
+
+ Requires at least 3 elements and 3 more to draw another primitive.
+
+
+
+
+ Requires at least 3 elements and 1 more to draw another primitive.
+
+
+
+
+ Requires at least 4 elements and 4 more to draw another primitive.
+
+
+
+
+ Requires at least 4 elements and 2 more to draw another primitive.
+
+
+
+
+ Represents the stencil function to be performed if stencil tests pass.
+
+
+
+
+ Represents shapes of a given surface or texture.
+
+
+
+
+ Represents desired texture, color-buffer, depth-buffer, or scan-buffer formats.
+
+
+
+
+ Represents Indicates how a given surface may be used. A final TV render target is one that will be copied to a
+ TV scan buffer. It needs to be designated to handle certain display corner cases (when a HD surface must be
+ scaled down to display in NTSC/PAL).
+
+
+
+
+ Represents maximum desired anisotropic filter ratios. Higher ratios give better image quality, but slower
+ performance.
+
+
+
+
+ Represents type of border color to use.
+
+
+
+
+ Represents how to treat texture coordinates outside of the normalized coordinate texture range.
+
+
+
+
+ Represents desired texture filter options between mip levels.
+
+
+
+
+ Represents desired texture filter options within a plane.
+
+
+
+
+ Represents desired texture filter options between Z planes.
+
+
+
+
+ Represents the desired tiling modes for a surface.
+
+
+
+
+ Represents GX2 polygon drawing settings controlling if and how triangles are rendered.
+
+
+
+
+ Gets or sets a value indicating whether front-facing polygons are culled.
+
+
+
+
+ Gets or sets a value indicating whether back-facing polygons are culled.
+
+
+
+
+ Gets or sets the order in which vertices have to form the triangle to be handled as a front- rather than
+ back-face.
+
+
+
+
+ Gets or sets a value indicating whether polygons are drawn at all.
+
+
+
+
+ Gets or sets how front facing polygons are drawn.
+
+
+
+
+ Gets or sets how back facing polygons are drawn.
+
+
+
+
+ Gets or sets whether front-facing polygons are drawn offset (useful for decals to combat Z fighting).
+
+
+
+
+ Gets or sets whether back-facing polygons are drawn offset (useful for decals to combat Z fighting).
+
+
+
+
+ Gets or sets whether lines are drawn offset (useful for decals to combat Z fighting).
+
+
+
+
+ Represents a GX2 texture sampler controlling how a texture is samples and drawn onto a surface.
+
+
+
+
+ Initializes a new instance of the instance.
+
+
+
+
+ Gets or sets the texture repetition mode on the X axis.
+
+
+
+
+ Gets or sets the texture repetition mode on the Y axis.
+
+
+
+
+ Gets or sets the texture repetition mode on the Z axis.
+
+
+
+
+ Gets or sets the texture filtering on the X and Y axes when the texture is drawn larger than the actual
+ texture's resolution.
+
+
+
+
+ Gets or sets the texture filtering on the X and Y axes when the texture is drawn smaller than the actual
+ texture's resolution.
+
+
+
+
+ Gets or sets the texture filtering on the Z axis.
+
+
+
+
+ Gets or sets the texture filtering for mipmaps.
+
+
+
+
+ Gets or sets the maximum anisotropic filtering level to use.
+
+
+
+
+ Gets or sets what color to draw at places not reached by a texture if the clamp mode does not repeat it.
+
+
+
+
+ Gets or sets the depth comparison function.
+
+
+
+
+ Gets or sets the minimum LoD level.
+
+
+
+
+
+ Gets or sets the maximum LoD level.
+
+
+
+
+ Gets or sets the LoD bias.
+
+
+
+
+ Gets or sets a value indicating whether depth comparison is enabled (never set for a real console).
+
+
+
+
+ Represents a helper class for working with instances.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class with data read from the given
+ . The data is available in the , which defaults
+ to system byte order.
+
+ The to initially read data from.
+ The in which vertex data is available. null to use
+ system byte order.
+
+
+
+ Gets or sets the in which vertex data will be stored when calling
+ . This should be the same as the remainder of the in
+ which it will be stored.
+
+
+
+
+ Gets or sets the number of bones influencing the vertices stored in the buffer. 0 influences equal
+ rigidbodies (no skinning), 1 equal rigid skinning and 2 or more smooth skinning.
+
+
+
+
+ Gets or sets the list of instances which store the data.
+
+
+
+
+ Gets or sets the instance at the given .
+
+ The index of the instance.
+ The instance at the given index.
+
+
+
+ Gets or sets the first instance with the given
+ .
+
+ The name of the instance.
+ The instance with the given name.
+
+
+
+ Returns a instance out of the stored helper data.
+
+ A new .
+
+
+
+ Represents an attribute and the data it stores in a instance.
+
+
+
+
+ The name of the attribute, typically used to determine the use of the data.
+
+
+
+
+ The into which data will be converted upon creating a
+ .
+
+
+
+
+ The data stored for this attribute. Has to be of the same length as every other
+ . Depending on , not every component of the
+ elements is used.
+
+
+
+
+ Represents an FMAT subsection of a subfile, storing information on with which textures and
+ how technically a surface is drawn.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets flags specifying how a is rendered.
+
+
+
+
+ Gets or sets the visible flag to display the material.
+
+
+
+
+ Gets or sets the list of instances referencing the instances
+ required to draw the material.
+
+
+
+
+ Gets or sets a dictionary of instances which configure how to draw
+ instances referenced by the list.
+
+
+
+
+ Gets or sets the raw data block which stores values.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Gets or sets a set of bits determining whether instances are volatile.
+
+
+
+
+ Represents general flags specifying how a is rendered.
+
+
+
+
+ The material is not rendered at all.
+
+
+
+
+ The material is rendered.
+
+
+
+
+ Represents a render info in a FMAT section storing uniform parameters required to render the
+ .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets the determining the data type of the stored value.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets the stored value as an array. Only valid if is
+ .
+
+ The stored value as an array.
+
+
+
+ Gets the stored value as a array. Only valid if is
+ .
+
+ The stored value as a array.
+
+
+
+ Gets the stored value as a array. Only valid if is
+ .
+
+ The stored value as a array.
+
+
+
+ Sets the stored value as an array and sets to
+ .
+
+ The array to set as the value.
+
+
+
+ Sets the stored value as a array and sets to
+ .
+
+ The array to set as the value.
+
+
+
+ Sets the stored value as a array and sets to
+ .
+
+ The array to set as the value.
+
+
+
+ Represents the data type of elements of the value array.
+
+
+
+
+ The elements are instances.
+
+
+
+
+ The elements are instances.
+
+
+
+
+ The elements are instances.
+
+
+
+
+ Represents GX2 GPU configuration to determine how polygons are rendered.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets GX2 polygon drawing settings controlling if and how triangles are rendered.
+
+
+
+
+ Gets or sets GX2 settings controlling how depth and stencil buffer checks are performed and handled.
+
+
+
+
+ Gets or sets GX2 settings controlling additional alpha blending options.
+
+
+
+
+ Gets or sets the reference value used for alpha testing.
+
+
+
+
+ Gets or sets GX2 settings controlling additional color blending options.
+
+
+
+
+ Gets or sets the blend target index.
+
+
+
+
+ Gets or sets GX2 settings controlling color and alpha blending.
+
+
+
+
+ Gets or sets the blend color to perform blending with.
+
+
+
+
+ Represents a sampler in a section, storing configuration on how to
+ draw and interpolate textures.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the internal representation of the sampler configuration.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Represents a parameter value in a section, passing data to shader variables.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the type of the value.
+
+
+
+
+ Gets the offset in the byte array in bytes.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets the size of the value in bytes.
+
+
+
+
+ Represents the data types in which instances can store their value.
+
+
+
+
+ The value is a single .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a single .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a single .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a single .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ An invalid type for values, only used for internal computations.
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ An invalid type for values, only used for internal computations.
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ An invalid type for values, only used for internal computations.
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ Represents an FMDL subfile in a , storing model vertex data, skeletons and used materials.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the path of the file which originally supplied the data of this instance.
+
+
+
+
+ Gets the instance to deform the model with animations.
+
+
+
+
+ Gets or sets the instances storing the vertex data used by the
+ .
+
+
+
+
+ Gets or sets the instances forming the surface of the model.
+
+
+
+
+ Gets or sets the instance applied on the to color their surface.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Gets the total number of vertices to process when drawing this model.
+
+ This excludes vertices which are not processed by any shader. However, the exact value does not
+ seem to matter, so the total count of all vertices is taken to keep things trivial for now.
+
+
+
+ Represents a spatial bounding box.
+
+
+
+
+ The center point of the bounding box.
+
+
+
+
+ The extent from the center point to the furthest point.
+
+
+
+
+ Represents a node in a bounding tree to determine when to show which sub mesh of a
+ .
+
+
+
+
+ Represents the surface net of a section, storing information on which
+ index to use for referencing vertices of the shape, mostly used for different levels of
+ detail (LoD) models.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the which determines how indices are used to form polygons.
+
+
+
+
+ Gets the determining the data type of the indices in the
+ .
+
+
+
+
+ Gets the number of indices stored in the .
+
+
+
+
+ Gets or sets the list of instances which split up a mesh into parts which can be
+ hidden if they are not visible to optimize rendering performance.
+
+
+
+
+ Gets or sets the storing the index data.
+
+
+
+
+ Gets or sets the offset to the first vertex element of a to reference by indices.
+
+
+
+
+ Returns the indices stored in the as instances.
+
+ The indices stored in the .
+
+
+
+ Stores the given in the in the provided
+ , or the current if none was specified.
+
+ The indices to store in the .
+ The to use or null to use the current format.
+
+
+
+
+ Represents an FSHP section in a subfile.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets flags determining which data is available for this instance.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the index of the material to apply to the shapes surface in the owning
+ list.
+
+
+
+
+ Gets or sets the index of the to which this instance is directly attached to. The bone
+ must be part of the skeleton referenced by the owning instance.
+
+
+
+
+ Gets or sets the index of the in the owning
+ list.
+
+
+
+
+ Gets or sets the bounding radius/radii spanning the shape. BOTW uses multiple per LOD mesh.
+
+
+
+
+ Gets or sets the number of bones influencing the vertices stored in this buffer. 0 influences equal
+ rigidbodies (no skinning), 1 equal rigid skinning and 2 or more smooth skinning.
+
+
+
+
+ Gets or sets a value with unknown purpose.
+
+
+
+
+ Gets or sets the list of which are used to represent different level of details of the
+ shape.
+
+
+
+
+ Gets or sets the instances forming the bounding tree with which parts of a mesh
+ are culled when not visible.
+
+
+
+
+ Gets or sets the instance storing the data which forms the shape's surface. Saved
+ depending on .
+
+
+
+
+ Represents flags determining which data is available for instances.
+
+
+
+
+ The instance references a .
+
+
+
+
+ The boundings in all submeshes are consistent.
+
+
+
+
+ Represents a subarray of a section, storing a slice of indices to draw from the index buffer
+ referenced in the mesh, mostly used for hiding parts of a model when not visible.
+
+
+
+
+ Gets the offset into the index buffer in bytes.
+
+
+
+
+ Gets the number of indices to reference.
+
+
+
+
+ Represents a single bone in a section, storing its initial transform and transformation
+ effects.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the index of the parent this instance is a child of.
+
+
+
+
+ Gets or sets the index of a matrix used for smooth skinning.
+
+
+
+
+ Gets or sets the index of a matrix used for rigid skinning.
+
+
+
+
+ Gets or sets flags controlling bone behavior.
+
+
+
+
+ Gets or sets the rotation method used to store bone rotations in .
+
+
+
+
+ Gets or sets the billboard transformation applied to the bone.
+
+
+
+
+ Gets or sets the spatial scale of the bone.
+
+
+
+
+ Gets or sets the spatial rotation of the bone. If is used, the
+ fourth component is always 1.0f.
+
+
+
+
+ Gets or sets the spatial position of the bone.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Gets or sets the inverse matrix (Only used in bfres verson v3.3.X.X and below)
+
+
+
+
+ Represents flags controlling bone behavior.
+
+
+
+
+ Set when the bone is visible.
+
+
+
+
+ Represents the rotation method used to store bone rotations.
+
+
+
+
+ A quaternion represents the rotation.
+
+
+
+
+ A represents the Euler rotation in XYZ order.
+
+
+
+
+ Represents the possible transformations for bones to handle them as billboards.
+
+
+
+
+ No transformation is applied.
+
+
+
+
+ Transforms of the child are applied.
+
+
+
+
+ Transforms the Z axis parallel to the camera.
+
+
+
+
+ Transforms the Z axis parallel to the direction of the camera.
+
+
+
+
+ Transforms the Y axis parallel to the camera up vector, and the Z parallel to the camera up-vector.
+
+
+
+
+ Transforms the Y axis parallel to the camera up vector, and the Z axis parallel to the direction of the
+ camera.
+
+
+
+
+ Transforms the Z axis parallel to the camera by rotating only the Y axis.
+
+
+
+
+ Transforms the Z axis parallel to the direction of the camera by rotating only the Y axis.
+
+
+
+
+ Represents an FSKL section in a subfile, storing armature data.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the rotation method used to store bone rotations.
+
+
+
+
+ Gets or sets the list of instances forming the skeleton.
+
+
+
+
+ Represents the rotation method used to store bone rotations.
+
+
+
+
+ A quaternion represents the rotation.
+
+
+
+
+ A represents the Euler rotation in XYZ order.
+
+
+
+
+ Represents an attribute of a describing the data format, type and layout of a
+ specific data subset in the buffer.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the index of the buffer storing the data in the list.
+
+
+
+
+ Gets or sets the offset in bytes to the attribute in each vertex.
+
+
+
+
+ Gets or sets the determining the type in which attribute data is available.
+
+
+
+
+ Represents a data buffer holding vertices for a subfile.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the number of bones influencing the vertices stored in this buffer. 0 influences equal
+ rigidbodies (no skinning), 1 equal rigid skinning and 2 or more smooth skinning.
+
+
+
+
+ Gets the number of vertices stored by the . It is calculated from the size of the first
+ in bytes divided by the .
+
+
+
+
+ Gets or sets the dictionary of instances describing how to interprete data in the
+ .
+
+
+
+
+ Gets or sets the list of instances storing raw unformatted vertex data.
+
+
+
+
+ Represents an exception raised when handling data.
+
+
+
+
+ Initializes a new instance of the class with a specified error
+ .
+
+ The error message that explains the reason for the exception.
+
+
+
+ Initializes a new instance of the class with a specified error message created
+ from the given and .
+
+ The format of the error message.
+ The parameters to format the error message with.
+
+
+
+ Represents a NintendoWare for Cafe (NW4F) graphics data archive file.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from the given which
+ is optionally left open.
+
+ The to load the data from.
+ true to leave the stream open after reading, otherwise false.
+
+
+
+ Initializes a new instance of the class from the file with the given
+ .
+
+ The name of the file to load the data from.
+
+
+
+ Gets or sets the alignment to use for raw data blocks in the file.
+
+
+
+
+ Gets or sets a name describing the contents.
+
+
+
+
+ Gets or sets the revision of the BFRES structure formats.
+
+
+
+
+ Gets or sets the major revision of the BFRES structure formats.
+
+
+
+
+ Gets or sets the major revision of the BFRES structure formats.
+
+
+
+
+ Gets or sets the second major revision of the BFRES structure formats.
+
+
+
+
+ Gets or sets the minor revision of the BFRES structure formats.
+
+
+
+
+ Gets or sets the second minor revision of the BFRES structure formats.
+
+
+
+
+ Gets the byte order in which data is stored. Must be the endianness of the target platform.
+
+
+
+
+ Gets or sets the stored (FMDL) instances.
+
+
+
+
+ Gets or sets the stored (FTEX) instances.
+
+
+
+
+ Gets or sets the stored (FSKA) instances.
+
+
+
+
+ Gets or sets the stored (FSHU) instances.
+
+
+
+
+ Gets or sets the stored (FSHU) instances for color animations.
+
+
+
+
+ Gets or sets the stored (FSHU) instances for texture SRT animations.
+
+
+
+
+ Gets or sets the stored (FTXP) instances.
+
+
+
+
+ Gets or sets the stored (FVIS) instances for bone visibility animations.
+
+
+
+
+ Gets or sets the stored (FVIS) instances for material visibility animations.
+
+
+
+
+ Gets or sets the stored (FSHA) instances.
+
+
+
+
+ Gets or sets the stored (FSCN) instances.
+
+
+
+
+ Gets or sets attached instances. The key of the dictionary typically represents
+ the name of the file they were originally created from.
+
+
+
+
+ Saves the contents in the given and optionally leaves it open
+
+ The to save the contents into.
+ true to leave the stream open after writing, otherwise false.
+
+
+
+ Saves the contents in the file with the given .
+
+ The name of the file to save the contents into.
+
+
+
+ Represents an FCAM section in a subfile, storing animations controlling camera settings.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets flags controlling how animation data is stored or how the animation should be played.
+
+
+
+
+ Gets or sets the total number of frames this animation plays.
+
+
+
+
+ Gets or sets the number of bytes required to bake all .
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets instances animating properties of objects stored in this section.
+
+
+
+
+ Gets the instance storing initial camera parameters.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Represents flags specifying how animation data is stored or should be played.
+
+
+
+
+ The stored curve data has been baked.
+
+
+
+
+ The animation repeats from the start after the last frame has been played.
+
+
+
+
+ The rotation mode stores ZXY angles rather than look-at points in combination with a twist.
+
+
+
+
+ The projection mode is perspective rather than ortographic.
+
+
+
+
+ Represents the animatable data of scene cameras.
+
+
+
+
+ The near clipping plane distance.
+
+
+
+
+ The far clipping plane distance.
+
+
+
+
+ The aspect ratio of the projected image.
+
+
+
+
+ The field of view of the projected image.
+
+
+
+
+ The spatial position of the camera.
+
+
+
+
+ The spatial rotation of the camera.
+
+
+
+
+ The spatial twist of the camera.
+
+
+
+
+ Gets the for instances.
+
+
+
+
+ Animates .
+
+
+
+
+ Animates .
+
+
+
+
+ Animates .
+
+
+
+
+ Animates .
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the Z component of .
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the Z component of .
+
+
+
+
+ Animates .
+
+
+
+
+ Represents an FCAM section in a subfile, storing animations controlling fog settings.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets flags controlling how animation data is stored or how the animation should be played.
+
+
+
+
+ Gets or sets the total number of frames this animation plays.
+
+
+
+
+ Gets or sets the index of the distance attenuation function to use.
+
+
+
+
+ Gets or sets the number of bytes required to bake all .
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the name of the distance attenuation function to use.
+
+
+
+
+ Gets or sets instances animating properties of objects stored in this section.
+
+
+
+
+ Gets or sets the instance storing initial fog parameters.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Represents flags specifying how animation data is stored or should be played.
+
+
+
+
+ The stored curve data has been baked.
+
+
+
+
+ The animation repeats from the start after the last frame has been played.
+
+
+
+
+ Represents the animatable data of scene fog.
+
+
+
+
+ The distance attenuation of the fog depth.
+
+
+
+
+ The color of the fog.
+
+
+
+
+ Gets the for instances.
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the X (red) component of .
+
+
+
+
+ Animates the Y (green) component of .
+
+
+
+
+ Animates the Z (blue) component of .
+
+
+
+
+ Represents an FLIT section in a subfile, storing animations controlling light settings.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets flags controlling how the animation should be played.
+
+
+
+
+ Gets or sets flags controlling how animation data is stored or how the animation should be played.
+
+
+
+
+ Gets or sets the total number of frames this animation plays.
+
+
+
+
+ Gets or sets the index of the light type.
+
+
+
+
+ Gets or sets the index of the distance attenuation function to use.
+
+
+
+
+ Gets or sets the index of the angle attenuation function to use.
+
+
+
+
+ Gets or sets the number of bytes required to bake all .
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the name of the light type.
+
+
+
+
+ Gets or sets the name of the distance attenuation function to use.
+
+
+
+
+ Gets or sets the name of the angle attenuation function to use.
+
+
+
+
+ Gets or sets instances animating properties of objects stored in this section.
+
+
+
+
+ Gets the instance storing initial light parameters.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Represents flags specifying how animation data is stored.
+
+
+
+
+ The stored curve data has been baked.
+
+
+
+
+ The animation repeats from the start after the last frame has been played.
+
+
+
+
+ Represents flags specifying which fields are animated.
+
+
+
+
+ Enabled state is animated.
+
+
+
+
+ Position is animated.
+
+
+
+
+ Rotation is animated.
+
+
+
+
+ Distance attenuation is animated.
+
+
+
+
+ Angle attenuation is animated in degrees.
+
+
+
+
+ Color 0 is animated.
+
+
+
+
+ Color 1 is animated.
+
+
+
+
+ Represents the animatable data of scene lighting.
+
+
+
+
+ Enables or disables the light in total.
+
+
+
+
+ The spatial origin of the light source for point or spot lights.
+
+
+
+
+ The spatial rotation of the light source.
+
+
+
+
+ The distance attenuation of the light.
+
+
+
+
+ The angle attenuation of the light in degrees.
+
+
+
+
+ The first light source color.
+
+
+
+
+ The second light source color.
+
+
+
+
+ Gets the for instances.
+
+
+
+
+ Animates .
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the Z component of .
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the Z component of .
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the X (red) component of .
+
+
+
+
+ Animates the Y (green) component of .
+
+
+
+
+ Animates the Z (blue) component of .
+
+
+
+
+ Animates the X (red) component of .
+
+
+
+
+ Animates the Y (green) component of .
+
+
+
+
+ Animates the Z (blue) component of .
+
+
+
+
+ Represents an FSCN subfile in a , storing scene animations controlling camera, light and
+ fog settings.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the path of the file which originally supplied the data of this instance.
+
+
+
+
+ Gets or sets the instances.
+
+
+
+
+ Gets or sets the instances.
+
+
+
+
+ Gets or sets the instances.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Represents a parameter animation info in a instance.
+
+
+
+
+ Gets or sets the index of the first instance in the parent
+ .
+
+
+
+
+ Gets or sets the index of the first instance in the parent
+ .
+
+
+
+
+ Gets or sets the number of instances used in the parent
+ .
+
+
+
+
+ Gets or sets the index of the in the .
+
+
+
+
+ Gets the name of the animated .
+
+
+
+
+ Represents an FSHU subfile in a , storing shader parameter animations of a
+ instance.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the path of the file which originally supplied the data of this instance.
+
+
+
+
+ Gets or sets flags controlling how animation data is stored or how the animation should be played.
+
+
+
+
+ Gets or sets the total number of frames this animation plays.
+
+
+
+
+ Gets or sets the number of bytes required to bake all instances of all
+ .
+
+
+
+
+ Gets or sets the instance affected by this animation.
+
+
+
+
+ Gets the indices of the instances in the dictionary to
+ bind for each animation. specifies no binding.
+
+
+
+
+ Gets or sets the instances creating the animation.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Represents flags specifying how animation data is stored or should be played.
+
+
+
+
+ The stored curve data has been baked.
+
+
+
+
+ The animation repeats from the start after the last frame has been played.
+
+
+
+
+ Represents a material parameter animation in a subfile.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the name of the animated .
+
+
+
+
+ Gets or sets the list of instances.
+
+
+
+
+ Gets or sets instances animating properties of objects stored in this section.
+
+
+
+
+ Gets or sets the index of the first relative to all curves of the parent
+ instances.
+
+
+
+
+ Gets or sets the index of the first relative to all param anim infos of the
+ parent instances.
+
+
+
+
+ Represents a key shape animation info in a instance.
+
+
+
+
+ Gets or sets the index of the curve in the .
+
+
+
+
+ Gets or sets the index of the in the .
+
+
+
+
+ Gets or sets the name of the in the .
+
+
+
+
+ Represents an FSHA subfile in a , storing shape animations of a
+ instance.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the path of the file which originally supplied the data of this instance.
+
+
+
+
+ Gets or sets flags controlling how animation data is stored or how the animation should be played.
+
+
+
+
+ Gets or sets the total number of frames this animation plays.
+
+
+
+
+ Gets or sets the number of bytes required to bake all instances of all
+ .
+
+
+
+
+ Gets or sets the instance affected by this animation.
+
+
+
+
+ Gets or sets the indices of the instances in the dictionary
+ to bind for each animation. specifies no binding.
+
+
+
+
+ Gets or sets the instances creating the animation.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Represents flags specifying how animation data is stored or should be played.
+
+
+
+
+ The stored curve data has been baked.
+
+
+
+
+ The animation repeats from the start after the last frame has been played.
+
+
+
+
+ Represents a vertex shape animation in a subfile.
+
+
+
+
+ Gets or sets the name of the animated .
+
+
+
+
+ Gets or sets the list of instances.
+
+
+
+
+ Gets or sets instances animating properties of objects stored in this section.
+
+
+
+
+ Gets or sets the list of base values, excluding the base shape (which is always being initialized with 0f).
+
+
+
+
+ Gets or sets the index of the first relative to all curves of the parent
+ instances.
+
+
+
+
+ Gets or sets the index of the first relative to all key shape anim infos of
+ the parent instances.
+
+
+
+
+ Represents the animation of a single in a subfile.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets a set of flags indicating whether initial transformation values exist in
+ .
+
+
+
+
+ Gets or sets a set of flags indicating whether curves animating the corresponding transformation exist.
+
+
+
+
+ Gets or sets a set of flags controlling how to transform bones.
+
+
+
+
+ Gets or sets the name of the animated .
+
+
+
+
+ Gets or sets a field with unknown purpose.
+
+
+
+
+ Gets or sets a field with unknown purpose.
+
+
+
+
+ Gets or sets the element offset in the to an initial translation.
+
+
+
+
+ Gets the index of the first relative to all curves of the parent
+ instances.
+
+
+
+
+ Gets or sets instances animating properties of objects stored in this section.
+
+
+
+
+ Gets or sets initial transformation values. Only stores specific transformations according to
+ .
+
+
+
+
+ Represents if initial values exist for the corresponding transformation in the base animation data.
+
+
+
+
+ Initial scaling values exist.
+
+
+
+
+ Initial rotation values exist.
+
+
+
+
+ Initial translation values exist.
+
+
+
+
+ Represents if curves exist which animate the corresponding transformation component.
+
+
+
+
+ Curve animating the X component of a bone's scale.
+
+
+
+
+ Curve animating the Y component of a bone's scale.
+
+
+
+
+ Curve animating the Z component of a bone's scale.
+
+
+
+
+ Curve animating the X component of a bone's rotation.
+
+
+
+
+ Curve animating the Y component of a bone's rotation.
+
+
+
+
+ Curve animating the Z component of a bone's rotation.
+
+
+
+
+ Curve animating the W component of a bone's rotation.
+
+
+
+
+ Curve animating the X component of a bone's translation.
+
+
+
+
+ Curve animating the Y component of a bone's translation.
+
+
+
+
+ Curve animating the Z component of a bone's translation.
+
+
+
+
+ Represents how a bone transformation has to be applied.
+
+
+
+
+ Represents the animatable data of a instance.
+
+
+
+
+ The scaling of the bone.
+
+
+
+
+ The translation of the bone.
+
+
+
+
+ An unused field.
+
+
+
+
+ The rotation of the bone.
+
+
+
+
+ Gets the for instances.
+
+
+
+
+ Animates (never seen in files).
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the Z component of .
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the Z component of .
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the Z component of .
+
+
+
+
+ Animates the W component of .
+
+
+
+
+ Represents an FSKA subfile in a , storing armature animations of
+ instances in a .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the path of the file which originally supplied the data of this instance.
+
+
+
+
+ Gets or sets the total number of frames this animation plays.
+
+
+
+
+ Gets or sets the mode used to control looping and baked settings.
+
+
+
+
+ Gets or sets the mode used to store scaling values.
+
+
+
+
+ Gets or sets the mode used to store rotation values.
+
+
+
+
+ Gets or sets the number of bytes required to bake all instances of all
+ .
+
+
+
+
+ Gets or sets the instances creating the animation.
+
+
+
+
+ Gets or sets the instance affected by this animation.
+
+
+
+
+ Gets or sets the indices of the instances in the dictionary
+ to bind for each animation. specifies no binding.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Represents flags specifying how animation data is stored or should be played.
+
+
+
+
+ The stored curve data has been baked.
+
+
+
+
+ The animation repeats from the start after the last frame has been played.
+
+
+
+
+ Represents the data format in which scaling values are stored.
+
+
+
+
+ No scaling.
+
+
+
+
+ Default scaling.
+
+
+
+
+ Autodesk Maya scaling.
+
+
+
+
+ Autodesk Softimage scaling.
+
+
+
+
+ Represents the data format in which rotation values are stored.
+
+
+
+
+ Quaternion, 4 components.
+
+
+
+
+ Euler XYZ, 3 components.
+
+
+
+
+ Represents a pattern animation info in a instance.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the index of the curve in the .
+
+
+
+
+ Gets or sets the index of the texture in the .
+
+
+
+
+ Gets or sets the name of the in the .
+
+
+
+
+ Represents an FTXP subfile in a , storing texture material pattern animations.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the path of the file which originally supplied the data of this instance.
+
+
+
+
+ Gets or sets flags controlling how animation data is stored or how the animation should be played.
+
+
+
+
+ Gets or sets the total number of frames this animation plays.
+
+
+
+
+ Gets or sets the number of bytes required to bake all instances of all
+ .
+
+
+
+
+ Gets or sets the instance affected by this animation.
+
+
+
+
+ Gets or sets the indices of the instances in the
+ dictionary to bind for each animation. specifies no binding.
+
+
+
+
+ Gets or sets the instances creating the animation.
+
+
+
+
+ Gets or sets the instances pointing to instances
+ participating in the animation.
+
+
+
+
+ Note used for older bfres files
+ Gets or sets the instances pointing to instances
+ participating in the animation.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Represents flags specifying how animation data is stored or should be played.
+
+
+
+
+ The stored curve data has been baked.
+
+
+
+
+ The animation repeats from the start after the last frame has been played.
+
+
+
+
+ Represents a texture pattern material animation in a subfile.
+
+
+
+
+ Gets the name of the animated .
+
+
+
+
+ Gets or sets the list of instances.
+
+
+
+
+ Gets or sets instances animating properties of objects stored in this section.
+
+
+
+
+ Gets or sets the initial indices.
+
+
+
+
+ Gets or sets the index of the first relative to all curves of the parent
+ instances.
+
+
+
+
+ Gets or sets the index of the first relative to all param anim infos of the
+ parent instances.
+
+
+
+
+ Represents an FMDL subfile in a , storing multi-dimensional texture data.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the source channel to map to the R (red) channel.
+
+
+
+
+ Gets or sets the source channel to map to the G (green) channel.
+
+
+
+
+ Gets or sets the source channel to map to the B (blue) channel.
+
+
+
+
+ Gets or sets the source channel to map to the A (alpha) channel.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the path of the file which originally supplied the data of this instance.
+
+
+
+
+ Gets or sets the width of the texture.
+
+
+
+
+ Gets or sets the height of the texture.
+
+
+
+
+ Gets or sets the depth of the texture.
+
+
+
+
+ Gets or sets the number of mipmaps stored in the .
+
+
+
+
+ Gets or sets the swizzling value.
+
+
+
+
+ Gets or sets the swizzling alignment.
+
+
+
+
+ Gets or sets the pixel swizzling stride.
+
+
+
+
+ Gets or sets the desired texture data buffer format.
+
+
+
+
+ Gets or sets the desired texture data buffer format.
+
+
+
+
+ Gets or sets the shape of the texture.
+
+
+
+
+ Gets or sets the number of samples for the texture.
+
+
+
+
+ Gets or sets the texture data usage hint.
+
+
+
+
+ Gets or sets the tiling mode.
+
+
+
+
+ Gets or sets the offsets in the array to the data of the mipmap level corresponding
+ to the array index.
+
+
+
+
+ Gets or sets the raw texture data bytes.
+
+
+
+
+ Gets or sets the raw mipmap level data bytes for all levels.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Represents an FVIS subfile in a , storing visibility animations of or
+ instances.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the path of the file which originally supplied the data of this instance.
+
+
+
+
+ Gets or sets flags controlling how animation data is stored or how the animation should be played.
+
+
+
+
+ Gets or sets the kind of data the animation controls.
+
+
+
+
+ Gets or sets the total number of frames this animation plays.
+
+
+
+
+ Gets or sets the number of bytes required to bake all .
+
+
+
+
+ Gets or sets the instance affected by this animation.
+
+
+
+
+ Gets or sets the indices of entries in the or
+ dictionaries to bind to for each animation. specifies no binding.
+
+
+
+
+ Gets or sets the names of entries in the or
+ dictionaries to bind to for each animation.
+
+
+
+
+ Gets or sets instances animating properties of objects stored in this section.
+
+
+
+
+ Gets or sets boolean values storing the initial visibility for each or
+ .
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Represents flags specifying how animation data is stored or should be played.
+
+
+
+
+ The stored curve data has been baked.
+
+
+
+
+ The animation repeats from the start after the last frame has been played.
+
+
+
+
+ Represents the kind of data the visibility animation controls.
+
+
+
+
+ Bone visiblity is controlled.
+
+
+
+
+ Material visibility is controlled.
+
+
+
+
diff --git a/BrawlboxHelper/Syroot.NintenTools.NSW.Bfres.dll b/BrawlboxHelper/Syroot.NintenTools.NSW.Bfres.dll
new file mode 100644
index 00000000..5172a08a
Binary files /dev/null and b/BrawlboxHelper/Syroot.NintenTools.NSW.Bfres.dll differ
diff --git a/BrawlboxHelper/Syroot.NintenTools.NSW.Bfres.pdb b/BrawlboxHelper/Syroot.NintenTools.NSW.Bfres.pdb
new file mode 100644
index 00000000..81157245
Binary files /dev/null and b/BrawlboxHelper/Syroot.NintenTools.NSW.Bfres.pdb differ
diff --git a/BrawlboxHelper/Syroot.NintenTools.NSW.Bfres.xml b/BrawlboxHelper/Syroot.NintenTools.NSW.Bfres.xml
new file mode 100644
index 00000000..b75688af
--- /dev/null
+++ b/BrawlboxHelper/Syroot.NintenTools.NSW.Bfres.xml
@@ -0,0 +1,5291 @@
+
+
+
+ Syroot.NintenTools.NSW.Bfres
+
+
+
+
+ Represents an animation curve used by several sections to control different parameters over time.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Alignment of curve data
+
+
+
+
+ Gets or sets the data type in which are loaded and saved. For simplicity, the class
+ always stores frames as converted instances.
+
+
+
+
+ Gets or sets the data type in which are loaded and saved. For simplicity, the class
+ always stores frames as converted instances.
+
+
+
+
+ Gets or sets the curve type, determining the number of elements stored with each key.
+
+
+
+
+ Gets or sets the memory offset relative to the start of the corresponding animation data structure to
+ animate the field stored at that address. Note that enums exist in the specific animation which map offsets
+ to names.
+
+
+
+
+ Gets or sets the first frame at which a key is placed.
+
+
+
+
+ Gets or sets the last frame at which a key is placed.
+
+
+
+
+ Gets or sets the scale to multiply values of the curve by.
+
+
+
+
+ Gets or sets the offset to add to the values of the curve (after multiplicating them).
+
+
+
+
+ Gets or sets the difference between the lowest and highest key value.
+
+
+
+
+ Gets the frame numbers at which keys of the same index in the array are placed.
+
+
+
+
+ Gets an array of elements forming the elements of keys placed at the frames of the same index in the
+ array.
+
+
+
+
+ Represents the possible data types in which are stored. For simple library use,
+ they are always converted them to and from instances.
+
+
+
+
+ The frames are stored as instances.
+
+
+
+
+ The frames are stored as instances.
+
+
+
+
+ The frames are stored as instances.
+
+
+
+
+ Represents the possible data types in which are stored. For simple library use,
+ they are always converted them to and from instances.
+
+
+
+
+ The keys are stored as instances.
+
+
+
+
+ The keys are stored as instances.
+
+
+
+
+ The keys are stored as instances.
+
+
+
+
+ Represents the type of key values stored by this curve. This also determines the number of required elements to
+ define a key in the array. Use the
+ method to retrieve the number of elements required for the of that curve.
+
+
+
+
+ The curve uses cubic interpolation. 4 elements of the array form a key.
+
+
+
+
+ The curve uses linear interpolation. 2 elements of the array form a key.
+
+
+
+
+ 1 element of the array forms a key.
+
+
+
+
+ 1 element of the array forms a key.
+
+
+
+
+ 1 element of the array forms a key.
+
+
+
+
+ 1 element of the array forms a key.
+
+
+
+
+ 1 element of the array forms a key.
+
+
+
+
+ Gets or sets the memory offset relative to the start of the corresponding animation data structure to
+ animate the field stored at that address. Note that enums exist in the specific animation which map offsets
+ to names.
+
+
+
+
+ Represents a 16-bit fixed-point decimal consisting of 1 sign bit, 10 integer bits and 5 fractional bits (denoted
+ as Q10.5). Note that the implementation is not reporting over- and underflowing errors.
+
+
+ Examples:
+ SIIIIIII_IIIFFFFF
+ 0b00000000_00010000 = 0.5
+ 0b00000000_00100000 = 1
+ 0b00000001_00000000 = 8
+ 0b01000000_00000000 = 512
+ 0b10000000_00000000 = -1024
+
+
+
+
+ Represents the largest possible value of .
+
+
+
+
+ Represents the smallest possible value of .
+
+
+
+
+ Initializes a new instance of the struct from the given
+ representation.
+
+ The raw representation of the internally stored bits.
+
+
+
+ Gets the internally stored value to represent the instance.
+
+ Signed to get arithmetic rather than logical shifts.
+
+
+
+ Returns the given .
+
+ The .
+ The result.
+
+
+
+ Adds the first to the second one.
+
+ The first .
+ The second .
+ The addition result.
+
+
+
+ Negates the given .
+
+ The to negate.
+ The negated result.
+
+
+
+ Subtracts the first from the second one.
+
+ The first .
+ The second .
+ The subtraction result.
+
+
+
+ Multiplicates the given by the scalar.
+
+ The .
+ The scalar.
+ The multiplication result.
+
+
+
+ Multiplicates the first by the second one.
+
+ The first .
+ The second .
+ The multiplication result.
+
+
+
+ Divides the given through the scalar.
+
+ The .
+ The scalar.
+ The division result.
+
+
+
+ Divides the first through the second one.
+
+ The first .
+ The second .
+ The division result.
+
+
+
+ Gets a value indicating whether the first specified is the same as the second
+ specified .
+
+ The first to compare.
+ The second to compare.
+ true, if both are the same.
+
+
+
+ Gets a value indicating whether the first specified is not the same as the second
+ specified .
+
+ The first to compare.
+ The second to compare.
+ true, if both are not the same.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Gets a value indicating whether this is the same as the second specified
+ .
+
+ The object to compare, if it is a .
+ true, if both are the same.
+
+
+
+ Gets a hash code as an indication for object equality.
+
+ The hash code.
+
+
+
+ Gets a string describing this .
+
+ A string describing this .
+
+
+
+ Indicates whether the current is equal to another .
+
+ A to compare with this .
+ true if the current is equal to the other parameter; otherwise, false.
+
+
+
+
+ Represents a 4-byte value which can hold differently typed data.
+
+
+
+
+ The data as an .
+
+
+
+
+ The data as a .
+
+
+
+
+ The data as an .
+
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new instance.
+
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new instance.
+
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new instance.
+
+
+
+
+ Converts the given value to an instance.
+
+ The value to represent in the new instance.
+
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new instance.
+
+
+
+
+ Converts the given value to an instance.
+
+ The value to represent in the new instance.
+
+
+
+
+ Returns the for this instance.
+
+ The enumerated constant that is the of the class or value type that
+ implements this interface.
+
+
+
+ This operation is not supported.
+
+
+
+
+ This operation is not supported.
+
+
+
+
+ This operation is not supported.
+
+
+
+
+ This operation is not supported.
+
+
+
+
+ This operation is not supported.
+
+
+
+
+ Converts the value of this instance to an equivalent double-precision floating-point number using the
+ specified culture-specific formatting information.
+
+ An interface implementation that supplies
+ culture-specific formatting information.
+ A double-precision floating-point number equivalent to the value of this instance.
+
+
+
+ This operation is not supported.
+
+
+
+
+ Converts the value of this instance to an equivalent 32-bit signed integer using the specified
+ culture-specific formatting information.
+
+ An interface implementation that supplies
+ culture-specific formatting information.
+ An 32-bit signed integer equivalent to the value of this instance.
+
+
+
+ Converts the value of this instance to an equivalent 64-bit signed integer using the specified
+ culture-specific formatting information.
+
+ An interface implementation that supplies
+ culture-specific formatting information.
+ An 64-bit signed integer equivalent to the value of this instance.
+
+
+
+ This operation is not supported.
+
+
+
+
+ Converts the value of this instance to an equivalent single-precision floating-point number using the
+ specified culture-specific formatting information.
+
+ An interface implementation that supplies
+ culture-specific formatting information.
+ A single-precision floating-point number equivalent to the value of this instance.
+
+
+
+ This operation is not supported.
+
+
+
+
+ Converts the value of this instance to an of the specified that has
+ an equivalent value, using the specified culture-specific formatting information.
+
+ The to which the value of this instance is converted.
+
+ An interface implementation that supplies
+ culture-specific formatting information.
+ An instance of type conversionType whose value is equivalent to the value of
+ this instance.
+
+
+
+ This operation is not supported.
+
+
+
+
+ This operation is not supported.
+
+
+
+
+ This operation is not supported.
+
+
+
+
+ Represents a 16-bit half-precision floating point value according to the IEEE 754 standard.
+
+
+ Examples:
+ SEEEEEFF_FFFFFFFF
+ 0b00000000_00000000 = 0
+ 1b00000000_00000000 = -0
+ 0b00111100_00000000 = 1
+ 0b11000000_00000000 = -2
+ 0b11111011_11111111 = 65504 (MaxValue)
+ 0b01111100_00000000 = PositiveInfinity
+ 0b11111100_00000000 = NegativeInfinity
+
+
+
+
+ Represents the smallest positive value greater than zero.
+
+
+
+
+ Represents the largest possible value of .
+
+
+
+
+ Represents the smallest possible value of .
+
+
+
+
+ Represents not a number (NaN).
+
+
+
+
+ Represents negative infinity.
+
+
+
+
+ Represents positive infinity.
+
+
+
+
+ Initializes a new instance of the struct from the given
+ representation.
+
+ The raw representation of the internally stored bits.
+
+
+
+ Gets the internally stored value to represent the instance.
+
+ Signed to get arithmetic rather than logical shifts.
+
+
+
+ Returns the given .
+
+ The .
+ The result.
+
+
+
+ Adds the first to the second one.
+
+ The first .
+ The second .
+ The addition result.
+
+
+
+ Negates the given .
+
+ The to negate.
+ The negated result.
+
+
+
+ Subtracts the first from the second one.
+
+ The first .
+ The second .
+ The subtraction result.
+
+
+
+ Multiplicates the first by the second one.
+
+ The first .
+ The second .
+ The multiplication result.
+
+
+
+ Divides the first through the second one.
+
+ The first .
+ The second .
+ The division result.
+
+
+
+ Gets a value indicating whether the first specified is the same as the second
+ specified .
+
+ The first to compare.
+ The second to compare.
+ true, if both are the same.
+
+
+
+ Gets a value indicating whether the first specified is not the same as the second
+ specified .
+
+ The first to compare.
+ The second to compare.
+ true, if both are not the same.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new
+ instance.
+
+
+
+ Gets a value indicating whether this is the same as the second specified
+ .
+
+ The object to compare, if it is a .
+ true, if both are the same.
+
+
+
+ Gets a hash code as an indication for object equality.
+
+ The hash code.
+
+
+
+ Gets a string describing this .
+
+ A string describing this .
+
+
+
+ Indicates whether the current is equal to another .
+
+ A to compare with this .
+ true if the current is equal to the other parameter; otherwise, false.
+
+
+
+
+ Returns a value indicating whether the specified number evaluates to not a number ().
+
+ A half-precision floating-point number.
+ true if value evaluates to not a number (); otherwise false.
+
+
+
+ Returns a value indicating whether the specified number evaluates to negative or positive infinity.
+
+ A half-precision floating-point number.
+ true if half evaluates to or ;
+ otherwise false.
+
+
+
+ Returns a value indicating whether the specified number evaluates to negative infinity.
+
+ A half-precision floating-point number.
+ true if half evaluates to ; otherwise false.
+
+
+
+ Returns a value indicating whether the specified number evaluates to positive infinity.
+
+ A half-precision floating-point number.
+ true if half evaluates to ; otherwise false.
+
+
+
+ Represents an buffer info section in a subfile. References vertex and index buffers
+
+
+
+
+ Gets or sets the buffer instance that stores face data first, then vertex buffer after.
+
+
+
+
+ Gets or sets the buffer instance that stores face data
+
+
+
+
+ Gets or sets the buffer instance that stores vertex data
+
+
+
+
+ Gets or sets an unkown value
+
+
+
+
+ Represents a buffer info section
+
+
+
+
+ the buffer size
+
+
+
+
+ Flag
+
+
+
+
+ Represents a buffer info section
+
+
+
+
+ Load and display information of RLT
+
+
+
+
+ Represents the non-generic base of a dictionary which can quickly look up instances via
+ key or index.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets the number of instances stored.
+
+
+
+
+ Adds the given to insert in the dictionary.
+
+ Duplicated instances
+ already exists.
+
+
+
+ Removes the given from the dictionary.
+
+ Duplicated instances
+ already exists.
+
+
+
+ Determines whether the given is in the dictionary.
+
+ true if was found in the dictionary; otherwise false.
+
+
+
+
+ Returns the key given is within range of the dictionary.
+
+
+
+
+ Removes all elements from the dictionary.
+
+
+
+
+ Returns only the publically visible nodes, excluding the root node.
+
+
+
+
+ Represents a node forming the Patricia trie of the dictionary.
+
+
+
+
+ Represents a which is stored in a .
+
+
+
+
+ The textual represented by this instance.
+
+
+
+
+ The with which this string was read or will be written.
+
+
+
+
+ Converts the given value to a instance.
+
+ The value to represent in the new instance.
+
+
+
+
+ Converts the given value to an instance.
+
+ The value to represent in the new instance.
+
+
+
+
+ Returns the value of the property.
+
+ The value of the property.
+
+
+
+ Represents a 2D transformation.
+
+
+
+
+ The size of this structure.
+
+
+
+
+ The scaling amount of the transformation.
+
+
+
+
+ The rotation angle of the transformation.
+
+
+
+
+ The translation amount of the transformation.
+
+
+
+
+ Represents a 3D transformation.
+
+
+
+
+ The size of this structure.
+
+
+
+
+ The scaling amount of the transformation.
+
+
+
+
+ The rotation amount of the transformation.
+
+
+
+
+ The translation amount of the transformation.
+
+
+
+
+ Represents a 2D texture transformation.
+
+
+
+
+ The size of this structure.
+
+
+
+
+ The with which the transformation is applied.
+
+
+
+
+ The scaling amount of the transformation.
+
+
+
+
+ The rotation angle of the transformation.
+
+
+
+
+ The translation amount of the transformation.
+
+
+
+
+ Represents a 2D texture transformation which is multiplied by a 3x4 matrix referenced at runtime by the
+ .
+
+
+
+
+ The size of this structure.
+
+
+
+
+ The with which the transformation is applied.
+
+
+
+
+ The scaling amount of the transformation.
+
+
+
+
+ The rotation angle of the transformation.
+
+
+
+
+ The translation amount of the transformation.
+
+
+
+
+ A pointer to a 3x4 matrix to multiply the transformation with. Set at runtime.
+
+
+
+
+ Represents the texture transformation mode used in and .
+
+
+
+
+ Represents custom user variables which can be attached to many sections and subfiles of a .
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ The data type of the stored values.
+
+
+
+
+ Returns the stored value as an array of instances when the is
+ .
+
+ The typed value.
+
+
+
+ Returns the stored value as an array of instances when the is
+ .
+
+ The typed value.
+
+
+
+ Returns the stored value as an array of instances when the is
+ or .
+
+ The typed value.
+
+
+
+ Returns the stored value as an array of instances when the is
+ .
+
+ The typed value.
+
+
+
+ Sets the stored as an array and the to
+
+
+ The value to store.
+
+
+
+ Sets the stored as a array and the to
+
+
+ The value to store.
+
+
+
+ Sets the stored as a array and the to
+ or depending on
+ .
+
+ true to store data as UTF-16 encoded strings, or false to store it
+ as ASCII encoded strings.
+ The value to store.
+
+
+
+ Sets the stored as a array and the to
+
+
+ The value to store.
+
+
+
+ Represents the possible data types of values stored in instances.
+
+
+
+
+ The values is an array.
+
+
+
+
+ The values is a array.
+
+
+
+
+ The values is a array encoded in ASCII.
+
+
+
+
+ The values is a array.
+
+
+
+
+ The values is a array encoded in UTF-16.
+
+
+
+
+ Represents extension methods for the class.
+
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The number of instances to read.
+ The instance.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The in which values are stored.
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The in which values are stored.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The in which values are stored.
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The in which values are stored.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The in which values are stored.
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The in which values are stored.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Reads a instance from the current stream and returns it.
+
+ The extended .
+ The instance.
+
+
+
+ Reads instances from the current stream and returns them.
+
+ The extended .
+ The number of instances to read.
+ The instances.
+
+
+
+ Returns the conversion delegate for converting data available in the given
+ into a instance. Useful to prevent repetitive lookup for multiple values.
+
+ The extended .
+ The of the data.
+ A conversion delegate for the data.
+
+
+
+ Reads a instance converted from the given and
+ returns it.
+
+ The extended .
+ The of the data.
+ The instance.
+
+
+
+ Reads a instances converted from the given and
+ returns them.
+
+ The extended .
+ The number of instances to read.
+ The of the data.
+ The instances.
+
+
+
+ Represents extension methods for the class.
+
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+ The in which values are stored.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+ The in which values are stored.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+ The in which values are stored.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+ The in which values are stored.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+ The in which values are stored.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+ The in which values are stored.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Writes a instance into the current stream.
+
+ The extended .
+ The instance.
+
+
+
+ Writes instances into the current stream.
+
+ The extended .
+ The instances.
+
+
+
+ Returns the conversion delegate for converting data available in the given
+ from a instance. Useful to prevent repetitive lookup for multiple values.
+
+ The extended .
+ The of the data.
+ A conversion delegate for the data.
+
+
+
+ Returns the conversion delegate for converting data available in the given
+ from a instance. Useful to prevent repetitive lookup for multiple values.
+
+ The extended .
+ The of the data.
+ A conversion delegate for the data.
+
+
+
+ Writes a instance into the current stream with the given
+ .
+
+ The extended .
+ The instance.
+ The of the data.
+
+
+
+ Writes instances into the current stream with the given
+ .
+
+ The extended .
+ The instances.
+ The of the data.
+
+
+
+ Represents extension methods for instances.
+
+
+
+
+ Returns an instance represented by the given number of , starting
+ at the .
+
+ The extended instance.
+ The first bit of the encoded value.
+ The number of least significant bits which are used to store the
+ value.
+ The decoded .
+
+
+
+ Returns the current with the bit at the set (being 1).
+
+ The extended instance.
+ The 0-based index of the bit to enable.
+ The current with the bit enabled.
+
+
+
+ Returns the current with the given set into the given number
+ of starting at .
+
+ The extended instance.
+ The value to encode.
+ The first bit used for the encoded value.
+ The number of bits which are used to store the value.
+ The current with the value encoded into it.
+
+
+
+ Returns the current with the bit at the cleared (being 0).
+
+ The extended instance.
+ The 0-based index of the bit to disable.
+ The current with the bit disabled.
+
+
+
+ Returns a value indicating whether the bit at the in the current
+ is enabled or disabled.
+
+ The extended instance.
+ The 0-based index of the bit to check.
+ true when the bit is set; otherwise false.
+
+
+
+ Returns the current with all bits rotated in the given ,
+ where positive directions rotate left and negative directions rotate right.
+
+ The extended instance.
+ The direction in which to rotate, where positive directions rotate left.
+ The current with the bits rotated.
+
+
+
+ Returns the current with the bit at the enabled or disabled,
+ according to .
+
+ The extended instance.
+ The 0-based index of the bit to enable or disable.
+ true to enable the bit; otherwise false.
+ The current with the bit enabled or disabled.
+
+
+
+ Returns the current with the bit at the enabled when it is
+ disabled or disabled when it is enabled.
+
+ The extended instance.
+ The 0-based index of the bit to toggle.
+ The current with the bit toggled.
+
+
+
+ Represents extension methods for instances.
+
+
+
+
+ Returns an instance represented by the given number of , starting
+ at the .
+
+ The extended instance.
+ The first bit of the encoded value.
+ The number of least significant bits which are used to store the
+ value.
+ The decoded .
+
+
+
+ Returns the current with the bit at the set (being 1).
+
+ The extended instance.
+ The 0-based index of the bit to enable.
+ The current with the bit enabled.
+
+
+
+ Returns the current with the given set into the given number
+ of starting at .
+
+ The extended instance.
+ The value to encode.
+ The first bit used for the encoded value.
+ The number of bits which are used to store the value.
+ The current with the value encoded into it.
+
+
+
+ Returns the current with the bit at the cleared (being 0).
+
+ The extended instance.
+ The 0-based index of the bit to disable.
+ The current with the bit disabled.
+
+
+
+ Returns a value indicating whether the bit at the in the current
+ is enabled or disabled.
+
+ The extended instance.
+ The 0-based index of the bit to check.
+ true when the bit is set; otherwise false.
+
+
+
+ Returns the current with all bits rotated in the given ,
+ where positive directions rotate left and negative directions rotate right.
+
+ The extended instance.
+ The direction in which to rotate, where positive directions rotate left.
+ The current with the bits rotated.
+
+
+
+ Returns the current with the bit at the enabled or disabled,
+ according to .
+
+ The extended instance.
+ The 0-based index of the bit to enable or disable.
+ true to enable the bit; otherwise false.
+ The current with the bit enabled or disabled.
+
+
+
+ Returns the current with the bit at the enabled when it is
+ disabled or disabled when it is enabled.
+
+ The extended instance.
+ The 0-based index of the bit to toggle.
+ The current with the bit toggled.
+
+
+
+ Represents the common interface for data instances.
+
+
+
+
+ Loads raw data from the data stream into instances.
+
+ The to load data with.
+
+
+
+ Saves header data of the instance and queues referenced data in the given .
+
+ The to save headers and queue data with.
+
+
+
+ Loads the hierachy and data of a .
+
+
+
+
+ Initializes a new instance of the class loading data into the given
+ from the specified which is optionally left open.
+
+ The instance to load data into.
+ The to read data from.
+ true to leave the stream open after reading, otherwise false.
+
+
+
+ Initializes a new instance of the class from the file with the given
+ .
+
+ The instance to load data into.
+ The name of the file to load the data from.
+
+
+
+ Gets the loaded instance.
+
+
+
+
+ Gets the loaded instance.
+
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the loaded instance.
+
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the loaded instance.
+
+
+
+
+ Starts deserializing the data from the root.
+
+
+
+
+ Reads and returns an instance of type from the following
+ offset or returns null if the read offset is 0.
+
+ The type of the to read.
+ The instance or null.
+
+
+
+ Reads and returns an instance of arbitrary type from the following offset with the
+ given or returns null if the read offset is 0.
+
+ The type of the data to read.
+ The callback to read the instance data with.
+ The optional offset to use instead of reading a following one.
+ The data instance or null.
+ Offset required for ExtFile header (offset specified before size).
+
+
+
+ Reads and returns an instance with elements of type from
+ the following offset or returns an empty instance if the read offset is 0.
+
+ The type of the elements.
+ The instance.
+
+
+
+ Reads and returns an instance with elements of type
+ from the following offset or returns null if the read offset is 0.
+
+ The type of the elements.
+ The number of elements to expect for the list.
+ The optional offset to use instead of reading a following one.
+ The instance or null.
+ Offset required for FMDL FVTX lists (offset specified before count).
+
+
+
+ Reads and returns a instance from the following offset or null if the read
+ offset is 0.
+
+ The optional encoding of the text.
+ The read text.
+
+
+
+ Reads and returns instances from the following offsets.
+
+ The number of instances to read.
+ The optional encoding of the texts.
+ The read texts.
+
+
+
+ Reads a BFRES signature consisting of 4 ASCII characters encoded as an and checks for
+ validity.
+
+ A valid signature.
+
+
+
+ Reads a BFRES offset which is the absolute address.
+
+ The absolute address of the offset.
+
+
+
+ Reads BFRES offsets which is the absolute addresses.
+
+ The number of offsets to read.
+ The absolute addresses of the offsets.
+
+
+
+ Saves the hierachy and data of a .
+
+
+
+
+ Gets or sets a data block alignment typically seen with .
+
+
+
+
+ Initializes a new instance of the class saving data from the given
+ into the specified which is optionally left open.
+
+ The instance to save data from.
+ The to save data into.
+ true to leave the stream open after writing, otherwise false.
+
+
+
+ Initializes a new instance of the class for the file with the given
+ .
+
+ The instance to save.
+ The name of the file to save the data into.
+
+
+
+ Initializes a new instance of the class for the file with the given
+ .
+
+ The instance to save.
+ The name of the file to save the data into.
+
+
+
+ Initializes a new instance of the class for the file with the given
+ .
+
+ The instance to save.
+ The name of the file to save the data into.
+
+
+
+ Initializes a new instance of the class for the file with the given
+ .
+
+ The instance to save.
+ The name of the file to save the data into.
+
+
+
+ Initializes a new instance of the class for the file with the given
+ .
+
+ The instance to save.
+ The name of the file to save the data into.
+
+
+
+ Initializes a new instance of the class for the file with the given
+ .
+
+ The instance to save.
+ The name of the file to save the data into.
+
+
+
+ Initializes a new instance of the class for the file with the given
+ .
+
+ The instance to save.
+ The name of the file to save the data into.
+
+
+
+ Initializes a new instance of the class for the file with the given
+ .
+
+ The instance to save.
+ The name of the file to save the data into.
+
+
+
+ Initializes a new instance of the class for the file with the given
+ .
+
+ The instance to save.
+ The name of the file to save the data into.
+
+
+
+ Initializes a new instance of the class for the file with the given
+ .
+
+ The instance to save.
+ The name of the file to save the data into.
+
+
+
+ Initializes a new instance of the class for the file with the given
+ .
+
+ The instance to save.
+ The name of the file to save the data into.
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the saved instance.
+
+
+
+
+ Gets the current index when writing lists or dicts.
+
+
+
+
+ Starts serializing the data from the root.
+
+
+
+
+ Gets the block size of all external files
+
+
+
+
+ Reserves space for an offset to the written later.
+
+ The to save.
+ The index of the element, used for instances referenced by a .
+ The position the offset is saved to.
+
+
+
+
+ Reserves space for the file size field which is automatically filled later.
+
+
+
+
+ Save pointer array to be relocated in section 1
+
+
+
+
+ Reserves space for the string pool size and offset fields which are automatically
+ filled later.
+
+
+
+
+ Reserves space for the memory pool field which is automatically filled later.
+
+
+
+
+ Reserves space for the memory pool field which is automatically filled later.
+
+
+
+
+ Saves the Index buffer pointer to be used later in the relocation table
+
+
+
+
+ Saves the Vertex buffer pointer to be used later in the relocation table
+
+
+
+
+ Reserves space for the memory pool field which is automatically filled later.
+
+
+
+
+ Reserves space for an offset to the written later.
+
+ The type of the elements.
+ The to save.
+
+
+
+ Reserves space for an offset to the written later.
+
+ The type of the element values.
+ The to save.
+
+
+
+ Reserves space for an offset to the written later with the
+ .
+
+ The data to save.
+ The to invoke to write the data.
+
+
+
+ Reserves space for an offset to the written later in the string pool with the
+ specified .
+
+ The name to save.
+ The in which the name will be stored.
+
+
+
+ Reserves space for offsets to the written later in the string pool with the
+ specified
+
+ The names to save.
+ The in which the names will be stored.
+
+
+
+ Reserves space for an offset and size for header block.
+
+
+
+
+ Reserves space for an offset to the written later in the data block pool.
+
+ The data to save.
+ The alignment to seek to before invoking the callback.
+ The to invoke to write the data.
+
+
+
+ Writes a BFRES signature consisting of 4 ASCII characters encoded as an .
+
+ A valid signature.
+
+
+
+ Represents a sorting empty strings to the end of lists.
+
+
+
+
+ Represents a file attachment to a which can be of arbitrary data.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the raw data stored by the external file.
+
+
+
+
+ Opens and returns a on the raw byte array, which optionally
+ can be written to.
+
+ true to allow write access to the raw data.
+ The opened instance.
+
+
+
+ Represents the format of a vertex attribute entry. Possible type conversions:
+ UNorm: attrib unsigned integer is converted to/from [0.0, 1.0] in shader.
+ UInt: attrib unsigned integer is copied to/from shader as unsigned int.
+ SNorm: attrib signed integer is converted to/from [-1.0, 1.0] in shader.
+ SInt: attrib signed integer is copied to/from shader as signed int.
+ Single: attrib single is copied to/from shader as Single.
+ UIntToSingle: attrib unsigned integer is converted Single in shader.
+ SIntToSingle: attrib signed integer is converted Single in shader.
+
+
+
+
+ Represents compare functions used for depth and stencil tests.
+
+
+
+
+ Represents the type in which vertex indices are stored.
+
+
+
+
+ Represents the base primitive used to draw each side of the polygon when dual-sided polygon mode is enabled.
+
+
+
+
+ Represents the type of primitives to draw.
+
+
+
+
+ Represents type of border color to use.
+
+
+
+
+ Represents how to treat texture coordinates outside of the normalized coordinate texture range.
+
+
+
+
+ Represents a helper class for working with instances.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class with data read from the given
+ . The data is available in the , which defaults
+ to system byte order.
+
+ The to initially read data from.
+ The in which vertex data is available. null to use
+ system byte order.
+
+
+
+ Gets or sets the in which vertex data will be stored when calling
+ . This should be the same as the remainder of the in
+ which it will be stored.
+
+
+
+
+ Gets or sets the number of bones influencing the vertices stored in the buffer. 0 influences equal
+ rigidbodies (no skinning), 1 equal rigid skinning and 2 or more smooth skinning.
+
+
+
+
+ Gets or sets the list of instances which store the data.
+
+
+
+
+ Gets or sets the instance at the given .
+
+ The index of the instance.
+ The instance at the given index.
+
+
+
+ Gets or sets the first instance with the given
+ .
+
+ The name of the instance.
+ The instance with the given name.
+
+
+
+ Returns a instance out of the stored helper data.
+
+ A new .
+
+
+
+ Represents an attribute and the data it stores in a instance.
+
+
+
+
+ The name of the attribute, typically used to determine the use of the data.
+
+
+
+
+ The into which data will be converted upon creating a
+ .
+
+
+
+
+ The data stored for this attribute. Has to be of the same length as every other
+ . Depending on , not every component of the
+ elements is used.
+
+
+
+
+ Represents an FMAA section in a subfile, storing material animation data.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from the given which
+ is optionally left open.
+
+ The to load the data from.
+ true to leave the stream open after reading, otherwise false.
+
+
+
+ Initializes a new instance of the class from the file with the given
+ .
+
+ The name of the file to load the data from.
+
+
+
+ Saves the contents in the given and optionally leaves it open
+
+ The to save the contents into.
+ true to leave the stream open after writing, otherwise false.
+
+
+
+ Saves the contents in the file with the given .
+
+ The name of the file to save the contents into.
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the path of the file which originally supplied the data of this instance.
+
+
+
+
+ Gets or sets the total number of frames this animation plays.
+
+
+
+
+ Gets or sets the number of bytes required to bake all .
+
+
+
+
+ Gets or sets the instance affected by this animation.
+
+
+
+
+ Gets the indices of the instances in the dictionary to
+ bind for each animation. specifies no binding.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Gets or sets the mode used to control looping and baked settings.
+
+
+
+
+ Represents flags specifying how animation data is stored or should be played.
+
+
+
+
+ The stored curve data has been baked.
+
+
+
+
+ The animation repeats from the start after the last frame has been played.
+
+
+
+
+ Represents a material animation in a subfile, storing material animation data.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the list of instances.
+
+
+
+
+ Gets or sets the list of instances.
+
+
+
+
+ Gets or sets the list of instances.
+
+
+
+
+ Gets or sets instances animating properties of objects stored in this section.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Represents a material animation in a subfile, storing material animation data.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the index of the first instance in the parent
+ .
+
+
+
+
+ Gets or sets the index of the first instance in the parent
+ .
+
+
+
+
+ Gets or sets the number of instances used in the parent
+ .
+
+
+
+
+ Gets or sets the index of the in the .
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Represents a material animation in a subfile, storing material animation data.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the index of the curve in the .
+
+
+
+
+ Gets or sets the index of the first instance in the parent
+ .
+
+
+
+
+ Gets or sets the index of the in the .
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Represents an FMAT subsection of a subfile, storing information on with which textures and
+ how technically a surface is drawn.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from the given which
+ is optionally left open.
+
+ The to load the data from.
+ true to leave the stream open after reading, otherwise false.
+
+
+
+ Initializes a new instance of the class from the file with the given
+ .
+
+ The name of the file to load the data from.
+
+
+
+ Saves the contents in the given and optionally leaves it open
+
+ The to save the contents into.
+ true to leave the stream open after writing, otherwise false.
+
+
+
+ Saves the contents in the file with the given .
+
+ The name of the file to save the contents into.
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets flags specifying how a is rendered.
+
+
+
+
+ Gets or sets the list of instances referencing the instances
+ required to draw the material.
+
+
+
+
+ Gets or sets a dictionary of instances which configure how to draw
+ instances referenced by the list.
+
+
+
+
+ Gets or sets the raw data block which stores values.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Gets or sets a set of bits determining whether instances are volatile.
+
+
+
+
+ Represents general flags specifying how a is rendered.
+
+
+
+
+ The material is not rendered at all.
+
+
+
+
+ The material is rendered.
+
+
+
+
+ Represents a render info in a FMAT section storing uniform parameters required to render the
+ .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets the determining the data type of the stored value.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets the stored value as an array. Only valid if is
+ .
+
+ The stored value as an array.
+
+
+
+ Gets the stored value as a array. Only valid if is
+ .
+
+ The stored value as a array.
+
+
+
+ Gets the stored value as a array. Only valid if is
+ .
+
+ The stored value as a array.
+
+
+
+ Sets the stored value as an array and sets to
+ .
+
+ The array to set as the value.
+
+
+
+ Sets the stored value as a array and sets to
+ .
+
+ The array to set as the value.
+
+
+
+ Sets the stored value as a array and sets to
+ .
+
+ The array to set as the value.
+
+
+
+ Represents the data type of elements of the value array.
+
+
+
+
+ The elements are instances.
+
+
+
+
+ The elements are instances.
+
+
+
+
+ The elements are instances.
+
+
+
+
+ Represents a sampler in a section, storing configuration on how to
+ draw and interpolate textures.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the UV wrap mode in the U direction
+
+
+
+
+ Gets or sets the UV wrap mode in the V direction
+
+
+
+
+ Gets or sets the UV wrap mode in the W direction
+
+
+
+
+ Gets or sets the compare function
+
+
+
+
+ Gets or sets the border color
+
+
+
+
+ Gets or sets the max anisotropic filtering value
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Represents a parameter value in a section, passing data to shader variables.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the type of the value.
+
+
+
+
+ Gets the offset in the byte array in bytes.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets the size of the value in bytes.
+
+
+
+
+ Represents the data types in which instances can store their value.
+
+
+
+
+ The value is a single .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a single .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a single .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a single .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ An invalid type for values, only used for internal computations.
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ An invalid type for values, only used for internal computations.
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ An invalid type for values, only used for internal computations.
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ The value is a .
+
+
+
+
+ Represents an FMDL subfile in a , storing model vertex data, skeletons and used materials.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from the given which
+ is optionally left open.
+
+ The to load the data from.
+ true to leave the stream open after reading, otherwise false.
+
+
+
+ Initializes a new instance of the class from the file with the given
+ .
+
+ The name of the file to load the data from.
+
+
+
+ Saves the contents in the given and optionally leaves it open
+
+ The to save the contents into.
+ true to leave the stream open after writing, otherwise false.
+
+
+
+ Saves the contents in the file with the given .
+
+ The name of the file to save the contents into.
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the path of the file which originally supplied the data of this instance.
+
+
+
+
+ Gets the instance to deform the model with animations.
+
+
+
+
+ Gets or sets the instances storing the vertex data used by the
+ .
+
+
+
+
+ Gets or sets the instances forming the surface of the model.
+
+
+
+
+ Gets or sets the instances forming the surface of the model.
+
+
+
+
+ Gets or sets the names.
+
+
+
+
+ Gets or sets the instance applied on the to color their surface.
+
+
+
+
+ Gets or sets customly attached names.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Gets the total number of vertices to process when drawing this model.
+
+ This excludes vertices which are not processed by any shader. However, the exact value does not
+ seem to matter, so the total count of all vertices is taken to keep things trivial for now.
+
+
+
+ Represents a spatial bounding box.
+
+
+
+
+ The center point of the bounding box.
+
+
+
+
+ The extent from the center point to the furthest point.
+
+
+
+
+ Represents a node in a bounding tree to determine when to show which sub mesh of a
+ .
+
+
+
+
+ Index for for morhping the shape with instances.
+
+
+
+
+ Index for for morhping the shape with instances.
+
+
+
+
+ Index for for morhping the shape with instances.
+
+
+
+
+ Index for for morhping the shape with instances.
+
+
+
+
+ Index for for morhping the shape with instances.
+
+
+
+
+ Represents the surface net of a section, storing information on which
+ index to use for referencing vertices of the shape, mostly used for different levels of
+ detail (LoD) models.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the instance storing buffer data at runtime
+
+
+
+
+ Gets or sets the instance storing buffer size
+
+
+
+
+ Gets or sets the which determines how indices are used to form polygons.
+
+
+
+
+ Gets the determining the data type of the indices in the
+ .
+
+
+
+
+ Gets the number of indices stored in the .
+
+
+
+
+ Gets or sets the list of instances which split up a mesh into parts which can be
+ hidden if they are not visible to optimize rendering performance.
+
+
+
+
+ Gets or sets the offset to the first vertex element of a to reference by indices.
+
+
+
+
+ Returns the indices stored in the as instances.
+
+ The indices stored in the .
+
+
+
+ Stores the given in the in the provided
+ , or the current if none was specified.
+
+ The indices to store in the .
+ The to use or null to use the current format.
+
+
+
+
+ Represents a sphere boundry in a to determine when to show which sub mesh of a
+ .
+
+
+
+
+ Represents an FSHP section in a subfile.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from the given which
+ is optionally left open.
+
+ The to load the data from.
+ true to leave the stream open after reading, otherwise false.
+
+
+
+ Initializes a new instance of the class from the file with the given
+ .
+
+ The name of the file to load the data from.
+
+
+
+ Saves the contents in the given and optionally leaves it open
+
+ The to save the contents into.
+ true to leave the stream open after writing, otherwise false.
+
+
+
+ Saves the contents in the file with the given .
+
+ The name of the file to save the contents into.
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets flags determining which data is available for this instance.
+
+
+
+
+ Gets or sets the index of the material to apply to the shapes surface in the owning
+ list.
+
+
+
+
+ Gets or sets the index of the to which this instance is directly attached to. The bone
+ must be part of the skeleton referenced by the owning instance.
+
+
+
+
+ Gets or sets the index of the in the owning
+ list.
+
+
+
+
+ Gets or sets the bounding radius/radii spanning the shape for each LOD mesh
+
+
+
+
+ Gets or sets the number of bones influencing the vertices stored in this buffer. 0 influences equal
+ rigidbodies (no skinning), 1 equal rigid skinning and 2 or more smooth skinning.
+
+
+
+
+ Gets or sets a value with unknown purpose.
+
+
+
+
+ Gets or sets the list of which are used to represent different level of details of the
+ shape.
+
+
+
+
+ Gets or sets the instances forming the bounding tree with which parts of a mesh
+ are culled when not visible.
+
+
+
+
+ Gets or sets the instance storing the data which forms the shape's surface. Saved
+ depending on .
+
+
+
+
+ Represents flags determining which data is available for instances.
+
+
+
+
+ The instance references a .
+
+
+
+
+ The boundings in all submeshes are consistent.
+
+
+
+
+ Represents a subarray of a section, storing a slice of indices to draw from the index buffer
+ referenced in the mesh, mostly used for hiding parts of a model when not visible.
+
+
+
+
+ Gets the offset into the index buffer in bytes.
+
+
+
+
+ Gets the number of indices to reference.
+
+
+
+
+ Represents a single bone in a section, storing its initial transform and transformation
+ effects.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from the given which
+ is optionally left open.
+
+ The to load the data from.
+ true to leave the stream open after reading, otherwise false.
+
+
+
+ Initializes a new instance of the class from the file with the given
+ .
+
+ The name of the file to load the data from.
+
+
+
+ Saves the contents in the given and optionally leaves it open
+
+ The to save the contents into.
+ true to leave the stream open after writing, otherwise false.
+
+
+
+ Saves the contents in the file with the given .
+
+ The name of the file to save the contents into.
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the index of the parent this instance is a child of.
+
+
+
+
+ Gets or sets the index of a matrix used for smooth skinning.
+
+
+
+
+ Gets or sets the index of a matrix used for rigid skinning.
+
+
+
+
+ Gets or sets flags controlling bone behavior.
+
+
+
+
+ Gets or sets the rotation method used to store bone rotations in .
+
+
+
+
+ Gets or sets the billboard transformation applied to the bone.
+
+
+
+
+ Gets or sets the spatial scale of the bone.
+
+
+
+
+ Gets or sets the spatial rotation of the bone. If is used, the
+ fourth component is always 1.0f.
+
+
+
+
+ Gets or sets the spatial position of the bone.
+
+
+
+
+ Gets or sets customly attached names.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Represents flags controlling bone behavior.
+
+
+
+
+ Set when the bone is visible.
+
+
+
+
+ Represents the rotation method used to store bone rotations.
+
+
+
+
+ A quaternion represents the rotation.
+
+
+
+
+ A represents the Euler rotation in XYZ order.
+
+
+
+
+ Represents the possible transformations for bones to handle them as billboards.
+
+
+
+
+ No transformation is applied.
+
+
+
+
+ Transforms of the child are applied.
+
+
+
+
+ Transforms the Z axis parallel to the camera.
+
+
+
+
+ Transforms the Z axis parallel to the direction of the camera.
+
+
+
+
+ Transforms the Y axis parallel to the camera up vector, and the Z parallel to the camera up-vector.
+
+
+
+
+ Transforms the Y axis parallel to the camera up vector, and the Z axis parallel to the direction of the
+ camera.
+
+
+
+
+ Transforms the Z axis parallel to the camera by rotating only the Y axis.
+
+
+
+
+ Transforms the Z axis parallel to the direction of the camera by rotating only the Y axis.
+
+
+
+
+ Represents an FSKL section in a subfile, storing armature data.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from the given which
+ is optionally left open.
+
+ The to load the data from.
+ true to leave the stream open after reading, otherwise false.
+
+
+
+ Initializes a new instance of the class from the file with the given
+ .
+
+ The name of the file to load the data from.
+
+
+
+ Saves the contents in the given and optionally leaves it open
+
+ The to save the contents into.
+ true to leave the stream open after writing, otherwise false.
+
+
+
+ Saves the contents in the file with the given .
+
+ The name of the file to save the contents into.
+
+
+
+ Gets or sets the rotation method used to store bone rotations.
+
+
+
+
+ Gets or sets the list of names.
+
+
+
+
+ Gets or sets the list of instances forming the skeleton.
+
+
+
+
+ Represents the rotation method used to store bone rotations.
+
+
+
+
+ A quaternion represents the rotation.
+
+
+
+
+ A represents the Euler rotation in XYZ order.
+
+
+
+
+ Represents an attribute of a describing the data format, type and layout of a
+ specific data subset in the buffer.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the index of the buffer storing the data in the list.
+
+
+
+
+ Gets or sets the offset in bytes to the attribute in each vertex.
+
+
+
+
+ Gets or sets the determining the type in which attribute data is available.
+
+
+
+
+ Represents a data buffer holding vertices for a subfile.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the number of bones influencing the vertices stored in this buffer. 0 influences equal
+ rigidbodies (no skinning), 1 equal rigid skinning and 2 or more smooth skinning.
+
+
+
+
+ Gets the number of vertices stored by the . It is calculated from the size of the first
+ in bytes divided by the .
+
+
+
+
+ Gets or sets the instance storing buffer data at runtime
+
+
+
+
+ The size of a full vertex in bytes.
+
+
+
+
+ Gets or sets the dictionary of instances describing how to interprete data in the
+ .
+
+
+
+
+ Gets or sets the list of instances storing raw unformatted vertex data.
+
+
+
+
+ Represents stride and size in a
+ specific data subset in the buffer.
+
+
+
+
+ The size of a full vertex in bytes.
+
+
+
+
+ The gpu access flags.
+
+
+
+
+ Represents stride and size in a
+ specific data subset in the buffer.
+
+
+
+
+ The size of a full vertex in bytes.
+
+
+
+
+ Represents an exception raised when handling data.
+
+
+
+
+ Initializes a new instance of the class with a specified error
+ .
+
+ The error message that explains the reason for the exception.
+
+
+
+ Initializes a new instance of the class with a specified error message created
+ from the given and .
+
+ The format of the error message.
+ The parameters to format the error message with.
+
+
+
+ Represents a NintendoWare for Cafe (NW4F) graphics data archive file.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from the given which
+ is optionally left open.
+
+ The to load the data from.
+ true to leave the stream open after reading, otherwise false.
+
+
+
+ Initializes a new instance of the class from the file with the given
+ .
+
+ The name of the file to load the data from.
+
+
+
+ Gets or sets a name describing the contents.
+
+
+
+
+ Gets or sets the alignment to use for raw data blocks in the file.
+
+
+
+
+ Gets or sets the major revision of the BFRES structure formats.
+
+
+
+
+ Gets or sets the major revision of the BFRES structure formats.
+
+
+
+
+ Gets or sets the second major revision of the BFRES structure formats.
+
+
+
+
+ Gets or sets the minor revision of the BFRES structure formats.
+
+
+
+
+ Gets or sets the second minor revision of the BFRES structure formats.
+
+
+
+
+ Gets the byte order in which data is stored. Must be the endianness of the target platform.
+
+
+
+
+ Gets or sets the alignment value.
+
+
+
+
+ Gets or sets the target adress size to use for raw data blocks in the file.
+
+
+
+
+ Gets or sets the flag. Unknown purpose.
+
+
+
+
+ Gets or sets the BlockOffset.
+
+
+
+
+ Gets or sets the stored (FMDL) names.
+
+
+
+
+ Gets or sets the stored (FMDL) instances.
+
+
+
+
+ Gets or sets the stored (FSKA) instances.
+
+
+
+
+ Gets or sets the stored (FSKA) instances for many types of skeletal animations.
+
+
+
+
+ Gets or sets the stored (FMAA) names.
+
+
+
+
+ Gets or sets the stored (FMAA) instances for many types of material animations.
+
+
+
+
+ Gets or sets the stored (FVIS) names
+
+
+
+
+ Gets or sets the stored (FVIS) instances for bone visibility animations.
+
+
+
+
+ Gets or sets the stored (FSHA) names.
+
+
+
+
+ Gets or sets the stored (FSHA) instances.
+
+
+
+
+ Gets or sets the stored (FSCN) names.
+
+
+
+
+ Gets or sets the stored (FSCN) instances.
+
+
+
+
+ Gets or sets the stored instances.
+
+
+
+
+ Gets or sets the stored instances.
+
+
+
+
+ Gets or sets attached names
+
+
+
+
+ Gets or sets attached instances. The key of the dictionary typically represents
+ the name of the file they were originally created from.
+
+
+
+
+ Saves the contents in the given and optionally leaves it open
+
+ The to save the contents into.
+ true to leave the stream open after writing, otherwise false.
+
+
+
+ Saves the contents in the file with the given .
+
+ The name of the file to save the contents into.
+
+
+
+ Represents an FCAM section in a subfile, storing animations controlling camera settings.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets flags controlling how animation data is stored or how the animation should be played.
+
+
+
+
+ Gets or sets the total number of frames this animation plays.
+
+
+
+
+ Gets or sets the number of bytes required to bake all .
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets instances animating properties of objects stored in this section.
+
+
+
+
+ Gets the instance storing initial camera parameters.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Represents flags specifying how animation data is stored or should be played.
+
+
+
+
+ The stored curve data has been baked.
+
+
+
+
+ The animation repeats from the start after the last frame has been played.
+
+
+
+
+ The rotation mode stores ZXY angles rather than look-at points in combination with a twist.
+
+
+
+
+ The projection mode is perspective rather than ortographic.
+
+
+
+
+ Represents the animatable data of scene cameras.
+
+
+
+
+ The near clipping plane distance.
+
+
+
+
+ The far clipping plane distance.
+
+
+
+
+ The aspect ratio of the projected image.
+
+
+
+
+ The field of view of the projected image.
+
+
+
+
+ The spatial position of the camera.
+
+
+
+
+ The spatial rotation of the camera.
+
+
+
+
+ The spatial twist of the camera.
+
+
+
+
+ Gets the for instances.
+
+
+
+
+ Animates .
+
+
+
+
+ Animates .
+
+
+
+
+ Animates .
+
+
+
+
+ Animates .
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the Z component of .
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the Z component of .
+
+
+
+
+ Animates .
+
+
+
+
+ Represents an FCAM section in a subfile, storing animations controlling fog settings.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets flags controlling how animation data is stored or how the animation should be played.
+
+
+
+
+ Gets or sets the total number of frames this animation plays.
+
+
+
+
+ Gets or sets the index of the distance attenuation function to use.
+
+
+
+
+ Gets or sets the number of bytes required to bake all .
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the name of the distance attenuation function to use.
+
+
+
+
+ Gets or sets instances animating properties of objects stored in this section.
+
+
+
+
+ Gets or sets the instance storing initial fog parameters.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Represents flags specifying how animation data is stored or should be played.
+
+
+
+
+ The stored curve data has been baked.
+
+
+
+
+ The animation repeats from the start after the last frame has been played.
+
+
+
+
+ Represents the animatable data of scene fog.
+
+
+
+
+ The distance attenuation of the fog depth.
+
+
+
+
+ The color of the fog.
+
+
+
+
+ Gets the for instances.
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the X (red) component of .
+
+
+
+
+ Animates the Y (green) component of .
+
+
+
+
+ Animates the Z (blue) component of .
+
+
+
+
+ Represents an FLIT section in a subfile, storing animations controlling light settings.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets flags controlling how the animation should be played.
+
+
+
+
+ Gets or sets flags controlling how animation data is stored or how the animation should be played.
+
+
+
+
+ Gets or sets the total number of frames this animation plays.
+
+
+
+
+ Gets or sets the index of the light type.
+
+
+
+
+ Gets or sets the index of the distance attenuation function to use.
+
+
+
+
+ Gets or sets the index of the angle attenuation function to use.
+
+
+
+
+ Gets or sets the number of bytes required to bake all .
+
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the name of the light type.
+
+
+
+
+ Gets or sets the name of the distance attenuation function to use.
+
+
+
+
+ Gets or sets the name of the angle attenuation function to use.
+
+
+
+
+ Gets or sets instances animating properties of objects stored in this section.
+
+
+
+
+ Gets the instance storing initial light parameters.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Represents flags specifying how animation data is stored.
+
+
+
+
+ The stored curve data has been baked.
+
+
+
+
+ The animation repeats from the start after the last frame has been played.
+
+
+
+
+ Represents flags specifying which fields are animated.
+
+
+
+
+ Enabled state is animated.
+
+
+
+
+ Position is animated.
+
+
+
+
+ Rotation is animated.
+
+
+
+
+ Distance attenuation is animated.
+
+
+
+
+ Angle attenuation is animated in degrees.
+
+
+
+
+ Color 0 is animated.
+
+
+
+
+ Color 1 is animated.
+
+
+
+
+ Represents the animatable data of scene lighting.
+
+
+
+
+ Enables or disables the light in total.
+
+
+
+
+ The spatial origin of the light source for point or spot lights.
+
+
+
+
+ The spatial rotation of the light source.
+
+
+
+
+ The distance attenuation of the light.
+
+
+
+
+ The angle attenuation of the light in degrees.
+
+
+
+
+ The first light source color.
+
+
+
+
+ The second light source color.
+
+
+
+
+ Gets the for instances.
+
+
+
+
+ Animates .
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the Z component of .
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the Z component of .
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the X (red) component of .
+
+
+
+
+ Animates the Y (green) component of .
+
+
+
+
+ Animates the Z (blue) component of .
+
+
+
+
+ Animates the X (red) component of .
+
+
+
+
+ Animates the Y (green) component of .
+
+
+
+
+ Animates the Z (blue) component of .
+
+
+
+
+ Represents an FSCN subfile in a , storing scene animations controlling camera, light and
+ fog settings.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from the given which
+ is optionally left open.
+
+ The to load the data from.
+ true to leave the stream open after reading, otherwise false.
+
+
+
+ Initializes a new instance of the class from the file with the given
+ .
+
+ The name of the file to load the data from.
+
+
+
+ Saves the contents in the given and optionally leaves it open
+
+ The to save the contents into.
+ true to leave the stream open after writing, otherwise false.
+
+
+
+ Saves the contents in the file with the given .
+
+ The name of the file to save the contents into.
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the path of the file which originally supplied the data of this instance.
+
+
+
+
+ Gets or sets the instances.
+
+
+
+
+ Gets or sets the instances.
+
+
+
+
+ Gets or sets the instances.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Gets or sets the instances.
+
+
+
+
+ Gets or sets the instances.
+
+
+
+
+ Gets or sets the instances.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Represents a key shape animation info in a instance.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the index of the curve in the .
+
+
+
+
+ Gets or sets the index of the in the .
+
+
+
+
+ Gets or sets the name of the in the .
+
+
+
+
+ Represents an FSHA subfile in a , storing shape animations of a
+ instance.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from the given which
+ is optionally left open.
+
+ The to load the data from.
+ true to leave the stream open after reading, otherwise false.
+
+
+
+ Initializes a new instance of the class from the file with the given
+ .
+
+ The name of the file to load the data from.
+
+
+
+ Saves the contents in the given and optionally leaves it open
+
+ The to save the contents into.
+ true to leave the stream open after writing, otherwise false.
+
+
+
+ Saves the contents in the file with the given .
+
+ The name of the file to save the contents into.
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the path of the file which originally supplied the data of this instance.
+
+
+
+
+ Gets or sets flags controlling how animation data is stored or how the animation should be played.
+
+
+
+
+ Gets or sets the total number of frames this animation plays.
+
+
+
+
+ Gets or sets the number of bytes required to bake all instances of all
+ .
+
+
+
+
+ Gets or sets the instance affected by this animation.
+
+
+
+
+ Gets or sets the indices of the instances in the dictionary
+ to bind for each animation. specifies no binding.
+
+
+
+
+ Gets or sets the instances creating the animation.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Represents flags specifying how animation data is stored or should be played.
+
+
+
+
+ The stored curve data has been baked.
+
+
+
+
+ The animation repeats from the start after the last frame has been played.
+
+
+
+
+ Represents a vertex shape animation in a subfile.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets the name of the animated .
+
+
+
+
+ Gets or sets the list of instances.
+
+
+
+
+ Gets or sets instances animating properties of objects stored in this section.
+
+
+
+
+ Gets or sets the list of base values, excluding the base shape (which is always being initialized with 0f).
+
+
+
+
+ Gets or sets the index of the first relative to all curves of the parent
+ instances.
+
+
+
+
+ Gets or sets the index of the first relative to all key shape anim infos of
+ the parent instances.
+
+
+
+
+ Represents the animation of a single in a subfile.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets a set of flags indicating whether initial transformation values exist in
+ .
+
+
+
+
+ Gets or sets a set of flags indicating whether curves animating the corresponding transformation exist.
+
+
+
+
+ Gets or sets a set of flags controlling how to transform bones.
+
+
+
+
+ Gets or sets the name of the animated .
+
+
+
+
+ Gets or sets a field with unknown purpose.
+
+
+
+
+ Gets or sets a field with unknown purpose.
+
+
+
+
+ Gets or sets the element offset in the to an initial translation.
+
+
+
+
+ Gets the index of the first relative to all curves of the parent
+ instances.
+
+
+
+
+ Gets or sets instances animating properties of objects stored in this section.
+
+
+
+
+ Gets or sets initial transformation values. Only stores specific transformations according to
+ .
+
+
+
+
+ Represents if initial values exist for the corresponding transformation in the base animation data.
+
+
+
+
+ Initial scaling values exist.
+
+
+
+
+ Initial rotation values exist.
+
+
+
+
+ Initial translation values exist.
+
+
+
+
+ Represents if curves exist which animate the corresponding transformation component.
+
+
+
+
+ Curve animating the X component of a bone's scale.
+
+
+
+
+ Curve animating the Y component of a bone's scale.
+
+
+
+
+ Curve animating the Z component of a bone's scale.
+
+
+
+
+ Curve animating the X component of a bone's rotation.
+
+
+
+
+ Curve animating the Y component of a bone's rotation.
+
+
+
+
+ Curve animating the Z component of a bone's rotation.
+
+
+
+
+ Curve animating the W component of a bone's rotation.
+
+
+
+
+ Curve animating the X component of a bone's translation.
+
+
+
+
+ Curve animating the Y component of a bone's translation.
+
+
+
+
+ Curve animating the Z component of a bone's translation.
+
+
+
+
+ Represents how a bone transformation has to be applied.
+
+
+
+
+ Represents the animatable data of a instance.
+
+
+
+
+ The scaling of the bone.
+
+
+
+
+ The translation of the bone.
+
+
+
+
+ An unused field.
+
+
+
+
+ The rotation of the bone.
+
+
+
+
+ Gets the for instances.
+
+
+
+
+ Animates (never seen in files).
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the Z component of .
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the Z component of .
+
+
+
+
+ Animates the X component of .
+
+
+
+
+ Animates the Y component of .
+
+
+
+
+ Animates the Z component of .
+
+
+
+
+ Animates the W component of .
+
+
+
+
+ Represents an FSKA subfile in a , storing armature animations of
+ instances in a .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from the given which
+ is optionally left open.
+
+ The to load the data from.
+ true to leave the stream open after reading, otherwise false.
+
+
+
+ Initializes a new instance of the class from the file with the given
+ .
+
+ The name of the file to load the data from.
+
+
+
+ Saves the contents in the given and optionally leaves it open
+
+ The to save the contents into.
+ true to leave the stream open after writing, otherwise false.
+
+
+
+ Saves the contents in the file with the given .
+
+ The name of the file to save the contents into.
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the path of the file which originally supplied the data of this instance.
+
+
+
+
+ Gets or sets the total number of frames this animation plays.
+
+
+
+
+ Gets or sets the mode used to control looping and baked settings.
+
+
+
+
+ Gets or sets the mode used to store scaling values.
+
+
+
+
+ Gets or sets the mode used to store rotation values.
+
+
+
+
+ Gets or sets the number of bytes required to bake all instances of all
+ .
+
+
+
+
+ Gets or sets the instances creating the animation.
+
+
+
+
+ Gets or sets the instance affected by this animation.
+
+
+
+
+ Gets or sets the indices of the instances in the dictionary
+ to bind for each animation. specifies no binding.
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Represents flags specifying how animation data is stored or should be played.
+
+
+
+
+ The stored curve data has been baked.
+
+
+
+
+ The animation repeats from the start after the last frame has been played.
+
+
+
+
+ Represents the data format in which scaling values are stored.
+
+
+
+
+ No scaling.
+
+
+
+
+ Default scaling.
+
+
+
+
+ Autodesk Maya scaling.
+
+
+
+
+ Autodesk Softimage scaling.
+
+
+
+
+ Represents the data format in which rotation values are stored.
+
+
+
+
+ Quaternion, 4 components.
+
+
+
+
+ Euler XYZ, 3 components.
+
+
+
+
+ Represents an FVIS subfile in a , storing visibility animations of or
+ instances.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from the given which
+ is optionally left open.
+
+ The to load the data from.
+ true to leave the stream open after reading, otherwise false.
+
+
+
+ Initializes a new instance of the class from the file with the given
+ .
+
+ The name of the file to load the data from.
+
+
+
+ Saves the contents in the given and optionally leaves it open
+
+ The to save the contents into.
+ true to leave the stream open after writing, otherwise false.
+
+
+
+ Saves the contents in the file with the given .
+
+ The name of the file to save the contents into.
+
+
+
+ Gets or sets the name with which the instance can be referenced uniquely in
+ instances.
+
+
+
+
+ Gets or sets the path of the file which originally supplied the data of this instance.
+
+
+
+
+ Gets or sets the total number of frames this animation plays.
+
+
+
+
+ Gets or sets flags controlling how animation data is stored or how the animation should be played.
+
+
+
+
+ Gets or sets the number of bytes required to bake all instances of all
+ .
+
+
+
+
+ Gets or sets the instance affected by this animation.
+
+
+
+
+ Gets or sets the indices of entries in the or
+ dictionaries to bind to for each animation. specifies no binding.
+
+
+
+
+ Gets or sets the names of entries in the or
+ dictionaries to bind to for each animation.
+
+
+
+
+ Gets or sets instances animating properties of objects stored in this section.
+
+
+
+
+ Gets or sets boolean values storing the initial visibility for each or
+ .
+
+
+
+
+ Gets or sets customly attached instances.
+
+
+
+
+ Represents flags specifying how animation data is stored or should be played.
+
+
+
+
+ The stored curve data has been baked.
+
+
+
+
+ The animation repeats from the start after the last frame has been played.
+
+
+
+
diff --git a/File_Format_Library/FileFormats/Archives/SARC.cs b/File_Format_Library/FileFormats/Archives/SARC.cs
index cace0af3..98aa0268 100644
--- a/File_Format_Library/FileFormats/Archives/SARC.cs
+++ b/File_Format_Library/FileFormats/Archives/SARC.cs
@@ -226,24 +226,6 @@ namespace FirstPlugin
GC.SuppressFinalize(this);
}
- IEnumerable Collect(TreeNodeCollection nodes)
- {
- foreach (TreeNode node in nodes)
- {
- yield return node;
-
- bool IsNodeFile = node is IFileFormat;
-
- if (!IsNodeFile)
- {
- //We don't need to save the child of IFIleFormats
- //If opened the file should save it's own children
- foreach (var child in Collect(node.Nodes))
- yield return child;
- }
- }
- }
-
static uint NameHash(string name)
{
uint result = 0;
diff --git a/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMAA.cs b/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMAA.cs
index 24ef4aeb..ddcb336c 100644
--- a/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMAA.cs
+++ b/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMAA.cs
@@ -399,6 +399,7 @@ namespace Bfres.Structs
Textures.Add(name);
}
+ Materials.Clear();
foreach (var matanim in anim.MaterialAnimDataList)
{
var mat = new MaterialAnimEntry(matanim.Name);
diff --git a/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FSHU.cs b/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FSHU.cs
index 8b6d2b9d..b7a2df38 100644
--- a/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FSHU.cs
+++ b/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FSHU.cs
@@ -154,6 +154,8 @@ namespace Bfres.Structs
FrameCount = anim.FrameCount;
ShaderParamAnim = anim;
+
+ Materials.Clear();
foreach (ShaderParamMatAnim matAnim in anim.ShaderParamMatAnims)
{
MaterialAnimEntry matNode = new MaterialAnimEntry(matAnim.Name);
diff --git a/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FSKA.cs b/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FSKA.cs
index add443cf..86f42680 100644
--- a/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FSKA.cs
+++ b/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FSKA.cs
@@ -133,17 +133,10 @@ namespace Bfres.Structs
{
STSkeleton skeleton = GetActiveSkeleton();
- for (int i = 0; i <= FrameCount; i++)
- {
-
- }
-
if (SkeletalAnimU != null)
BrawlboxHelper.FSKAConverter.Fska2Chr0(BfresPlatformConverter.FSKAConvertWiiUToSwitch(SkeletalAnimU), FileName);
else
BrawlboxHelper.FSKAConverter.Fska2Chr0(SkeletalAnim, FileName);
-
- // BrawlboxHelper.FSKAConverter.Fska2Chr0(this, skeleton, FileName);
}
else if (ext == ".smd")
{
diff --git a/File_Format_Library/FileFormats/Layout/BFLYT.cs b/File_Format_Library/FileFormats/Layout/BFLYT.cs
index 718f9ac6..ab3413c8 100644
--- a/File_Format_Library/FileFormats/Layout/BFLYT.cs
+++ b/File_Format_Library/FileFormats/Layout/BFLYT.cs
@@ -13,7 +13,7 @@ using SharpYaml.Serialization;
namespace FirstPlugin
{
- public class BFLYT : IFileFormat, IEditor, IConvertableTextFormat
+ public class BFLYT : IFileFormat, IEditorForm, IConvertableTextFormat
{
public FileType FileType { get; set; } = FileType.Layout;
@@ -75,7 +75,7 @@ namespace FirstPlugin
return editor;
}
- public void FillEditor(UserControl control) {
+ public void FillEditor(Form control) {
((LayoutEditor)control).LoadBflyt(header, FileName);
}
@@ -85,7 +85,101 @@ namespace FirstPlugin
CanSave = false;
header = new Header();
- header.Read(new FileReader(stream), FileName);
+ header.Read(new FileReader(stream), this);
+ }
+
+ public List GetShadersGTX()
+ {
+ List shaders = new List();
+ if (IFileInfo.ArchiveParent != null)
+ {
+ foreach (var file in IFileInfo.ArchiveParent.Files)
+ {
+ if (Utils.GetExtension(file.FileName) == ".gsh")
+ {
+ GTXFile bnsh = (GTXFile)file.OpenFile();
+ shaders.Add(bnsh);
+ }
+ }
+ }
+ return shaders;
+ }
+
+ public List GetShadersNX()
+ {
+ List shaders = new List();
+ if (IFileInfo.ArchiveParent != null)
+ {
+ foreach (var file in IFileInfo.ArchiveParent.Files)
+ {
+ if (Utils.GetExtension(file.FileName) == ".bnsh")
+ {
+ BNSH bnsh = (BNSH)file.OpenFile();
+ shaders.Add(bnsh);
+ }
+ }
+ }
+ return shaders;
+ }
+
+ public List GetLayouts()
+ {
+ List animations = new List();
+ if (IFileInfo.ArchiveParent != null)
+ {
+ foreach (var file in IFileInfo.ArchiveParent.Files)
+ {
+ if (Utils.GetExtension(file.FileName) == ".bflyt")
+ {
+ BFLYT bflyt = (BFLYT)file.OpenFile();
+ animations.Add(bflyt);
+ }
+ }
+ }
+ return animations;
+ }
+
+ public List GetAnimations()
+ {
+ List animations = new List();
+ if (IFileInfo.ArchiveParent != null)
+ {
+ foreach (var file in IFileInfo.ArchiveParent.Files)
+ {
+ if (Utils.GetExtension(file.FileName) == ".bflan")
+ {
+ BFLAN bflan = (BFLAN)file.OpenFile();
+ animations.Add(bflan);
+ }
+ }
+ }
+ return animations;
+ }
+
+ public Dictionary GetTextures()
+ {
+ Console.WriteLine($"ArchiveParent {IFileInfo.ArchiveParent != null}");
+
+ Dictionary textures = new Dictionary();
+ if (IFileInfo.ArchiveParent != null)
+ {
+ foreach (var file in IFileInfo.ArchiveParent.Files)
+ {
+ if (Utils.GetExtension(file.FileName) == ".bntx")
+ {
+ BNTX bntx = (BNTX)file.OpenFile();
+ foreach (var tex in bntx.Textures)
+ textures.Add(tex.Key, tex.Value);
+ }
+ else if (Utils.GetExtension(file.FileName) == ".bflim")
+ {
+ BFLIM bflim = (BFLIM)file.OpenFile();
+ textures.Add(bflim.FileName, bflim);
+ }
+ }
+ }
+
+ return textures;
}
public void Unload()
@@ -101,7 +195,12 @@ namespace FirstPlugin
//https://github.com/FuryBaguette/SwitchLayoutEditor/tree/master/SwitchThemesCommon
public class Header
{
- public string FileName { get; set; }
+ internal BFLYT FileInfo;
+
+ public string FileName
+ {
+ get { return FileInfo.FileName; }
+ }
private const string Magic = "FLYT";
@@ -122,7 +221,25 @@ namespace FirstPlugin
}
}
+ public uint VersionMajor
+ {
+ get { return Version >> 24; }
+ }
+ public uint VersionMinor
+ {
+ get { return Version >> 16 & 0xFF; }
+ }
+
+ public uint VersionMicro
+ {
+ get { return Version >> 8 & 0xFF; }
+ }
+
+ public uint VersionMicro2
+ {
+ get { return Version & 0xFF; }
+ }
public LYT1 LayoutInfo { get; set; }
public TXL1 TextureList { get; set; }
@@ -136,9 +253,16 @@ namespace FirstPlugin
// public List Panes = new List();
- public void Read(FileReader reader, string fileName)
+ public void Read(FileReader reader, BFLYT bflyt)
{
- FileName = fileName;
+ LayoutInfo = new LYT1();
+ TextureList = new TXL1();
+ MaterialList = new MAT1();
+ FontList = new FNL1();
+ RootPane = new PAN1();
+ RootGroup = new GRP1();
+
+ FileInfo = bflyt;
reader.SetByteOrder(true);
reader.ReadSignature(4, Magic);
@@ -164,10 +288,7 @@ namespace FirstPlugin
string Signature = reader.ReadString(4, Encoding.ASCII);
uint SectionSize = reader.ReadUInt32();
- Console.WriteLine($"{Signature} {SectionSize}");
-
SectionCommon section = new SectionCommon();
-
switch (Signature)
{
case "lyt1":
@@ -194,7 +315,7 @@ namespace FirstPlugin
currentPane = panel;
break;
case "pic1":
- var picturePanel = new PIC1(reader);
+ var picturePanel = new PIC1(reader, this);
SetPane(picturePanel, parentPane);
currentPane = picturePanel;
@@ -218,8 +339,7 @@ namespace FirstPlugin
currentPane = partsPanel;
break;
case "wnd1":
- var windowPanel = new PRT1(reader);
-
+ var windowPanel = new WND1(reader);
SetPane(windowPanel, parentPane);
currentPane = windowPanel;
break;
@@ -273,6 +393,8 @@ namespace FirstPlugin
public void Write(FileWriter writer)
{
+ Version = VersionMajor << 24 | VersionMinor << 16 | VersionMicro << 8 | VersionMicro2;
+
writer.WriteSignature(Magic);
writer.Write(ByteOrderMark);
writer.Write(HeaderSize);
@@ -291,9 +413,24 @@ namespace FirstPlugin
public class BasePane : SectionCommon
{
+ public bool DisplayInEditor { get; set; } = true;
+
+ public string Name { get; set; }
+
+ public Vector3F Translate { get; set; }
+ public Vector3F Rotate { get; set; }
+ public Vector2F Scale { get; set; }
+ public float Width { get; set; }
+ public float Height { get; set; }
+
public BasePane Parent { get; set; }
public List Childern { get; set; } = new List();
+
+ public bool HasChildern
+ {
+ get { return Childern.Count > 0; }
+ }
}
public class TexCoord
@@ -339,10 +476,10 @@ namespace FirstPlugin
}
}
- public ushort TextLength;
- public ushort MaxTextLength;
- public ushort MaterialIndex;
- public ushort FontIndex;
+ public ushort TextLength { get; set; }
+ public ushort MaxTextLength { get; set; }
+ public ushort MaterialIndex { get; set; }
+ public ushort FontIndex { get; set; }
public byte TextAlignment { get; set; }
public LineAlign LineAlignment { get; set; }
@@ -483,10 +620,24 @@ namespace FirstPlugin
}
}
+ public class CustomRectangle
+ {
+ public int LeftPoint;
+ public int RightPoint;
+ public int TopPoint;
+ public int BottomPoint;
+
+ public CustomRectangle(int left, int right, int top, int bottom)
+ {
+ LeftPoint = left;
+ RightPoint = right;
+ TopPoint = top;
+ BottomPoint = bottom;
+ }
+ }
+
public class GRP1 : BasePane
{
- public string Name { get; set; }
-
public List Panes { get; set; } = new List();
public GRP1() : base()
@@ -497,7 +648,7 @@ namespace FirstPlugin
public GRP1(FileReader reader, Header header)
{
ushort numNodes = 0;
- if (header.Version >= 0x05020000)
+ if (header.VersionMajor >= 5)
{
Name = reader.ReadString(34).Replace("\0", string.Empty);
numNodes = reader.ReadUInt16();
@@ -561,6 +712,13 @@ namespace FirstPlugin
public ushort MaterialIndex { get; set; }
+ public Material GetMaterial()
+ {
+ return ParentLayout.MaterialList.Materials[MaterialIndex];
+ }
+
+ private BFLYT.Header ParentLayout;
+
public PIC1() : base() {
ColorTopLeft = STColor8.White;
ColorTopRight = STColor8.White;
@@ -571,8 +729,10 @@ namespace FirstPlugin
TexCoords[0] = new TexCoord();
}
- public PIC1(FileReader reader) : base(reader)
+ public PIC1(FileReader reader, BFLYT.Header header) : base(reader)
{
+ ParentLayout = header;
+
ColorTopLeft = STColor8.FromBytes(reader.ReadBytes(4));
ColorTopRight = STColor8.FromBytes(reader.ReadBytes(4));
ColorBottomLeft = STColor8.FromBytes(reader.ReadBytes(4));
@@ -580,6 +740,18 @@ namespace FirstPlugin
MaterialIndex = reader.ReadUInt16();
byte numUVs = reader.ReadByte();
reader.Seek(1); //padding
+
+ TexCoords = new TexCoord[numUVs];
+ for (int i = 0; i < numUVs; i++)
+ {
+ TexCoords[i] = new TexCoord()
+ {
+ TopLeft = reader.ReadVec2SY(),
+ TopRight = reader.ReadVec2SY(),
+ BottomLeft = reader.ReadVec2SY(),
+ BottomRight = reader.ReadVec2SY(),
+ };
+ }
}
public override void Write(FileWriter writer, Header header)
@@ -665,15 +837,8 @@ namespace FirstPlugin
public byte Alpha { get; set; }
public byte Unknown { get; set; }
- public string Name { get; set; }
public string UserDataInfo { get; set; }
- public Vector3F Translate;
- public Vector3F Rotate;
- public Vector2F Scale;
- public float Width;
- public float Height;
-
public PAN1() : base()
{
@@ -686,7 +851,7 @@ namespace FirstPlugin
Alpha = reader.ReadByte();
Unknown = reader.ReadByte();
Name = reader.ReadString(0x18).Replace("\0", string.Empty);
- UserDataInfo = reader.ReadString(0x18).Replace("\0", string.Empty);
+ UserDataInfo = reader.ReadString(0x8).Replace("\0", string.Empty);
Translate = reader.ReadVec3SY();
Rotate = reader.ReadVec3SY();
Scale = reader.ReadVec2SY();
@@ -701,7 +866,7 @@ namespace FirstPlugin
writer.Write(Alpha);
writer.Write(Unknown);
writer.WriteString(Name, 0x18);
- writer.WriteString(UserDataInfo, 0x18);
+ writer.WriteString(UserDataInfo, 0x8);
writer.Write(Translate);
writer.Write(Rotate);
writer.Write(Scale);
@@ -722,6 +887,82 @@ namespace FirstPlugin
Top = 1,
Bottom = 2
};
+
+
+ public BFLYT.CustomRectangle CreateRectangle()
+ {
+ int left = 0;
+ int right = 0;
+ int top = 0;
+ int bottom = 0;
+
+
+ //Do origin transforms
+ var transformed = TransformOrientation((int)Width, (int)Height);
+
+ //Now do parent transforms
+
+ Vector2 ParentWH = new Vector2(0,0);
+ if (Parent != null && Parent is BasePane)
+ ParentWH = new Vector2((int)Parent.Width, (int)Parent.Height);
+
+ var transformedParent = TransformOrientation(ParentWH.X, ParentWH.Y);
+
+ // if (Parent != null)
+ // transformed -= transformedParent;
+
+ return new CustomRectangle(
+ transformed.X,
+ transformed.Y,
+ transformed.Z,
+ transformed.W);
+ }
+
+ private Vector4 TransformOrientation(int Width, int Height)
+ {
+ int left = 0;
+ int right = 0;
+ int top = 0;
+ int bottom = 0;
+
+ if (originX == OriginX.Left)
+ right = Width;
+ else if (originX == OriginX.Right)
+ left = -Width;
+ else //To center
+ {
+ left = -Width / 2;
+ right = Width / 2;
+ }
+
+ if (originY == OriginY.Top)
+ bottom = Height;
+ else if (originY == OriginY.Bottom)
+ top = -Height;
+ else //To center
+ {
+ top = -Height / 2;
+ bottom = Height / 2;
+ }
+
+ return new Vector4(left, right, top, bottom);
+ }
+
+ public bool ParentVisibility
+ {
+ get
+ {
+ if (Scale.X == 0 || Scale.Y == 0)
+ return false;
+ if (!Visible)
+ return false;
+ if (Parent != null && Parent is PAN1)
+ {
+ return ((PAN1)Parent).ParentVisibility && Visible;
+ }
+ return true;
+ }
+ }
}
public class MAT1 : SectionCommon
@@ -766,7 +1007,7 @@ namespace FirstPlugin
public List TextureMaps { get; set; }
public List TextureTransforms { get; set; }
- private int flags;
+ private uint flags;
private int unknown;
public Material()
@@ -781,9 +1022,9 @@ namespace FirstPlugin
TextureTransforms = new List();
Name = reader.ReadString(0x1C).Replace("\0", string.Empty);
- if (header.Version == 0x8030000)
+ if (header.VersionMajor == 8)
{
- flags = reader.ReadInt32();
+ flags = reader.ReadUInt32();
unknown = reader.ReadInt32();
ForeColor = STColor8.FromBytes(reader.ReadBytes(4));
BackColor = STColor8.FromBytes(reader.ReadBytes(4));
@@ -792,11 +1033,11 @@ namespace FirstPlugin
{
ForeColor = STColor8.FromBytes(reader.ReadBytes(4));
BackColor = STColor8.FromBytes(reader.ReadBytes(4));
- flags = reader.ReadInt32();
+ flags = reader.ReadUInt32();
}
- int texCount = flags & 3;
- int mtxCount = (flags & 0xC) >> 2;
+ uint texCount = Convert.ToUInt32(flags & 3);
+ uint mtxCount = Convert.ToUInt32(flags >> 2) & 3;
for (int i = 0; i < texCount; i++)
TextureMaps.Add(new TextureRef(reader));
@@ -855,22 +1096,55 @@ namespace FirstPlugin
public class TextureRef
{
public ushort ID;
- public byte WrapS;
- public byte WrapT;
+ byte flag1;
+ byte flag2;
+
+ public WrapMode WrapModeU
+ {
+ get { return (WrapMode)(flag1 & 0x3); }
+ }
+
+ public WrapMode WrapModeV
+ {
+ get { return (WrapMode)(flag2 & 0x3); }
+ }
+
+ public FilterMode MinFilterMode
+ {
+ get { return (FilterMode)((flag1 >> 2) & 0x3); }
+ }
+
+ public FilterMode MaxFilterMode
+ {
+ get { return (FilterMode)((flag2 >> 2) & 0x3); }
+ }
public TextureRef() {}
public TextureRef(FileReader reader) {
ID = reader.ReadUInt16();
- WrapS = reader.ReadByte();
- WrapT = reader.ReadByte();
+ flag1 = reader.ReadByte();
+ flag2 = reader.ReadByte();
}
public void Write(FileWriter writer)
{
writer.Write(ID);
- writer.Write(WrapS);
- writer.Write(WrapT);
+ writer.Write(flag1);
+ writer.Write(flag2);
+ }
+
+ public enum FilterMode
+ {
+ Near = 0,
+ Linear = 1
+ }
+
+ public enum WrapMode
+ {
+ Clamp = 0,
+ Repeat = 1,
+ Mirror = 2
}
}
@@ -939,6 +1213,7 @@ namespace FirstPlugin
for (int i = 0; i < offsets.Length; i++)
{
reader.SeekBegin(offsets[i] + pos);
+ Textures.Add(reader.ReadZeroTerminatedString());
}
}
diff --git a/File_Format_Library/FileFormats/Layout/PaneTreeWrapper.cs b/File_Format_Library/FileFormats/Layout/PaneTreeWrapper.cs
new file mode 100644
index 00000000..3df55167
--- /dev/null
+++ b/File_Format_Library/FileFormats/Layout/PaneTreeWrapper.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Toolbox.Library;
+
+namespace FirstPlugin
+{
+ public class PaneTreeWrapper : TreeNodeCustom
+ {
+
+ }
+}
diff --git a/File_Format_Library/File_Format_Library.csproj b/File_Format_Library/File_Format_Library.csproj
index 337a4026..a70861aa 100644
--- a/File_Format_Library/File_Format_Library.csproj
+++ b/File_Format_Library/File_Format_Library.csproj
@@ -199,6 +199,12 @@
..\Toolbox\Lib\VGAudio.dll
False
+
+ ..\packages\DockPanelSuite.3.0.6\lib\net40\WeifenLuo.WinFormsUI.Docking.dll
+
+
+ ..\packages\DockPanelSuite.ThemeVS2015.3.0.6\lib\net40\WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll
+
@@ -287,6 +293,7 @@
+
@@ -307,14 +314,26 @@
+
+ UserControl
+
+
+ LayoutHierarchy.cs
+
+
+ UserControl
+
+
+ LayoutProperties.cs
+
- Form
+ UserControl
LayoutTextureList.cs
- Form
+ UserControl
LayoutViewer.cs
@@ -332,7 +351,7 @@
BffntEditor.cs
- UserControl
+ Form
LayoutEditor.cs
@@ -1056,6 +1075,7 @@
+
@@ -1081,6 +1101,12 @@
LayoutEditor.cs
+
+ LayoutHierarchy.cs
+
+
+ LayoutProperties.cs
+
LayoutTextureList.cs
@@ -1366,7 +1392,6 @@
-
@@ -1449,5 +1474,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/File_Format_Library/File_Format_Library.csproj.user b/File_Format_Library/File_Format_Library.csproj.user
new file mode 100644
index 00000000..64a5aae8
--- /dev/null
+++ b/File_Format_Library/File_Format_Library.csproj.user
@@ -0,0 +1,6 @@
+
+
+
+ true
+
+
\ No newline at end of file
diff --git a/File_Format_Library/GUI/BFLYT/LayoutEditor.Designer.cs b/File_Format_Library/GUI/BFLYT/LayoutEditor.Designer.cs
index dcb8d064..e7b8dbc2 100644
--- a/File_Format_Library/GUI/BFLYT/LayoutEditor.Designer.cs
+++ b/File_Format_Library/GUI/BFLYT/LayoutEditor.Designer.cs
@@ -29,24 +29,59 @@
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LayoutEditor));
+ this.dockPanel1 = new WeifenLuo.WinFormsUI.Docking.DockPanel();
+ this.backColorDisplay = new System.Windows.Forms.PictureBox();
+ this.viewportBackColorCB = new Toolbox.Library.Forms.STComboBox();
this.stToolStrip1 = new Toolbox.Library.Forms.STToolStrip();
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
this.stMenuStrip1 = new Toolbox.Library.Forms.STMenuStrip();
this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.stPanel1 = new Toolbox.Library.Forms.STPanel();
this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.textureListToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ ((System.ComponentModel.ISupportInitialize)(this.backColorDisplay)).BeginInit();
this.stToolStrip1.SuspendLayout();
this.stMenuStrip1.SuspendLayout();
this.SuspendLayout();
//
+ // dockPanel1
+ //
+ this.dockPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.dockPanel1.Location = new System.Drawing.Point(0, 49);
+ this.dockPanel1.Name = "dockPanel1";
+ this.dockPanel1.Size = new System.Drawing.Size(549, 349);
+ this.dockPanel1.TabIndex = 6;
+ //
+ // backColorDisplay
+ //
+ this.backColorDisplay.Location = new System.Drawing.Point(319, 25);
+ this.backColorDisplay.Name = "backColorDisplay";
+ this.backColorDisplay.Size = new System.Drawing.Size(21, 21);
+ this.backColorDisplay.TabIndex = 10;
+ this.backColorDisplay.TabStop = false;
+ this.backColorDisplay.Click += new System.EventHandler(this.backColorDisplay_Click);
+ //
+ // viewportBackColorCB
+ //
+ this.viewportBackColorCB.BorderColor = System.Drawing.Color.Empty;
+ this.viewportBackColorCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid;
+ this.viewportBackColorCB.ButtonColor = System.Drawing.Color.Empty;
+ this.viewportBackColorCB.FormattingEnabled = true;
+ this.viewportBackColorCB.IsReadOnly = false;
+ this.viewportBackColorCB.Location = new System.Drawing.Point(167, 25);
+ this.viewportBackColorCB.Name = "viewportBackColorCB";
+ this.viewportBackColorCB.Size = new System.Drawing.Size(146, 21);
+ this.viewportBackColorCB.TabIndex = 9;
+ this.viewportBackColorCB.SelectedIndexChanged += new System.EventHandler(this.viewportBackColorCB_SelectedIndexChanged);
+ this.viewportBackColorCB.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.stComboBox1_MouseDoubleClick);
+ //
// stToolStrip1
//
this.stToolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripButton1});
this.stToolStrip1.Location = new System.Drawing.Point(0, 24);
this.stToolStrip1.Name = "stToolStrip1";
- this.stToolStrip1.Size = new System.Drawing.Size(836, 25);
+ this.stToolStrip1.Size = new System.Drawing.Size(549, 25);
this.stToolStrip1.TabIndex = 3;
this.stToolStrip1.Text = "stToolStrip1";
//
@@ -62,11 +97,12 @@
// stMenuStrip1
//
this.stMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.fileToolStripMenuItem,
this.editToolStripMenuItem,
this.viewToolStripMenuItem});
this.stMenuStrip1.Location = new System.Drawing.Point(0, 0);
this.stMenuStrip1.Name = "stMenuStrip1";
- this.stMenuStrip1.Size = new System.Drawing.Size(836, 24);
+ this.stMenuStrip1.Size = new System.Drawing.Size(549, 24);
this.stMenuStrip1.TabIndex = 0;
this.stMenuStrip1.Text = "stMenuStrip1";
//
@@ -76,14 +112,6 @@
this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20);
this.editToolStripMenuItem.Text = "Edit";
//
- // stPanel1
- //
- this.stPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
- this.stPanel1.Location = new System.Drawing.Point(0, 49);
- this.stPanel1.Name = "stPanel1";
- this.stPanel1.Size = new System.Drawing.Size(836, 469);
- this.stPanel1.TabIndex = 4;
- //
// viewToolStripMenuItem
//
this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
@@ -95,20 +123,30 @@
// textureListToolStripMenuItem
//
this.textureListToolStripMenuItem.Name = "textureListToolStripMenuItem";
- this.textureListToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.textureListToolStripMenuItem.Size = new System.Drawing.Size(133, 22);
this.textureListToolStripMenuItem.Text = "Texture List";
this.textureListToolStripMenuItem.Click += new System.EventHandler(this.textureListToolStripMenuItem_Click);
//
+ // fileToolStripMenuItem
+ //
+ this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
+ this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
+ this.fileToolStripMenuItem.Text = "File";
+ //
// LayoutEditor
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.Controls.Add(this.stPanel1);
+ this.ClientSize = new System.Drawing.Size(549, 398);
+ this.Controls.Add(this.backColorDisplay);
+ this.Controls.Add(this.viewportBackColorCB);
+ this.Controls.Add(this.dockPanel1);
this.Controls.Add(this.stToolStrip1);
this.Controls.Add(this.stMenuStrip1);
+ this.IsMdiContainer = true;
this.Name = "LayoutEditor";
- this.Size = new System.Drawing.Size(836, 518);
this.ParentChanged += new System.EventHandler(this.LayoutEditor_ParentChanged);
+ ((System.ComponentModel.ISupportInitialize)(this.backColorDisplay)).EndInit();
this.stToolStrip1.ResumeLayout(false);
this.stToolStrip1.PerformLayout();
this.stMenuStrip1.ResumeLayout(false);
@@ -124,8 +162,11 @@
private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem;
private Toolbox.Library.Forms.STToolStrip stToolStrip1;
private System.Windows.Forms.ToolStripButton toolStripButton1;
- private Toolbox.Library.Forms.STPanel stPanel1;
private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem textureListToolStripMenuItem;
+ private WeifenLuo.WinFormsUI.Docking.DockPanel dockPanel1;
+ private Toolbox.Library.Forms.STComboBox viewportBackColorCB;
+ private System.Windows.Forms.PictureBox backColorDisplay;
+ private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
}
}
diff --git a/File_Format_Library/GUI/BFLYT/LayoutEditor.cs b/File_Format_Library/GUI/BFLYT/LayoutEditor.cs
index c2b5bea6..a23f0a93 100644
--- a/File_Format_Library/GUI/BFLYT/LayoutEditor.cs
+++ b/File_Format_Library/GUI/BFLYT/LayoutEditor.cs
@@ -7,10 +7,15 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
+using Toolbox.Library.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using WeifenLuo.WinFormsUI.ThemeVS2015;
+using Toolbox.Library.IO;
+using Toolbox.Library;
namespace FirstPlugin.Forms
{
- public partial class LayoutEditor : UserControl
+ public partial class LayoutEditor : Form
{
public List LayoutFiles = new List();
@@ -22,27 +27,138 @@ namespace FirstPlugin.Forms
Animation,
}
+ public EventHandler ObjectSelected;
+ public EventHandler ObjectChanged;
+
public LayoutEditor()
{
InitializeComponent();
+
+ var theme = new VS2015DarkTheme();
+ this.dockPanel1.Theme = theme;
+ this.dockPanel1.BackColor = FormThemes.BaseTheme.FormBackColor;
+ this.BackColor = FormThemes.BaseTheme.FormBackColor;
+
+ viewportBackColorCB.Items.Add("Back Color : Default");
+ viewportBackColorCB.Items.Add("Back Color : Custom");
+ viewportBackColorCB.SelectedIndex = 0;
+
+ ObjectSelected += OnObjectSelected;
+ ObjectChanged += OnObjectChanged;
}
+ private DockContent TextureListDock;
+ private DockContent GroupTreeDock;
+ private DockContent PaneTreeDock;
+ private DockContent ColorDock;
+ private DockContent PropertiesDock;
+
+ private List Viewports = new List();
+ private LayoutViewer ActiveViewport;
+
private bool isLoaded = false;
public void LoadBflyt(BFLYT.Header header, string fileName)
{
- if (isLoaded) return;
+ LayoutFiles.Add(header);
+ ActiveLayout = header;
- LayoutViewer viewer = new LayoutViewer();
- viewer.Dock = DockStyle.Fill;
- viewer.TopLevel = false;
- viewer.FormBorderStyle = FormBorderStyle.SizableToolWindow;
- stPanel1.Controls.Add(viewer);
+ LayoutViewer Viewport = new LayoutViewer(header);
+ Viewport.Dock = DockStyle.Fill;
+ DockShow(Viewport, fileName, DockState.Document);
+ Viewports.Add(Viewport);
+ ActiveViewport = Viewport;
+
+ if (!isLoaded)
+ InitializeDockPanels();
isLoaded = true;
- ActiveLayout = header;
}
+ private void InitializeDockPanels()
+ {
+ ShowTextureList();
+ ShowPaneHierarchy();
+ ShowGroupsHierarchy();
+ ShowPropertiesPanel();
+ UpdateBackColor();
+
+ }
+
+ private void OnObjectChanged(object sender, EventArgs e)
+ {
+
+ }
+
+ private void OnProperyChanged()
+ {
+ if (ActiveViewport != null)
+ ActiveViewport.UpdateViewport();
+ }
+
+ private bool isChecked = false;
+ private void OnObjectSelected(object sender, EventArgs e)
+ {
+ if (isChecked) return;
+
+ ActiveViewport.SelectedPanes.Clear();
+
+ if (PropertiesDock != null && (string)sender == "Select")
+ {
+ if (e is TreeViewEventArgs) {
+ var node = ((TreeViewEventArgs)e).Node;
+ var pane = (BFLYT.BasePane)node.Tag;
+
+ ((LayoutProperties)PropertiesDock.Controls[0]).LoadProperties(pane, OnProperyChanged);
+
+ ActiveViewport.SelectedPanes.Add(pane);
+ }
+ }
+ if (ActiveViewport != null)
+ {
+ if (e is TreeViewEventArgs && (string)sender == "Checked" && !isChecked) {
+ isChecked = true;
+ var node = ((TreeViewEventArgs)e).Node;
+ ToggleChildern(node, node.Checked);
+ isChecked = false;
+ }
+
+ ActiveViewport.UpdateViewport();
+ }
+ }
+
+ private void ToggleChildern(TreeNode node, bool isChecked)
+ {
+ if (node.Tag is BFLYT.BasePane)
+ ((BFLYT.BasePane)node.Tag).DisplayInEditor = isChecked;
+
+ node.Checked = isChecked;
+ foreach (TreeNode child in node.Nodes)
+ ToggleChildern(child, isChecked);
+ }
+
+ private DockContent DockShow(UserControl control, string text, DockAlignment dockState, DockContent dockSide = null, float Alignment = 0)
+ {
+ DockContent content = CreateContent(control, text);
+ content.Show(dockSide.Pane, dockState, Alignment);
+ return content;
+ }
+
+ private DockContent DockShow(UserControl control, string text, DockState dockState)
+ {
+ DockContent content = CreateContent(control, text);
+ content.Show(dockPanel1, dockState);
+ return content;
+ }
+
+ private DockContent CreateContent(UserControl control, string text)
+ {
+ DockContent content = new DockContent();
+ content.Text = text;
+ control.Dock = DockStyle.Fill;
+ content.Controls.Add(control);
+ return content;
+ }
public void LoadBflan()
{
@@ -59,15 +175,87 @@ namespace FirstPlugin.Forms
if (this.ParentForm == null) return;
}
- private void textureListToolStripMenuItem_Click(object sender, EventArgs e)
+ private void textureListToolStripMenuItem_Click(object sender, EventArgs e) {
+ ShowTextureList();
+ }
+
+ private void ShowGroupsHierarchy()
+ {
+ dockPanel1.GetContainerControl();
+
+ LayoutHierarchy hierarchyList = new LayoutHierarchy();
+ hierarchyList.LoadLayout(ActiveLayout,ObjectSelected, true);
+ GroupTreeDock = DockShow(hierarchyList, "Groups", DockAlignment.Top, TextureListDock, 0.5f);
+
+ }
+
+ private void ShowPropertiesPanel()
+ {
+ LayoutProperties properties = new LayoutProperties();
+ PropertiesDock = DockShow(properties, "Properties", DockAlignment.Top, TextureListDock, 0.5f);
+ }
+
+ private void ShowPaneHierarchy()
+ {
+ LayoutHierarchy hierarchyList = new LayoutHierarchy();
+ hierarchyList.LoadLayout(ActiveLayout, ObjectSelected);
+ PaneTreeDock = DockShow(hierarchyList, "Panes", DockAlignment.Top, TextureListDock, 0.5f);
+ }
+
+ private void ShowTextureList()
{
LayoutTextureList textureListForm = new LayoutTextureList();
textureListForm.LoadTextures(ActiveLayout);
+ TextureListDock = DockShow(textureListForm, "Texture List", DockState.DockRight);
+ }
- if (ParentForm != null && ParentForm.TopLevel)
- textureListForm.Show(ParentForm);
+ private void stComboBox1_MouseDoubleClick(object sender, MouseEventArgs e)
+ {
+
+ }
+
+ private bool isBGUpdating = false;
+ private void viewportBackColorCB_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ if (ActiveViewport == null || isBGUpdating) return;
+ UpdateBackColor();
+ }
+
+ private void UpdateBackColor()
+ {
+ if (viewportBackColorCB.SelectedIndex == 0)
+ {
+ ActiveViewport.UpdateBackgroundColor(Color.FromArgb(130, 130, 130));
+ backColorDisplay.BackColor = Color.FromArgb(130, 130, 130);
+ }
else
- textureListForm.Show();
+ {
+ ColorDialog dlg = new ColorDialog();
+ if (dlg.ShowDialog() == DialogResult.OK)
+ {
+ ActiveViewport.UpdateBackgroundColor(dlg.Color);
+ backColorDisplay.BackColor = dlg.Color;
+ }
+ else
+ viewportBackColorCB.SelectedIndex = 0;
+ }
+ }
+
+ private void backColorDisplay_Click(object sender, EventArgs e)
+ {
+ isBGUpdating = true;
+
+ ColorDialog dlg = new ColorDialog();
+ if (dlg.ShowDialog() == DialogResult.OK)
+ {
+ ActiveViewport.UpdateBackgroundColor(dlg.Color);
+ backColorDisplay.BackColor = dlg.Color;
+
+ if (viewportBackColorCB.SelectedIndex == 0)
+ viewportBackColorCB.SelectedIndex = 1;
+ }
+
+ isBGUpdating = false;
}
}
}
diff --git a/File_Format_Library/GUI/BFLYT/LayoutHierarchy.Designer.cs b/File_Format_Library/GUI/BFLYT/LayoutHierarchy.Designer.cs
new file mode 100644
index 00000000..be64830e
--- /dev/null
+++ b/File_Format_Library/GUI/BFLYT/LayoutHierarchy.Designer.cs
@@ -0,0 +1,60 @@
+namespace FirstPlugin.Forms
+{
+ partial class LayoutHierarchy
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Component Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.treeView1 = new System.Windows.Forms.TreeView();
+ this.SuspendLayout();
+ //
+ // treeView1
+ //
+ this.treeView1.CheckBoxes = true;
+ this.treeView1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.treeView1.Location = new System.Drawing.Point(0, 0);
+ this.treeView1.Name = "treeView1";
+ this.treeView1.Size = new System.Drawing.Size(317, 372);
+ this.treeView1.TabIndex = 0;
+ this.treeView1.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterCheck);
+ this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
+ //
+ // LayoutHierarchy
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.treeView1);
+ this.Name = "LayoutHierarchy";
+ this.Size = new System.Drawing.Size(317, 372);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.TreeView treeView1;
+ }
+}
diff --git a/File_Format_Library/GUI/BFLYT/LayoutHierarchy.cs b/File_Format_Library/GUI/BFLYT/LayoutHierarchy.cs
new file mode 100644
index 00000000..79ba7836
--- /dev/null
+++ b/File_Format_Library/GUI/BFLYT/LayoutHierarchy.cs
@@ -0,0 +1,87 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using FirstPlugin;
+using Toolbox.Library.Forms;
+
+namespace FirstPlugin.Forms
+{
+ public partial class LayoutHierarchy : UserControl
+ {
+ public LayoutHierarchy()
+ {
+ InitializeComponent();
+
+ treeView1.BackColor = FormThemes.BaseTheme.FormBackColor;
+ treeView1.ForeColor = FormThemes.BaseTheme.FormForeColor;
+
+ var imgList = new ImageList();
+ imgList.Images.Add("AlignmentPane", Properties.Resources.AlignmentPane);
+ imgList.Images.Add("WindowPane", Properties.Resources.WindowPane);
+ imgList.Images.Add("ScissorPane", Properties.Resources.ScissorPane);
+ imgList.Images.Add("BoundryPane", Properties.Resources.BoundryPane);
+ imgList.Images.Add("NullPane", Properties.Resources.NullPane);
+ imgList.Images.Add("PicturePane", Properties.Resources.PicturePane);
+ imgList.ImageSize = new Size(22,22);
+ treeView1.ImageList = imgList;
+ }
+
+ private bool isLoaded = false;
+ private EventHandler OnProperySelected;
+ public void LoadLayout(BFLYT.Header bflyt, EventHandler onPropertySelected, bool useGroup = false)
+ {
+ isLoaded = false;
+ OnProperySelected = onPropertySelected;
+
+ if (useGroup)
+ LoadPane(bflyt.RootGroup);
+ else
+ LoadPane(bflyt.RootPane);
+
+ isLoaded = true;
+ }
+
+ private void LoadPane(BFLYT.BasePane pane, TreeNode parent = null)
+ {
+ PaneTreeWrapper paneNode = new PaneTreeWrapper();
+ paneNode.Checked = true;
+ paneNode.Text = pane.Name;
+ paneNode.Tag = pane;
+
+ string imageKey = "";
+ if (pane is BFLYT.WND1) imageKey = "WindowPane";
+ else if (pane is BFLYT.PIC1) imageKey = "PicturePane";
+ else if (pane is BFLYT.BND1) imageKey = "BoundryPane";
+ else imageKey = "NullPane";
+
+ paneNode.ImageKey = imageKey;
+ paneNode.SelectedImageKey = imageKey;
+
+ if (parent == null)
+ treeView1.Nodes.Add(paneNode);
+ else
+ parent.Nodes.Add(paneNode);
+
+ foreach (var childPane in pane.Childern)
+ LoadPane(childPane, paneNode);
+ }
+
+ private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
+ {
+ if (isLoaded)
+ OnProperySelected.Invoke("Select", e);
+ }
+
+ private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
+ {
+ if (isLoaded)
+ OnProperySelected.Invoke("Checked", e);
+ }
+ }
+}
diff --git a/File_Format_Library/GUI/BFLYT/LayoutHierarchy.resx b/File_Format_Library/GUI/BFLYT/LayoutHierarchy.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/File_Format_Library/GUI/BFLYT/LayoutHierarchy.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/File_Format_Library/GUI/BFLYT/LayoutProperties.Designer.cs b/File_Format_Library/GUI/BFLYT/LayoutProperties.Designer.cs
new file mode 100644
index 00000000..350ded3c
--- /dev/null
+++ b/File_Format_Library/GUI/BFLYT/LayoutProperties.Designer.cs
@@ -0,0 +1,59 @@
+namespace FirstPlugin.Forms
+{
+ partial class LayoutProperties
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Component Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.stTabControl1 = new FlatTabControl.FlatTabControl();
+ this.SuspendLayout();
+ //
+ // stTabControl1
+ //
+ this.stTabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.stTabControl1.Location = new System.Drawing.Point(0, 0);
+ this.stTabControl1.myBackColor = System.Drawing.Color.Empty;
+ this.stTabControl1.Name = "stTabControl1";
+ this.stTabControl1.SelectedIndex = 0;
+ this.stTabControl1.Size = new System.Drawing.Size(368, 338);
+ this.stTabControl1.TabIndex = 0;
+ //
+ // LayoutProperties
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.stTabControl1);
+ this.Name = "LayoutProperties";
+ this.Size = new System.Drawing.Size(368, 338);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private FlatTabControl.FlatTabControl stTabControl1;
+ }
+}
diff --git a/File_Format_Library/GUI/BFLYT/LayoutProperties.cs b/File_Format_Library/GUI/BFLYT/LayoutProperties.cs
new file mode 100644
index 00000000..d9e82b57
--- /dev/null
+++ b/File_Format_Library/GUI/BFLYT/LayoutProperties.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Toolbox.Library.Forms;
+
+namespace FirstPlugin.Forms
+{
+ public partial class LayoutProperties : UserControl
+ {
+ public LayoutProperties()
+ {
+ InitializeComponent();
+
+ stTabControl1.myBackColor = FormThemes.BaseTheme.FormBackColor;
+ }
+
+ public void LoadProperties(BFLYT.BasePane prop, Action propChanged)
+ {
+ stTabControl1.Controls.Clear();
+
+ if (prop is BFLYT.PIC1)
+ {
+ LoadPropertyTab("Pane", prop, propChanged);
+ LoadPropertyTab("Materials", ((BFLYT.PIC1)prop).GetMaterial(), propChanged);
+ }
+ else
+ LoadPropertyTab("Pane", prop, propChanged);
+ }
+
+ private void LoadPropertyTab(string text, object prop, Action propChanged)
+ {
+ TabPage page = new TabPage();
+ page.Text = text;
+ var propGrid = new STPropertyGrid();
+ propGrid.Dock = DockStyle.Fill;
+ propGrid.LoadProperty(prop, propChanged);
+ page.Controls.Add(propGrid);
+ stTabControl1.Controls.Add(page);
+ }
+ }
+}
diff --git a/File_Format_Library/GUI/BFLYT/LayoutProperties.resx b/File_Format_Library/GUI/BFLYT/LayoutProperties.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/File_Format_Library/GUI/BFLYT/LayoutProperties.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/File_Format_Library/GUI/BFLYT/LayoutTextureList.Designer.cs b/File_Format_Library/GUI/BFLYT/LayoutTextureList.Designer.cs
index 5622b8f9..96758061 100644
--- a/File_Format_Library/GUI/BFLYT/LayoutTextureList.Designer.cs
+++ b/File_Format_Library/GUI/BFLYT/LayoutTextureList.Designer.cs
@@ -28,7 +28,6 @@
///
private void InitializeComponent()
{
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LayoutTextureList));
this.stToolStrip1 = new Toolbox.Library.Forms.STToolStrip();
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();
@@ -39,34 +38,24 @@
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
- this.contentContainer.SuspendLayout();
this.stToolStrip1.SuspendLayout();
this.SuspendLayout();
//
- // contentContainer
- //
- this.contentContainer.Controls.Add(this.listViewCustom1);
- this.contentContainer.Controls.Add(this.listViewTpyeCB);
- this.contentContainer.Controls.Add(this.stToolStrip1);
- this.contentContainer.Controls.SetChildIndex(this.stToolStrip1, 0);
- this.contentContainer.Controls.SetChildIndex(this.listViewTpyeCB, 0);
- this.contentContainer.Controls.SetChildIndex(this.listViewCustom1, 0);
- //
// stToolStrip1
//
this.stToolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.toolStripButton1,
this.toolStripButton2});
- this.stToolStrip1.Location = new System.Drawing.Point(0, 25);
+ this.stToolStrip1.Location = new System.Drawing.Point(0, 0);
this.stToolStrip1.Name = "stToolStrip1";
- this.stToolStrip1.Size = new System.Drawing.Size(543, 25);
+ this.stToolStrip1.Size = new System.Drawing.Size(549, 25);
this.stToolStrip1.TabIndex = 11;
this.stToolStrip1.Text = "stToolStrip1";
//
// toolStripButton1
//
this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
- this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
+ this.toolStripButton1.Image = global::FirstPlugin.Properties.Resources.AddIcon;
this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton1.Name = "toolStripButton1";
this.toolStripButton1.Size = new System.Drawing.Size(23, 22);
@@ -75,7 +64,7 @@
// toolStripButton2
//
this.toolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
- this.toolStripButton2.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton2.Image")));
+ this.toolStripButton2.Image = global::FirstPlugin.Properties.Resources.RemoveIcon;
this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton2.Name = "toolStripButton2";
this.toolStripButton2.Size = new System.Drawing.Size(23, 22);
@@ -88,7 +77,7 @@
this.listViewTpyeCB.ButtonColor = System.Drawing.Color.Empty;
this.listViewTpyeCB.FormattingEnabled = true;
this.listViewTpyeCB.IsReadOnly = false;
- this.listViewTpyeCB.Location = new System.Drawing.Point(139, 27);
+ this.listViewTpyeCB.Location = new System.Drawing.Point(117, 2);
this.listViewTpyeCB.Name = "listViewTpyeCB";
this.listViewTpyeCB.Size = new System.Drawing.Size(146, 21);
this.listViewTpyeCB.TabIndex = 12;
@@ -96,6 +85,7 @@
//
// listViewCustom1
//
+ this.listViewCustom1.AllowDrop = true;
this.listViewCustom1.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.listViewCustom1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1,
@@ -104,21 +94,24 @@
this.columnHeader4,
this.columnHeader5});
this.listViewCustom1.Dock = System.Windows.Forms.DockStyle.Fill;
- this.listViewCustom1.Location = new System.Drawing.Point(0, 50);
+ this.listViewCustom1.Location = new System.Drawing.Point(0, 25);
this.listViewCustom1.Name = "listViewCustom1";
this.listViewCustom1.OwnerDraw = true;
- this.listViewCustom1.Size = new System.Drawing.Size(543, 343);
+ this.listViewCustom1.Size = new System.Drawing.Size(549, 373);
this.listViewCustom1.TabIndex = 13;
this.listViewCustom1.UseCompatibleStateImageBehavior = false;
this.listViewCustom1.View = System.Windows.Forms.View.Details;
+ this.listViewCustom1.DragEnter += new System.Windows.Forms.DragEventHandler(this.listViewCustom1_DragEnter);
//
// columnHeader1
//
this.columnHeader1.Text = "Name";
+ this.columnHeader1.Width = 118;
//
// columnHeader2
//
this.columnHeader2.Text = "Format";
+ this.columnHeader2.Width = 101;
//
// columnHeader3
//
@@ -131,19 +124,22 @@
// columnHeader5
//
this.columnHeader5.Text = "Size";
+ this.columnHeader5.Width = 210;
//
// LayoutTextureList
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(549, 398);
+ this.Controls.Add(this.listViewCustom1);
+ this.Controls.Add(this.listViewTpyeCB);
+ this.Controls.Add(this.stToolStrip1);
this.Name = "LayoutTextureList";
- this.Text = "LayoutTextureList";
- this.contentContainer.ResumeLayout(false);
- this.contentContainer.PerformLayout();
+ this.Size = new System.Drawing.Size(549, 398);
+ this.DragDrop += new System.Windows.Forms.DragEventHandler(this.LayoutTextureList_DragDrop);
this.stToolStrip1.ResumeLayout(false);
this.stToolStrip1.PerformLayout();
this.ResumeLayout(false);
+ this.PerformLayout();
}
diff --git a/File_Format_Library/GUI/BFLYT/LayoutTextureList.cs b/File_Format_Library/GUI/BFLYT/LayoutTextureList.cs
index 1b60f14c..83ccdd25 100644
--- a/File_Format_Library/GUI/BFLYT/LayoutTextureList.cs
+++ b/File_Format_Library/GUI/BFLYT/LayoutTextureList.cs
@@ -9,11 +9,15 @@ using System.Threading.Tasks;
using System.Windows.Forms;
using FirstPlugin;
using Toolbox.Library.Forms;
+using Toolbox.Library;
+using System.Threading;
+using WeifenLuo.WinFormsUI.Docking;
namespace FirstPlugin.Forms
{
- public partial class LayoutTextureList : STForm
+ public partial class LayoutTextureList : UserControl
{
+ ImageList imgList = new ImageList();
public LayoutTextureList()
{
InitializeComponent();
@@ -24,18 +28,58 @@ namespace FirstPlugin.Forms
listViewTpyeCB.Items.Add(View.SmallIcon);
listViewTpyeCB.Items.Add(View.Tile);
listViewTpyeCB.SelectedIndex = 0;
+ listViewCustom1.FullRowSelect = true;
+
+ imgList = new ImageList()
+ {
+ ColorDepth = ColorDepth.Depth32Bit,
+ ImageSize = new Size(30, 30),
+ };
}
private bool isLoaded = false;
public void LoadTextures(BFLYT.Header header)
{
+ listViewCustom1.Items.Clear();
+ imgList.Images.Clear();
+ imgList.Images.Add(new Bitmap(30, 30));
+
+ listViewCustom1.LargeImageList = imgList;
+ listViewCustom1.SmallImageList = imgList;
+
+ var textureList = header.FileInfo.GetTextures();
+
listViewCustom1.BeginUpdate();
foreach (var texture in header.TextureList.Textures)
{
ListViewItem item = new ListViewItem();
item.Text = texture;
+ item.ImageIndex = 0;
listViewCustom1.Items.Add(item);
}
+
+ Console.WriteLine($"textureList " + textureList.Count);
+
+ //Load textures after on a seperate thread
+
+ Thread Thread = new Thread((ThreadStart)(() =>
+ {
+ foreach (ListViewItem item in listViewCustom1.Items)
+ {
+ if (textureList.ContainsKey(item.Text))
+ {
+ LoadTextureIcon(item, textureList[item.Text]);
+ }
+ }
+ }));
+ Thread.Start();
+
+ foreach (ListViewItem item in listViewCustom1.Items)
+ {
+ if (textureList.ContainsKey(item.Text))
+ LoadTextureIcon(item, textureList[item.Text]);
+ }
+
listViewCustom1.EndUpdate();
isLoaded = true;
@@ -45,5 +89,54 @@ namespace FirstPlugin.Forms
if (isLoaded)
listViewCustom1.View = (View)listViewTpyeCB.SelectedItem;
}
+
+ private void LoadTextureIcon(ListViewItem item, STGenericTexture texture)
+ {
+ Bitmap temp = texture.GetBitmap();
+
+ if (listViewCustom1.InvokeRequired)
+ {
+ listViewCustom1.Invoke((MethodInvoker)delegate {
+ item.ImageIndex = imgList.Images.Count;
+ item.SubItems.Add(texture.Format.ToString());
+ item.SubItems.Add(texture.Width.ToString());
+ item.SubItems.Add(texture.Height.ToString());
+ item.SubItems.Add(texture.DataSize);
+
+ // Running on the UI thread
+ imgList.Images.Add(temp);
+ var dummy = imgList.Handle;
+ });
+ }
+
+ temp.Dispose();
+ }
+
+ private void LayoutTextureList_DragDrop(object sender, DragEventArgs e)
+ {
+ Cursor.Current = Cursors.WaitCursor;
+
+ string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
+ foreach (string filename in files)
+ OpenTextureFile(filename);
+
+ Cursor.Current = Cursors.Default;
+ }
+
+ private void OpenTextureFile(string fileName)
+ {
+
+ }
+
+ private void listViewCustom1_DragEnter(object sender, DragEventArgs e)
+ {
+ if (e.Data.GetDataPresent(DataFormats.FileDrop))
+ e.Effect = DragDropEffects.All;
+ else
+ {
+ String[] strGetFormats = e.Data.GetFormats();
+ e.Effect = DragDropEffects.None;
+ }
+ }
}
}
diff --git a/File_Format_Library/GUI/BFLYT/LayoutTextureList.resx b/File_Format_Library/GUI/BFLYT/LayoutTextureList.resx
index 677ad9c3..7930f31b 100644
--- a/File_Format_Library/GUI/BFLYT/LayoutTextureList.resx
+++ b/File_Format_Library/GUI/BFLYT/LayoutTextureList.resx
@@ -120,35 +120,4 @@
17, 17
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
- YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
- 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
- bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
- VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
- c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
- Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
- mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
- kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
- TgDQASA1MVpwzwAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
- YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
- 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
- bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
- VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
- c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
- Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
- mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
- kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
- TgDQASA1MVpwzwAAAABJRU5ErkJggg==
-
-
\ No newline at end of file
diff --git a/File_Format_Library/GUI/BFLYT/LayoutViewer.cs b/File_Format_Library/GUI/BFLYT/LayoutViewer.cs
index c819a83a..e498a659 100644
--- a/File_Format_Library/GUI/BFLYT/LayoutViewer.cs
+++ b/File_Format_Library/GUI/BFLYT/LayoutViewer.cs
@@ -8,18 +8,44 @@ using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenTK.Graphics.OpenGL;
+using OpenTK;
using Toolbox.Library;
using Toolbox.Library.Rendering;
+using Toolbox.Library.IO;
namespace FirstPlugin.Forms
{
- public partial class LayoutViewer : Form
+ public partial class LayoutViewer : UserControl
{
+ public List SelectedPanes = new List();
+
+ public Camera2D Camera = new Camera2D();
+
+ public class Camera2D
+ {
+ public float Zoom = 1;
+ public Vector2 Position;
+ }
+
private RenderableTex backgroundTex;
- public LayoutViewer()
+ private BFLYT.Header LayoutFile;
+
+ private static Dictionary Textures;
+
+ public LayoutViewer(BFLYT.Header bflyt)
{
InitializeComponent();
+ LayoutFile = bflyt;
+
+ Textures = new Dictionary();
+ if (bflyt.TextureList.Textures.Count > 0)
+ Textures = bflyt.FileInfo.GetTextures();
+ }
+
+ public void UpdateViewport()
+ {
+ glControl1.Invalidate();
}
private void glControl1_Paint(object sender, PaintEventArgs e)
@@ -31,8 +57,11 @@ namespace FirstPlugin.Forms
OnRender();
}
+ private Color BackgroundColor = Color.FromArgb(130, 130, 130);
private void OnRender()
{
+ if (LayoutFile == null) return;
+
GL.Viewport(0, 0, glControl1.Width, glControl1.Height);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();
@@ -40,64 +69,406 @@ namespace FirstPlugin.Forms
GL.MatrixMode(MatrixMode.Modelview);
GL.LoadIdentity();
- GL.ClearColor(System.Drawing.Color.FromArgb(40, 40, 40));
+ GL.ClearColor(BackgroundColor);
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
- DrawBackground();
+ GL.Enable(EnableCap.AlphaTest);
+ GL.AlphaFunc(AlphaFunction.Gequal, 0.1f);
+ GL.Enable(EnableCap.Blend);
+ GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha);
+
+ DrawRootPane(LayoutFile.RootPane);
+ DrawGrid();
+ DrawXyLines();
+
+ GL.Scale(1 * Camera.Zoom, -1 * Camera.Zoom, 1);
+ GL.Translate(Camera.Position.X, Camera.Position.Y, 0);
+
+ RenderPanes(LayoutFile.RootPane, true);
glControl1.SwapBuffers();
}
+ private void RenderPanes(BFLYT.BasePane pane, bool isRoot)
+ {
+ if (!pane.DisplayInEditor)
+ return;
+
+ GL.PushMatrix();
+ GL.Translate(pane.Translate.X, pane.Translate.Y, 0);
+ GL.Rotate(pane.Rotate.Z, pane.Rotate.X, pane.Rotate.Y, pane.Rotate.Z);
+ GL.Scale(pane.Scale.X, pane.Scale.Y, 1);
+
+ if (!isRoot)
+ {
+ if (pane is BFLYT.PIC1)
+ DrawPicturePane(LayoutFile, (BFLYT.PIC1)pane);
+ else if (pane is BFLYT.PAN1)
+ DrawDefaultPane(LayoutFile, (BFLYT.PAN1)pane);
+ }
+ else
+ isRoot = false;
+
+ foreach (var childPane in pane.Childern)
+ RenderPanes(childPane, isRoot);
+
+ GL.PopMatrix();
+ }
+
+ private void DrawRootPane(BFLYT.PAN1 pane)
+ {
+ GL.LoadIdentity();
+ GL.PushMatrix();
+ GL.Scale(pane.Scale.X * Camera.Zoom, -pane.Scale.Y * Camera.Zoom, 1);
+ GL.Rotate(pane.Rotate.Z, pane.Rotate.X, pane.Rotate.Y, pane.Rotate.Z);
+ GL.Translate(pane.Translate.X + Camera.Position.X, pane.Translate.Y + Camera.Position.Y, 0);
+
+ Color color = Color.Black;
+ if (SelectedPanes.Contains(pane))
+ color = Color.Red;
+
+ BFLYT.CustomRectangle rect = pane.CreateRectangle();
+
+ //Draw a quad which is the backcolor but lighter
+ GL.Begin(PrimitiveType.Quads);
+ GL.Color3(BackgroundColor.Lighten(10));
+ GL.Vertex2(rect.LeftPoint, rect.TopPoint);
+ GL.Vertex2(rect.RightPoint, rect.TopPoint);
+ GL.Vertex2(rect.RightPoint, rect.BottomPoint);
+ GL.Vertex2(rect.LeftPoint, rect.BottomPoint);
+ GL.End();
+
+ //Draw outline of root pane
+ GL.Begin(PrimitiveType.LineLoop);
+ GL.PolygonOffset(0.5f, 2);
+ GL.LineWidth(33);
+ GL.Color3(color);
+ GL.Vertex2(rect.LeftPoint, rect.TopPoint);
+ GL.Vertex2(rect.RightPoint, rect.TopPoint);
+ GL.Vertex2(rect.RightPoint, rect.BottomPoint);
+ GL.Vertex2(rect.LeftPoint, rect.BottomPoint);
+ GL.End();
+
+ GL.PopMatrix();
+ }
+
+ private void DrawDefaultPane(BFLYT.Header bflyt, BFLYT.PAN1 pane)
+ {
+ Vector2[] TexCoords = new Vector2[] {
+ new Vector2(1,1),
+ new Vector2(0,1),
+ new Vector2(0,0),
+ new Vector2(1,0)
+ };
+
+ Color color = Color.White;
+ if (SelectedPanes.Contains(pane))
+ color = Color.Red;
+
+ Color[] Colors = new Color[] {
+ color,
+ color,
+ color,
+ color,
+ };
+
+ DrawRectangle(pane.CreateRectangle(), TexCoords, Colors);
+ }
+
+ private void DrawPicturePane(BFLYT.Header bflyt, BFLYT.PIC1 pane)
+ {
+ Vector2[] TexCoords = new Vector2[] {
+ new Vector2(1,1),
+ new Vector2(0,1),
+ new Vector2(0,0),
+ new Vector2(1,0)
+ };
+
+ Color[] Colors = new Color[] {
+ pane.ColorTopLeft.Color,
+ pane.ColorTopRight.Color,
+ pane.ColorBottomRight.Color,
+ pane.ColorBottomLeft.Color,
+ };
+
+ GL.Enable(EnableCap.Texture2D);
+
+ if (pane.TexCoords.Length > 0)
+ {
+ var mat = bflyt.MaterialList.Materials[pane.MaterialIndex];
+ string textureMap0 = "";
+ if (mat.TextureMaps.Count > 0)
+ textureMap0 = bflyt.TextureList.Textures[mat.TextureMaps[0].ID];
+
+ if (Textures.ContainsKey(textureMap0))
+ BindGLTexture(mat.TextureMaps[0], Textures[textureMap0]);
+
+ TexCoords = new Vector2[] {
+ pane.TexCoords[0].TopLeft.ToTKVector2(),
+ pane.TexCoords[0].TopRight.ToTKVector2(),
+ pane.TexCoords[0].BottomRight.ToTKVector2(),
+ pane.TexCoords[0].BottomLeft.ToTKVector2(),
+ };
+ }
+
+ DrawRectangle(pane.CreateRectangle(), TexCoords, Colors, false);
+
+ GL.BindTexture(TextureTarget.Texture2D, 0);
+ }
+
+ public void DrawRectangle(BFLYT.CustomRectangle rect, Vector2[] texCoords, Color[] colors, bool useLines = true)
+ {
+ if (useLines)
+ {
+ GL.Begin(PrimitiveType.LineLoop);
+ GL.Color3(colors[0]);
+ GL.Vertex2(rect.LeftPoint, rect.BottomPoint);
+ GL.Vertex2(rect.RightPoint, rect.BottomPoint);
+ GL.Vertex2(rect.RightPoint, rect.TopPoint);
+ GL.Vertex2(rect.LeftPoint, rect.TopPoint);
+ GL.End();
+ }
+ else
+ {
+ GL.Begin(PrimitiveType.Quads);
+ GL.Color3(colors[0]);
+ GL.TexCoord2(texCoords[0]);
+ GL.Vertex2(rect.LeftPoint, rect.BottomPoint);
+ GL.Color3(colors[1]);
+ GL.TexCoord2(texCoords[1]);
+ GL.Vertex2(rect.RightPoint, rect.BottomPoint);
+ GL.Color3(colors[2]);
+ GL.TexCoord2(texCoords[2]);
+ GL.Vertex2(rect.RightPoint, rect.TopPoint);
+ GL.Color3(colors[3]);
+ GL.TexCoord2(texCoords[3]);
+ GL.Vertex2(rect.LeftPoint, rect.TopPoint);
+ GL.End();
+ }
+ }
+
+ private static void BindGLTexture(BFLYT.TextureRef tex, STGenericTexture texture)
+ {
+ if (texture.RenderableTex == null || !texture.RenderableTex.GLInitialized)
+ texture.LoadOpenGLTexture();
+
+ //If the texture is still not initialized then return
+ if (!texture.RenderableTex.GLInitialized)
+ return;
+
+ // GL.ActiveTexture(TextureUnit.Texture0 + texid);
+ GL.BindTexture(TextureTarget.Texture2D, texture.RenderableTex.TexID);
+ GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, ConvertTextureWrap(tex.WrapModeU));
+ GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, ConvertTextureWrap(tex.WrapModeV));
+ GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, ConvertMagFilterMode(tex.MaxFilterMode));
+ GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, ConvertMinFilterMode(tex.MinFilterMode));
+ GL.TexParameter(TextureTarget.Texture2D, (TextureParameterName)ExtTextureFilterAnisotropic.TextureMaxAnisotropyExt, 0.0f);
+ }
+
+ private static int ConvertTextureWrap(BFLYT.TextureRef.WrapMode wrapMode)
+ {
+ switch (wrapMode)
+ {
+ case BFLYT.TextureRef.WrapMode.Clamp: return (int)TextureWrapMode.Clamp;
+ case BFLYT.TextureRef.WrapMode.Mirror: return (int)TextureWrapMode.MirroredRepeat;
+ case BFLYT.TextureRef.WrapMode.Repeat: return (int)TextureWrapMode.Repeat;
+ default: return (int)TextureWrapMode.Clamp;
+ }
+ }
+
+ private static int ConvertMagFilterMode(BFLYT.TextureRef.FilterMode filterMode)
+ {
+ switch (filterMode)
+ {
+ case BFLYT.TextureRef.FilterMode.Linear: return (int)TextureMagFilter.Linear;
+ case BFLYT.TextureRef.FilterMode.Near: return (int)TextureMagFilter.Nearest;
+ default: return (int)BFLYT.TextureRef.FilterMode.Linear;
+ }
+ }
+
+ private static int ConvertMinFilterMode(BFLYT.TextureRef.FilterMode filterMode)
+ {
+ switch (filterMode)
+ {
+ case BFLYT.TextureRef.FilterMode.Linear: return (int)TextureMinFilter.Linear;
+ case BFLYT.TextureRef.FilterMode.Near: return (int)TextureMinFilter.Nearest;
+ default: return (int)BFLYT.TextureRef.FilterMode.Linear;
+ }
+ }
+
private void DrawBackground()
{
if (backgroundTex == null)
- backgroundTex = RenderableTex.FromBitmap(Properties.Resources.GridBackground);
+ {
+ /* backgroundTex = RenderableTex.FromBitmap(Properties.Resources.GridBackground);
+ backgroundTex.TextureWrapR = TextureWrapMode.Repeat;
+ backgroundTex.TextureWrapT = TextureWrapMode.Repeat;
- GL.Enable(EnableCap.Texture2D);
- GL.BindTexture(TextureTarget.Texture2D, backgroundTex.TexID);
- GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (float)backgroundTex.TextureWrapR);
- GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (float)backgroundTex.TextureWrapT);
- GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (float)backgroundTex.TextureMagFilter);
- GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (float)backgroundTex.TextureMinFilter);
- float scale = 4;
+ GL.Enable(EnableCap.Texture2D);
+ GL.BindTexture(TextureTarget.Texture2D, backgroundTex.TexID);
+ GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (float)backgroundTex.TextureWrapR);
+ GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (float)backgroundTex.TextureWrapT);
+ GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (float)backgroundTex.TextureMagFilter);
+ GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (float)backgroundTex.TextureMinFilter);
- GL.MatrixMode(MatrixMode.Modelview);
+ float UVscale = 15;
+
+ int PanelWidth = 9000;
+ int PanelWHeight = 9000;
+
+ Vector2 scaleCenter = new Vector2(0.5f, 0.5f);
+
+ Vector2[] TexCoords = new Vector2[] {
+ new Vector2(1,1),
+ new Vector2(0,1),
+ new Vector2(0,0),
+ new Vector2(1,0),
+ };
+
+ for (int i = 0; i < TexCoords.Length; i++)
+ TexCoords[i] = (TexCoords[i] - scaleCenter) * 20 + scaleCenter;
+
+ GL.MatrixMode(MatrixMode.Modelview);
+ GL.LoadIdentity();
+ GL.PushMatrix();
+ GL.Scale(1, 1, 1);
+ GL.Translate(0, 0, 0);
+
+ GL.Color4(Color.White);
+
+ GL.Begin(PrimitiveType.Quads);
+ GL.TexCoord2(TexCoords[0]);
+ GL.Vertex3(PanelWidth, PanelWHeight, 0);
+ GL.TexCoord2(TexCoords[1]);
+ GL.Vertex3(-PanelWidth, PanelWHeight, 0);
+ GL.TexCoord2(TexCoords[2]);
+ GL.Vertex3(-PanelWidth, -PanelWHeight, 0);
+ GL.TexCoord2(TexCoords[3]);
+ GL.Vertex3(PanelWidth, -PanelWHeight, 0);
+ GL.End();
+
+ GL.BindTexture(TextureTarget.Texture2D, 0);
+ GL.PopMatrix();*/
+ }
+ }
+
+ public void UpdateBackgroundColor(Color color)
+ {
+ BackgroundColor = color;
+ glControl1.Invalidate();
+ }
+
+ private void DrawXyLines()
+ {
GL.LoadIdentity();
GL.PushMatrix();
- GL.Scale(scale, scale, scale);
- GL.Translate(0, 0, 0);
+ GL.Scale(1 * Camera.Zoom, -1 * Camera.Zoom, 1);
+ GL.Translate(Camera.Position.X, Camera.Position.Y, 0);
- GL.Color4(Color.White);
+ int lineLength = 20;
- GL.Begin(PrimitiveType.Quads);
- GL.TexCoord2(-1, -1);
- GL.Vertex3(-Width, -Height, 0);
- GL.TexCoord2(0, -1);
- GL.Vertex3(Width, -Height, 0);
- GL.TexCoord2(0, 0);
- GL.Vertex3(Width, Height, 0);
- GL.TexCoord2(-1, 0);
- GL.Vertex3(-Width, Height, 0);
+ GL.Color3(Color.Green);
+ GL.Begin(PrimitiveType.Lines);
+ GL.Vertex2(0, 0);
+ GL.Vertex2(0, lineLength);
+ GL.End();
+
+ GL.Color3(Color.Red);
+ GL.Begin(PrimitiveType.Lines);
+ GL.Vertex2(0, 0);
+ GL.Vertex2(lineLength, 0);
GL.End();
- GL.BindTexture(TextureTarget.Texture2D, 0);
GL.PopMatrix();
}
+ private void DrawGrid()
+ {
+ var size = 40;
+ var amount = 300;
+
+ GL.LoadIdentity();
+ GL.PushMatrix();
+ GL.Scale(1 * Camera.Zoom, -1 * Camera.Zoom, 1);
+ GL.Translate(Camera.Position.X, Camera.Position.Y, 0);
+ GL.Rotate(90, new Vector3(1,0,0));
+
+ GL.LineWidth(0.001f);
+ GL.Color3(BackgroundColor.Darken(20));
+ GL.Begin(PrimitiveType.Lines);
+
+ int squareGridCounter = 0;
+ for (var i = -amount; i <= amount; i++)
+ {
+ if (squareGridCounter > 5)
+ {
+ squareGridCounter = 0;
+ GL.LineWidth(33f);
+ }
+ else
+ {
+ GL.LineWidth(0.001f);
+ }
+
+ GL.Vertex3(new Vector3(-amount * size, 0f, i * size));
+ GL.Vertex3(new Vector3(amount * size, 0f, i * size));
+ GL.Vertex3(new Vector3(i * size, 0f, -amount * size));
+ GL.Vertex3(new Vector3(i * size, 0f, amount * size));
+
+ squareGridCounter++;
+ }
+ GL.End();
+ GL.Color3(Color.Transparent);
+ GL.PopAttrib();
+ GL.Enable(EnableCap.Texture2D);
+ GL.PopMatrix();
+ }
+
+ private bool mouseHeldDown = false;
+ private Point originMouse;
private void glControl1_MouseDown(object sender, MouseEventArgs e)
{
-
+ if (e.Button == MouseButtons.Left)
+ {
+ mouseHeldDown = true;
+ originMouse = e.Location;
+ glControl1.Invalidate();
+ }
}
private void glControl1_MouseUp(object sender, MouseEventArgs e)
{
-
+ if (e.Button == MouseButtons.Left)
+ {
+ mouseHeldDown = false;
+ glControl1.Invalidate();
+ }
}
private void glControl1_MouseMove(object sender, MouseEventArgs e)
{
+ if (mouseHeldDown)
+ {
+ var pos = new Vector2(e.Location.X - originMouse.X, e.Location.Y - originMouse.Y);
+ Camera.Position.X += pos.X;
+ Camera.Position.Y -= pos.Y;
+ originMouse = e.Location;
+
+ glControl1.Invalidate();
+ }
+ }
+
+ protected override void OnMouseWheel(MouseEventArgs e)
+ {
+ base.OnMouseWheel(e);
+ if (e.Delta > 0 && Camera.Zoom > 0)
+ Camera.Zoom += 0.1f;
+ if (e.Delta < 0 && Camera.Zoom < 10 && Camera.Zoom > 0.1)
+ Camera.Zoom -= 0.1f;
+
+ glControl1.Invalidate();
}
private void glControl1_Resize(object sender, EventArgs e)
diff --git a/File_Format_Library/Properties/Resources.Designer.cs b/File_Format_Library/Properties/Resources.Designer.cs
index dfe69589..2d4d4e1c 100644
--- a/File_Format_Library/Properties/Resources.Designer.cs
+++ b/File_Format_Library/Properties/Resources.Designer.cs
@@ -70,6 +70,16 @@ namespace FirstPlugin.Properties {
}
}
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap AlignmentPane {
+ get {
+ object obj = ResourceManager.GetObject("AlignmentPane", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
@@ -150,6 +160,16 @@ namespace FirstPlugin.Properties {
}
}
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap BoundryPane {
+ get {
+ object obj = ResourceManager.GetObject("BoundryPane", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
@@ -170,6 +190,26 @@ namespace FirstPlugin.Properties {
}
}
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap NullPane {
+ get {
+ object obj = ResourceManager.GetObject("NullPane", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap PicturePane {
+ get {
+ object obj = ResourceManager.GetObject("PicturePane", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
@@ -180,6 +220,26 @@ namespace FirstPlugin.Properties {
}
}
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap ScissorPane {
+ get {
+ object obj = ResourceManager.GetObject("ScissorPane", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap TextPane {
+ get {
+ object obj = ResourceManager.GetObject("TextPane", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
@@ -219,5 +279,15 @@ namespace FirstPlugin.Properties {
return ((byte[])(obj));
}
}
+
+ ///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap WindowPane {
+ get {
+ object obj = ResourceManager.GetObject("WindowPane", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
}
}
diff --git a/File_Format_Library/Properties/Resources.resx b/File_Format_Library/Properties/Resources.resx
index ec132dec..689d9510 100644
--- a/File_Format_Library/Properties/Resources.resx
+++ b/File_Format_Library/Properties/Resources.resx
@@ -166,4 +166,25 @@
..\Resources\ArrowIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\Layout\AlignmentPane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\Layout\BoundryPane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\Layout\NullPane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\Layout\PicturePane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\Layout\ScissorPane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\Layout\TextPane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\Layout\WindowPane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
\ No newline at end of file
diff --git a/File_Format_Library/Resources/GridBackground.png b/File_Format_Library/Resources/GridBackground.png
index 3d5d8398..6b7b540c 100644
Binary files a/File_Format_Library/Resources/GridBackground.png and b/File_Format_Library/Resources/GridBackground.png differ
diff --git a/File_Format_Library/Resources/Layout/AlignmentPane.png b/File_Format_Library/Resources/Layout/AlignmentPane.png
new file mode 100644
index 00000000..a2dc7c9f
Binary files /dev/null and b/File_Format_Library/Resources/Layout/AlignmentPane.png differ
diff --git a/File_Format_Library/Resources/Layout/BoundryPane.png b/File_Format_Library/Resources/Layout/BoundryPane.png
new file mode 100644
index 00000000..a2dc7c9f
Binary files /dev/null and b/File_Format_Library/Resources/Layout/BoundryPane.png differ
diff --git a/File_Format_Library/Resources/Layout/NullPane.png b/File_Format_Library/Resources/Layout/NullPane.png
new file mode 100644
index 00000000..6b22666b
Binary files /dev/null and b/File_Format_Library/Resources/Layout/NullPane.png differ
diff --git a/File_Format_Library/Resources/Layout/PicturePane.png b/File_Format_Library/Resources/Layout/PicturePane.png
new file mode 100644
index 00000000..da2f2dfd
Binary files /dev/null and b/File_Format_Library/Resources/Layout/PicturePane.png differ
diff --git a/File_Format_Library/Resources/Layout/ScissorPane.png b/File_Format_Library/Resources/Layout/ScissorPane.png
new file mode 100644
index 00000000..a050a7c6
Binary files /dev/null and b/File_Format_Library/Resources/Layout/ScissorPane.png differ
diff --git a/File_Format_Library/Resources/Layout/TextPane.png b/File_Format_Library/Resources/Layout/TextPane.png
new file mode 100644
index 00000000..8541ed71
Binary files /dev/null and b/File_Format_Library/Resources/Layout/TextPane.png differ
diff --git a/File_Format_Library/Resources/Layout/WindowPane.png b/File_Format_Library/Resources/Layout/WindowPane.png
new file mode 100644
index 00000000..c91a051b
Binary files /dev/null and b/File_Format_Library/Resources/Layout/WindowPane.png differ
diff --git a/File_Format_Library/app.config b/File_Format_Library/app.config
index cd8e858d..62cf6766 100644
--- a/File_Format_Library/app.config
+++ b/File_Format_Library/app.config
@@ -10,6 +10,10 @@
+
+
+
+
diff --git a/File_Format_Library/packages.config b/File_Format_Library/packages.config
index 6b8deb9c..40f6789f 100644
--- a/File_Format_Library/packages.config
+++ b/File_Format_Library/packages.config
@@ -1,3 +1,5 @@
+
+
\ No newline at end of file
diff --git a/Switch_Toolbox_Library/FileFormats/DDS/RGBAPixelDecoder.cs b/Switch_Toolbox_Library/FileFormats/DDS/RGBAPixelDecoder.cs
index 83e15325..1c9767b5 100644
--- a/Switch_Toolbox_Library/FileFormats/DDS/RGBAPixelDecoder.cs
+++ b/Switch_Toolbox_Library/FileFormats/DDS/RGBAPixelDecoder.cs
@@ -47,6 +47,8 @@ namespace Toolbox.Library
uint bpp = STGenericTexture.GetBytesPerPixel(format);
int size = width * height * 4;
+ bpp = (uint)(data.Length / (width * height));
+
byte[] output = new byte[size];
int inPos = 0;
@@ -54,6 +56,10 @@ namespace Toolbox.Library
byte[] compSel = new byte[4] {0,1,2,3 };
+ if (format == TEX_FORMAT.L8 || format == TEX_FORMAT.LA8)
+ compSel = new byte[4] { 0, 0, 0, 1 };
+
+
for (int Y = 0; Y < height; Y++)
{
for (int X = 0; X < width; X++)
diff --git a/Switch_Toolbox_Library/Forms/Archive/ArchiveFilePanel.cs b/Switch_Toolbox_Library/Forms/Archive/ArchiveFilePanel.cs
index dea11d67..eda17c58 100644
--- a/Switch_Toolbox_Library/Forms/Archive/ArchiveFilePanel.cs
+++ b/Switch_Toolbox_Library/Forms/Archive/ArchiveFilePanel.cs
@@ -15,6 +15,7 @@ namespace Toolbox.Library.Forms
public partial class ArchiveFilePanel : UserControl
{
ArchiveFileInfo ArchiveFileInfo;
+ IArchiveFile ArchiveFile;
private bool _IsLoaded = false;
@@ -27,6 +28,12 @@ namespace Toolbox.Library.Forms
saveBtn.Visible = false;
}
+ public void LoadFile(ArchiveFileInfo archiveFileInfo, IArchiveFile archiveFile)
+ {
+ ArchiveFileInfo = archiveFileInfo;
+ ArchiveFile = archiveFile;
+ }
+
public void LoadFile(ArchiveFileInfo archiveFileInfo)
{
ArchiveFileInfo = archiveFileInfo;
@@ -89,6 +96,9 @@ namespace Toolbox.Library.Forms
return;
}
+ if (File.IFileInfo != null && ArchiveFile != null)
+ File.IFileInfo.ArchiveParent = ArchiveFile;
+
ArchiveFileInfo.FileFormat = File;
SetEditorForm(File);
}
diff --git a/Switch_Toolbox_Library/Forms/Custom/DropdownPanel/STCollapsePanelButton.Designer.cs b/Switch_Toolbox_Library/Forms/Custom/DropdownPanel/STCollapsePanelButton.Designer.cs
index a66bb0d7..2fb82676 100644
--- a/Switch_Toolbox_Library/Forms/Custom/DropdownPanel/STCollapsePanelButton.Designer.cs
+++ b/Switch_Toolbox_Library/Forms/Custom/DropdownPanel/STCollapsePanelButton.Designer.cs
@@ -42,7 +42,7 @@
//
this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)));
- this.pictureBox1.Image = global::Toolbox.Library.Properties.Resources.arrowMinimize_;
+ this.pictureBox1.Image = global::Toolbox.Library.Properties.Resources.arrowMinimize;
this.pictureBox1.Location = new System.Drawing.Point(0, 0);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(30, 18);
diff --git a/Switch_Toolbox_Library/Forms/Custom/FlatTabControl/FlatTabControl.cs b/Switch_Toolbox_Library/Forms/Custom/FlatTabControl/FlatTabControl.cs
index 21253e2d..4e9710cc 100644
--- a/Switch_Toolbox_Library/Forms/Custom/FlatTabControl/FlatTabControl.cs
+++ b/Switch_Toolbox_Library/Forms/Custom/FlatTabControl/FlatTabControl.cs
@@ -399,6 +399,18 @@ namespace FlatTabControl
private void FlatTabControl_SelectedIndexChanged(object sender, EventArgs e)
{
+ foreach (TabPage tpCheck in TabPages)
+ {
+ tpCheck.BackColor = FormThemes.BaseTheme.TabPageInactive;
+ tpCheck.ForeColor = FormThemes.BaseTheme.DisabledItemColor;
+ }
+
+ if (SelectedTab != null)
+ {
+ SelectedTab.BackColor = FormThemes.BaseTheme.TabPageActive;
+ SelectedTab.ForeColor = FormThemes.BaseTheme.TextForeColor;
+ }
+
UpdateUpDown();
Invalidate(); // we need to update border and background colors
}
diff --git a/Switch_Toolbox_Library/Forms/Custom/STTabControl.cs b/Switch_Toolbox_Library/Forms/Custom/STTabControl.cs
index f59fc060..e6569470 100644
--- a/Switch_Toolbox_Library/Forms/Custom/STTabControl.cs
+++ b/Switch_Toolbox_Library/Forms/Custom/STTabControl.cs
@@ -10,10 +10,9 @@ namespace Toolbox.Library.Forms
{
public class STTabControl : FlatTabControl.FlatTabControl
{
- public STTabControl()
+ public STTabControl() : base()
{
myBackColor = FormThemes.BaseTheme.FormBackColor;
-
InitializeComponent();
}
diff --git a/Switch_Toolbox_Library/Forms/Editors/Object Editor/ObjectEditorTree.Designer.cs b/Switch_Toolbox_Library/Forms/Editors/Object Editor/ObjectEditorTree.Designer.cs
index af6d6743..64fe588a 100644
--- a/Switch_Toolbox_Library/Forms/Editors/Object Editor/ObjectEditorTree.Designer.cs
+++ b/Switch_Toolbox_Library/Forms/Editors/Object Editor/ObjectEditorTree.Designer.cs
@@ -29,28 +29,31 @@
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
- this.splitter1 = new System.Windows.Forms.Splitter();
- this.stPanel2 = new Toolbox.Library.Forms.STPanel();
- this.stPanel1 = new Toolbox.Library.Forms.STPanel();
+ this.splitContainer2 = new System.Windows.Forms.SplitContainer();
+ this.stPanel5 = new Toolbox.Library.Forms.STPanel();
this.nodeSizeCB = new Toolbox.Library.Forms.STComboBox();
- this.stPanel4 = new Toolbox.Library.Forms.STPanel();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.treeViewCustom1 = new Toolbox.Library.TreeViewCustom();
this.stToolStrip1 = new Toolbox.Library.Forms.STToolStrip();
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
this.searchFormToolStrip = new System.Windows.Forms.ToolStripButton();
this.stPanel3 = new Toolbox.Library.Forms.STPanel();
- this.searchImgPB = new System.Windows.Forms.PictureBox();
this.activeEditorChkBox = new Toolbox.Library.Forms.STCheckBox();
+ this.searchImgPB = new System.Windows.Forms.PictureBox();
this.objectEditorMenu = new Toolbox.Library.Forms.STMenuStrip();
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.sortToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.dockSearchListToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.stPanel2 = new Toolbox.Library.Forms.STPanel();
+ this.btnPanelDisplay = new Toolbox.Library.Forms.STButton();
this.treeNodeContextMenu = new Toolbox.Library.Forms.STContextMenuStrip(this.components);
- this.stPanel1.SuspendLayout();
- this.stPanel4.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+ this.splitContainer2.Panel1.SuspendLayout();
+ this.splitContainer2.Panel2.SuspendLayout();
+ this.splitContainer2.SuspendLayout();
+ this.stPanel5.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
@@ -60,36 +63,36 @@
this.objectEditorMenu.SuspendLayout();
this.SuspendLayout();
//
- // splitter1
+ // splitContainer2
//
- this.splitter1.Location = new System.Drawing.Point(314, 0);
- this.splitter1.Name = "splitter1";
- this.splitter1.Size = new System.Drawing.Size(3, 542);
- this.splitter1.TabIndex = 13;
- this.splitter1.TabStop = false;
- this.splitter1.LocationChanged += new System.EventHandler(this.splitter1_LocationChanged);
- this.splitter1.Resize += new System.EventHandler(this.splitter1_Resize);
+ this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+ this.splitContainer2.Location = new System.Drawing.Point(0, 0);
+ this.splitContainer2.Name = "splitContainer2";
//
- // stPanel2
+ // splitContainer2.Panel1
//
- this.stPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
- this.stPanel2.Location = new System.Drawing.Point(314, 0);
- this.stPanel2.Name = "stPanel2";
- this.stPanel2.Size = new System.Drawing.Size(593, 542);
- this.stPanel2.TabIndex = 12;
+ this.splitContainer2.Panel1.Controls.Add(this.stPanel5);
//
- // stPanel1
+ // splitContainer2.Panel2
//
- this.stPanel1.Controls.Add(this.nodeSizeCB);
- this.stPanel1.Controls.Add(this.stPanel4);
- this.stPanel1.Controls.Add(this.stToolStrip1);
- this.stPanel1.Controls.Add(this.stPanel3);
- this.stPanel1.Dock = System.Windows.Forms.DockStyle.Left;
- this.stPanel1.Location = new System.Drawing.Point(0, 0);
- this.stPanel1.Name = "stPanel1";
- this.stPanel1.Size = new System.Drawing.Size(314, 542);
- this.stPanel1.TabIndex = 11;
- this.stPanel1.Resize += new System.EventHandler(this.stPanel1_Resize);
+ this.splitContainer2.Panel2.Controls.Add(this.stPanel2);
+ this.splitContainer2.Panel2.Controls.Add(this.btnPanelDisplay);
+ this.splitContainer2.Size = new System.Drawing.Size(907, 542);
+ this.splitContainer2.SplitterDistance = 302;
+ this.splitContainer2.TabIndex = 14;
+ //
+ // stPanel5
+ //
+ this.stPanel5.Controls.Add(this.nodeSizeCB);
+ this.stPanel5.Controls.Add(this.splitContainer1);
+ this.stPanel5.Controls.Add(this.stToolStrip1);
+ this.stPanel5.Controls.Add(this.stPanel3);
+ this.stPanel5.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.stPanel5.Location = new System.Drawing.Point(0, 0);
+ this.stPanel5.Name = "stPanel5";
+ this.stPanel5.Size = new System.Drawing.Size(302, 542);
+ this.stPanel5.TabIndex = 2;
//
// nodeSizeCB
//
@@ -99,35 +102,28 @@
this.nodeSizeCB.ButtonColor = System.Drawing.Color.Empty;
this.nodeSizeCB.FormattingEnabled = true;
this.nodeSizeCB.IsReadOnly = false;
- this.nodeSizeCB.Location = new System.Drawing.Point(172, 29);
+ this.nodeSizeCB.Location = new System.Drawing.Point(138, 26);
this.nodeSizeCB.Name = "nodeSizeCB";
- this.nodeSizeCB.Size = new System.Drawing.Size(136, 21);
+ this.nodeSizeCB.Size = new System.Drawing.Size(144, 21);
this.nodeSizeCB.TabIndex = 5;
this.nodeSizeCB.SelectedIndexChanged += new System.EventHandler(this.nodeSizeCB_SelectedIndexChanged);
//
- // stPanel4
- //
- this.stPanel4.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.stPanel4.Controls.Add(this.splitContainer1);
- this.stPanel4.Location = new System.Drawing.Point(3, 54);
- this.stPanel4.Name = "stPanel4";
- this.stPanel4.Size = new System.Drawing.Size(305, 485);
- this.stPanel4.TabIndex = 4;
- //
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
- this.splitContainer1.Location = new System.Drawing.Point(0, 0);
+ this.splitContainer1.Location = new System.Drawing.Point(0, 51);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
+ //
+ // splitContainer1.Panel1
+ //
+ this.splitContainer1.Panel1.Resize += new System.EventHandler(this.splitContainer1_Panel1_Resize);
this.splitContainer1.Panel1Collapsed = true;
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.treeViewCustom1);
- this.splitContainer1.Size = new System.Drawing.Size(305, 485);
+ this.splitContainer1.Size = new System.Drawing.Size(302, 491);
this.splitContainer1.SplitterDistance = 201;
this.splitContainer1.TabIndex = 1;
//
@@ -142,7 +138,7 @@
this.treeViewCustom1.Location = new System.Drawing.Point(0, 0);
this.treeViewCustom1.Name = "treeViewCustom1";
this.treeViewCustom1.SelectedImageIndex = 0;
- this.treeViewCustom1.Size = new System.Drawing.Size(305, 485);
+ this.treeViewCustom1.Size = new System.Drawing.Size(302, 491);
this.treeViewCustom1.TabIndex = 0;
this.treeViewCustom1.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treeViewCustom1_AfterCheck);
this.treeViewCustom1.AfterCollapse += new System.Windows.Forms.TreeViewEventHandler(this.treeViewCustom1_AfterCollapse);
@@ -166,7 +162,7 @@
this.searchFormToolStrip});
this.stToolStrip1.Location = new System.Drawing.Point(0, 26);
this.stToolStrip1.Name = "stToolStrip1";
- this.stToolStrip1.Size = new System.Drawing.Size(314, 25);
+ this.stToolStrip1.Size = new System.Drawing.Size(302, 25);
this.stToolStrip1.TabIndex = 3;
this.stToolStrip1.Text = "stToolStrip1";
//
@@ -183,7 +179,7 @@
// searchFormToolStrip
//
this.searchFormToolStrip.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
- this.searchFormToolStrip.Image = global::Toolbox.Library.Properties.Resources.Antu_edit_find_mail1;
+ this.searchFormToolStrip.Image = global::Toolbox.Library.Properties.Resources.Antu_edit_find_mail_svg;
this.searchFormToolStrip.ImageTransparentColor = System.Drawing.Color.Magenta;
this.searchFormToolStrip.Name = "searchFormToolStrip";
this.searchFormToolStrip.Size = new System.Drawing.Size(23, 22);
@@ -192,31 +188,20 @@
//
// stPanel3
//
- this.stPanel3.Controls.Add(this.searchImgPB);
this.stPanel3.Controls.Add(this.activeEditorChkBox);
+ this.stPanel3.Controls.Add(this.searchImgPB);
this.stPanel3.Controls.Add(this.objectEditorMenu);
this.stPanel3.Dock = System.Windows.Forms.DockStyle.Top;
this.stPanel3.Location = new System.Drawing.Point(0, 0);
this.stPanel3.Name = "stPanel3";
- this.stPanel3.Size = new System.Drawing.Size(314, 26);
+ this.stPanel3.Size = new System.Drawing.Size(302, 26);
this.stPanel3.TabIndex = 2;
//
- // searchImgPB
- //
- this.searchImgPB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.searchImgPB.BackColor = System.Drawing.Color.Transparent;
- this.searchImgPB.Image = global::Toolbox.Library.Properties.Resources.Antu_edit_find_mail_svg;
- this.searchImgPB.Location = new System.Drawing.Point(-654, 5);
- this.searchImgPB.Name = "searchImgPB";
- this.searchImgPB.Size = new System.Drawing.Size(22, 17);
- this.searchImgPB.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
- this.searchImgPB.TabIndex = 1;
- this.searchImgPB.TabStop = false;
- //
// activeEditorChkBox
//
+ this.activeEditorChkBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.activeEditorChkBox.AutoSize = true;
- this.activeEditorChkBox.Location = new System.Drawing.Point(137, 6);
+ this.activeEditorChkBox.Location = new System.Drawing.Point(138, 3);
this.activeEditorChkBox.Name = "activeEditorChkBox";
this.activeEditorChkBox.Size = new System.Drawing.Size(144, 17);
this.activeEditorChkBox.TabIndex = 3;
@@ -224,6 +209,18 @@
this.activeEditorChkBox.UseVisualStyleBackColor = true;
this.activeEditorChkBox.CheckedChanged += new System.EventHandler(this.activeEditorChkBox_CheckedChanged);
//
+ // searchImgPB
+ //
+ this.searchImgPB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.searchImgPB.BackColor = System.Drawing.Color.Transparent;
+ this.searchImgPB.Image = global::Toolbox.Library.Properties.Resources.Antu_edit_find_mail_svg;
+ this.searchImgPB.Location = new System.Drawing.Point(-666, 5);
+ this.searchImgPB.Name = "searchImgPB";
+ this.searchImgPB.Size = new System.Drawing.Size(22, 17);
+ this.searchImgPB.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
+ this.searchImgPB.TabIndex = 1;
+ this.searchImgPB.TabStop = false;
+ //
// objectEditorMenu
//
this.objectEditorMenu.Dock = System.Windows.Forms.DockStyle.Fill;
@@ -232,7 +229,7 @@
this.viewToolStripMenuItem});
this.objectEditorMenu.Location = new System.Drawing.Point(0, 0);
this.objectEditorMenu.Name = "objectEditorMenu";
- this.objectEditorMenu.Size = new System.Drawing.Size(314, 26);
+ this.objectEditorMenu.Size = new System.Drawing.Size(302, 26);
this.objectEditorMenu.TabIndex = 1;
this.objectEditorMenu.Text = "stContextMenuStrip1";
//
@@ -275,6 +272,26 @@
this.dockSearchListToolStripMenuItem.Text = "Dock Search List";
this.dockSearchListToolStripMenuItem.Click += new System.EventHandler(this.dockSearchListToolStripMenuItem_Click);
//
+ // stPanel2
+ //
+ this.stPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.stPanel2.Location = new System.Drawing.Point(14, 0);
+ this.stPanel2.Name = "stPanel2";
+ this.stPanel2.Size = new System.Drawing.Size(587, 542);
+ this.stPanel2.TabIndex = 12;
+ //
+ // btnPanelDisplay
+ //
+ this.btnPanelDisplay.Dock = System.Windows.Forms.DockStyle.Left;
+ this.btnPanelDisplay.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.btnPanelDisplay.Location = new System.Drawing.Point(0, 0);
+ this.btnPanelDisplay.Name = "btnPanelDisplay";
+ this.btnPanelDisplay.Size = new System.Drawing.Size(14, 542);
+ this.btnPanelDisplay.TabIndex = 3;
+ this.btnPanelDisplay.Text = "<";
+ this.btnPanelDisplay.UseVisualStyleBackColor = false;
+ this.btnPanelDisplay.Click += new System.EventHandler(this.btnPanelDisplay_Click);
+ //
// treeNodeContextMenu
//
this.treeNodeContextMenu.Name = "treeNodeContextMenu";
@@ -282,14 +299,15 @@
//
// ObjectEditorTree
//
- this.Controls.Add(this.splitter1);
- this.Controls.Add(this.stPanel2);
- this.Controls.Add(this.stPanel1);
+ this.Controls.Add(this.splitContainer2);
this.Name = "ObjectEditorTree";
this.Size = new System.Drawing.Size(907, 542);
- this.stPanel1.ResumeLayout(false);
- this.stPanel1.PerformLayout();
- this.stPanel4.ResumeLayout(false);
+ this.splitContainer2.Panel1.ResumeLayout(false);
+ this.splitContainer2.Panel2.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+ this.splitContainer2.ResumeLayout(false);
+ this.stPanel5.ResumeLayout(false);
+ this.stPanel5.PerformLayout();
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
@@ -305,10 +323,7 @@
}
#endregion
-
- private System.Windows.Forms.Splitter splitter1;
public STPanel stPanel2;
- private STPanel stPanel1;
private STPanel stPanel3;
private TreeViewCustom treeViewCustom1;
private System.Windows.Forms.PictureBox searchImgPB;
@@ -322,9 +337,11 @@
private STToolStrip stToolStrip1;
private System.Windows.Forms.ToolStripButton searchFormToolStrip;
private System.Windows.Forms.ToolStripButton toolStripButton1;
- private STPanel stPanel4;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.ToolStripMenuItem dockSearchListToolStripMenuItem;
private STComboBox nodeSizeCB;
+ private STPanel stPanel5;
+ private STButton btnPanelDisplay;
+ private System.Windows.Forms.SplitContainer splitContainer2;
}
}
\ No newline at end of file
diff --git a/Switch_Toolbox_Library/Forms/Editors/Object Editor/ObjectEditorTree.cs b/Switch_Toolbox_Library/Forms/Editors/Object Editor/ObjectEditorTree.cs
index ff9e2897..92965213 100644
--- a/Switch_Toolbox_Library/Forms/Editors/Object Editor/ObjectEditorTree.cs
+++ b/Switch_Toolbox_Library/Forms/Editors/Object Editor/ObjectEditorTree.cs
@@ -142,12 +142,14 @@ namespace Toolbox.Library.Forms
{
InitializeComponent();
+ btnPanelDisplay.ForeColor = FormThemes.BaseTheme.DisabledBorderColor;
+
UpdateSearchPanelDockState();
ObjectEditor = objectEditor;
if (Runtime.ObjectEditor.ListPanelWidth > 0)
- stPanel1.Width = Runtime.ObjectEditor.ListPanelWidth;
+ splitContainer1.Panel1.Width = Runtime.ObjectEditor.ListPanelWidth;
treeViewCustom1.BackColor = FormThemes.BaseTheme.ObjectEditorBackColor;
@@ -589,11 +591,6 @@ namespace Toolbox.Library.Forms
{
}
- private void stPanel1_Resize(object sender, EventArgs e)
- {
- Runtime.ObjectEditor.ListPanelWidth = stPanel1.Width;
- }
-
private void activeEditorChkBox_CheckedChanged(object sender, EventArgs e)
{
AddFilesToActiveEditor = activeEditorChkBox.Checked;
@@ -860,5 +857,26 @@ namespace Toolbox.Library.Forms
treeViewCustom1.EndUpdate();
}
}
+
+ private bool DisplayEditor = true;
+ private void btnPanelDisplay_Click(object sender, EventArgs e)
+ {
+ if (DisplayEditor) {
+ splitContainer2.Panel1Collapsed = true;
+ splitContainer2.Panel1.Hide();
+ DisplayEditor = false;
+ btnPanelDisplay.Text = ">";
+ }
+ else {
+ splitContainer2.Panel1Collapsed = false;
+ splitContainer2.Panel1.Show();
+ DisplayEditor = true;
+ btnPanelDisplay.Text = "<";
+ }
+ }
+
+ private void splitContainer1_Panel1_Resize(object sender, EventArgs e) {
+ Runtime.ObjectEditor.ListPanelWidth = splitContainer1.Panel1.Width;
+ }
}
}
diff --git a/Switch_Toolbox_Library/Generics/Texture/GenericTexture.cs b/Switch_Toolbox_Library/Generics/Texture/GenericTexture.cs
index 7e4f0669..1fb28583 100644
--- a/Switch_Toolbox_Library/Generics/Texture/GenericTexture.cs
+++ b/Switch_Toolbox_Library/Generics/Texture/GenericTexture.cs
@@ -486,6 +486,8 @@ namespace Toolbox.Library
if (data == null)
throw new Exception("Data is null!");
+ Console.WriteLine("Decoding " + Format + " " + Runtime.UseDirectXTexDecoder);
+
if (PlatformSwizzle == PlatformSwizzle.Platform_3DS && !IsCompressed(Format))
{
var Image = BitmapExtension.GetBitmap(ConvertBgraToRgba(CTR_3DS.DecodeBlock(data, (int)width, (int)height, Format)),
@@ -513,13 +515,14 @@ namespace Toolbox.Library
case TEX_FORMAT.ETC1_A4:
return BitmapExtension.GetBitmap(ETC1.ETC1Decompress(data, (int)width, (int)height, true),
(int)width, (int)height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
+ case TEX_FORMAT.L8:
+ return BitmapExtension.GetBitmap(RGBAPixelDecoder.Decode(data, (int)width, (int)height, Format),
+ (int)width, (int)height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
case TEX_FORMAT.LA8:
return BitmapExtension.GetBitmap(RGBAPixelDecoder.Decode(data, (int)width, (int)height, Format),
(int)width, (int)height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
}
- Console.WriteLine("Decoding " + Format + " " + Runtime.UseDirectXTexDecoder);
-
if (Runtime.UseDirectXTexDecoder)
{
return BitmapExtension.GetBitmap(DecodeBlock(data, width, height, Format, new byte[0], Parameters),
@@ -627,6 +630,11 @@ namespace Toolbox.Library
if (Format == TEX_FORMAT.BC5_SNORM)
imageData = DDSCompressor.DecompressBC5(data, (int)Width, (int)Height, true, true);
+ if (Format == TEX_FORMAT.L8)
+ return RGBAPixelDecoder.Decode(data, (int)Width, (int)Height, Format);
+ if (Format == TEX_FORMAT.LA8)
+ return RGBAPixelDecoder.Decode(data, (int)Width, (int)Height, Format);
+
if (IsCompressed(Format))
imageData = DDSCompressor.DecompressBlock(data, (int)Width, (int)Height, (DDS.DXGI_FORMAT)Format);
else
diff --git a/Switch_Toolbox_Library/IO/Extensions/IOExtensions.cs b/Switch_Toolbox_Library/IO/Extensions/IOExtensions.cs
index 80997a47..0a30b026 100644
--- a/Switch_Toolbox_Library/IO/Extensions/IOExtensions.cs
+++ b/Switch_Toolbox_Library/IO/Extensions/IOExtensions.cs
@@ -15,6 +15,18 @@ namespace Toolbox.Library.IO
{
public static class IOExtensions
{
+ public static OpenTK.Vector2 ToTKVector2(this Syroot.Maths.Vector2F vec2) {
+ return new OpenTK.Vector2(vec2.X, vec2.Y);
+ }
+
+ public static OpenTK.Vector3 ToTKVector3(this Syroot.Maths.Vector3F vec3) {
+ return new OpenTK.Vector3(vec3.X, vec3.Y, vec3.Z);
+ }
+
+ public static OpenTK.Vector4 ToTKVector4(this Syroot.Maths.Vector4F vec4) {
+ return new OpenTK.Vector4(vec4.X, vec4.Y, vec4.Z, vec4.W);
+ }
+
public static byte[] DeserializeToBytes(this T structure) where T : struct
{
using (MemoryStream stream = new MemoryStream())
diff --git a/Switch_Toolbox_Library/IO/STFileLoader.cs b/Switch_Toolbox_Library/IO/STFileLoader.cs
index 832f320d..95ebb1d8 100644
--- a/Switch_Toolbox_Library/IO/STFileLoader.cs
+++ b/Switch_Toolbox_Library/IO/STFileLoader.cs
@@ -45,12 +45,14 @@ namespace Toolbox.Library.IO
foreach (IFileFormat fileFormat in FileManager.GetFileFormats())
{
fileFormat.FileName = Path.GetFileName(FileName);
- fileFormat.IFileInfo = new IFileInfo();
foreach (Type type in FileTypes)
{
if (fileFormat.Identify(stream) && fileFormat.GetType() == type)
+ {
+ fileFormat.IFileInfo = new IFileInfo();
return OpenFileFormat(FileName, data);
+ }
}
}
@@ -335,10 +337,10 @@ namespace Toolbox.Library.IO
//Most is by magic but some can be extension or name.
fileFormat.FileName = Path.GetFileName(FileName);
- fileFormat.IFileInfo = new IFileInfo();
if (fileFormat.Identify(stream))
{
+ fileFormat.IFileInfo = new IFileInfo();
fileFormat.IFileInfo.DecompressedSize = DecompressedFileSize;
fileFormat.IFileInfo.CompressedSize = CompressedFileSize;
return SetFileFormat(fileFormat, FileName, stream, LeaveStreamOpen, InArchive, archiveNode, Compressed, CompType);
diff --git a/Switch_Toolbox_Library/Interfaces/FileFormatting/IArchiveFile.cs b/Switch_Toolbox_Library/Interfaces/FileFormatting/IArchiveFile.cs
index 0c2fbf51..46607b37 100644
--- a/Switch_Toolbox_Library/Interfaces/FileFormatting/IArchiveFile.cs
+++ b/Switch_Toolbox_Library/Interfaces/FileFormatting/IArchiveFile.cs
@@ -79,6 +79,9 @@ namespace Toolbox.Library
[Browsable(false)]
public virtual IFileFormat OpenFile()
{
+ if (FileFormat != null)
+ return FileFormat;
+
if (FileDataStream != null)
{
return STFileLoader.OpenFileFormat(FileDataStream,
@@ -881,10 +884,13 @@ namespace Toolbox.Library
if (file == null) //Format not supported so return
return;
+ if (file.IFileInfo != null)
+ file.IFileInfo.ArchiveParent = ArchiveFile;
+
if (Utils.HasInterface(file.GetType(), typeof(IEditor<>)))
- {
+ OpenControlDialog(file);
+ else if (Utils.HasInterface(file.GetType(), typeof(IEditorForm<>)))
OpenFormDialog(file);
- }
else if (file is IArchiveFile)
{
if (ArchiveFileInfo.FileFormat != null)
@@ -912,9 +918,35 @@ namespace Toolbox.Library
ArchiveFileInfo.FileFormat = file;
}
- private void OpenFormDialog(IFileFormat fileFormat)
+ private static Form activeForm;
+ public void OpenFormDialog(IFileFormat fileFormat)
{
- UserControl form = GetEditorForm(fileFormat);
+ if (activeForm != null)
+ {
+ activeForm.Text = (((IFileFormat)fileFormat).FileName);
+ System.Reflection.MethodInfo methodFill = fileFormat.GetType().GetMethod("FillEditor");
+ methodFill.Invoke(fileFormat, new object[1] { activeForm });
+ }
+ else
+ {
+ activeForm = GetEditorForm(fileFormat);
+ activeForm.Text = (((IFileFormat)fileFormat).FileName);
+ activeForm.Show();
+ }
+
+ /* if (form.ShowDialog() == DialogResult.OK)
+ {
+ if (fileFormat.CanSave)
+ {
+ ArchiveFileInfo.SaveFileFormat();
+ UpdateEditor();
+ }
+ }*/
+ }
+
+ private void OpenControlDialog(IFileFormat fileFormat)
+ {
+ UserControl form = GetEditorControl(fileFormat);
form.Text = (((IFileFormat)fileFormat).FileName);
var parentForm = LibraryGUI.GetActiveForm();
@@ -937,7 +969,21 @@ namespace Toolbox.Library
return;
}
- public UserControl GetEditorForm(IFileFormat fileFormat)
+ public Form GetEditorForm(IFileFormat fileFormat)
+ {
+ Type objectType = fileFormat.GetType();
+ foreach (var inter in objectType.GetInterfaces())
+ {
+ if (inter.IsGenericType && inter.GetGenericTypeDefinition() == typeof(IEditorForm<>))
+ {
+ System.Reflection.MethodInfo method = objectType.GetMethod("OpenForm");
+ return (Form)method.Invoke(fileFormat, new object[0]);
+ }
+ }
+ return null;
+ }
+
+ public UserControl GetEditorControl(IFileFormat fileFormat)
{
Type objectType = fileFormat.GetType();
foreach (var inter in objectType.GetInterfaces())
@@ -965,7 +1011,7 @@ namespace Toolbox.Library
LibraryGUI.LoadEditor(editor);
}
- editor.LoadFile(ArchiveFileInfo);
+ editor.LoadFile(ArchiveFileInfo, ArchiveFile);
editor.UpdateEditor();
}
diff --git a/Switch_Toolbox_Library/Interfaces/FileFormatting/IFileFormat.cs b/Switch_Toolbox_Library/Interfaces/FileFormatting/IFileFormat.cs
index 164e98d5..ac10d69e 100644
--- a/Switch_Toolbox_Library/Interfaces/FileFormatting/IFileFormat.cs
+++ b/Switch_Toolbox_Library/Interfaces/FileFormatting/IFileFormat.cs
@@ -57,6 +57,7 @@ namespace Toolbox.Library
public class IFileInfo
{
public CompressionType CompressionType { get; set; }
+ public IArchiveFile ArchiveParent { get; set; }
public bool FileIsCompressed { get; set; }
public bool FileIsEdited { get; set; }
public bool UseEditMenu { get; set; }
diff --git a/Switch_Toolbox_Library/Properties/Resources.Designer.cs b/Switch_Toolbox_Library/Properties/Resources.Designer.cs
index eae92f12..ff980afa 100644
--- a/Switch_Toolbox_Library/Properties/Resources.Designer.cs
+++ b/Switch_Toolbox_Library/Properties/Resources.Designer.cs
@@ -105,17 +105,7 @@ namespace Toolbox.Library.Properties {
///
public static System.Drawing.Bitmap Antu_edit_find_mail_svg {
get {
- object obj = ResourceManager.GetObject("Antu_edit-find-mail.svg", resourceCulture);
- return ((System.Drawing.Bitmap)(obj));
- }
- }
-
- ///
- /// Looks up a localized resource of type System.Drawing.Bitmap.
- ///
- public static System.Drawing.Bitmap Antu_edit_find_mail1 {
- get {
- object obj = ResourceManager.GetObject("Antu_edit-find-mail1", resourceCulture);
+ object obj = ResourceManager.GetObject("Antu_edit_find_mail_svg", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
@@ -133,9 +123,9 @@ namespace Toolbox.Library.Properties {
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
- public static System.Drawing.Bitmap arrowMinimize_ {
+ public static System.Drawing.Bitmap arrowMinimize {
get {
- object obj = ResourceManager.GetObject("arrowMinimize ", resourceCulture);
+ object obj = ResourceManager.GetObject("arrowMinimize", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
diff --git a/Switch_Toolbox_Library/Properties/Resources.resx b/Switch_Toolbox_Library/Properties/Resources.resx
index 038e04eb..15e2a93b 100644
--- a/Switch_Toolbox_Library/Properties/Resources.resx
+++ b/Switch_Toolbox_Library/Properties/Resources.resx
@@ -211,9 +211,6 @@
..\Resources\maximize.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\Antu_edit-find-mail.svg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
..\Resources\CheckBox\CheckClicked.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
@@ -316,9 +313,6 @@
..\Resources\LoadingImage.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\Antu_edit-find-mail.svg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
..\Resources\InjectTexErrored.dds;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
@@ -352,9 +346,6 @@
..\Resources\materialSphereTransparent.tif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\arrowMinimize .png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
..\Resources\UVPattern.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
@@ -385,4 +376,10 @@
..\Resources\AddIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\Antu_edit-find-mail.svg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\arrowMinimize .png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
\ No newline at end of file
diff --git a/Switch_Toolbox_Library/Toolbox_Library.csproj b/Switch_Toolbox_Library/Toolbox_Library.csproj
index 7a06e7d0..696e6939 100644
--- a/Switch_Toolbox_Library/Toolbox_Library.csproj
+++ b/Switch_Toolbox_Library/Toolbox_Library.csproj
@@ -1317,6 +1317,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Toolbox/Lib/Plugins/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll b/Toolbox/Lib/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll
similarity index 81%
rename from Toolbox/Lib/Plugins/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll
rename to Toolbox/Lib/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll
index 9f9703c5..041e1815 100644
Binary files a/Toolbox/Lib/Plugins/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll and b/Toolbox/Lib/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll differ
diff --git a/Toolbox/Lib/WeifenLuo.WinFormsUI.Docking.dll b/Toolbox/Lib/WeifenLuo.WinFormsUI.Docking.dll
index 4da5cdd4..dfe045e9 100644
Binary files a/Toolbox/Lib/WeifenLuo.WinFormsUI.Docking.dll and b/Toolbox/Lib/WeifenLuo.WinFormsUI.Docking.dll differ
diff --git a/Toolbox/MainForm.Designer.cs b/Toolbox/MainForm.Designer.cs
index 78c55714..a5b5d90b 100644
--- a/Toolbox/MainForm.Designer.cs
+++ b/Toolbox/MainForm.Designer.cs
@@ -35,6 +35,7 @@
this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.newFromFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.openFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.recentToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -70,7 +71,6 @@
this.stToolStrip1 = new Toolbox.Library.Forms.STToolStrip();
this.saveToolStripButton = new System.Windows.Forms.ToolStripButton();
this.updateToolstrip = new System.Windows.Forms.ToolStripButton();
- this.openFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.menuStrip1.SuspendLayout();
this.stPanel1.SuspendLayout();
this.tabControlContextMenuStrip.SuspendLayout();
@@ -119,33 +119,40 @@
// newToolStripMenuItem
//
this.newToolStripMenuItem.Name = "newToolStripMenuItem";
- this.newToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.newToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.newToolStripMenuItem.Text = "New";
//
// newFromFileToolStripMenuItem
//
this.newFromFileToolStripMenuItem.Name = "newFromFileToolStripMenuItem";
- this.newFromFileToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.newFromFileToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.newFromFileToolStripMenuItem.Text = "New From File";
//
// openToolStripMenuItem
//
this.openToolStripMenuItem.Name = "openToolStripMenuItem";
- this.openToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.openToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.openToolStripMenuItem.Text = "Open";
this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click);
//
+ // openFolderToolStripMenuItem
+ //
+ this.openFolderToolStripMenuItem.Name = "openFolderToolStripMenuItem";
+ this.openFolderToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
+ this.openFolderToolStripMenuItem.Text = "Open (Folder)";
+ this.openFolderToolStripMenuItem.Click += new System.EventHandler(this.openFolderToolStripMenuItem_Click);
+ //
// recentToolStripMenuItem
//
this.recentToolStripMenuItem.Name = "recentToolStripMenuItem";
- this.recentToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.recentToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.recentToolStripMenuItem.Text = "Recent";
//
// saveToolStripMenuItem
//
this.saveToolStripMenuItem.Enabled = false;
this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
- this.saveToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.saveToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.saveToolStripMenuItem.Text = "Save";
this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click);
//
@@ -153,14 +160,14 @@
//
this.saveAsToolStripMenuItem.Enabled = false;
this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem";
- this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.saveAsToolStripMenuItem.Text = "Save As";
this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.saveAsToolStripMenuItem_Click);
//
// exitToolStripMenuItem
//
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
- this.exitToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.exitToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
this.exitToolStripMenuItem.Text = "Exit";
this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
//
@@ -328,7 +335,7 @@
// tabForms
//
this.tabForms.Dock = System.Windows.Forms.DockStyle.Top;
- this.tabForms.Location = new System.Drawing.Point(0, 55);
+ this.tabForms.Location = new System.Drawing.Point(0, 49);
this.tabForms.myBackColor = System.Drawing.Color.Empty;
this.tabForms.Name = "tabForms";
this.tabForms.SelectedIndex = 0;
@@ -361,7 +368,7 @@
this.stPanel2.Dock = System.Windows.Forms.DockStyle.Top;
this.stPanel2.Location = new System.Drawing.Point(0, 25);
this.stPanel2.Name = "stPanel2";
- this.stPanel2.Size = new System.Drawing.Size(1108, 30);
+ this.stPanel2.Size = new System.Drawing.Size(1108, 24);
this.stPanel2.TabIndex = 7;
//
// BtnMdiMinimize
@@ -371,7 +378,7 @@
this.BtnMdiMinimize.Image = ((System.Drawing.Image)(resources.GetObject("BtnMdiMinimize.Image")));
this.BtnMdiMinimize.Location = new System.Drawing.Point(991, 2);
this.BtnMdiMinimize.Name = "BtnMdiMinimize";
- this.BtnMdiMinimize.Size = new System.Drawing.Size(38, 25);
+ this.BtnMdiMinimize.Size = new System.Drawing.Size(38, 22);
this.BtnMdiMinimize.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.BtnMdiMinimize.TabIndex = 6;
this.BtnMdiMinimize.TabStop = false;
@@ -386,7 +393,7 @@
this.BtnMdiMinMax.Image = ((System.Drawing.Image)(resources.GetObject("BtnMdiMinMax.Image")));
this.BtnMdiMinMax.Location = new System.Drawing.Point(1029, 2);
this.BtnMdiMinMax.Name = "BtnMdiMinMax";
- this.BtnMdiMinMax.Size = new System.Drawing.Size(38, 25);
+ this.BtnMdiMinMax.Size = new System.Drawing.Size(38, 22);
this.BtnMdiMinMax.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.BtnMdiMinMax.TabIndex = 5;
this.BtnMdiMinMax.TabStop = false;
@@ -401,7 +408,7 @@
this.BtnMdiClose.Image = ((System.Drawing.Image)(resources.GetObject("BtnMdiClose.Image")));
this.BtnMdiClose.Location = new System.Drawing.Point(1067, 2);
this.BtnMdiClose.Name = "BtnMdiClose";
- this.BtnMdiClose.Size = new System.Drawing.Size(38, 25);
+ this.BtnMdiClose.Size = new System.Drawing.Size(38, 22);
this.BtnMdiClose.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
this.BtnMdiClose.TabIndex = 4;
this.BtnMdiClose.TabStop = false;
@@ -417,7 +424,7 @@
this.updateToolstrip});
this.stToolStrip1.Location = new System.Drawing.Point(0, 0);
this.stToolStrip1.Name = "stToolStrip1";
- this.stToolStrip1.Size = new System.Drawing.Size(1108, 30);
+ this.stToolStrip1.Size = new System.Drawing.Size(1108, 24);
this.stToolStrip1.TabIndex = 0;
this.stToolStrip1.Text = "stToolStrip1";
//
@@ -428,7 +435,7 @@
this.saveToolStripButton.Image = global::Toolbox.Properties.Resources.Save;
this.saveToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this.saveToolStripButton.Name = "saveToolStripButton";
- this.saveToolStripButton.Size = new System.Drawing.Size(23, 27);
+ this.saveToolStripButton.Size = new System.Drawing.Size(23, 21);
this.saveToolStripButton.Text = "saveToolStripButton1";
this.saveToolStripButton.ToolTipText = "Save File";
this.saveToolStripButton.Click += new System.EventHandler(this.saveToolStripButton_Click);
@@ -440,18 +447,11 @@
this.updateToolstrip.Image = global::Toolbox.Properties.Resources.UpdateIcon;
this.updateToolstrip.ImageTransparentColor = System.Drawing.Color.Magenta;
this.updateToolstrip.Name = "updateToolstrip";
- this.updateToolstrip.Size = new System.Drawing.Size(23, 27);
+ this.updateToolstrip.Size = new System.Drawing.Size(23, 21);
this.updateToolstrip.Text = "toolStripButton1";
this.updateToolstrip.ToolTipText = "Update Tool";
this.updateToolstrip.Click += new System.EventHandler(this.updateToolstrip_Click);
//
- // openFolderToolStripMenuItem
- //
- this.openFolderToolStripMenuItem.Name = "openFolderToolStripMenuItem";
- this.openFolderToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
- this.openFolderToolStripMenuItem.Text = "Open (Folder)";
- this.openFolderToolStripMenuItem.Click += new System.EventHandler(this.openFolderToolStripMenuItem_Click);
- //
// MainForm
//
this.AllowDrop = true;
diff --git a/Toolbox/MainForm.cs b/Toolbox/MainForm.cs
index ff7f5e4a..8849857e 100644
--- a/Toolbox/MainForm.cs
+++ b/Toolbox/MainForm.cs
@@ -308,7 +308,6 @@ namespace Toolbox
var form = (Form)method.Invoke(file, new object[0]);
TabDupeIndex = 0;
form.Text = CheckTabDupes(((IFileFormat)file).FileName);
- form.MdiParent = this;
form.Show();
HasEditorActive = true;
diff --git a/Toolbox/Toolbox.csproj b/Toolbox/Toolbox.csproj
index 3591a8d2..bd8a6c16 100644
--- a/Toolbox/Toolbox.csproj
+++ b/Toolbox/Toolbox.csproj
@@ -503,6 +503,9 @@
PreserveNewest
+
+ PreserveNewest
+
PreserveNewest
diff --git a/packages/DockPanelSuite.3.0.6/.signature.p7s b/packages/DockPanelSuite.3.0.6/.signature.p7s
new file mode 100644
index 00000000..591e4934
Binary files /dev/null and b/packages/DockPanelSuite.3.0.6/.signature.p7s differ
diff --git a/packages/DockPanelSuite.3.0.6/DockPanelSuite.3.0.6.nupkg b/packages/DockPanelSuite.3.0.6/DockPanelSuite.3.0.6.nupkg
new file mode 100644
index 00000000..80f17b11
Binary files /dev/null and b/packages/DockPanelSuite.3.0.6/DockPanelSuite.3.0.6.nupkg differ
diff --git a/packages/DockPanelSuite.3.0.6/lib/net35-client/WeifenLuo.WinFormsUI.Docking.dll b/packages/DockPanelSuite.3.0.6/lib/net35-client/WeifenLuo.WinFormsUI.Docking.dll
new file mode 100644
index 00000000..e4b2787a
Binary files /dev/null and b/packages/DockPanelSuite.3.0.6/lib/net35-client/WeifenLuo.WinFormsUI.Docking.dll differ
diff --git a/packages/DockPanelSuite.3.0.6/lib/net40/WeifenLuo.WinFormsUI.Docking.dll b/packages/DockPanelSuite.3.0.6/lib/net40/WeifenLuo.WinFormsUI.Docking.dll
new file mode 100644
index 00000000..dfe045e9
Binary files /dev/null and b/packages/DockPanelSuite.3.0.6/lib/net40/WeifenLuo.WinFormsUI.Docking.dll differ
diff --git a/packages/DockPanelSuite.ThemeVS2015.3.0.6/.signature.p7s b/packages/DockPanelSuite.ThemeVS2015.3.0.6/.signature.p7s
new file mode 100644
index 00000000..703a8b88
Binary files /dev/null and b/packages/DockPanelSuite.ThemeVS2015.3.0.6/.signature.p7s differ
diff --git a/packages/DockPanelSuite.ThemeVS2015.3.0.6/DockPanelSuite.ThemeVS2015.3.0.6.nupkg b/packages/DockPanelSuite.ThemeVS2015.3.0.6/DockPanelSuite.ThemeVS2015.3.0.6.nupkg
new file mode 100644
index 00000000..c2b4c391
Binary files /dev/null and b/packages/DockPanelSuite.ThemeVS2015.3.0.6/DockPanelSuite.ThemeVS2015.3.0.6.nupkg differ
diff --git a/packages/DockPanelSuite.ThemeVS2015.3.0.6/lib/net35-client/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll b/packages/DockPanelSuite.ThemeVS2015.3.0.6/lib/net35-client/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll
new file mode 100644
index 00000000..0dbf5f40
Binary files /dev/null and b/packages/DockPanelSuite.ThemeVS2015.3.0.6/lib/net35-client/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll differ
diff --git a/packages/DockPanelSuite.ThemeVS2015.3.0.6/lib/net40/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll b/packages/DockPanelSuite.ThemeVS2015.3.0.6/lib/net40/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll
new file mode 100644
index 00000000..041e1815
Binary files /dev/null and b/packages/DockPanelSuite.ThemeVS2015.3.0.6/lib/net40/WeifenLuo.WinFormsUI.Docking.ThemeVS2015.dll differ