diff --git a/.editorconfig b/.editorconfig
index 36b0a88c..6ebb4863 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -9,12 +9,35 @@ insert_final_newline = true
trim_trailing_whitespace = true
end_of_line = lf
+# Solution Files
+[*.sln]
+indent_style = space
+indent_size = 4
+insert_final_newline = true
+trim_trailing_whitespace = true
+
# XML Project Files
[*.csproj]
+indent_style = space
indent_size = 2
+# Code Files
+[*.fbs]
+insert_final_newline = true
+trim_trailing_whitespace = true
+indent_style = space
+indent_size = 2
+tab_width = 2
+end_of_line = lf
+
# Code Files
[*.cs]
+insert_final_newline = true
+trim_trailing_whitespace = true
+indent_style = space
+indent_size = 4
+tab_width = 4
+end_of_line = lf
csharp_prefer_braces = when_multiline:warning
dotnet_diagnostic.IDE0047.severity = none
dotnet_diagnostic.IDE0048.severity = none
@@ -22,21 +45,6 @@ dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:sug
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:suggest
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:suggest
dotnet_style_parentheses_in_other_operators = always_for_clarity:suggest
-csharp_indent_labels = one_less_than_current
-csharp_using_directive_placement = outside_namespace:silent
-csharp_prefer_simple_using_statement = true:suggestion
-csharp_style_namespace_declarations = block_scoped:silent
-csharp_style_prefer_method_group_conversion = true:silent
-csharp_style_prefer_top_level_statements = true:silent
-csharp_style_prefer_primary_constructors = true:suggestion
-csharp_style_expression_bodied_methods = false:silent
-csharp_style_expression_bodied_constructors = false:silent
-csharp_style_expression_bodied_operators = false:silent
-csharp_style_expression_bodied_properties = true:silent
-csharp_style_expression_bodied_indexers = true:silent
-csharp_style_expression_bodied_accessors = true:silent
-csharp_style_expression_bodied_lambdas = true:silent
-csharp_style_expression_bodied_local_functions = false:silent
# Generated Code
[**/obj/**.cs]
@@ -55,61 +63,5 @@ dotnet_analyzer_diagnostic.severity = none
# Naming rules
-dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
-dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
-dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
-
-dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
-dotnet_naming_rule.types_should_be_pascal_case.symbols = types
-dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
-
-dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
-dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
-dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
-
-# Symbol specifications
-
-dotnet_naming_symbols.interface.applicable_kinds = interface
-dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
-dotnet_naming_symbols.interface.required_modifiers =
-
-dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
-dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
-dotnet_naming_symbols.types.required_modifiers =
-
-dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
-dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
-dotnet_naming_symbols.non_field_members.required_modifiers =
-
-# Naming styles
-
dotnet_naming_style.begins_with_i.required_prefix = I
-dotnet_naming_style.begins_with_i.required_suffix =
-dotnet_naming_style.begins_with_i.word_separator =
-dotnet_naming_style.begins_with_i.capitalization = pascal_case
-
-dotnet_naming_style.pascal_case.required_prefix =
-dotnet_naming_style.pascal_case.required_suffix =
-dotnet_naming_style.pascal_case.word_separator =
-dotnet_naming_style.pascal_case.capitalization = pascal_case
-
-dotnet_naming_style.pascal_case.required_prefix =
-dotnet_naming_style.pascal_case.required_suffix =
-dotnet_naming_style.pascal_case.word_separator =
-dotnet_naming_style.pascal_case.capitalization = pascal_case
-dotnet_style_operator_placement_when_wrapping = beginning_of_line
-dotnet_style_coalesce_expression = true:suggestion
-dotnet_style_null_propagation = true:suggestion
-dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
-dotnet_style_prefer_auto_properties = true:silent
-dotnet_style_object_initializer = true:suggestion
-dotnet_style_collection_initializer = true:suggestion
-dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
-dotnet_style_prefer_conditional_expression_over_assignment = true:silent
-dotnet_style_prefer_conditional_expression_over_return = true:silent
-dotnet_style_explicit_tuple_names = true:suggestion
-dotnet_style_prefer_inferred_tuple_names = true:suggestion
-dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
-dotnet_style_prefer_compound_assignment = true:suggestion
-dotnet_style_prefer_simplified_interpolation = true:suggestion
-dotnet_style_namespace_match_folder = true:suggestion
+dotnet_naming_style.begins_with_i.capitalization = pascal_case
\ No newline at end of file
diff --git a/pkNX.Containers/Misc/FnvHash.cs b/pkNX.Containers/Misc/FnvHash.cs
index 06a2ed0b..a1ba05b3 100644
--- a/pkNX.Containers/Misc/FnvHash.cs
+++ b/pkNX.Containers/Misc/FnvHash.cs
@@ -1,4 +1,4 @@
-using System.Collections.Generic;
+using System;
namespace pkNX.Containers;
@@ -17,7 +17,7 @@ public static class FnvHash
/// Input sequence
/// Initial hash value
/// Computed hash code
- public static ulong HashFnv1_64(IEnumerable input, ulong hash = kOffsetBasis_64)
+ public static ulong HashFnv1_64(ReadOnlySpan input, ulong hash = kOffsetBasis_64)
{
foreach (var c in input)
{
@@ -33,7 +33,7 @@ public static ulong HashFnv1_64(IEnumerable input, ulong hash = kOffsetBas
/// Input sequence
/// Initial hash value
/// Computed hash code
- public static ulong HashFnv1_64(IEnumerable input, ulong hash = kOffsetBasis_64)
+ public static ulong HashFnv1_64(ReadOnlySpan input, ulong hash = kOffsetBasis_64)
{
foreach (var c in input)
{
@@ -49,7 +49,7 @@ public static ulong HashFnv1_64(IEnumerable input, ulong hash = kOffsetBas
/// Input sequence
/// Initial hash value
/// Computed hash code
- public static ulong HashFnv1a_64(IEnumerable input, ulong hash = kOffsetBasis_64)
+ public static ulong HashFnv1a_64(ReadOnlySpan input, ulong hash = kOffsetBasis_64)
{
foreach (var c in input)
{
@@ -65,7 +65,7 @@ public static ulong HashFnv1a_64(IEnumerable input, ulong hash = kOffsetBa
/// Input sequence
/// Initial hash value
/// Computed hash code
- public static ulong HashFnv1a_64(IEnumerable input, ulong hash = kOffsetBasis_64)
+ public static ulong HashFnv1a_64(ReadOnlySpan input, ulong hash = kOffsetBasis_64)
{
foreach (var c in input)
{
@@ -85,7 +85,7 @@ public static ulong HashFnv1a_64(IEnumerable input, ulong hash = kOffsetBa
/// Input sequence
/// Initial hash value
/// Computed hash code
- public static uint HashFnv1_32(IEnumerable input, uint hash = kOffsetBasis_32)
+ public static uint HashFnv1_32(ReadOnlySpan input, uint hash = kOffsetBasis_32)
{
foreach (var c in input)
{
@@ -101,7 +101,7 @@ public static uint HashFnv1_32(IEnumerable input, uint hash = kOffsetBasis
/// Input sequence
/// Initial hash value
/// Computed hash code
- public static uint HashFnv1a_32(IEnumerable input, uint hash = kOffsetBasis_32)
+ public static uint HashFnv1a_32(ReadOnlySpan input, uint hash = kOffsetBasis_32)
{
foreach (var c in input)
{
diff --git a/pkNX.Game/GameLocation.cs b/pkNX.Game/GameLocation.cs
index 3adc61e0..c622f0b2 100644
--- a/pkNX.Game/GameLocation.cs
+++ b/pkNX.Game/GameLocation.cs
@@ -91,6 +91,7 @@ private static GameVersion GetGameFromPath(string romfs, string? exefs)
private const int FILECOUNT_SV_101 = 25; // Ver. 1.0.1 (Day 1 Patch)
private const int FILECOUNT_SV_120 = 26; // Ver. 1.2.0 (Paradox x2)
private const int FILECOUNT_SV_130 = 27; // Ver. 1.3.0 (Paradox x2 Bad Egg fix)
+ private const int FILECOUNT_SV_201 = 28; // Ver. 2.0.1 (Teal Mask)
private static GameVersion GetGameFromCount(int fileCount, string romfs, string? exefs)
{
@@ -149,6 +150,7 @@ private static GameVersion GetGameFromCount(int fileCount, string romfs, string?
case FILECOUNT_SV_101:
case FILECOUNT_SV_120:
case FILECOUNT_SV_130:
+ case FILECOUNT_SV_201:
{
if (exefs == null)
return GameVersion.SV;
diff --git a/pkNX.Game/pkNX.Game.csproj b/pkNX.Game/pkNX.Game.csproj
index 432e316e..9f9257f2 100644
--- a/pkNX.Game/pkNX.Game.csproj
+++ b/pkNX.Game/pkNX.Game.csproj
@@ -10,7 +10,7 @@
-
+
diff --git a/pkNX.Structures.FlatBuffers.Arceus/pkNX.Structures.FlatBuffers.Arceus.csproj b/pkNX.Structures.FlatBuffers.Arceus/pkNX.Structures.FlatBuffers.Arceus.csproj
index 717bd9e0..89c6718f 100644
--- a/pkNX.Structures.FlatBuffers.Arceus/pkNX.Structures.FlatBuffers.Arceus.csproj
+++ b/pkNX.Structures.FlatBuffers.Arceus/pkNX.Structures.FlatBuffers.Arceus.csproj
@@ -11,8 +11,8 @@
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
@@ -25,7 +25,6 @@
- Schemas\
..\pkNX.Structures.FlatBuffers\Schemas\
diff --git a/pkNX.Structures.FlatBuffers.LGPE/pkNX.Structures.FlatBuffers.LGPE.csproj b/pkNX.Structures.FlatBuffers.LGPE/pkNX.Structures.FlatBuffers.LGPE.csproj
index 94555237..fa87da0c 100644
--- a/pkNX.Structures.FlatBuffers.LGPE/pkNX.Structures.FlatBuffers.LGPE.csproj
+++ b/pkNX.Structures.FlatBuffers.LGPE/pkNX.Structures.FlatBuffers.LGPE.csproj
@@ -10,8 +10,8 @@
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
@@ -24,7 +24,6 @@
- Schemas\
..\pkNX.Structures.FlatBuffers\Schemas\
diff --git a/pkNX.Structures.FlatBuffers.Reflection/ReflectionDumpSchema.cs b/pkNX.Structures.FlatBuffers.Reflection/ReflectionDumpSchema.cs
index aa9d441f..ad8406bd 100644
--- a/pkNX.Structures.FlatBuffers.Reflection/ReflectionDumpSchema.cs
+++ b/pkNX.Structures.FlatBuffers.Reflection/ReflectionDumpSchema.cs
@@ -16,7 +16,7 @@ public static class SchemaDump
///
public static Schema HandleReflection(byte[] data, string filePath, string dir, SchemaDumpSettings settings)
{
- var schema = Schema.Serializer.Parse(data, FlatBufferDeserializationOption.Greedy);
+ var schema = Schema.Serializer.Parse(data, FlatBufferDeserializationOption.GreedyMutable);
DumpSchema(schema, filePath, dir, settings);
return schema;
}
@@ -38,7 +38,7 @@ public static void DumpSchema(Schema schema, string filePath, string dir, Schema
public static void DumpSchema(byte[] data, TextWriter fbs, TextWriter cs, SchemaDumpSettings settings)
{
- var schema = Schema.Serializer.Parse(data, FlatBufferDeserializationOption.Greedy);
+ var schema = Schema.Serializer.Parse(data, FlatBufferDeserializationOption.GreedyMutable);
DumpSchema(schema, fbs, cs, settings);
}
@@ -49,26 +49,26 @@ public static void DumpSchema(Schema schema, TextWriter fbs, TextWriter cs, Sche
DumpObjects(schema, fbs, cs, settings.StripNamespace);
DumpEnums(schema, fbs, settings.StripNamespace);
+
+ if (schema.RootTable?.Name is { } x)
+ fbs.WriteLine($"root_type {x};");
}
private static void WriteHeaderFBS(Schema schema, TextWriter fbs, string fileNameSpace)
{
- fbs.WriteLine("attribute \"fs_vector\"");
- fbs.WriteLine("attribute \"fs_serializer\"");
- fbs.WriteLine("attribute \"fs_valueStruct\"");
- fbs.WriteLine("attribute \"fs_nonVirtual\"");
- fbs.WriteLine("attribute \"fs_unsafeStructVector\"");
- fbs.WriteLine();
fbs.WriteLine($"namespace {fileNameSpace};");
fbs.WriteLine();
+ fbs.WriteLine("attribute \"fs_vector\";");
+ fbs.WriteLine("attribute \"fs_serializer\";");
+ fbs.WriteLine("attribute \"fs_valueStruct\";");
+ fbs.WriteLine("attribute \"fs_nonVirtual\";");
+ fbs.WriteLine("attribute \"fs_unsafeStructVector\";");
+ fbs.WriteLine();
fbs.WriteLine("// Generated by FlatSharp");
fbs.WriteLine($"// FileIdentifier: {schema.FileIdent}");
fbs.WriteLine($"// FileExtension: {schema.FileExt}");
fbs.WriteLine($"// Object Count: {schema.Objects.Count}");
fbs.WriteLine($"// Enum Count: {schema.Enums.Count}");
-
- if (schema.RootTable?.Name is { } x)
- fbs.WriteLine($"root_type {x};");
}
private static void WriteHeaderCS(Schema schema, TextWriter cs, string fileNameSpace)
@@ -105,7 +105,7 @@ private static void DumpObjects(Schema schema, TextWriter fbs, TextWriter cs, bo
for (var i = list.Count - 1; i >= 0; i--)
{
var obj = list[i];
-
+
cs.WriteLine();
cs.WriteLine("[TypeConverter(typeof(ExpandableObjectConverter))]");
cs.WriteLine($"public partial {(obj.IsStruct ? "struct" : "class")} {GetName(obj.Name, stripNamespace)} {{ }}");
@@ -170,7 +170,7 @@ private static void DumpEnums(Schema schema, TextWriter fbs, bool stripNamespace
{
var def = list[i];
fbs.WriteLine();
-
+
var typeName = def.UnderlyingType.ToFBS(schema, i, true);
var implType = $" : {typeName}";
var defName = GetName(def.Name, stripNamespace);
@@ -186,13 +186,16 @@ private static void DumpEnums(Schema schema, TextWriter fbs, bool stripNamespace
private static string ToFBS(this Type type, Schema schema, int index, bool force = false)
{
+ var size = type.FixedLength;
+ var sizeStr = size > 0 ? $":{size}" : "";
+
if (index != -1)
{
var idx = type.Index;
- if (type.BaseType == BaseType.Array)
- return $"[{GetName(schema, idx, type.Element)}]";
+ if (type.BaseType is BaseType.Array)
+ return $"[{GetName(schema, idx, type.Element)}{sizeStr}]";
if (type.BaseType == BaseType.Vector)
- return $"[{GetName(schema, idx, type.Element)}]";
+ return $"[{GetName(schema, idx, type.Element)}{sizeStr}]";
if (type.BaseType == BaseType.Obj)
return $"{schema.Objects[idx].Name}";
if (!force)
@@ -201,9 +204,9 @@ private static string ToFBS(this Type type, Schema schema, int index, bool force
var baseType = type.BaseType;
if (baseType is BaseType.Array)
- return $"[{GetName(type.Element)}]";
+ return $"[{GetName(type.Element)}{sizeStr}]";
if (baseType is BaseType.Vector)
- return $"[{GetName(type.Element)}]";
+ return $"[{GetName(type.Element)}{sizeStr}]";
var x = GetName(baseType);
if (type.Element != BaseType.None)
diff --git a/pkNX.Structures.FlatBuffers.Reflection/SchemaDump.cs b/pkNX.Structures.FlatBuffers.Reflection/SchemaDump.cs
index 6590c002..45e7c1c9 100644
--- a/pkNX.Structures.FlatBuffers.Reflection/SchemaDump.cs
+++ b/pkNX.Structures.FlatBuffers.Reflection/SchemaDump.cs
@@ -12,7 +12,7 @@ public static class SchemaDumpOld
{
public static Schema HandleReflection(byte[] data, string filePath, string dir, SchemaDumpSettings settings)
{
- var schema = Schema.Serializer.Parse(data, FlatBufferDeserializationOption.Greedy);
+ var schema = Schema.Serializer.Parse(data, FlatBufferDeserializationOption.GreedyMutable);
DumpSchema(schema, filePath, dir, settings);
return schema;
}
@@ -34,7 +34,7 @@ public static void DumpSchema(Schema schema, string filePath, string dir, Schema
public static void DumpSchema(byte[] data, TextWriter fbs, TextWriter cs, SchemaDumpSettings settings)
{
- var schema = Schema.Serializer.Parse(data, FlatBufferDeserializationOption.Greedy);
+ var schema = Schema.Serializer.Parse(data, FlatBufferDeserializationOption.GreedyMutable);
DumpSchema(schema, fbs, cs, settings);
}
@@ -43,28 +43,28 @@ public static void DumpSchema(Schema schema, TextWriter fbs, TextWriter cs, Sche
WriteHeaderFBS(schema, fbs, settings.FileNamespace);
WriteHeaderCS(schema, cs, settings.FileNamespace);
- DumpObjects(schema, fbs, cs, settings.StripNamespace);
DumpEnums(schema, fbs, settings.StripNamespace);
+ DumpObjects(schema, fbs, cs, settings.StripNamespace);
+
+ if (schema.RootTable?.Name is { } x)
+ fbs.WriteLine($"root_type {x};");
}
private static void WriteHeaderFBS(Schema schema, TextWriter fbs, string fileNameSpace)
{
- fbs.WriteLine("attribute \"fs_vector\"");
- fbs.WriteLine("attribute \"fs_serializer\"");
- fbs.WriteLine("attribute \"fs_valueStruct\"");
- fbs.WriteLine("attribute \"fs_nonVirtual\"");
- fbs.WriteLine("attribute \"fs_unsafeStructVector\"");
- fbs.WriteLine();
fbs.WriteLine($"namespace {fileNameSpace};");
fbs.WriteLine();
+ fbs.WriteLine("attribute \"fs_vector\";");
+ fbs.WriteLine("attribute \"fs_serializer\";");
+ fbs.WriteLine("attribute \"fs_valueStruct\";");
+ fbs.WriteLine("attribute \"fs_nonVirtual\";");
+ fbs.WriteLine("attribute \"fs_unsafeStructVector\";");
+ fbs.WriteLine();
fbs.WriteLine("// Generated by FlatSharp");
fbs.WriteLine($"// FileIdentifier: {schema.FileIdent}");
fbs.WriteLine($"// FileExtension: {schema.FileExt}");
fbs.WriteLine($"// Object Count: {schema.Objects.Count}");
fbs.WriteLine($"// Enum Count: {schema.Enums.Count}");
-
- if (schema.RootTable?.Name is { } x)
- fbs.WriteLine($"root_type {x};");
}
private static void WriteHeaderCS(Schema schema, TextWriter cs, string fileNameSpace)
@@ -101,7 +101,7 @@ private static void DumpObjects(Schema schema, TextWriter fbs, TextWriter cs, bo
for (var i = list.Count - 1; i >= 0; i--)
{
var obj = list[i];
-
+
cs.WriteLine();
cs.WriteLine("[TypeConverter(typeof(ExpandableObjectConverter))]");
cs.WriteLine($"public partial {(obj.IsStruct ? "struct" : "class")} {GetName(obj.Name, stripNamespace)} {{ }}");
@@ -166,7 +166,7 @@ private static void DumpEnums(Schema schema, TextWriter fbs, bool stripNamespace
{
var def = list[i];
fbs.WriteLine();
-
+
var typeName = def.UnderlyingType.ToFBS(schema, i, true);
var implType = $" : {typeName}";
var defName = GetName(def.Name, stripNamespace);
@@ -185,13 +185,16 @@ private static void DumpEnums(Schema schema, TextWriter fbs, bool stripNamespace
private static string ToFBS(this Type type, Schema schema, int index, bool force = false)
{
+ var size = type.FixedLength;
+ var sizeStr = size > 0 ? $":{size}" : "";
+
if (index != -1)
{
var idx = type.Index;
if (type.BaseType == BaseType.Array)
- return $"[{GetName(schema, idx, type.Element)}]";
+ return $"[{GetName(schema, idx, type.Element)}{sizeStr}]";
if (type.BaseType == BaseType.Vector)
- return $"[{GetName(schema, idx, type.Element)}]";
+ return $"[{GetName(schema, idx, type.Element)}{sizeStr}]";
if (type.BaseType == BaseType.Obj)
return $"{schema.Objects[idx].Name}";
if (!force)
@@ -200,9 +203,9 @@ private static string ToFBS(this Type type, Schema schema, int index, bool force
var baseType = type.BaseType;
if (baseType is BaseType.Array)
- return $"[{GetName(type.Element)}]";
+ return $"[{GetName(type.Element)}{sizeStr}]";
if (baseType is BaseType.Vector)
- return $"[{GetName(type.Element)}]";
+ return $"[{GetName(type.Element)}{sizeStr}]";
var x = GetName(baseType);
if (type.Element != BaseType.None)
diff --git a/pkNX.Structures.FlatBuffers.Reflection/pkNX.Structures.FlatBuffers.Reflection.csproj b/pkNX.Structures.FlatBuffers.Reflection/pkNX.Structures.FlatBuffers.Reflection.csproj
index 81c7f64e..03d852e5 100644
--- a/pkNX.Structures.FlatBuffers.Reflection/pkNX.Structures.FlatBuffers.Reflection.csproj
+++ b/pkNX.Structures.FlatBuffers.Reflection/pkNX.Structures.FlatBuffers.Reflection.csproj
@@ -6,8 +6,8 @@
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/pkNX.Structures.FlatBuffers.SV/Directory.Build.props b/pkNX.Structures.FlatBuffers.SV/Directory.Build.props
new file mode 100644
index 00000000..1e19d8fd
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/Directory.Build.props
@@ -0,0 +1,26 @@
+
+
+ net7.0
+ en
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+ GreedyMutable
+ true
+
+
+
+
+
+
+
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec2f.cs b/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec2f.cs
deleted file mode 100644
index 1bb1959f..00000000
--- a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec2f.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System.ComponentModel;
-
-namespace pkNX.Structures.FlatBuffers.SV;
-
-[TypeConverter(typeof(ExpandableObjectConverter))]
-public partial struct PackedVec2f
-{
- public override string ToString() => $"{{ X: {X}, Y: {Y} }}";
-}
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec3f.cs b/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec3f.cs
deleted file mode 100644
index 6684c444..00000000
--- a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec3f.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-using System;
-using System.ComponentModel;
-
-namespace pkNX.Structures.FlatBuffers.SV;
-
-[TypeConverter(typeof(ExpandableObjectConverter))]
-public partial struct PackedVec3f : IEquatable
-{
- public override string ToString() => $"{{ X: {X}, Y: {Y}, Z: {Z} }}";
-
- public static readonly PackedVec3f Zero = new();
- public static readonly PackedVec3f One = new(1, 1, 1);
-
- public PackedVec3f() { }
-
- public PackedVec3f(float x = 0, float y = 0, float z = 0)
- {
- X = x;
- Y = y;
- Z = z;
- }
- public static implicit operator Vec3f(PackedVec3f v) => new(v.X, v.Y, v.Z);
-
- public bool IsOne => X is 1 && Y is 1 && Z is 1;
- public bool IsZero => X is 0 && Y is 0 && Z is 0;
-
- public float Magnitude => MathF.Sqrt(MagnitudeSqr);
- public float MagnitudeSqr => Dot(this);
- public PackedVec3f Normalized() => this * (1 / Magnitude);
-
- public float Dot(PackedVec3f other) => X * other.X + Y * other.Y + Z * other.Z;
- public PackedVec3f Cross(PackedVec3f other) => new(Y * other.Z - Z * other.Y, Z * other.X - X * other.Z, X * other.Y - Y * other.X);
- public float DistanceTo(PackedVec3f other) => (this - other).Magnitude;
- public float DistanceToSqr(PackedVec3f other) => (this - other).MagnitudeSqr;
- public PackedVec3f Lerp(PackedVec3f other, float t) => this + (other - this) * t;
-
- public PackedVec3f Clone() => new()
- {
- X = X,
- Y = Y,
- Z = Z,
- };
-
- public override bool Equals(object? obj) => obj is PackedVec3f other && Equals(other);
- public bool Equals(PackedVec3f other) => X.Equals(other.X) && Y.Equals(other.Y) && Z.Equals(other.Z);
- public override int GetHashCode() => HashCode.Combine(X, Y, Z);
-
- public static PackedVec3f operator -(PackedVec3f v) => new(-v.X, -v.Y, -v.Z);
-
- public static PackedVec3f operator +(PackedVec3f l, PackedVec3f r) => new(l.X + r.X, l.Y + r.Y, l.Z + r.Z);
- public static PackedVec3f operator -(PackedVec3f l, PackedVec3f r) => new(l.X - r.X, l.Y - r.Y, l.Z - r.Z);
- public static PackedVec3f operator *(PackedVec3f l, PackedVec3f r) => new(l.X * r.X, l.Y * r.Y, l.Z * r.Z);
- public static PackedVec3f operator /(PackedVec3f l, PackedVec3f r) => new(l.X / r.X, l.Y / r.Y, l.Z / r.Z);
-
- public static PackedVec3f operator +(PackedVec3f l, float r) => new(l.X + r, l.Y + r, l.Z + r);
- public static PackedVec3f operator -(PackedVec3f l, float r) => new(l.X - r, l.Y - r, l.Z - r);
- public static PackedVec3f operator *(PackedVec3f l, float r) => new(l.X * r, l.Y * r, l.Z * r);
- public static PackedVec3f operator /(PackedVec3f l, float r) => new(l.X / r, l.Y / r, l.Z / r);
-
- public static bool operator ==(PackedVec3f? left, PackedVec3f? right) => Equals(left, right);
- public static bool operator !=(PackedVec3f? left, PackedVec3f? right) => !Equals(left, right);
-}
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec4f.cs b/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec4f.cs
deleted file mode 100644
index b935ef93..00000000
--- a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec4f.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System.ComponentModel;
-
-namespace pkNX.Structures.FlatBuffers.SV;
-
-[TypeConverter(typeof(ExpandableObjectConverter))]
-public partial struct PackedVec4f
-{
- public PackedVec4f() { }
-
- public PackedVec4f(float x = 0, float y = 0, float z = 0, float w = 0)
- {
- X = x;
- Y = y;
- Z = z;
- W = w;
- }
-
- public override string ToString() => $"{{ X: {X}, Y: {Y}, Z: {Z}, W: {W} }}";
-}
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Transform.cs b/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Transform.cs
deleted file mode 100644
index 1ae7bb23..00000000
--- a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Transform.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using System.ComponentModel;
-
-namespace pkNX.Structures.FlatBuffers.SV;
-
-[TypeConverter(typeof(ExpandableObjectConverter))]
-public partial class Transform
-{
- public override string ToString() => $"{{ S: {Scale}, R: {Rotate}, T: {Translate} }}";
-}
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Vec2f.cs b/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Vec2f.cs
deleted file mode 100644
index b7e77a5c..00000000
--- a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Vec2f.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-using System.ComponentModel;
-
-namespace pkNX.Structures.FlatBuffers.SV;
-
-[TypeConverter(typeof(ExpandableObjectConverter))]
-public partial class Vec2f
-{
-}
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Vec3f.cs b/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Vec3f.cs
deleted file mode 100644
index 80a4d3ca..00000000
--- a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Vec3f.cs
+++ /dev/null
@@ -1,76 +0,0 @@
-using System;
-using System.ComponentModel;
-
-namespace pkNX.Structures.FlatBuffers.SV;
-
-[TypeConverter(typeof(ExpandableObjectConverter))]
-public partial class Vec3f : IEquatable
-{
- public static readonly Vec3f Zero = new(0, 0, 0);
- public static readonly Vec3f One = new(1, 1, 1);
-
-
- public Vec3f(float x = 0, float y = 0, float z = 0)
- {
- X = x;
- Y = y;
- Z = z;
- }
-
- public static implicit operator Vec3f(PackedVec3f v) => new(v.X, v.Y, v.Z);
-
- public bool IsOne => X is 1 && Y is 1 && Z is 1;
- public bool IsZero => X is 0 && Y is 0 && Z is 0;
-
- public float Magnitude => MathF.Sqrt(MagnitudeSqr);
- public float MagnitudeSqr => Dot(this);
- public Vec3f Normalized() => this * (1 / Magnitude);
-
- public float Dot(Vec3f other) => X * other.X + Y * other.Y + Z * other.Z;
- public Vec3f Cross(Vec3f other) => new(Y * other.Z - Z * other.Y, Z * other.X - X * other.Z, X * other.Y - Y * other.X);
- public float DistanceTo(Vec3f other) => (this - other).Magnitude;
- public float DistanceToSqr(Vec3f other) => (this - other).MagnitudeSqr;
- public Vec3f Lerp(Vec3f other, float t) => this + (other - this) * t;
-
- public Vec3f Clone() => new()
- {
- X = X,
- Y = Y,
- Z = Z,
- };
-
- public override string ToString() => $"V3f({X}, {Y}, {Z})";
- public string ToTriple() => $"({X}, {Y}, {Z})";
-
- public bool Equals(Vec3f? other)
- {
- if (other is null) return false;
- if (ReferenceEquals(this, other)) return true;
- return X.Equals(other.X) && Y.Equals(other.Y) && Z.Equals(other.Z);
- }
-
- public override bool Equals(object? obj)
- {
- if (obj is null) return false;
- if (ReferenceEquals(this, obj)) return true;
- if (obj.GetType() != GetType()) return false;
- return Equals((Vec3f)obj);
- }
-
- public override int GetHashCode() => HashCode.Combine(X, Y, Z);
-
- public static Vec3f operator -(Vec3f v) => new(-v.X, -v.Y, -v.Z);
-
- public static Vec3f operator +(Vec3f l, Vec3f r) => new(l.X + r.X, l.Y + r.Y, l.Z + r.Z);
- public static Vec3f operator -(Vec3f l, Vec3f r) => new(l.X - r.X, l.Y - r.Y, l.Z - r.Z);
- public static Vec3f operator *(Vec3f l, Vec3f r) => new(l.X * r.X, l.Y * r.Y, l.Z * r.Z);
- public static Vec3f operator /(Vec3f l, Vec3f r) => new(l.X / r.X, l.Y / r.Y, l.Z / r.Z);
-
- public static Vec3f operator +(Vec3f l, float r) => new(l.X + r, l.Y + r, l.Z + r);
- public static Vec3f operator -(Vec3f l, float r) => new(l.X - r, l.Y - r, l.Z - r);
- public static Vec3f operator *(Vec3f l, float r) => new(l.X * r, l.Y * r, l.Z * r);
- public static Vec3f operator /(Vec3f l, float r) => new(l.X / r, l.Y / r, l.Z / r);
-
- public static bool operator ==(Vec3f? left, Vec3f? right) => Equals(left, right);
- public static bool operator !=(Vec3f? left, Vec3f? right) => !Equals(left, right);
-}
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec2f.fbs b/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec2f.fbs
deleted file mode 100644
index 6b814ede..00000000
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec2f.fbs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace pkNX.Structures.FlatBuffers.SV;
-attribute "fs_valueStruct";
-
-struct PackedVec2f (fs_valueStruct) {
- X:float;
- Y:float;
-}
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec3f.fbs b/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec3f.fbs
deleted file mode 100644
index 23b4f292..00000000
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec3f.fbs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace pkNX.Structures.FlatBuffers.SV;
-attribute "fs_valueStruct";
-
-struct PackedVec3f (fs_valueStruct) {
- X:float;
- Y:float;
- Z:float;
-}
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec4f.fbs b/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec4f.fbs
deleted file mode 100644
index cfbdf148..00000000
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec4f.fbs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace pkNX.Structures.FlatBuffers.SV;
-attribute "fs_valueStruct";
-
-struct PackedVec4f (fs_valueStruct) {
- X:float;
- Y:float;
- Z:float;
- W:float;
-}
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/Transform.fbs b/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/Transform.fbs
deleted file mode 100644
index 35bbe6df..00000000
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/Transform.fbs
+++ /dev/null
@@ -1,9 +0,0 @@
-include "PackedVec3f.fbs";
-
-namespace pkNX.Structures.FlatBuffers.SV;
-
-table Transform {
- Scale:PackedVec3f;
- Rotate:PackedVec3f;
- Translate:PackedVec3f;
-}
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/Vec3f.fbs b/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/Vec3f.fbs
deleted file mode 100644
index 8104b61c..00000000
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/Vec3f.fbs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace pkNX.Structures.FlatBuffers.SV;
-
-table Vec3f {
- X:float;
- Y:float;
- Z:float;
-}
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Audio/BGMEventArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/Schemas/BGMEventArray.fbs
similarity index 92%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Audio/BGMEventArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/Schemas/BGMEventArray.fbs
index b832765f..5190f9cb 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Audio/BGMEventArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/Schemas/BGMEventArray.fbs
@@ -1,6 +1,8 @@
include "BGMEventType.fbs";
+
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
+
// Root Type: gfl.audio.fb.BGMEventArray
table BGMEvent {
EventName:string (required);
@@ -8,6 +10,9 @@ table BGMEvent {
LayerName:string (required);
WwiseEventName:string (required);
}
+
table BGMEventArray (fs_serializer) {
Table:[BGMEvent] (required);
}
+
+root_type BGMEventArray;
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Audio/BGMEventType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/Schemas/BGMEventType.fbs
similarity index 99%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Audio/BGMEventType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/Schemas/BGMEventType.fbs
index 078fd4dc..0bd1d22d 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Audio/BGMEventType.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/Schemas/BGMEventType.fbs
@@ -1,4 +1,5 @@
namespace pkNX.Structures.FlatBuffers.SV;
+
enum BGMEventType : int {
Set = 0,
Play = 1,
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Audio/EnvPokeVoiceLotterySetting.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/Schemas/EnvPokeVoiceLotterySetting.fbs
similarity index 99%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Audio/EnvPokeVoiceLotterySetting.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/Schemas/EnvPokeVoiceLotterySetting.fbs
index 5dca5ec7..0265e843 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Audio/EnvPokeVoiceLotterySetting.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/Schemas/EnvPokeVoiceLotterySetting.fbs
@@ -1,5 +1,6 @@
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
+
// Root Type: titan_audio.fb.EnvPokeVoiceLotterySetting
table EnvPokeVoiceLotterySetting (fs_serializer) {
LotteryTimer:float;
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/pkNX.Structures.FlatBuffers.SV.Audio.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/pkNX.Structures.FlatBuffers.SV.Audio.csproj
new file mode 100644
index 00000000..b782ecb2
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/pkNX.Structures.FlatBuffers.SV.Audio.csproj
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\
+
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/GameBaseParamTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/GameBaseParamTableArray.fbs
new file mode 100644
index 00000000..123fd403
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/GameBaseParamTableArray.fbs
@@ -0,0 +1,43 @@
+namespace pkNX.Structures.FlatBuffers.SV;
+
+attribute "fs_vector";
+attribute "fs_serializer";
+attribute "fs_valueStruct";
+attribute "fs_nonVirtual";
+attribute "fs_unsafeStructVector";
+
+enum DifficultyId : ubyte {
+ Easy = 0,
+ Normal = 1,
+ Hard = 2,
+}
+
+struct RewardDangoNums (fs_valueStruct) {
+ Value:[byte:4];
+}
+
+struct GameBaseParam {
+ TimeLimit:ubyte;
+ PlayerHoldFruitsMax:ubyte;
+ DifficultyLevelMax:[ubyte:3];
+ BaseFruitsNeedNum:ubyte;
+ AdjustMemberNums:[float:4];
+ RoarDistance:float;
+ RoarAngle:float;
+ RoarBaseFrontPos:float;
+ RoarRangeType:ubyte;
+ BalloonAutoRepopTime:float;
+ CountupAnimeSeconds:float;
+ SeOblationResetSeconds:float;
+ RewardDangoNumsAtDifficulty:[RewardDangoNums:3];
+}
+
+table GameBaseParamTable {
+ Param:GameBaseParam;
+}
+
+table GameBaseParamTableArray (fs_serializer) {
+ Table:[GameBaseParamTable] (required);
+}
+
+root_type GameBaseParamTableArray;
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/OjamaPokemonCommonTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/OjamaPokemonCommonTableArray.fbs
new file mode 100644
index 00000000..82442118
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/OjamaPokemonCommonTableArray.fbs
@@ -0,0 +1,24 @@
+namespace pkNX.Structures.FlatBuffers.SV;
+
+attribute "fs_vector";
+attribute "fs_serializer";
+attribute "fs_valueStruct";
+attribute "fs_nonVirtual";
+attribute "fs_unsafeStructVector";
+
+struct OjamaPokemonCommonParam {
+ PopRateBase:ubyte;
+ PopRateAdd:ubyte;
+ OblationPopTimingMin:ubyte;
+ OblationPopTimingMax:ubyte;
+}
+
+table OjamaPokemonCommonTable {
+ Param:OjamaPokemonCommonParam;
+}
+
+table OjamaPokemonCommonTableArray (fs_serializer) {
+ Table:[OjamaPokemonCommonTable] (required);
+}
+
+root_type OjamaPokemonCommonTableArray;
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/OjamaPokemonUniqueTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/OjamaPokemonUniqueTableArray.fbs
new file mode 100644
index 00000000..25f3b446
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/OjamaPokemonUniqueTableArray.fbs
@@ -0,0 +1,26 @@
+namespace pkNX.Structures.FlatBuffers.SV;
+
+attribute "fs_vector";
+attribute "fs_serializer";
+attribute "fs_valueStruct";
+attribute "fs_nonVirtual";
+attribute "fs_unsafeStructVector";
+
+struct OjamaPokemonUniqueParam (fs_valueStruct) {
+ EatCount:ubyte;
+ Type:ubyte;
+ TargetRadius:float;
+ StartEatSeconds:float;
+ EatLimitNum:ushort;
+ PopRatePerLevel:[ubyte:10];
+}
+
+table OjamaPokemonUniqueTable {
+ Param:OjamaPokemonUniqueParam;
+}
+
+table OjamaPokemonUniqueTableArray (fs_serializer) {
+ Table:[OjamaPokemonUniqueTable] (required);
+}
+
+root_type OjamaPokemonUniqueTableArray;
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/ResultDemoTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/ResultDemoTableArray.fbs
new file mode 100644
index 00000000..ccb7ee3c
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/ResultDemoTableArray.fbs
@@ -0,0 +1,37 @@
+namespace pkNX.Structures.FlatBuffers.SV;
+
+attribute "fs_vector";
+attribute "fs_serializer";
+attribute "fs_valueStruct";
+attribute "fs_nonVirtual";
+attribute "fs_unsafeStructVector";
+
+struct ResultDemoTransform {
+ PosX:float;
+ PosY:float;
+ PosZ:float;
+ RotX:float;
+ RotY:float;
+ RotZ:float;
+ IsToRadian:bool;
+}
+
+struct ResultDemoParam {
+ BaseTransformList:[ResultDemoTransform:6];
+}
+
+table ResultDemoTable {
+ Param:ResultDemoParam;
+ PokeObjName0:string;
+ PokeObjName1:string;
+ PokeObjName2:string;
+ PokeObjName3:string;
+ PokeObjName4:string;
+ PokeObjName5:string;
+}
+
+table ResultDemoTableArray (fs_serializer) {
+ Table:[ResultDemoTable] (required);
+}
+
+root_type ResultDemoTableArray;
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/RewardActionTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/RewardActionTableArray.fbs
new file mode 100644
index 00000000..1e675375
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/RewardActionTableArray.fbs
@@ -0,0 +1,32 @@
+include "Shared/ItemID.fbs";
+
+namespace pkNX.Structures.FlatBuffers.SV;
+attribute "fs_vector";
+attribute "fs_serializer";
+attribute "fs_valueStruct";
+attribute "fs_nonVirtual";
+attribute "fs_unsafeStructVector";
+
+
+struct RewardActionItemParam {
+ ItemId:ItemID;
+ Rate:ubyte;
+}
+
+struct RewardActionParam {
+ ActionRewardRate:ubyte;
+ LotteryCrashBalloonCountRate:ubyte;
+ LotteryOblationCountRate:ubyte;
+ RemainTimeRewardRate:ubyte;
+ RewardItems:[RewardActionItemParam:57];
+}
+
+table RewardActionTable {
+ Param:RewardActionParam (required);
+}
+
+table RewardActionTableArray (fs_serializer) {
+ Table:[RewardActionTable] (required);
+}
+
+root_type RewardActionTableArray;
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/RewardTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/RewardTableArray.fbs
new file mode 100644
index 00000000..d1ab8e76
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/RewardTableArray.fbs
@@ -0,0 +1,29 @@
+include "Shared/ItemID.fbs";
+
+namespace pkNX.Structures.FlatBuffers.SV.Balloon;
+
+attribute "fs_vector";
+attribute "fs_serializer";
+attribute "fs_valueStruct";
+attribute "fs_nonVirtual";
+attribute "fs_unsafeStructVector";
+
+struct RewardLevelItemParam {
+ ItemId:ItemID;
+ Num:ubyte;
+}
+
+struct RewardLevelParam {
+ RewardItems:[RewardLevelItemParam:6];
+ DifficultyRating:[ubyte:3];
+}
+
+table RewardTable {
+ Param:RewardLevelParam (required);
+}
+
+table RewardTableArray (fs_serializer) {
+ Table:[RewardTable] (required);
+}
+
+root_type RewardTableArray;
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/ScoreBaseTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/ScoreBaseTableArray.fbs
new file mode 100644
index 00000000..67e68561
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/ScoreBaseTableArray.fbs
@@ -0,0 +1,24 @@
+namespace pkNX.Structures.FlatBuffers.SV;
+
+attribute "fs_vector";
+attribute "fs_serializer";
+attribute "fs_valueStruct";
+attribute "fs_nonVirtual";
+attribute "fs_unsafeStructVector";
+
+struct ScoreBaseParam {
+ OblationPoint:uint;
+ CrashBalloonPoint:uint;
+ LevelClearPoint:uint;
+ RemainTimePoint:uint;
+}
+
+table ScoreBaseTable {
+ Param:ScoreBaseParam;
+}
+
+table ScoreBaseTableArray (fs_serializer) {
+ Table:[ScoreBaseTable] (required);
+}
+
+root_type ScoreBaseTableArray;
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/pkNX.Structures.FlatBuffers.SV.Balloon.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/pkNX.Structures.FlatBuffers.SV.Balloon.csproj
new file mode 100644
index 00000000..b782ecb2
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/pkNX.Structures.FlatBuffers.SV.Balloon.csproj
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\
+
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Battle/BattleConfig.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/BattleConfig.fbs
similarity index 98%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Battle/BattleConfig.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/BattleConfig.fbs
index 77da203f..1e03d85d 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Battle/BattleConfig.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/BattleConfig.fbs
@@ -1,4 +1,4 @@
-include "../Geometry/Vec3f.fbs";
+include "Math/Vec3f.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Battle/BattleEffectTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/BattleEffectTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Battle/BattleEffectTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/BattleEffectTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Battle/ItemTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/ItemTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Battle/ItemTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/ItemTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/NetBattle/NetBattleRuleDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/NetBattle/NetBattleRuleDataArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/NetBattle/NetBattleRuleDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/NetBattle/NetBattleRuleDataArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/NetBattle/NetBattleRuleParamArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/NetBattle/NetBattleRuleParamArray.fbs
similarity index 91%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/NetBattle/NetBattleRuleParamArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/NetBattle/NetBattleRuleParamArray.fbs
index dc3c3c6b..33ea8ce7 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/NetBattle/NetBattleRuleParamArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/NetBattle/NetBattleRuleParamArray.fbs
@@ -1,4 +1,4 @@
-include "../Shared/BattleType.fbs";
+include "Shared/BattleType.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Battle/PokeExceptionTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/PokeExceptionTableArray.fbs
similarity index 92%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Battle/PokeExceptionTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/PokeExceptionTableArray.fbs
index 1049606d..347529dd 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Battle/PokeExceptionTableArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/PokeExceptionTableArray.fbs
@@ -1,4 +1,4 @@
-include "../Shared/DevID.fbs";
+include "Shared/DevID.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/pkNX.Structures.FlatBuffers.SV.Battle.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/pkNX.Structures.FlatBuffers.SV.Battle.csproj
new file mode 100644
index 00000000..b1ac3808
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/pkNX.Structures.FlatBuffers.SV.Battle.csproj
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\;..\..\pkNX.Structures.FlatBuffers\Schemas\
+
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Food/FoodPokeTypeParam.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Food/FoodPokeTypeParam.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/Food/FoodPokeTypeParam.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Food/FoodPokeTypeParam.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/BufDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/BufDataArray.fbs
similarity index 84%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/BufDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/BufDataArray.fbs
index 1ecfa30f..038f11d6 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/BufDataArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/BufDataArray.fbs
@@ -1,5 +1,5 @@
-include "../Cooking/Enums/FoodSkillType.fbs";
-include "../Shared/MoveType.fbs";
+include "Enums/FoodSkillType.fbs";
+include "Shared/MoveType.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/CookingCommonData.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/CookingCommonData.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/CookingCommonData.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/CookingCommonData.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Enums/FoodSkillType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Enums/FoodSkillType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Enums/FoodSkillType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Enums/FoodSkillType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Enums/IngredientType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Enums/IngredientType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Enums/IngredientType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Enums/IngredientType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Enums/RecipeType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Enums/RecipeType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Enums/RecipeType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Enums/RecipeType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Enums/SeasoningType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Enums/SeasoningType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Enums/SeasoningType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Enums/SeasoningType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/FoodPowerComboArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/FoodPowerComboArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/FoodPowerComboArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/FoodPowerComboArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/IngredientDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/IngredientDataArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/IngredientDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/IngredientDataArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/IngredientDishDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/IngredientDishDataArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/IngredientDishDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/IngredientDishDataArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Param/FoodPokeTypeParam.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Param/FoodPokeTypeParam.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Param/FoodPokeTypeParam.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Param/FoodPokeTypeParam.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Param/FoodPowerComboParam.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Param/FoodPowerComboParam.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Param/FoodPowerComboParam.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Param/FoodPowerComboParam.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Param/FoodPowerParam.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Param/FoodPowerParam.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Param/FoodPowerParam.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Param/FoodPowerParam.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Param/IngredientParam.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Param/IngredientParam.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Param/IngredientParam.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Param/IngredientParam.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/RecipeDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/RecipeDataArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/RecipeDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/RecipeDataArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/SeasoningDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/SeasoningDataArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/SeasoningDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/SeasoningDataArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/TakaraSpicePowerTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/TakaraSpicePowerTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/TakaraSpicePowerTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/TakaraSpicePowerTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/pkNX.Structures.FlatBuffers.SV.Cooking.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/pkNX.Structures.FlatBuffers.SV.Cooking.csproj
new file mode 100644
index 00000000..b782ecb2
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/pkNX.Structures.FlatBuffers.SV.Cooking.csproj
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\
+
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventAddPokemonArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventAddPokemonArray.fbs
similarity index 88%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventAddPokemonArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventAddPokemonArray.fbs
index 40a2a035..96db3f38 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventAddPokemonArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventAddPokemonArray.fbs
@@ -1,4 +1,4 @@
-include "../PokeData/PokeDataFull.fbs";
+include "PokeData/PokeDataFull.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventSub012.RewardTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventSub012.RewardTableArray.fbs
similarity index 89%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventSub012.RewardTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventSub012.RewardTableArray.fbs
index d5a27c14..664fb845 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventSub012.RewardTableArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventSub012.RewardTableArray.fbs
@@ -1,4 +1,4 @@
-include "../Shared/ItemID.fbs";
+include "Shared/ItemID.fbs";
namespace pkNX.Structures.FlatBuffers.SV.EventSub012;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventTradeListArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventTradeListArray.fbs
similarity index 90%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventTradeListArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventTradeListArray.fbs
index 74309c74..7454bbf9 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventTradeListArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventTradeListArray.fbs
@@ -1,4 +1,4 @@
-include "../Shared/DevID.fbs";
+include "Shared/DevID.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventTradePokemonArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventTradePokemonArray.fbs
similarity index 87%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventTradePokemonArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventTradePokemonArray.fbs
index 1349576e..5e7541dc 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventTradePokemonArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventTradePokemonArray.fbs
@@ -1,4 +1,4 @@
-include "../PokeData/PokeDataTrade.fbs";
+include "PokeData/PokeDataTrade.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcFaceType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcFaceType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcFaceType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcFaceType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcMotion.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcMotion.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcMotion.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcMotion.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcMotionType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcMotionType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcMotionType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcMotionType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcPokemonDefaultMotion.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcPokemonDefaultMotion.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcPokemonDefaultMotion.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcPokemonDefaultMotion.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcPokemonMotion.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcPokemonMotion.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcPokemonMotion.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcPokemonMotion.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/NpcTrafficFormation.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/NpcTrafficFormation.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/NpcTrafficFormation.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/NpcTrafficFormation.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/NpcTrafficPartnerType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/NpcTrafficPartnerType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/NpcTrafficPartnerType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/NpcTrafficPartnerType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/NpcTrafficGenerateTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/NpcTrafficGenerateTableArray.fbs
similarity index 97%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/NpcTrafficGenerateTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/NpcTrafficGenerateTableArray.fbs
index 58ec88a5..235f37f5 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/NpcTrafficGenerateTableArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/NpcTrafficGenerateTableArray.fbs
@@ -1,5 +1,5 @@
-include "../Shared/DevID.fbs";
-include "../Shared/SexType.fbs";
+include "Shared/DevID.fbs";
+include "Shared/SexType.fbs";
include "Motion/NpcTrafficPartnerType.fbs";
include "Motion/FieldNpcFaceType.fbs";
include "Motion/NpcTrafficFormation.fbs";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/PopupWindowTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/PopupWindowTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/PopupWindowTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/PopupWindowTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/TreeShakePokemonArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/TreeShakePokemonArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/TreeShakePokemonArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/TreeShakePokemonArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/pkNX.Structures.FlatBuffers.SV.Event.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/pkNX.Structures.FlatBuffers.SV.Event.csproj
new file mode 100644
index 00000000..b782ecb2
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/pkNX.Structures.FlatBuffers.SV.Event.csproj
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\
+
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/ExerciseRewardData.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/ExerciseRewardData.fbs
similarity index 84%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/ExerciseRewardData.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/ExerciseRewardData.fbs
index 94b4cc6e..fe6b2b6f 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/ExerciseRewardData.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/ExerciseRewardData.fbs
@@ -1,4 +1,4 @@
-include "../Shared/ItemID.fbs";
+include "Shared/ItemID.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_valueStruct";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/ExerciseSetting.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/ExerciseSetting.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/ExerciseSetting.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/ExerciseSetting.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/GymKooriCoursePokemonTable.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/GymKooriCoursePokemonTable.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/GymKooriCoursePokemonTable.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/GymKooriCoursePokemonTable.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/GymKooriCourseTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/GymKooriCourseTableArray.fbs
similarity index 96%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/GymKooriCourseTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/GymKooriCourseTableArray.fbs
index 7be6ce50..274d2228 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/GymKooriCourseTableArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/GymKooriCourseTableArray.fbs
@@ -1,4 +1,4 @@
-include "../Shared/ItemID.fbs";
+include "Shared/ItemID.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.denki.PopupPosTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.denki.PopupPosTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.denki.PopupPosTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.denki.PopupPosTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.esper.ENDLESS_BORDERArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.esper.ENDLESS_BORDERArray.fbs
similarity index 89%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.esper.ENDLESS_BORDERArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.esper.ENDLESS_BORDERArray.fbs
index 78d6d996..38f251d3 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.esper.ENDLESS_BORDERArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.esper.ENDLESS_BORDERArray.fbs
@@ -1,5 +1,5 @@
include "ExerciseSetting.fbs";
-include "../Shared/ItemID.fbs";
+include "Shared/ItemID.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.esper.EXERCISE_COURSESArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.esper.EXERCISE_COURSESArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.esper.EXERCISE_COURSESArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.esper.EXERCISE_COURSESArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.kusa.PokeTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.kusa.PokeTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.kusa.PokeTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.kusa.PokeTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.kusa.RewardTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.kusa.RewardTableArray.fbs
similarity index 89%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.kusa.RewardTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.kusa.RewardTableArray.fbs
index 7b5a77e1..73ce6484 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.kusa.RewardTableArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.kusa.RewardTableArray.fbs
@@ -1,4 +1,4 @@
-include "../Shared/ItemID.fbs";
+include "Shared/ItemID.fbs";
namespace pkNX.Structures.FlatBuffers.SV.Gym;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.FixTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.FixTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.FixTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.FixTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.SeriItemTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.SeriItemTableArray.fbs
similarity index 91%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.SeriItemTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.SeriItemTableArray.fbs
index ea09b1f4..5937b0b5 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.SeriItemTableArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.SeriItemTableArray.fbs
@@ -1,5 +1,5 @@
-include "../Shared/DevID.fbs";
-include "../Shared/ItemID.fbs";
+include "Shared/DevID.fbs";
+include "Shared/ItemID.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.SeriNpcTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.SeriNpcTableArray.fbs
similarity index 95%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.SeriNpcTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.SeriNpcTableArray.fbs
index b6bb8ceb..a4163ce4 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.SeriNpcTableArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.SeriNpcTableArray.fbs
@@ -1,4 +1,4 @@
-include "../Shared/ItemID.fbs";
+include "Shared/ItemID.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.SeriVenueTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.SeriVenueTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.SeriVenueTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.SeriVenueTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mushi.GymMushiData.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mushi.GymMushiData.fbs
similarity index 96%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mushi.GymMushiData.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mushi.GymMushiData.fbs
index ac9f7406..116d29d5 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mushi.GymMushiData.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mushi.GymMushiData.fbs
@@ -1,4 +1,4 @@
-include "../Shared/ItemID.fbs";
+include "Shared/ItemID.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mushi.GymMushiRewardArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mushi.GymMushiRewardArray.fbs
similarity index 92%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mushi.GymMushiRewardArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mushi.GymMushiRewardArray.fbs
index 8f41fe11..33f790f2 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mushi.GymMushiRewardArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mushi.GymMushiRewardArray.fbs
@@ -1,4 +1,4 @@
-include "../Shared/ItemID.fbs";
+include "Shared/ItemID.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym_denki.PopupFixTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym_denki.PopupFixTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym_denki.PopupFixTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym_denki.PopupFixTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/pkNX.Structures.FlatBuffers.SV.Gym.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/pkNX.Structures.FlatBuffers.SV.Gym.csproj
new file mode 100644
index 00000000..b782ecb2
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/pkNX.Structures.FlatBuffers.SV.Gym.csproj
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\
+
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/DLCItemGroupArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/DLCItemGroupArray.fbs
similarity index 79%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/DLCItemGroupArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/DLCItemGroupArray.fbs
index 59035238..9ce0148f 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/DLCItemGroupArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/DLCItemGroupArray.fbs
@@ -1,17 +1,17 @@
-include "../Shared/DevID.fbs";
-include "../Shared/ItemID.fbs";
-include "../Shared/SexType.fbs";
-include "../Shared/TokuseiType.fbs";
-include "../Shared/GemType.fbs";
-include "../Shared/RareType.fbs";
-include "../Shared/SizeType.fbs";
-include "../Shared/TalentType.fbs";
-include "../Shared/SeikakuType.fbs";
-include "../Shared/BallType.fbs";
+include "Shared/DevID.fbs";
+include "Shared/ItemID.fbs";
+include "Shared/SexType.fbs";
+include "Shared/TokuseiType.fbs";
+include "Shared/GemType.fbs";
+include "Shared/RareType.fbs";
+include "Shared/SizeType.fbs";
+include "Shared/TalentType.fbs";
+include "Shared/SeikakuType.fbs";
+include "Shared/BallType.fbs";
-include "../Entity/ParamSet.fbs";
-include "../PokeData/WazaSet.fbs";
-include "../Waza/WazaType.fbs";
+include "Entity/ParamSet.fbs";
+include "PokeData/WazaSet.fbs";
+include "Shared/WazaType.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/DropItemDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/DropItemDataArray.fbs
similarity index 84%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/DropItemDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/DropItemDataArray.fbs
index 4e2feeb0..84203ec6 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/DropItemDataArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/DropItemDataArray.fbs
@@ -1,5 +1,5 @@
-include "../Shared/ItemID.fbs";
-include "../Shared/DevID.fbs";
+include "Shared/ItemID.fbs";
+include "Shared/DevID.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/BattleFunctionType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/BattleFunctionType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/BattleFunctionType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/BattleFunctionType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/EquipEffect.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/EquipEffect.fbs
similarity index 99%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/EquipEffect.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/EquipEffect.fbs
index ccb061db..e2f782f5 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/EquipEffect.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/EquipEffect.fbs
@@ -1,4 +1,5 @@
namespace pkNX.Structures.FlatBuffers.SV;
+
enum EquipEffect : int {
SOUBI_NONE = 0,
SOUBI_HPKAIHUKU = 1,
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/FieldFunctionType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/FieldFunctionType.fbs
similarity index 99%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/FieldFunctionType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/FieldFunctionType.fbs
index a6ba63c8..fa73915c 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/FieldFunctionType.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/FieldFunctionType.fbs
@@ -1,4 +1,5 @@
namespace pkNX.Structures.FlatBuffers.SV;
+
enum FieldFunctionType : int {
FIELDFUNC_NONE = 0,
FIELDFUNC_RECOVER = 1,
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/FieldPocket.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/FieldPocket.fbs
similarity index 99%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/FieldPocket.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/FieldPocket.fbs
index 4ad0e81f..d2dbd26f 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/FieldPocket.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/FieldPocket.fbs
@@ -1,4 +1,5 @@
namespace pkNX.Structures.FlatBuffers.SV;
+
enum FieldPocket : int {
FPOCKET_DRUG = 0,
FPOCKET_BALL = 1,
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/ItemGroup.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/ItemGroup.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/ItemGroup.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/ItemGroup.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/ItemType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/ItemType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/ItemType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/ItemType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/PluckEffect.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/PluckEffect.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/PluckEffect.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/PluckEffect.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/WorkPpSelTgt.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/WorkPpSelTgt.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/WorkPpSelTgt.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/WorkPpSelTgt.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/WorkType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/WorkType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/WorkType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/WorkType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/HiddenItemBiomeTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/HiddenItemBiomeTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/HiddenItemBiomeTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/HiddenItemBiomeTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/HiddenItemDataTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/HiddenItemDataTableArray.fbs
similarity index 96%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/HiddenItemDataTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/HiddenItemDataTableArray.fbs
index b1460013..e3ec03cd 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/HiddenItemDataTableArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/HiddenItemDataTableArray.fbs
@@ -1,4 +1,4 @@
-include "../Shared/ItemID.fbs";
+include "Shared/ItemID.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/ItemDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/ItemDataArray.fbs
similarity index 98%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/ItemDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/ItemDataArray.fbs
index f39087c2..010c8a99 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/ItemDataArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/ItemDataArray.fbs
@@ -1,4 +1,4 @@
-include "../Waza/WazaID.fbs";
+include "Shared/WazaID.fbs";
include "Enums/BattleFunctionType.fbs";
include "Enums/EquipEffect.fbs";
include "Enums/FieldFunctionType.fbs";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/ItemPointTypeBiomeTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/ItemPointTypeBiomeTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/ItemPointTypeBiomeTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/ItemPointTypeBiomeTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/MonohiroiItemArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/MonohiroiItemArray.fbs
similarity index 97%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/MonohiroiItemArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/MonohiroiItemArray.fbs
index 53da27bd..28449eb3 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/MonohiroiItemArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/MonohiroiItemArray.fbs
@@ -1,4 +1,4 @@
-include "../Shared/ItemID.fbs";
+include "Shared/ItemID.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/RummagingItemDataTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/RummagingItemDataTableArray.fbs
similarity index 95%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/RummagingItemDataTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/RummagingItemDataTableArray.fbs
index 9a9f64d7..b3538b63 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/RummagingItemDataTableArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/RummagingItemDataTableArray.fbs
@@ -1,4 +1,4 @@
-include "../Shared/ItemID.fbs";
+include "Shared/ItemID.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/pkNX.Structures.FlatBuffers.SV.Item.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/pkNX.Structures.FlatBuffers.SV.Item.csproj
new file mode 100644
index 00000000..b782ecb2
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/pkNX.Structures.FlatBuffers.SV.Item.csproj
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\
+
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoCommonLevelArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoCommonLevelArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoCommonLevelArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoCommonLevelArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoDifficultEnum.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoDifficultEnum.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoDifficultEnum.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoDifficultEnum.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoPokemonArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoPokemonArray.fbs
similarity index 90%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoPokemonArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoPokemonArray.fbs
index 4d62b762..0fb7bfcb 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoPokemonArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoPokemonArray.fbs
@@ -1,4 +1,4 @@
-include "../../Shared/DevID.fbs";
+include "Shared/DevID.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoTypeEnum.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoTypeEnum.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoTypeEnum.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoTypeEnum.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoUnitArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoUnitArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoUnitArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoUnitArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Misc/GemSettingRootTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/GemSettingRootTableArray.fbs
similarity index 97%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Misc/GemSettingRootTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/GemSettingRootTableArray.fbs
index ce2da538..cfcf0221 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Misc/GemSettingRootTableArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/GemSettingRootTableArray.fbs
@@ -1,4 +1,4 @@
-include "../Geometry/PackedVec3f.fbs";
+include "Math/PackedVec3f.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/System/ObjectGenerationRangeArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/ObjectGenerationRangeArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/System/ObjectGenerationRangeArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/ObjectGenerationRangeArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Misc/RibbonDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/RibbonDataArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Misc/RibbonDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/RibbonDataArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/pkNX.Structures.FlatBuffers.SV.Misc.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/pkNX.Structures.FlatBuffers.SV.Misc.csproj
new file mode 100644
index 00000000..b1ac3808
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/pkNX.Structures.FlatBuffers.SV.Misc.csproj
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\;..\..\pkNX.Structures.FlatBuffers\Schemas\
+
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/Dumpers/PersonalDumperSV.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Dumpers/PersonalDumperSV.cs
similarity index 94%
rename from pkNX.Structures.FlatBuffers.SV/Dumpers/PersonalDumperSV.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Dumpers/PersonalDumperSV.cs
index 06043aa5..c14f3f85 100644
--- a/pkNX.Structures.FlatBuffers.SV/Dumpers/PersonalDumperSV.cs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Dumpers/PersonalDumperSV.cs
@@ -40,7 +40,10 @@ public class PersonalDumperSV
417, 126, 056, 059, 519, 518, 520, 528, 188, 089,
444, 566, 416, 307, 308, 338, 200, 315, 411, 437,
542, 433, 405, 063, 413, 394, 087, 370, 076, 434,
- 796, 851,
+ 796, 851, 046, 268, 114, 092, 328, 180, 356, 479,
+ 360, 282, 450, 162, 410, 679, 667, 333, 503, 535,
+ 669, 253, 264, 311, 803, 807, 812, 814, 809, 808,
+ 799, 802,
};
private static readonly string[] AbilitySuffix = { " (1)", " (2)", " (H)" };
@@ -78,6 +81,10 @@ public void AddDump(List lines, PersonalTable9SV table, ushort speciesIn
name += $"-{form}";
if (entry.FB.Dex is { } dex)
name += $" #{dex.Index:000}";
+ if (entry.FB.KitakamiDex != 0)
+ name += $" K#{entry.FB.KitakamiDex:000}";
+ if (entry.FB.BlueberryDex != 0)
+ name += $" B#{entry.FB.BlueberryDex:000}";
AddDump(lines, entry, index, name, speciesInternal, form);
}
@@ -203,7 +210,7 @@ private string GetArgTypeDisplayValue(EvolutionType type, ushort value)
EvolutionTypeArgumentType.Moves => Moves[value],
EvolutionTypeArgumentType.Species => GetSpeciesName(value),
EvolutionTypeArgumentType.Type => Types[value],
- //EvolutionTypeArgumentType.Stat => expr,
+ EvolutionTypeArgumentType.Stat => value.ToString(),
//EvolutionTypeArgumentType.Version => expr,
_ => throw new ArgumentOutOfRangeException(nameof(argType), argType, null),
};
@@ -309,7 +316,7 @@ public static class Plib9
{ 0047, 0000 }, //
{ 0048, 0000 }, //
{ 0049, 0326 }, // Razor Claw
- { 0050, 0000 }, //
+ { 0050, 0327 }, // Razor Fang
{ 0051, 0644 }, // Pixie Plate
{ 0052, 0849 }, // Ice Stone
{ 0053, 0000 }, //
@@ -329,7 +336,7 @@ public static class Plib9
{ 0067, 0000 }, //
{ 0068, 0000 }, //
{ 0069, 0000 }, //
- { 0070, 0000 }, //
+ { 0070, 1103 }, // Rusted Sword
{ 0071, 1104 }, // Rusted Shield
{ 0072, 0000 }, //
{ 0073, 0000 }, //
@@ -353,5 +360,10 @@ public static class Plib9
{ 0091, 0000 }, //
{ 0092, 0218 }, // Soothe Bell
{ 0093, 0109 }, // Dawn Stone
+ { 0094, 2403 }, // Unremarkable Teacup
+ { 0095, 2404 }, // Masterpiece Teacup
+ { 0096, 2402 }, // Syrupy Apple
+ { 0111, 0537 }, // Prism Scale
+ { 0112, 0325 }, // Reaper Cloth
};
}
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Personal/PersonalTable.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/PersonalTable.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/Personal/PersonalTable.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/PersonalTable.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Types/PersonalInfoDex.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Types/PersonalInfoDex.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Types/PersonalInfoDex.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Types/PersonalInfoDex.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Types/PersonalInfoEvolution.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Types/PersonalInfoEvolution.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Types/PersonalInfoEvolution.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Types/PersonalInfoEvolution.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Types/PersonalInfoGender.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Types/PersonalInfoGender.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Types/PersonalInfoGender.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Types/PersonalInfoGender.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Types/PersonalInfoStats.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Types/PersonalInfoStats.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Types/PersonalInfoStats.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Types/PersonalInfoStats.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Wrapper/PersonalInfo9SV.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Wrapper/PersonalInfo9SV.cs
similarity index 94%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Wrapper/PersonalInfo9SV.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Wrapper/PersonalInfo9SV.cs
index ac91d86c..5389652a 100644
--- a/pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Wrapper/PersonalInfo9SV.cs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Wrapper/PersonalInfo9SV.cs
@@ -113,7 +113,8 @@ public void Write(BinaryWriter bw)
bw.Write(FormCount);
bw.Write(FB.Info.Color);
bw.Write(FB.IsPresentInGame);
- bw.Write((byte)DexGroup);
+
+ bw.Write((byte)(DexGroup == 1 ? 1 : FB.KitakamiDex != 0 ? 2 : FB.BlueberryDex != 0 ? 2 : 0));
bw.Write((ushort)DexIndex);
bw.Write(FB.Info.Height);
bw.Write(FB.Info.Weight);
@@ -124,7 +125,7 @@ public void Write(BinaryWriter bw)
// 0x2C
// TMs
- byte[] tmFlags = new byte[0x18];
+ byte[] tmFlags = new byte[0x1E];
if (IsPresentInGame)
{
foreach (ushort tm in FB.TechnicalMachine)
@@ -137,6 +138,8 @@ public void Write(BinaryWriter bw)
}
}
bw.Write(tmFlags);
+ bw.Write(FB.KitakamiDex);
+ bw.Write(FB.BlueberryDex);
}
public static readonly ushort[] TMIndexes =
@@ -158,6 +161,9 @@ public void Write(BinaryWriter bw)
417, 126, 056, 059, 519, 518, 520, 528, 188, 089,
444, 566, 416, 307, 308, 338, 200, 315, 411, 437,
542, 433, 405, 063, 413, 394, 087, 370, 076, 434,
- 796, 851,
+ 796, 851, 046, 268, 114, 092, 328, 180, 356, 479,
+ 360, 282, 450, 162, 410, 679, 667, 333, 503, 535,
+ 669, 253, 264, 311, 803, 807, 812, 814, 809, 808,
+ 799, 802,
};
}
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Wrapper/PersonalTable9SV.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Wrapper/PersonalTable9SV.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Wrapper/PersonalTable9SV.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Wrapper/PersonalTable9SV.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoDetail.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoDetail.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoDetail.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoDetail.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoDex.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoDex.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoDex.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoDex.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoEvolution.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoEvolution.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoEvolution.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoEvolution.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoGender.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoGender.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoGender.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoGender.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoHatch.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoHatch.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoHatch.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoHatch.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoMove.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoMove.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoMove.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoMove.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoStats.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoStats.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoStats.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoStats.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalTable.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalTable.fbs
similarity index 96%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalTable.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalTable.fbs
index 690407fc..d8ed12c9 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalTable.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalTable.fbs
@@ -13,6 +13,8 @@ table PersonalInfo {
Info:PersonalInfoDetail (required);
IsPresentInGame:bool;
Dex:PersonalInfoDex; // not required
+ KitakamiDex:ubyte;
+ BlueberryDex:ubyte;
Type1:ubyte;
Type2:ubyte;
Ability1:ushort;
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/pkNX.Structures.FlatBuffers.SV.Personal.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/pkNX.Structures.FlatBuffers.SV.Personal.csproj
new file mode 100644
index 00000000..44307490
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/pkNX.Structures.FlatBuffers.SV.Personal.csproj
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ Schemas\
+
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicPokemon.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicPokemon.fbs
similarity index 98%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicPokemon.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicPokemon.fbs
index 1a0268c2..fb460735 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicPokemon.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicPokemon.fbs
@@ -1,4 +1,4 @@
-include "../Geometry/PackedVec3f.fbs";
+include "Math/PackedVec3f.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicSystemData.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicSystemData.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicSystemData.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicSystemData.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicTablesetData.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicTablesetData.fbs
similarity index 98%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicTablesetData.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicTablesetData.fbs
index 5613e768..08d4d800 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicTablesetData.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicTablesetData.fbs
@@ -1,4 +1,4 @@
-include "../Geometry/Transform.fbs";
+include "Math/Transform.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicWagonData.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicWagonData.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicWagonData.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicWagonData.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/pkNX.Structures.FlatBuffers.SV.Picnic.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/pkNX.Structures.FlatBuffers.SV.Picnic.csproj
new file mode 100644
index 00000000..48142e0f
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/pkNX.Structures.FlatBuffers.SV.Picnic.csproj
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ ..\..\pkNX.Structures.FlatBuffers\Schemas\
+
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Raid/DeliveryRaidEnemyTableArray.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/DeliveryRaidEnemyTableArray.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/Raid/DeliveryRaidEnemyTableArray.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/DeliveryRaidEnemyTableArray.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Raid/DeliveryRaidFixedRewardItemArray.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/DeliveryRaidFixedRewardItemArray.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/Raid/DeliveryRaidFixedRewardItemArray.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/DeliveryRaidFixedRewardItemArray.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Raid/DeliveryRaidLotteryRewardItemArray.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/DeliveryRaidLotteryRewardItemArray.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/Raid/DeliveryRaidLotteryRewardItemArray.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/DeliveryRaidLotteryRewardItemArray.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Raid/RaidFixedRewardItemArray.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/RaidFixedRewardItemArray.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/Raid/RaidFixedRewardItemArray.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/RaidFixedRewardItemArray.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Raid/RaidLotteryRewardItemArray.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/RaidLotteryRewardItemArray.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/Raid/RaidLotteryRewardItemArray.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/RaidLotteryRewardItemArray.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/DeliveryRaidEnemyTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/DeliveryRaidEnemyTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/DeliveryRaidEnemyTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/DeliveryRaidEnemyTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/DeliveryRaidFixedRewardItemArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/DeliveryRaidFixedRewardItemArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/DeliveryRaidFixedRewardItemArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/DeliveryRaidFixedRewardItemArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/DeliveryRaidLotteryRewardItemArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/DeliveryRaidLotteryRewardItemArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/DeliveryRaidLotteryRewardItemArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/DeliveryRaidLotteryRewardItemArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/DeliveryRaidPriorityArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/DeliveryRaidPriorityArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/DeliveryRaidPriorityArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/DeliveryRaidPriorityArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidBossExtraActType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidBossExtraActType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidBossExtraActType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidBossExtraActType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidBossExtraTimingType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidBossExtraTimingType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidBossExtraTimingType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidBossExtraTimingType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidRewardItemCategoryType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidRewardItemCategoryType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidRewardItemCategoryType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidRewardItemCategoryType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidRewardItemSubjectType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidRewardItemSubjectType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidRewardItemSubjectType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidRewardItemSubjectType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidRomType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidRomType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidRomType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidRomType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidDifficultyLotteryTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidDifficultyLotteryTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidDifficultyLotteryTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidDifficultyLotteryTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidEnemyInfo.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidEnemyInfo.fbs
similarity index 96%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidEnemyInfo.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidEnemyInfo.fbs
index 3b667a5d..b69d62c0 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidEnemyInfo.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidEnemyInfo.fbs
@@ -1,8 +1,8 @@
include "Enums/RaidRomType.fbs";
include "Enums/RaidBossExtraTimingType.fbs";
include "Enums/RaidBossExtraActType.fbs";
-include "../Waza/WazaID.fbs";
-include "../PokeData/PokeDataBattle.fbs";
+include "Shared/WazaID.fbs";
+include "PokeData/PokeDataBattle.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidEnemyTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidEnemyTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidEnemyTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidEnemyTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidFixedRewardItemArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidFixedRewardItemArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidFixedRewardItemArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidFixedRewardItemArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidFixedRewardItemInfo.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidFixedRewardItemInfo.fbs
similarity index 90%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidFixedRewardItemInfo.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidFixedRewardItemInfo.fbs
index 01824067..bb73cc46 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidFixedRewardItemInfo.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidFixedRewardItemInfo.fbs
@@ -1,4 +1,4 @@
-include "../Shared/ItemID.fbs";
+include "Shared/ItemID.fbs";
include "Enums/RaidRewardItemCategoryType.fbs";
include "Enums/RaidRewardItemSubjectType.fbs";
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidGemItemRewardBoost.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidGemItemRewardBoost.fbs
new file mode 100644
index 00000000..df29258c
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidGemItemRewardBoost.fbs
@@ -0,0 +1,12 @@
+namespace pkNX.Structures.FlatBuffers.SV;
+attribute "fs_serializer";
+
+table RaidGemItemRewardBoost (fs_serializer) {
+ difficulty_1:int;
+ difficulty_2:int;
+ difficulty_3:int;
+ difficulty_4:int;
+ difficulty_5:int;
+ difficulty_6:int;
+ difficulty_7:int;
+}
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidGemSetting.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidGemSetting.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidGemSetting.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidGemSetting.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidLotteryRewardItemArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidLotteryRewardItemArray.fbs
similarity index 96%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidLotteryRewardItemArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidLotteryRewardItemArray.fbs
index 6a3ca81e..7cd03a19 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidLotteryRewardItemArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidLotteryRewardItemArray.fbs
@@ -1,5 +1,5 @@
-include "../Shared/ItemID.fbs";
-include "/RaidLotteryRewardItemInfo.fbs";
+include "Shared/ItemID.fbs";
+include "RaidLotteryRewardItemInfo.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidLotteryRewardItemInfo.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidLotteryRewardItemInfo.fbs
similarity index 88%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidLotteryRewardItemInfo.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidLotteryRewardItemInfo.fbs
index 4ce0564c..47c80c72 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidLotteryRewardItemInfo.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidLotteryRewardItemInfo.fbs
@@ -1,4 +1,4 @@
-include "../Shared/ItemID.fbs";
+include "Shared/ItemID.fbs";
include "Enums/RaidRewardItemCategoryType.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidPokeScaleDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidPokeScaleDataArray.fbs
similarity index 83%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidPokeScaleDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidPokeScaleDataArray.fbs
index 7b662c41..f86acafe 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidPokeScaleDataArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidPokeScaleDataArray.fbs
@@ -1,5 +1,5 @@
-include "../Shared/DevID.fbs";
-include "../Shared/SexType.fbs";
+include "Shared/DevID.fbs";
+include "Shared/SexType.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidRewardSlotArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidRewardSlotArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidRewardSlotArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidRewardSlotArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidTrainerArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidTrainerArray.fbs
similarity index 81%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidTrainerArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidTrainerArray.fbs
index 789f654f..35761fd3 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidTrainerArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidTrainerArray.fbs
@@ -1,12 +1,14 @@
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
+table RaidTrainer {
+ RaidTrainerInfo:string (required);
+ NpcPresetIndex:int;
+ NameTextLabel:string;
+}
+
table RaidTrainerArray (fs_serializer) {
Table:[RaidTrainer] (required);
}
-table RaidTrainer {
- RaidTrainerInfo:string (required);
- NpcPresetIndex:int;
- NameTextLabel:string (required);
-}
+root_type RaidTrainerArray;
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/pkNX.Structures.FlatBuffers.SV.Raid.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/pkNX.Structures.FlatBuffers.SV.Raid.csproj
new file mode 100644
index 00000000..b782ecb2
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/pkNX.Structures.FlatBuffers.SV.Raid.csproj
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\
+
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/FlatDummyEntry.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/FlatDummyEntry.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/FlatDummyEntry.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/FlatDummyEntry.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataBattle.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataBattle.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataBattle.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataBattle.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataEventBattle.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataEventBattle.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataEventBattle.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataEventBattle.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataFull.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataFull.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataFull.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataFull.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataSymbol.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataSymbol.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataSymbol.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataSymbol.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataTrade.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataTrade.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataTrade.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataTrade.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/WazaSet.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/WazaSet.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/WazaSet.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/WazaSet.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/SpeciesConverterSV.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/SpeciesConverterSV.cs
similarity index 91%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/SpeciesConverterSV.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/SpeciesConverterSV.cs
index 42adf16e..c897b362 100644
--- a/pkNX.Structures.FlatBuffers.SV/Gen9/SpeciesConverterSV.cs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/SpeciesConverterSV.cs
@@ -13,6 +13,7 @@ public static T[] GetRearrangedAsNational(T[] specNames)
for (ushort indexInternal = 0; indexInternal < specNames.Length; indexInternal++)
{
var indexNational = GetNational9(indexInternal);
+ if (indexNational >= specNames.Length) continue;
result[indexNational] = specNames[indexInternal];
}
return result;
@@ -64,9 +65,12 @@ public static ushort GetNational9(ushort raw)
029, -53, -65, 025, -06, -03, -07, -04, -04, -08,
-04, 001, -03, -03, -06, -04, -47, -47, -47, -23,
-23, -05, -07, -09, -07, -20, -13, -09, -09, -29,
- -23,
+ -23, 001, 012, 012, 000, 000, 000, -06, UNK, UNK,
+ UNK, UNK, UNK, UNK, UNK, UNK,
};
+ private const sbyte UNK = 111;
+
///
/// Difference of Gen9 Species IDs (index) and the associated National Dex IDs (value)
///
@@ -82,6 +86,8 @@ public static ushort GetNational9(ushort raw)
029, 008, 003, 004, 004, 020, 004, 023, 006, 003,
003, 004, -01, 013, 009, 007, 005, 007, 009, 009,
-43, -43, -43, -68, -68, -68, -58, -58, -25, -29,
- -31,
+ -31, 006, -01, UNK, 000, 000, 000, UNK, UNK, UNK,
+ UNK, UNK, UNK, UNK, -12, -12,
};
+
}
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Entity/CollisionShape.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/CollisionShape.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Entity/CollisionShape.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/CollisionShape.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Entity/ComparisonOperatorType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/ComparisonOperatorType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Entity/ComparisonOperatorType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/ComparisonOperatorType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Entity/ConditionSimpleAutoBattleHecklerAreaArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/ConditionSimpleAutoBattleHecklerAreaArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Entity/ConditionSimpleAutoBattleHecklerAreaArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/ConditionSimpleAutoBattleHecklerAreaArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Entity/OwnerInfo.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/OwnerInfo.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Entity/OwnerInfo.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/OwnerInfo.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Entity/ParamSet.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/ParamSet.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Entity/ParamSet.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/ParamSet.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Entity/PokeObjArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/PokeObjArray.fbs
similarity index 97%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Entity/PokeObjArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/PokeObjArray.fbs
index db06728d..99f6ddc9 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Entity/PokeObjArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/PokeObjArray.fbs
@@ -1,5 +1,5 @@
include "../Shared/DevID.fbs";
-include "../Geometry/Vec3f.fbs";
+include "Math/Vec3f.fbs";
include "CollisionShape.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Entity/PokemonTriggerID.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/PokemonTriggerID.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Entity/PokemonTriggerID.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/PokemonTriggerID.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Entity/PokemonUniquePathData.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/PokemonUniquePathData.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Entity/PokemonUniquePathData.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/PokemonUniquePathData.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataBattle.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataBattle.fbs
similarity index 96%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataBattle.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataBattle.fbs
index 3fa71e8e..0812e6e1 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataBattle.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataBattle.fbs
@@ -11,7 +11,7 @@ include "../Shared/BallType.fbs";
include "../PokeData/WazaSet.fbs";
include "../Entity/ParamSet.fbs";
-include "../Waza/WazaType.fbs";
+include "../Shared/WazaType.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataEventBattle.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataEventBattle.fbs
similarity index 97%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataEventBattle.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataEventBattle.fbs
index 97f47798..fbe7a6ea 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataEventBattle.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataEventBattle.fbs
@@ -11,7 +11,7 @@ include "../Shared/RibbonType.fbs";
include "../PokeData/WazaSet.fbs";
include "../Entity/ParamSet.fbs";
-include "../Waza/WazaType.fbs";
+include "../Shared/WazaType.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataFull.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataFull.fbs
similarity index 98%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataFull.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataFull.fbs
index 41ad5e71..5e9f824c 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataFull.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataFull.fbs
@@ -13,7 +13,7 @@ include "../Shared/LangType.fbs";
include "../Shared/BallType.fbs";
include "../Shared/RibbonType.fbs";
include "../Shared/PokeMemoType.fbs";
-include "../Waza/WazaType.fbs";
+include "../Shared/WazaType.fbs";
include "WazaSet.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataSymbol.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataSymbol.fbs
similarity index 95%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataSymbol.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataSymbol.fbs
index d25fa8d5..889e83d2 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataSymbol.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataSymbol.fbs
@@ -8,7 +8,7 @@ include "../Shared/GemType.fbs";
include "../PokeData/WazaSet.fbs";
include "../Entity/ParamSet.fbs";
-include "../Waza/WazaType.fbs";
+include "../Shared/WazaType.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataTrade.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataTrade.fbs
similarity index 97%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataTrade.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataTrade.fbs
index 68fa8fde..9f4aacf8 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataTrade.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataTrade.fbs
@@ -11,7 +11,7 @@ include "../Shared/BallType.fbs";
include "../Entity/ParamSet.fbs";
include "../PokeData/WazaSet.fbs";
-include "../Waza/WazaType.fbs";
+include "../Shared/WazaType.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/WazaSet.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/WazaSet.fbs
similarity index 75%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/WazaSet.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/WazaSet.fbs
index 31d13151..aff4aad2 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/WazaSet.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/WazaSet.fbs
@@ -1,4 +1,4 @@
-include "../Waza/WazaID.fbs";
+include "../Shared/WazaID.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/BallType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/BallType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/BallType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/BallType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/BattleType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/BattleType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/BattleType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/BattleType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/ClerkType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/ClerkType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/ClerkType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/ClerkType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/CondEnum.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/CondEnum.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/CondEnum.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/CondEnum.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/DataType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/DataType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/DataType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/DataType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/DevID.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/DevID.fbs
similarity index 99%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/DevID.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/DevID.fbs
index a6426a3a..a63372e9 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/DevID.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/DevID.fbs
@@ -1013,4 +1013,11 @@ enum DevID : ushort {
DEV_KOMATANA3 = 1008,
DEV_rUPAA2 = 1009,
DEV_MANKII3 = 1010,
+ DEV_KAMENONI = 1011,
+ DEV_KAZITTYU2 = 1012,
+ DEV_DOKUINU = 1014,
+ DEV_DOKUZARU = 1015,
+ DEV_DOKUKIZI = 1016,
+ DEV_MATCHA1 = 1024,
+ DEV_MATCHA2 = 1025,
}
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/GemType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/GemType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/GemType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/GemType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/ItemID.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/ItemID.fbs
similarity index 88%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/ItemID.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/ItemID.fbs
index 5c2fb1bf..8aac212d 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/ItemID.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/ItemID.fbs
@@ -213,7 +213,9 @@ enum ItemID : int {
ITEMID_RYUUNOPUREETO = 311,
ITEMID_KOWAMOTEPUREETO = 312,
ITEMID_KOUTETUPUREETO = 313,
+ ITEMID_REIKAINONUNO = 325,
ITEMID_SURUDOITUME = 326,
+ ITEMID_SURUDOIKIBA = 327,
ITEMID_WAZAMASIN01 = 328,
ITEMID_WAZAMASIN02 = 329,
ITEMID_WAZAMASIN03 = 330,
@@ -306,6 +308,7 @@ enum ItemID : int {
ITEMID_WAZAMASIN90 = 417,
ITEMID_WAZAMASIN91 = 418,
ITEMID_WAZAMASIN92 = 419,
+ ITEMID_GURASIDEANOHANA = 466,
ITEMID_SUPIIDOBOORU = 492,
ITEMID_REBERUBOORU = 493,
ITEMID_RUAABOORU = 494,
@@ -314,6 +317,7 @@ enum ItemID : int {
ITEMID_HURENDOBOORU = 497,
ITEMID_MUUNBOORU = 498,
ITEMID_KONPEBOORU = 499,
+ ITEMID_KIREINAUROKO = 537,
ITEMID_SINKANOKISEKI = 538,
ITEMID_KARUISI = 539,
ITEMID_GOTUGOTUMETTO = 540,
@@ -411,8 +415,10 @@ enum ItemID : int {
ITEMID_MAZIMEMINTO = 1251,
ITEMID_WARETAPOTTO = 1253,
ITEMID_KAKETAPOTTO = 1254,
+ ITEMID_HOKAKUOMAMORI = 1267,
ITEMID_ROTOMUNOKATAROGU = 1278,
ITEMID_GARANATUBURESU = 1582,
+ ITEMID_KEIKENOMAMORI = 1587,
ITEMID_KIDUNANODADUNA = 1590,
ITEMID_KIDUNANODADUNA_KAIZYO = 1591,
ITEMID_GARANATURIISU = 1592,
@@ -769,6 +775,36 @@ enum ItemID : int {
ITEMID_WAZAMASIN169 = 2229,
ITEMID_WAZAMASIN170 = 2230,
ITEMID_WAZAMASIN171 = 2231,
+ ITEMID_WAZAMASIN172 = 2232,
+ ITEMID_WAZAMASIN173 = 2233,
+ ITEMID_WAZAMASIN174 = 2234,
+ ITEMID_WAZAMASIN175 = 2235,
+ ITEMID_WAZAMASIN176 = 2236,
+ ITEMID_WAZAMASIN177 = 2237,
+ ITEMID_WAZAMASIN178 = 2238,
+ ITEMID_WAZAMASIN179 = 2239,
+ ITEMID_WAZAMASIN180 = 2240,
+ ITEMID_WAZAMASIN181 = 2241,
+ ITEMID_WAZAMASIN182 = 2242,
+ ITEMID_WAZAMASIN183 = 2243,
+ ITEMID_WAZAMASIN184 = 2244,
+ ITEMID_WAZAMASIN185 = 2245,
+ ITEMID_WAZAMASIN186 = 2246,
+ ITEMID_WAZAMASIN187 = 2247,
+ ITEMID_WAZAMASIN188 = 2248,
+ ITEMID_WAZAMASIN189 = 2249,
+ ITEMID_WAZAMASIN190 = 2250,
+ ITEMID_WAZAMASIN191 = 2251,
+ ITEMID_WAZAMASIN192 = 2252,
+ ITEMID_WAZAMASIN193 = 2253,
+ ITEMID_WAZAMASIN194 = 2254,
+ ITEMID_WAZAMASIN195 = 2255,
+ ITEMID_WAZAMASIN196 = 2256,
+ ITEMID_WAZAMASIN197 = 2257,
+ ITEMID_WAZAMASIN198 = 2258,
+ ITEMID_WAZAMASIN199 = 2259,
+ ITEMID_WAZAMASIN200 = 2260,
+ ITEMID_WAZAMASIN201 = 2261,
ITEMID_PIKUNIKKUSETTO = 2311,
ITEMID_SUITOU1 = 2313,
ITEMID_SUITOU2 = 2314,
@@ -849,4 +885,85 @@ enum ItemID : int {
ITEMID_RANCHIPIKKU18 = 2393,
ITEMID_RANCHIPIKKU19 = 2394,
ITEMID_SARA2 = 2396,
+ ITEMID_YOUSEINOHANE = 2401,
+ ITEMID_MITSUIRIRINGO = 2402,
+ ITEMID_BONSAKUNOCHAWAN = 2403,
+ ITEMID_KESSAKUNOCHAWAN = 2404,
+ ITEMID_MIDORINOMEN = 2405,
+ ITEMID_ISHIDUENOMEN = 2406,
+ ITEMID_IDONOMEN = 2407,
+ ITEMID_KAMADONOMEN = 2408,
+ ITEMID_OSYAREKAADO1 = 2409,
+ ITEMID_KESSHOUNOKAKERA = 2410,
+ ITEMID_KIBIDANGO1 = 2411,
+ ITEMID_KIBIDANGO2 = 2412,
+ ITEMID_KIBIDANGO3 = 2413,
+ ITEMID_KIBIDANGO4 = 2414,
+ ITEMID_KIBIDANGO5 = 2415,
+ ITEMID_KIBIDANGO6 = 2416,
+ ITEMID_ISU1 = 2417,
+ ITEMID_ISU2 = 2418,
+ ITEMID_ISU3 = 2419,
+ ITEMID_ISU4 = 2420,
+ ITEMID_ISU5 = 2421,
+ ITEMID_ISU6 = 2422,
+ ITEMID_ISU7 = 2423,
+ ITEMID_ISU8 = 2424,
+ ITEMID_ISU9 = 2425,
+ ITEMID_ISU10 = 2426,
+ ITEMID_ISU11 = 2427,
+ ITEMID_ISU12 = 2428,
+ ITEMID_ISU13 = 2429,
+ ITEMID_ISU14 = 2430,
+ ITEMID_ISU15 = 2431,
+ ITEMID_ISU16 = 2432,
+ ITEMID_ISU17 = 2433,
+ ITEMID_ISU18 = 2434,
+ ITEMID_ISU19 = 2435,
+ ITEMID_ISU20 = 2436,
+ ITEMID_ISU21 = 2437,
+ ITEMID_SOZAI240 = 2438,
+ ITEMID_SOZAI241 = 2439,
+ ITEMID_SOZAI242 = 2440,
+ ITEMID_SOZAI243 = 2441,
+ ITEMID_SOZAI244 = 2442,
+ ITEMID_SOZAI245 = 2443,
+ ITEMID_SOZAI246 = 2444,
+ ITEMID_SOZAI247 = 2445,
+ ITEMID_SOZAI248 = 2446,
+ ITEMID_SOZAI249 = 2447,
+ ITEMID_SOZAI250 = 2448,
+ ITEMID_SOZAI251 = 2449,
+ ITEMID_SOZAI252 = 2450,
+ ITEMID_SOZAI253 = 2451,
+ ITEMID_SOZAI254 = 2452,
+ ITEMID_SOZAI255 = 2453,
+ ITEMID_SOZAI256 = 2454,
+ ITEMID_SOZAI257 = 2455,
+ ITEMID_SOZAI258 = 2456,
+ ITEMID_SOZAI259 = 2457,
+ ITEMID_SOZAI260 = 2458,
+ ITEMID_SOZAI261 = 2459,
+ ITEMID_SOZAI262 = 2460,
+ ITEMID_SOZAI263 = 2461,
+ ITEMID_SOZAI264 = 2462,
+ ITEMID_SOZAI265 = 2463,
+ ITEMID_SOZAI266 = 2464,
+ ITEMID_SOZAI267 = 2465,
+ ITEMID_SOZAI268 = 2466,
+ ITEMID_SOZAI269 = 2467,
+ ITEMID_SOZAI270 = 2468,
+ ITEMID_SOZAI271 = 2469,
+ ITEMID_SOZAI272 = 2470,
+ ITEMID_SOZAI273 = 2471,
+ ITEMID_SOZAI274 = 2472,
+ ITEMID_SOZAI275 = 2473,
+ ITEMID_SOZAI276 = 2474,
+ ITEMID_SOZAI277 = 2475,
+ ITEMID_SOZAI278 = 2476,
+ ITEMID_SOZAI279 = 2477,
+ ITEMID_SOZAI280 = 2478,
+ ITEMID_KIBIDANGO9 = 2479,
+ ITEMID_ZIDORIBOU = 2480,
+ ITEMID_TERAOMAMORI = 2481,
}
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/LangType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/LangType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/LangType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/LangType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/MoveType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/MoveType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/MoveType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/MoveType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/PayType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/PayType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/PayType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/PayType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/PokeMemoType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/PokeMemoType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/PokeMemoType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/PokeMemoType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/RareType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/RareType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/RareType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/RareType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/RibbonType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/RibbonType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/RibbonType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/RibbonType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/SeikakuType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/SeikakuType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/SeikakuType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/SeikakuType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/SellType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/SellType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/SellType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/SellType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/Sex.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/Sex.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/Sex.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/Sex.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/SexType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/SexType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/SexType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/SexType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/ShopKind.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/ShopKind.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/ShopKind.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/ShopKind.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/SizeType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/SizeType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/SizeType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/SizeType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/TalentType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/TalentType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/TalentType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/TalentType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/TokuseiType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/TokuseiType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/TokuseiType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/TokuseiType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaID.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/WazaID.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaID.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/WazaID.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/WazaType.fbs
similarity index 61%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/WazaType.fbs
index b043ce90..87700307 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaType.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/WazaType.fbs
@@ -1,6 +1,6 @@
namespace pkNX.Structures.FlatBuffers.SV;
-enum WazaType : int
-{ DEFAULT = 0,
+enum WazaType : int {
+ DEFAULT = 0,
MANUAL = 1,
}
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/pkNX.Structures.FlatBuffers.SV.Shared.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/pkNX.Structures.FlatBuffers.SV.Shared.csproj
new file mode 100644
index 00000000..abfb3a2c
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/pkNX.Structures.FlatBuffers.SV.Shared.csproj
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ ..\..\pkNX.Structures.FlatBuffers\Schemas\
+
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/Talk/CheckCategory.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/Talk/CheckCategory.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/Talk/CheckCategory.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/Talk/CheckCategory.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/Talk/TalkData.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/Talk/TalkData.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/Talk/TalkData.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/Talk/TalkData.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/Talk/TalkRankEffect.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/Talk/TalkRankEffect.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/Talk/TalkRankEffect.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/Talk/TalkRankEffect.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerBodySize.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerBodySize.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerBodySize.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerBodySize.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerCategory.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerCategory.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerCategory.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerCategory.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerDataArray.fbs
similarity index 89%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerDataArray.fbs
index 74d51eee..3183f69b 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerDataArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerDataArray.fbs
@@ -1,6 +1,6 @@
-include "../PokeData/PokeDataBattle.fbs";
-include "../Shared/BattleType.fbs";
-include "../Shared/DataType.fbs";
+include "PokeData/PokeDataBattle.fbs";
+include "Shared/BattleType.fbs";
+include "Shared/DataType.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerEnvArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerEnvArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerEnvArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerEnvArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerTypeArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerTypeArray.fbs
similarity index 95%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerTypeArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerTypeArray.fbs
index ecfb917c..8aafd6c7 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerTypeArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerTypeArray.fbs
@@ -1,6 +1,6 @@
include "TrainerCategory.fbs";
include "TrainerBodySize.fbs";
-include "../Shared/Sex.fbs";
+include "Shared/Sex.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/pkNX.Structures.FlatBuffers.SV.Trainers.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/pkNX.Structures.FlatBuffers.SV.Trainers.csproj
new file mode 100644
index 00000000..b782ecb2
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/pkNX.Structures.FlatBuffers.SV.Trainers.csproj
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\
+
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityFileDescriptors.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityFileDescriptors.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityFileDescriptors.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityFileDescriptors.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityFileSystemManager.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityFileSystemManager.cs
similarity index 93%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityFileSystemManager.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityFileSystemManager.cs
index 4b67540e..a00980c4 100644
--- a/pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityFileSystemManager.cs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityFileSystemManager.cs
@@ -32,11 +32,11 @@ public TrinityFileSystemManager(string pathFs, string pathFd)
// Extract the meta FlatBuffer
var dataMetaFB = br.ReadBytes((int)(totalLength - ofsMetaFB));
- var meta = TrinityFileSystemMetadata.Serializer.Parse(dataMetaFB, FlatBufferDeserializationOption.Progressive);
+ var meta = TrinityFileSystemMetadata.Serializer.Parse(dataMetaFB, FlatBufferDeserializationOption.GreedyMutable);
// Read the trpfd
var dataFd = File.ReadAllBytes(pathFd);
- var fd = TrinityFileDescriptors.Serializer.Parse(dataFd, FlatBufferDeserializationOption.Progressive);
+ var fd = TrinityFileDescriptors.Serializer.Parse(dataFd, FlatBufferDeserializationOption.GreedyMutable);
Debug.Assert(meta.FileHashes.Count == fd.FileInfos.Count);
Reader = br;
@@ -61,7 +61,7 @@ public byte[] GetData(ulong offset, ulong length)
public TrinityPak GetPak(int index)
{
var data = GetPakData(index);
- return TrinityPak.Serializer.Parse(data);
+ return TrinityPak.Serializer.Parse(data, FlatBufferDeserializationOption.GreedyMutable);
}
public byte[] GetPakData(int index)
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityFileSystemMetadata.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityFileSystemMetadata.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityFileSystemMetadata.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityFileSystemMetadata.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityPak.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityPak.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityPak.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityPak.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityPakExtractor.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityPakExtractor.cs
similarity index 95%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityPakExtractor.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityPakExtractor.cs
index 869608aa..1f950143 100644
--- a/pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityPakExtractor.cs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityPakExtractor.cs
@@ -2,9 +2,8 @@
using System.IO;
using FlatSharp;
using pkNX.Containers;
-using pkNX.Structures.FlatBuffers.SV.Trinity;
-namespace pkNX.Structures.FlatBuffers.SV;
+namespace pkNX.Structures.FlatBuffers.SV.Trinity;
public static class TrinityPakExtractor
{
@@ -47,7 +46,7 @@ private static void ExportArc(TrinityFileSystemManager reader, int packIndex, st
var outexpakdir = Path.Combine(outexdir, packFilePath);
Directory.CreateDirectory(outexpakdir);
- var trpak = FlatBufferConverter.DeserializeFrom(data, FlatBufferDeserializationOption.Lazy);
+ var trpak = FlatBufferConverter.DeserializeFrom(data, FlatBufferDeserializationOption.GreedyMutable);
ExtractPack(trpak, outexpakdir);
}
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityComponent.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityComponent.fbs
similarity index 94%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityComponent.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityComponent.fbs
index 1dc23656..bbd32996 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityComponent.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityComponent.fbs
@@ -1,5 +1,5 @@
-include "../Geometry/Vec3f.fbs";
-include "../Geometry/PackedVec3f.fbs";
+include "Math/Vec3f.fbs";
+include "Math/PackedVec3f.fbs";
namespace pkNX.Structures.FlatBuffers.SV.Trinity;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityFileDescriptors.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityFileDescriptors.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityFileDescriptors.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityFileDescriptors.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityFileSystemMetadata.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityFileSystemMetadata.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityFileSystemMetadata.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityFileSystemMetadata.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityPak.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityPak.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityPak.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityPak.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityPropertySheet.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityPropertySheet.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityPropertySheet.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityPropertySheet.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinitySceneObject.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinitySceneObject.fbs
similarity index 93%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinitySceneObject.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinitySceneObject.fbs
index 08465c29..640595f3 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinitySceneObject.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinitySceneObject.fbs
@@ -1,4 +1,4 @@
-include "../Geometry/PackedVec3f.fbs";
+include "Math/PackedVec3f.fbs";
namespace pkNX.Structures.FlatBuffers.SV.Trinity;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinitySceneObjectTemplate.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinitySceneObjectTemplate.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinitySceneObjectTemplate.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinitySceneObjectTemplate.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityScenePoint.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityScenePoint.fbs
similarity index 85%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityScenePoint.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityScenePoint.fbs
index edcc615f..8643601f 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityScenePoint.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityScenePoint.fbs
@@ -1,4 +1,4 @@
-include "../Geometry/PackedVec3f.fbs";
+include "Math/PackedVec3f.fbs";
namespace pkNX.Structures.FlatBuffers.SV.Trinity;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/pkNX.Structures.FlatBuffers.SV.Trinity.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/pkNX.Structures.FlatBuffers.SV.Trinity.csproj
new file mode 100644
index 00000000..074d0161
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/pkNX.Structures.FlatBuffers.SV.Trinity.csproj
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+ ..\..\pkNX.Structures.FlatBuffers\Schemas\
+
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/BattleBgmSelectTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/BattleBgmSelectTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/BattleBgmSelectTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/BattleBgmSelectTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupCategoryDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupCategoryDataArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupCategoryDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupCategoryDataArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupItemDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupItemDataArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupItemDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupItemDataArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupShopDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupShopDataArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupShopDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupShopDataArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupStyleDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupStyleDataArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupStyleDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupStyleDataArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupStylePresetDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupStylePresetDataArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupStylePresetDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupStylePresetDataArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Quest/DanQuestClearArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Quest/DanQuestClearArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Quest/DanQuestClearArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Quest/DanQuestClearArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Quest/EventSkyFlyArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Quest/EventSkyFlyArray.fbs
similarity index 98%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Quest/EventSkyFlyArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Quest/EventSkyFlyArray.fbs
index 766a42f0..e9d71edd 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Quest/EventSkyFlyArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Quest/EventSkyFlyArray.fbs
@@ -1,4 +1,4 @@
-include "../../Geometry/Vec3f.fbs";
+include "Math/Vec3f.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Quest/GymQuestClearArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Quest/GymQuestClearArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Quest/GymQuestClearArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Quest/GymQuestClearArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Quest/NushiQuestClearArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Quest/NushiQuestClearArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Quest/NushiQuestClearArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Quest/NushiQuestClearArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Restaurant/RestaurantMenuDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Restaurant/RestaurantMenuDataArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Restaurant/RestaurantMenuDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Restaurant/RestaurantMenuDataArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Restaurant/RestaurantShopDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Restaurant/RestaurantShopDataArray.fbs
similarity index 92%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Restaurant/RestaurantShopDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Restaurant/RestaurantShopDataArray.fbs
index 83e862f9..ce5d9037 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Restaurant/RestaurantShopDataArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Restaurant/RestaurantShopDataArray.fbs
@@ -1,4 +1,4 @@
-include "../Enums/PayType.fbs";
+include "Shared/PayType.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/SchoolMapDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/SchoolMapDataArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/SchoolMapDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/SchoolMapDataArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/FriendlyShopDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/FriendlyShopDataArray.fbs
similarity index 81%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/FriendlyShopDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/FriendlyShopDataArray.fbs
index 8bd5cd34..0a3980a7 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/FriendlyShopDataArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/FriendlyShopDataArray.fbs
@@ -1,6 +1,6 @@
-include "../Enums/SellType.fbs";
-include "../Enums/PayType.fbs";
-include "../Enums/ClerkType.fbs";
+include "Shared/SellType.fbs";
+include "Shared/PayType.fbs";
+include "Shared/ClerkType.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/LineupDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/LineupDataArray.fbs
similarity index 84%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/LineupDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/LineupDataArray.fbs
index dee86ad6..532e227d 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/LineupDataArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/LineupDataArray.fbs
@@ -1,5 +1,5 @@
-include "../Enums/CondEnum.fbs";
-include "../../Shared/ItemID.fbs";
+include "Shared/CondEnum.fbs";
+include "Shared/ItemID.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/ShopDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/ShopDataArray.fbs
similarity index 87%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/ShopDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/ShopDataArray.fbs
index 7d05d038..fbfc8cc2 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/ShopDataArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/ShopDataArray.fbs
@@ -1,4 +1,4 @@
-include "../Enums/ShopKind.fbs";
+include "Shared/ShopKind.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/ShopWazamachineDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/ShopWazamachineDataArray.fbs
similarity index 89%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/ShopWazamachineDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/ShopWazamachineDataArray.fbs
index 5a3a2602..f7e55c3b 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/ShopWazamachineDataArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/ShopWazamachineDataArray.fbs
@@ -1,5 +1,5 @@
-include "../../Shared/ItemID.fbs";
-include "../Enums/CondEnum.fbs";
+include "Shared/ItemID.fbs";
+include "Shared/CondEnum.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/SystemBgArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/SystemBgArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/SystemBgArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/SystemBgArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/TipsDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/TipsDataArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/TipsDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/TipsDataArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/ymap/DestinationDataTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/ymap/DestinationDataTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/ymap/DestinationDataTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/ymap/DestinationDataTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/ymap/NpcDestinationDataTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/ymap/NpcDestinationDataTableArray.fbs
similarity index 94%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/ymap/NpcDestinationDataTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/ymap/NpcDestinationDataTableArray.fbs
index d708f677..a2427fe3 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/ymap/NpcDestinationDataTableArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/ymap/NpcDestinationDataTableArray.fbs
@@ -1,4 +1,4 @@
-include "../../Geometry/Vec3f.fbs";
+include "Math/Vec3f.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/ymap/PlaceNameDataTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/ymap/PlaceNameDataTableArray.fbs
similarity index 92%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/ymap/PlaceNameDataTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/ymap/PlaceNameDataTableArray.fbs
index 4843e924..6a161063 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/ymap/PlaceNameDataTableArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/ymap/PlaceNameDataTableArray.fbs
@@ -1,4 +1,4 @@
-include "../../Geometry/Vec3f.fbs";
+include "Math/Vec3f.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/pkNX.Structures.FlatBuffers.SV.UI.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/pkNX.Structures.FlatBuffers.SV.UI.csproj
new file mode 100644
index 00000000..b1ac3808
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/pkNX.Structures.FlatBuffers.SV.UI.csproj
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\;..\..\pkNX.Structures.FlatBuffers\Schemas\
+
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Waza/Waza.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/Schemas/Waza.fbs
similarity index 98%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Waza/Waza.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/Schemas/Waza.fbs
index aeb6f161..046b05a7 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Waza/Waza.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/Schemas/Waza.fbs
@@ -22,7 +22,7 @@ table Waza {
Flinch:ubyte;
EffectSequence:ushort;
Recoil:byte;
- RawHealing:ubyte;
+ RawHealing:byte;
RawTarget:ubyte;
StatAmps:WazaEntityStat (required);
Affinity:WazaAffinity = None;
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaAffinity.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/Schemas/WazaAffinity.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaAffinity.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/Schemas/WazaAffinity.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaEntityStat.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/Schemas/WazaEntityStat.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaEntityStat.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/Schemas/WazaEntityStat.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaInflict.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/Schemas/WazaInflict.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaInflict.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/Schemas/WazaInflict.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/pkNX.Structures.FlatBuffers.SV.Waza.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/pkNX.Structures.FlatBuffers.SV.Waza.csproj
new file mode 100644
index 00000000..35e3d842
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/pkNX.Structures.FlatBuffers.SV.Waza.csproj
@@ -0,0 +1,2 @@
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/AreaInfo.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/AreaInfo.fbs
similarity index 97%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/AreaInfo.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/AreaInfo.fbs
index 19246664..9d8f04b5 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/AreaInfo.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/AreaInfo.fbs
@@ -28,6 +28,7 @@ table AreaInfo {
NoOcclusionCulling:bool;
MinEncLv:int;
MaxEncLv:int;
+ AdjustEncLv:int;
BiomeBase:EncBiome = None;
Tag:AreaTag = None;
BiomeOverride:OverrideBiome (required);
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/AreaTag.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/AreaTag.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/AreaTag.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/AreaTag.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/AreaType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/AreaType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/AreaType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/AreaType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/BandType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/BandType.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/BandType.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/BandType.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/Biome.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/Biome.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/Biome.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/Biome.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/BringItem.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/BringItem.fbs
similarity index 82%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/BringItem.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/BringItem.fbs
index fe97d28a..7cca7afa 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/BringItem.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/BringItem.fbs
@@ -1,4 +1,4 @@
-include "../../Shared/ItemID.fbs";
+include "Shared/ItemID.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_valueStruct";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/EnableTable.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/EnableTable.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/EnableTable.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/EnableTable.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/EncAttr.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/EncAttr.fbs
similarity index 82%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/EncAttr.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/EncAttr.fbs
index c35c80ae..14a56126 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/EncAttr.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/EncAttr.fbs
@@ -20,4 +20,9 @@ enum EncAttr : ubyte {
kusamura_kare = 16,
shiba = 17,
dummy = 18,
+ jari = 19,
+ kawara = 20,
+ kawasuna = 21,
+ hate_kusa = 22,
+ hate_iwa = 23,
}
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/EncBiome.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/EncBiome.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/EncBiome.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/EncBiome.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldAttrKey.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldAttrKey.fbs
similarity index 89%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldAttrKey.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldAttrKey.fbs
index 08be157b..8c6c1ef4 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldAttrKey.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldAttrKey.fbs
@@ -39,5 +39,10 @@ enum FieldAttrKey : int {
takenoha = 35,
kawara = 36,
takara = 37,
+ tanbo = 38,
+ kawasuna = 40,
+ hate_kusa = 41,
+ hate_iwa = 42,
+ hate_tsuchi = 43,
dummy = 99,
}
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldDungeonAreaArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldDungeonAreaArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldDungeonAreaArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldDungeonAreaArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldInsideAreaArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldInsideAreaArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldInsideAreaArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldInsideAreaArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldLocationArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldLocationArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldLocationArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldLocationArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldMainAreaArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldMainAreaArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldMainAreaArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldMainAreaArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldSubAreaArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldSubAreaArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldSubAreaArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldSubAreaArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/OverrideBiome.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/OverrideBiome.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/OverrideBiome.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/OverrideBiome.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/DeliveryOutbreakArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/DeliveryOutbreakArray.fbs
new file mode 100644
index 00000000..3458061d
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/DeliveryOutbreakArray.fbs
@@ -0,0 +1,23 @@
+namespace pkNX.Structures.FlatBuffers.SV;
+attribute "fs_serializer";
+
+table DeliveryOutbreak {
+ ZoneID:ulong;
+ LotValue:short;
+ Poke1:ulong;
+ Poke1LotValue:short;
+ Poke2:ulong;
+ Poke2LotValue:short;
+ Poke3:ulong;
+ Poke3LotValue:short;
+ Poke4:ulong;
+ Poke4LotValue:short;
+ Poke5:ulong;
+ Poke5LotValue:short;
+}
+
+table DeliveryOutbreakArray (fs_serializer) {
+ Table:[DeliveryOutbreak] (required);
+}
+
+root_type DeliveryOutbreakArray;
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/DeliveryOutbreakPokeDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/DeliveryOutbreakPokeDataArray.fbs
new file mode 100644
index 00000000..285dcd1b
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/DeliveryOutbreakPokeDataArray.fbs
@@ -0,0 +1,62 @@
+include "Shared/DevID.fbs";
+include "Shared/SexType.fbs";
+include "Shared/RibbonType.fbs";
+include "Area/EnableTable.fbs";
+include "Area/BringItem.fbs";
+include "VersionTable.fbs";
+
+namespace pkNX.Structures.FlatBuffers.SV;
+attribute "fs_serializer";
+
+table DeliveryOutbreakPokeData {
+ ID:ulong;
+ DevId:DevID;
+ Sex:SexType;
+ FormId:byte;
+ MinLevel:short;
+ MaxLevel:short;
+ Area:AreaNo;
+ LocationName:ulong;
+ Enable:EnableTable;
+ Version:VersionTable;
+ Item:BringItem;
+ EnableRarePercentage:bool;
+ RarePercentage:float;
+ AddRibbonType:RibbonType;
+ AddRibbonPercentage:float;
+ EnableScaleRange:bool;
+ MinScale:short;
+ MaxScale:short;
+}
+
+table AreaNo {
+ Area01:bool;
+ Area02:bool;
+ Area03:bool;
+ Area04:bool;
+ Area05:bool;
+ Area06:bool;
+ Area07:bool;
+ Area08:bool;
+ Area09:bool;
+ Area10:bool;
+ Area11:bool;
+ Area12:bool;
+ Area13:bool;
+ Area14:bool;
+ Area15:bool;
+ Area16:bool;
+ Area17:bool;
+ Area18:bool;
+ Area19:bool;
+ Area20:bool;
+ Area21:bool;
+ Area22:bool;
+ Area23:bool;
+}
+
+table DeliveryOutbreakPokeDataArray (fs_serializer) {
+ Table:[DeliveryOutbreakPokeData] (required);
+}
+
+root_type DeliveryOutbreakPokeDataArray;
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/EncountPokeDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/EncountPokeDataArray.fbs
similarity index 94%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/EncountPokeDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/EncountPokeDataArray.fbs
index 7a97e0af..d58ab3be 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/EncountPokeDataArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/EncountPokeDataArray.fbs
@@ -1,5 +1,5 @@
-include "../Shared/DevID.fbs";
-include "../Shared/SexType.fbs";
+include "Shared/DevID.fbs";
+include "Shared/SexType.fbs";
include "TimeTable.fbs";
include "VersionTable.fbs";
include "Area/BandType.fbs";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/EventBattlePokemonArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/EventBattlePokemonArray.fbs
similarity index 88%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/EventBattlePokemonArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/EventBattlePokemonArray.fbs
index 12c66f37..781c2fe4 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/EventBattlePokemonArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/EventBattlePokemonArray.fbs
@@ -1,4 +1,5 @@
-include "../PokeData/PokeDataEventBattle.fbs";
+include "PokeData/PokeDataEventBattle.fbs";
+
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/AreaFlyFlagArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/AreaFlyFlagArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/AreaFlyFlagArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/AreaFlyFlagArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/CoinSymbolManager.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/CoinSymbolManager.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/CoinSymbolManager.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/CoinSymbolManager.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/ExclusionGroupArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/ExclusionGroupArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/ExclusionGroupArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/ExclusionGroupArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldAutoReturnPosTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldAutoReturnPosTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldAutoReturnPosTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldAutoReturnPosTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldAutomaticReturnTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldAutomaticReturnTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldAutomaticReturnTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldAutomaticReturnTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldCamera.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldCamera.fbs
similarity index 97%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldCamera.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldCamera.fbs
index a77225a1..480c5b66 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldCamera.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldCamera.fbs
@@ -1,4 +1,4 @@
-include "../../Geometry/Vec3f.fbs";
+include "Math/Vec3f.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldInteriorCamera.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldInteriorCamera.fbs
similarity index 90%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldInteriorCamera.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldInteriorCamera.fbs
index 0c36a409..4e06c0d8 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldInteriorCamera.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldInteriorCamera.fbs
@@ -1,4 +1,4 @@
-include "../../Geometry/Vec3f.fbs";
+include "Math/Vec3f.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldOutOfRangeTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldOutOfRangeTableArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldOutOfRangeTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldOutOfRangeTableArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldPlayer.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldPlayer.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldPlayer.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldPlayer.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldRide.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldRide.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldRide.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldRide.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/GemSymbolLotteryTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/GemSymbolLotteryTableArray.fbs
similarity index 94%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/GemSymbolLotteryTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/GemSymbolLotteryTableArray.fbs
index 1fb04b47..b290120b 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/GemSymbolLotteryTableArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/GemSymbolLotteryTableArray.fbs
@@ -1,4 +1,4 @@
-include "../../Shared/MoveType.fbs";
+include "Shared/MoveType.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/GemSymbolSetting.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/GemSymbolSetting.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/GemSymbolSetting.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/GemSymbolSetting.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/MapChangeParametersArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/MapChangeParametersArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/MapChangeParametersArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/MapChangeParametersArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/BehaviorFrequency.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/BehaviorFrequency.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/BehaviorFrequency.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/BehaviorFrequency.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/FixedSymbolAI.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/FixedSymbolAI.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/FixedSymbolAI.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/FixedSymbolAI.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/FixedSymbolArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/FixedSymbolArray.fbs
similarity index 90%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/FixedSymbolArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/FixedSymbolArray.fbs
index cdccd3db..01610239 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/FixedSymbolArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/FixedSymbolArray.fbs
@@ -1,4 +1,4 @@
-include "../../PokeData/PokeDataSymbol.fbs";
+include "PokeData/PokeDataSymbol.fbs";
include "FixedSymbolAI.fbs";
include "FixedSymbolGeneration.fbs";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/FixedSymbolGeneration.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/FixedSymbolGeneration.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/FixedSymbolGeneration.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/FixedSymbolGeneration.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/FixedSymbolManager.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/FixedSymbolManager.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/FixedSymbolManager.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/FixedSymbolManager.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/GenerationPattern.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/GenerationPattern.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/GenerationPattern.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/GenerationPattern.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/PokemonActionID.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/PokemonActionID.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/PokemonActionID.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/PokemonActionID.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/OutbreakPointArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/OutbreakPointArray.fbs
new file mode 100644
index 00000000..bbedfc98
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/OutbreakPointArray.fbs
@@ -0,0 +1,29 @@
+include "Math/PackedVec3f.fbs";
+include "Math/PackedVec2f.fbs";
+
+namespace pkNX.Structures.FlatBuffers.SV;
+
+attribute "fs_serializer";
+
+struct OutbreakEnableTable {
+ land:bool;
+ upWater:bool;
+ underWater:bool;
+ air1:bool;
+ air2:bool;
+}
+struct OutbreakPointData {
+ position:PackedVec3f;
+ level_range:PackedVec2f;
+ i_biome:short;
+ i_substance:short;
+ area_no:byte;
+ area_name:ulong;
+ enable_table:OutbreakEnableTable;
+}
+
+table OutbreakPointArray (fs_serializer) {
+ Table:[OutbreakPointData] (required);
+}
+
+root_type OutbreakPointArray;
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/OutbreakSetting.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/OutbreakSetting.fbs
new file mode 100644
index 00000000..bb5597d0
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/OutbreakSetting.fbs
@@ -0,0 +1,16 @@
+namespace pkNX.Structures.FlatBuffers;
+attribute "fs_serializer";
+
+table FieldLotteryDesc {
+ AreaNum:short;
+ LotMin:short;
+ LotMax:short;
+}
+
+table OutbreakSetting (fs_serializer) {
+ Field_0:FieldLotteryDesc (required);
+ Field_1:FieldLotteryDesc (required);
+ Field_2:FieldLotteryDesc (required);
+}
+
+root_type OutbreakSetting;
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/PointDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/PointDataArray.fbs
similarity index 84%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/PointDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/PointDataArray.fbs
index 59d96f21..d5430b5d 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/PointDataArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/PointDataArray.fbs
@@ -1,5 +1,5 @@
-include "../Geometry/PackedVec3f.fbs";
-include "../Geometry/PackedVec2f.fbs";
+include "Math/PackedVec3f.fbs";
+include "Math/PackedVec2f.fbs";
include "Area/EncBiome.fbs";
include "Area/EncAttr.fbs";
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/SettingData.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/SettingData.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/SettingData.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/SettingData.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/TimeTable.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/TimeTable.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/TimeTable.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/TimeTable.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/VersionTable.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/VersionTable.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/VersionTable.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/VersionTable.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/World/AreaInfo.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/AreaInfo.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/World/AreaInfo.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/AreaInfo.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/DeliveryOutbreak.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/DeliveryOutbreak.cs
new file mode 100644
index 00000000..6b6145e9
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/DeliveryOutbreak.cs
@@ -0,0 +1,13 @@
+using System.ComponentModel;
+// ReSharper disable UnusedMember.Global
+// ReSharper disable ClassNeverInstantiated.Global
+// ReSharper disable UnusedType.Global
+#nullable disable
+
+namespace pkNX.Structures.FlatBuffers.SV;
+
+[TypeConverter(typeof(ExpandableObjectConverter))]
+public partial class DeliveryOutbreakArray { }
+
+[TypeConverter(typeof(ExpandableObjectConverter))]
+public partial class DeliveryOutbreak { }
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/DeliveryOutbreakPokeData.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/DeliveryOutbreakPokeData.cs
new file mode 100644
index 00000000..2a68e123
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/DeliveryOutbreakPokeData.cs
@@ -0,0 +1,83 @@
+using System.ComponentModel;
+// ReSharper disable UnusedMember.Global
+// ReSharper disable ClassNeverInstantiated.Global
+// ReSharper disable UnusedType.Global
+
+namespace pkNX.Structures.FlatBuffers.SV;
+
+[TypeConverter(typeof(ExpandableObjectConverter))]
+public partial class DeliveryOutbreakPokeDataArray { }
+
+[TypeConverter(typeof(ExpandableObjectConverter))]
+public partial class DeliveryOutbreakPokeData
+{
+ public bool IsAreaLimited(out uint areaBits)
+ {
+ areaBits = 0;
+ if (Area is null)
+ return false;
+ if (Area.Area01) areaBits |= 1u << 1;
+ if (Area.Area02) areaBits |= 1u << 2;
+ if (Area.Area03) areaBits |= 1u << 3;
+ if (Area.Area04) areaBits |= 1u << 4;
+ if (Area.Area05) areaBits |= 1u << 5;
+ if (Area.Area06) areaBits |= 1u << 6;
+ if (Area.Area07) areaBits |= 1u << 7;
+ if (Area.Area08) areaBits |= 1u << 8;
+ if (Area.Area09) areaBits |= 1u << 9;
+ if (Area.Area10) areaBits |= 1u << 10;
+ if (Area.Area11) areaBits |= 1u << 11;
+ if (Area.Area12) areaBits |= 1u << 12;
+ if (Area.Area13) areaBits |= 1u << 13;
+ if (Area.Area14) areaBits |= 1u << 14;
+ if (Area.Area15) areaBits |= 1u << 15;
+ if (Area.Area16) areaBits |= 1u << 16;
+ if (Area.Area17) areaBits |= 1u << 17;
+ if (Area.Area18) areaBits |= 1u << 18;
+ if (Area.Area19) areaBits |= 1u << 19;
+ if (Area.Area20) areaBits |= 1u << 20;
+ if (Area.Area21) areaBits |= 1u << 21;
+ if (Area.Area22) areaBits |= 1u << 22;
+ if (Area.Area23) areaBits |= 1u << 23;
+ return areaBits != 0;
+ }
+
+ private const ulong LocationNone = 0xCBF29CE484222645u;
+ public bool IsSpecificArea => LocationName != LocationNone;
+ public bool IsAreaConstrained => IsAreaLimited(out _);
+
+ public bool IsEnableCompatible(OutbreakEnableTable point) => Enable is not { } en || point switch
+ {
+ { Air1: true } when en.Air1 => true,
+ { Air2: true } when en.Air2 => true,
+ { Land: true } when en.Land => true,
+ { UpWater: true } when en.UpWater => true,
+ { UnderWater: true } when en.Underwater => true,
+ { IsUnrestricted: true } => true,
+ _ => en.IsUnrestricted,
+ };
+
+ public bool IsCompatibleArea(ulong areaName) => LocationName == LocationNone || LocationName == areaName;
+ public bool IsCompatibleArea(byte area) => !IsAreaLimited(out var bits) || (bits & (1u << area)) != 0;
+
+ public bool IsLevelRangeCompatible(PackedVec2f range)
+ {
+ var rMin = range.X;
+ var rMax = range.Y;
+ return rMin <= MaxLevel && MinLevel <= rMax;
+ }
+}
+
+[TypeConverter(typeof(ExpandableObjectConverter))]
+public partial class AreaNo { }
+
+[TypeConverter(typeof(ExpandableObjectConverter))]
+public partial class OutbreakEnableTable
+{
+ public bool IsUnrestricted => !Air1 && !Air2 && !Land && !UpWater && !UnderWater;
+}
+
+public partial struct EnableTable
+{
+ public bool IsUnrestricted => !Air1 && !Air2 && !Land && !UpWater && !Underwater;
+}
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/EncountPokeData.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/EncountPokeData.cs
new file mode 100644
index 00000000..037ce1ed
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/EncountPokeData.cs
@@ -0,0 +1,10 @@
+using System.ComponentModel;
+
+namespace pkNX.Structures.FlatBuffers.SV;
+
+[TypeConverter(typeof(ExpandableObjectConverter))]
+public partial class EncountPokeData
+{
+ public bool IsLevelRangeOverlap(int min, int max) => min <= MaxLevel && MinLevel <= max;
+ public bool IsLevelRangeOverlap(float min, float max) => min <= MaxLevel && MinLevel <= max;
+}
diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/World/PointDataArray.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/PointDataArray.cs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Gen9/World/PointDataArray.cs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/PointDataArray.cs
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/pkNX.Structures.FlatBuffers.SV.World.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/pkNX.Structures.FlatBuffers.SV.World.csproj
new file mode 100644
index 00000000..b1ac3808
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/pkNX.Structures.FlatBuffers.SV.World.csproj
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\;..\..\pkNX.Structures.FlatBuffers\Schemas\
+
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/BlacklistArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/BlacklistArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/BlacklistArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/BlacklistArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/DistributionRootArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/DistributionRootArray.fbs
similarity index 100%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/DistributionRootArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/DistributionRootArray.fbs
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/MemoPokeTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/MemoPokeTableArray.fbs
similarity index 81%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/MemoPokeTableArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/MemoPokeTableArray.fbs
index b2ebd919..16f5c34b 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/MemoPokeTableArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/MemoPokeTableArray.fbs
@@ -1,13 +1,17 @@
-include "../Shared/DevID.fbs";
-include "../Shared/Sex.fbs";
+include "Shared/DevID.fbs";
+include "Shared/Sex.fbs";
+
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
+
table MemoPokeTable {
DevNo:DevID = DEV_NULL;
Sex:Sex;
FormNo:int;
}
+
table MemoPokeTableArray (fs_serializer) {
Table:[MemoPokeTable] (required);
}
+
root_type MemoPokeTableArray;
diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/RewardDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/RewardDataArray.fbs
similarity index 91%
rename from pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/RewardDataArray.fbs
rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/RewardDataArray.fbs
index 257557d0..b35b8d9b 100644
--- a/pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/RewardDataArray.fbs
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/RewardDataArray.fbs
@@ -1,4 +1,4 @@
-include "../Shared/ItemID.fbs";
+include "Shared/ItemID.fbs";
namespace pkNX.Structures.FlatBuffers.SV;
attribute "fs_serializer";
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/pkNX.Structures.FlatBuffers.SV.Zukan.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/pkNX.Structures.FlatBuffers.SV.Zukan.csproj
new file mode 100644
index 00000000..b782ecb2
--- /dev/null
+++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/pkNX.Structures.FlatBuffers.SV.Zukan.csproj
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+ ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\
+
+
+
diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.csproj
deleted file mode 100644
index 4a164cee..00000000
--- a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.csproj
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
- net7.0
- enable
-
-
-
-
-
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
-
- GreedyMutable;Progressive
- true
-
-
-
-
- Schemas\
- ..\pkNX.Structures.FlatBuffers\Schemas\
-
-
-
-
-
-
-
diff --git a/pkNX.Structures.FlatBuffers.SWSH/pkNX.Structures.FlatBuffers.SWSH.csproj b/pkNX.Structures.FlatBuffers.SWSH/pkNX.Structures.FlatBuffers.SWSH.csproj
index 02d10b50..d6bdfa40 100644
--- a/pkNX.Structures.FlatBuffers.SWSH/pkNX.Structures.FlatBuffers.SWSH.csproj
+++ b/pkNX.Structures.FlatBuffers.SWSH/pkNX.Structures.FlatBuffers.SWSH.csproj
@@ -11,8 +11,8 @@
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
@@ -25,7 +25,6 @@
- Schemas\
..\pkNX.Structures.FlatBuffers\Schemas\
diff --git a/pkNX.Structures.FlatBuffers/Math/PackedVec3f.cs b/pkNX.Structures.FlatBuffers/Math/PackedVec3f.cs
index 41d0ce73..a835268f 100644
--- a/pkNX.Structures.FlatBuffers/Math/PackedVec3f.cs
+++ b/pkNX.Structures.FlatBuffers/Math/PackedVec3f.cs
@@ -1,4 +1,3 @@
-using System;
using System.ComponentModel;
namespace pkNX.Structures.FlatBuffers;
@@ -18,20 +17,19 @@ public PackedVec3f(float x = 0, float y = 0, float z = 0)
Z = z;
}
- public readonly bool IsOne => X is 1 && Y is 1 && Z is 1;
- public readonly bool IsZero => X is 0 && Y is 0 && Z is 0;
+ public readonly bool IsOne() => X is 1 && Y is 1 && Z is 1;
+ public readonly bool IsZero() => X is 0 && Y is 0 && Z is 0;
+ public readonly float Magnitude() => MathF.Sqrt(MagnitudeSqr());
+ public readonly float MagnitudeSqr() => Dot(this);
+ public readonly PackedVec3f Normalized() => this * (1 / Magnitude());
- public float Magnitude => MathF.Sqrt(MagnitudeSqr);
- public readonly float MagnitudeSqr => Dot(this);
- public PackedVec3f Normalized() => this * (1 / Magnitude);
+ public readonly float Dot(PackedVec3f other) => (X * other.X) + (Y * other.Y) + (Z * other.Z);
+ public readonly PackedVec3f Cross(PackedVec3f other) => new((Y * other.Z) - (Z * other.Y), (Z * other.X) - (X * other.Z), (X * other.Y) - (Y * other.X));
+ public readonly float DistanceTo(PackedVec3f other) => (this - other).Magnitude();
+ public readonly float DistanceToSqr(PackedVec3f other) => (this - other).MagnitudeSqr();
+ public readonly PackedVec3f Lerp(PackedVec3f other, float t) => this + ((other - this) * t);
- public readonly float Dot(PackedVec3f other) => X * other.X + Y * other.Y + Z * other.Z;
- public readonly PackedVec3f Cross(PackedVec3f other) => new(Y * other.Z - Z * other.Y, Z * other.X - X * other.Z, X * other.Y - Y * other.X);
- public readonly float DistanceTo(PackedVec3f other) => (this - other).Magnitude;
- public readonly float DistanceToSqr(PackedVec3f other) => (this - other).MagnitudeSqr;
- public readonly PackedVec3f Lerp(PackedVec3f other, float t) => this + (other - this) * t;
-
- public PackedVec3f Clone() => new()
+ public readonly PackedVec3f Clone() => new()
{
X = X,
Y = Y,
diff --git a/pkNX.Structures.FlatBuffers/pkNX.Structures.FlatBuffers.csproj b/pkNX.Structures.FlatBuffers/pkNX.Structures.FlatBuffers.csproj
index 895c62a5..843f3573 100644
--- a/pkNX.Structures.FlatBuffers/pkNX.Structures.FlatBuffers.csproj
+++ b/pkNX.Structures.FlatBuffers/pkNX.Structures.FlatBuffers.csproj
@@ -12,8 +12,8 @@
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/pkNX.Structures/Havok/HavokCollision.cs b/pkNX.Structures/Havok/HavokCollision.cs
index f5693f2f..47bd6ae5 100644
--- a/pkNX.Structures/Havok/HavokCollision.cs
+++ b/pkNX.Structures/Havok/HavokCollision.cs
@@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
-using System.Drawing;
using System.Numerics;
using static System.Buffers.Binary.BinaryPrimitives;
@@ -147,44 +146,46 @@ public static AABBTree ParseAABBTree(ReadOnlySpan trcol)
Debug.Assert(nodesItem.Type.Fields[0].Type.SubType.Name == "hkUint32");
Debug.Assert(nodesItem.Type.Fields[1].Name == "isLeaf");
Debug.Assert(nodesItem.Type.Fields[1].Type.FormatType == FormatType.Bool);
-
- static float[] ReadVector4(ReadOnlySpan buf, int ofs) => new[]
- {
- ReadSingleLittleEndian(buf[ofs..]),
- ReadSingleLittleEndian(buf[(ofs+4)..]),
- ReadSingleLittleEndian(buf[(ofs+8)..]),
- ReadSingleLittleEndian(buf[(ofs+12)..]),
- };
-
- static uint[] ReadNodeData(ReadOnlySpan buf, int ofs) => new[]
- {
- ReadUInt32LittleEndian(buf[ofs..]),
- ReadUInt32LittleEndian(buf[(ofs+4)..]),
- ReadUInt32LittleEndian(buf[(ofs+8)..]),
- ReadUInt32LittleEndian(buf[(ofs+12)..]),
- };
-
- var nodes = new List();
+ var nodes = new List((int)nodesItem.Count);
for (var i = 0; i < nodesItem.Count; ++i)
{
- var nofs = (int)ofs + ((int)nodesItem.Type.Size * i);
+ var type = nodesItem.Type;
+ var nofs = (int)ofs + ((int)type.Size * i);
+ var slice = data[nofs..];
+ var parentFields = type.Parent.Fields;
nodes.Add(new hkcdSimdTreeNode
{
- lx = ReadVector4(data, nofs + (int)nodesItem.Type.Parent.Fields[0].Offset),
- hx = ReadVector4(data, nofs + (int)nodesItem.Type.Parent.Fields[1].Offset),
- ly = ReadVector4(data, nofs + (int)nodesItem.Type.Parent.Fields[2].Offset),
- hy = ReadVector4(data, nofs + (int)nodesItem.Type.Parent.Fields[3].Offset),
- lz = ReadVector4(data, nofs + (int)nodesItem.Type.Parent.Fields[4].Offset),
- hz = ReadVector4(data, nofs + (int)nodesItem.Type.Parent.Fields[5].Offset),
- data = ReadNodeData(data, nofs + (int)nodesItem.Type.Fields[0].Offset),
- IsLeaf = data[nofs + (int)nodesItem.Type.Fields[1].Offset] != 0,
+ LoX = ReadVector4(slice[(int)parentFields[0].Offset..]),
+ HiX = ReadVector4(slice[(int)parentFields[1].Offset..]),
+ LoY = ReadVector4(slice[(int)parentFields[2].Offset..]),
+ HiY = ReadVector4(slice[(int)parentFields[3].Offset..]),
+ LoZ = ReadVector4(slice[(int)parentFields[4].Offset..]),
+ HiZ = ReadVector4(slice[(int)parentFields[5].Offset..]),
+ Data = ReadNodeData(slice[(int)type.Fields[0].Offset..]),
+ IsLeaf = slice[(int)type.Fields[1].Offset] != 0,
});
}
return new(nodes);
}
+ private static float[] ReadVector4(ReadOnlySpan buf) => new[]
+ {
+ ReadSingleLittleEndian(buf),
+ ReadSingleLittleEndian(buf[4..]),
+ ReadSingleLittleEndian(buf[8..]),
+ ReadSingleLittleEndian(buf[12..]),
+ };
+
+ private static uint[] ReadNodeData(ReadOnlySpan buf) => new[]
+ {
+ ReadUInt32LittleEndian(buf),
+ ReadUInt32LittleEndian(buf[4..]),
+ ReadUInt32LittleEndian(buf[8..]),
+ ReadUInt32LittleEndian(buf[12..]),
+ };
+
private static List ReadStrings(ReadOnlySpan buffer)
{
var strings = new List();
@@ -198,7 +199,7 @@ private static List ReadStrings(ReadOnlySpan buffer)
while (buffer[endOfs] != 0)
endOfs++;
- strings.Add(System.Text.Encoding.ASCII.GetString(buffer[ofs..endOfs].ToArray()));
+ strings.Add(System.Text.Encoding.ASCII.GetString(buffer[ofs..endOfs]));
ofs = endOfs + 1;
}
@@ -207,24 +208,22 @@ private static List ReadStrings(ReadOnlySpan buffer)
private static List ReadTna1(ReadOnlySpan buffer, List tst1)
{
- var tna1 = new List();
-
var (ofs, count) = ReadVar32(buffer);
+ var tna1 = new List((int)count + 1);
for (var i = 0; i < count + 1; ++i)
- tna1.Add(new HavokTypeObject { Name = "Invalid", }); // Types are 1-indexed.
+ tna1.Add(new HavokTypeObject { Name = "Invalid" }); // Types are 1-indexed.
- for (var i = 0u; i < count; ++i)
+ for (var i = 0; i < count; ++i)
{
var (tiCnt, ti) = ReadVar32(buffer[ofs..]);
ofs += tiCnt;
-
- var tna = tna1[(int)i + 1];
-
- tna.Name = tst1[(int)ti];
- tna.Template = new List();
-
var (pCnt, numParams) = ReadVar32(buffer[ofs..]);
ofs += pCnt;
+
+ var tna = tna1[i + 1];
+ tna.Name = tst1[(int)ti];
+ var list = tna.Template = new List((int)numParams);
+
for (var n = 0; n < numParams; ++n)
{
var (pnCnt, pni) = ReadVar32(buffer[ofs..]);
@@ -235,10 +234,10 @@ private static List ReadTna1(ReadOnlySpan buffer, List buffer, List tn
tna.Flags = (ushort)flags;
}
- tna.Fields = new List();
if (tna.IsOptionFields)
{
(cnt, var fieldPair) = ReadVar32(buffer[ofs..]);
ofs += cnt;
var numFields = fieldPair & 0xFFFF;
+ tna.Fields = new List((int)numFields);
for (var i = 0; i < numFields; ++i)
{
(cnt, var fnIdx) = ReadVar32(buffer[ofs..]);
@@ -328,11 +327,15 @@ private static void ReadTbdy(ReadOnlySpan buffer, List tn
});
}
}
- tna.Interfaces = new List();
+ else
+ {
+ tna.Fields = new List();
+ }
if (tna.IsOptionInterfaces)
{
(cnt, var intCount) = ReadVar32(buffer[ofs..]);
ofs += cnt;
+ tna.Interfaces = new List((int)intCount);
for (var i = 0; i < (int)intCount; ++i)
{
@@ -348,6 +351,10 @@ private static void ReadTbdy(ReadOnlySpan buffer, List tn
});
}
}
+ else
+ {
+ tna.Interfaces = new List();
+ }
if (tna.IsOptionAttribute)
{
(cnt, tna.Attribute) = ReadVar32(buffer[ofs..]);
@@ -427,47 +434,43 @@ private static (int, uint) ReadVar32(ReadOnlySpan buffer)
public class AABBTree : IContainsV3f
{
- private readonly List _nodes;
- private int _numLeafRects;
- private readonly RectangleF[] _leafRectangles;
-
- public const float MaxValue = 3.40282E+38F;
- public const float MinValue = -3.40282E+38F;
+ public List Nodes { get; }
+ public int NumBoundingBoxes { get; }
+ public Rectangle3D[] BoundingBoxRectangles { get; }
public AABBTree(List nodes)
{
- _nodes = nodes;
-
- _numLeafRects = 0;
- foreach (var node in _nodes)
+ Nodes = nodes;
+ foreach (var node in Nodes)
{
- if (!node.IsLeaf) continue;
+ if (!node.IsLeaf)
+ continue;
- for (var i = 0; i < 4; i++)
+ for (var i = 0; i < hkcdSimdTreeNode.NodeCount; i++)
{
- if (node.lx[i] <= node.hx[i] && node.ly[i] <= node.hy[i] && node.lz[i] <= node.hz[i])
- _numLeafRects++;
+ if (node.IsBound(i))
+ NumBoundingBoxes++;
}
}
- _leafRectangles = new RectangleF[_numLeafRects];
+ BoundingBoxRectangles = new Rectangle3D[NumBoundingBoxes];
var n = 0;
- foreach (var node in _nodes)
+ foreach (var node in Nodes)
{
- if (!node.IsLeaf) continue;
+ if (!node.IsLeaf)
+ continue;
- for (var i = 0; i < 4; i++)
+ for (var i = 0; i < hkcdSimdTreeNode.NodeCount; i++)
{
- if (node.lx[i] <= node.hx[i] && node.ly[i] <= node.hy[i] && node.lz[i] <= node.hz[i])
- _leafRectangles[n++] = new RectangleF(node.lx[i], node.lz[i], node.hx[i] - node.lx[i], node.hz[i] - node.lz[i]);
+ if (!node.IsBound(i))
+ continue;
+ var lo = new Vector3(node.LoX[i], node.LoY[i], node.LoZ[i]);
+ var hi = new Vector3(node.HiX[i], node.HiY[i], node.HiZ[i]);
+ BoundingBoxRectangles[n++] = new Rectangle3D(lo, hi);
}
}
}
- public int NumBoundingBoxes => _numLeafRects;
-
- public RectangleF[] BoundingBoxRectangles => _leafRectangles;
-
// Official logic for area-containment checks for y intersection between y+1 and y-10000.0
public bool ContainsPoint(float x, float y, float z) => ContainsPointInNode(1, x, y - 10000, y + 1, z);
public bool ContainsPoint(float x, float y, float z, float toleranceX, float toleranceY, float toleranceZ)
@@ -478,35 +481,81 @@ private bool ContainsPointInNode(int nodeIndex, float x, float ly, float hy, flo
if (nodeIndex == 0)
return false;
- var node = _nodes[nodeIndex];
- for (var i = 0; i < 4; i++)
+ var node = Nodes[nodeIndex];
+ for (var i = 0; i < hkcdSimdTreeNode.NodeCount; i++)
{
- if (node.lx[i] > node.hx[i] || !(node.lx[i] - tx <= x) || !(node.hx[i] + tx >= x))
+ if (node.LoX[i] > node.HiX[i] || !(node.LoX[i] - tx <= x) || !(node.HiX[i] + tx >= x))
continue;
- if (node.lz[i] > node.hz[i] || !(node.lz[i] - tz <= z) || !(node.hz[i] + tz >= z))
+ if (node.LoZ[i] > node.HiZ[i] || !(node.LoZ[i] - tz <= z) || !(node.HiZ[i] + tz >= z))
continue;
- if (node.ly[i] > node.hy[i] || !(node.ly[i] - ty <= hy) || !(node.hy[i] + ty >= ly))
+ if (node.LoY[i] > node.HiY[i] || !(node.LoY[i] - ty <= hy) || !(node.HiY[i] + ty >= ly))
continue;
if (node.IsLeaf)
return true;
- if (ContainsPointInNode((int)node.data[i], x, ly, hy, z, tx, ty, tz))
+ if (ContainsPointInNode((int)node.Data[i], x, ly, hy, z, tx, ty, tz))
return true;
}
return false;
}
+
+ public bool ContainedBy(IContainsV3f other) => other.ContainsPoint(BoundingBoxRectangles[0].X, BoundingBoxRectangles[0].Y, BoundingBoxRectangles[0].Z);
+ }
+
+ public struct Rectangle3D
+ {
+ /// X-coordinate of one corner
+ public float X { get; set; }
+ /// Y-coordinate of one corner
+ public float Y { get; set; }
+ /// Z-coordinate of one corner
+ public float Z { get; set; }
+
+ /// Width of the rectangle (X)
+ public float Width { get; set; }
+ /// Height of the rectangle (Y)
+ public float Height { get; set; }
+ /// Depth of the rectangle (Z)
+ public float Depth { get; set; }
+
+ public Rectangle3D(float x, float y, float z, float width, float height, float depth)
+ {
+ X = x;
+ Y = y;
+ Z = z;
+ Width = width;
+ Height = height;
+ Depth = depth;
+ }
+
+ public Rectangle3D(Vector3 lo, Vector3 hi)
+ {
+ X = lo.X;
+ Y = lo.Y;
+ Z = lo.Z;
+ Width = hi.X - lo.X;
+ Height = hi.Y - lo.Y;
+ Depth = hi.Z - lo.Z;
+ }
}
#nullable disable
+ ///
+ /// Represents 4 nodes in a 3D spatial tree structure used for spatial logic, able to work with SIMD (Single Instruction, Multiple Data) operations
+ ///
public class hkcdSimdTreeNode
{
- public float[] lx;
- public float[] hx;
- public float[] ly;
- public float[] hy;
- public float[] lz;
- public float[] hz;
- public uint[] data;
- public bool IsLeaf;
+ public required float[] LoX { get; set; }
+ public required float[] LoY { get; set; }
+ public required float[] LoZ { get; set; }
+
+ public required float[] HiX {get; set; }
+ public required float[] HiY {get; set; }
+ public required float[] HiZ {get; set; }
+
+ public required uint[] Data { get; set; }
+ public required bool IsLeaf { get; set; }
+ public bool IsBound(int i) => LoX[i] <= HiX[i] && LoY[i] <= HiY[i] && LoZ[i] <= HiZ[i];
+ public const int NodeCount = 4;
}
private class HavokTypeObject
@@ -562,7 +611,7 @@ private struct HavokTemplateParam
public int IntValue;
public HavokTypeObject TypeValue;
- public bool IsType => Name.Length > 0 && Name[0] == 't';
+ public bool IsType => Name.StartsWith('t');
}
private struct HavokField
@@ -592,4 +641,11 @@ public interface IContainsV3f
{
bool ContainsPoint(float x, float y, float z);
bool ContainsPoint(float x, float y, float z, float toleranceX, float toleranceY, float toleranceZ);
+
+ ///
+ /// Checks if an outer collision volume contains this (inner) volume
+ ///
+ /// Outer collision volume
+ /// True if the inner volume is contained within this volume
+ bool ContainedBy(IContainsV3f outer);
}
diff --git a/pkNX.Structures/Legality/Tables/Tables9.cs b/pkNX.Structures/Legality/Tables/Tables9.cs
index b17e2b3d..f87b9dca 100644
--- a/pkNX.Structures/Legality/Tables/Tables9.cs
+++ b/pkNX.Structures/Legality/Tables/Tables9.cs
@@ -3,7 +3,7 @@ namespace pkNX.Structures;
public static partial class Legal
{
// todo sv
- public const int MaxSpeciesID_9 = 1010;
+ public const int MaxSpeciesID_9 = 1017;
public const int MaxMoveID_9 = (int)Move.MagicalTorque;
public const int MaxItemID_9 = 2400; // Yellow Dish
public const int MaxBallID_9 = (int)Ball.LAOrigin;
diff --git a/pkNX.WinForms/Dumping/DumperSV.Designer.cs b/pkNX.WinForms/Dumping/DumperSV.Designer.cs
index 537965e2..643bc1b0 100644
--- a/pkNX.WinForms/Dumping/DumperSV.Designer.cs
+++ b/pkNX.WinForms/Dumping/DumperSV.Designer.cs
@@ -28,300 +28,312 @@ protected override void Dispose(bool disposing)
///
private void InitializeComponent()
{
- this.TC_Options = new System.Windows.Forms.TabControl();
- this.Tab_General = new System.Windows.Forms.TabPage();
- this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
- this.B_ParsePKMDetails = new System.Windows.Forms.Button();
- this.B_Raid = new System.Windows.Forms.Button();
- this.B_PKText = new System.Windows.Forms.Button();
- this.B_Trainers = new System.Windows.Forms.Button();
- this.B_Encount = new System.Windows.Forms.Button();
- this.B_DumpMoves = new System.Windows.Forms.Button();
- this.B_Cooking = new System.Windows.Forms.Button();
- this.Tab_Misc = new System.Windows.Forms.TabPage();
- this.flowLayoutPanel3 = new System.Windows.Forms.FlowLayoutPanel();
- this.B_DumpHash = new System.Windows.Forms.Button();
- this.B_DumpArc = new System.Windows.Forms.Button();
- this.B_DumpSpecific = new System.Windows.Forms.Button();
- this.B_Misc = new System.Windows.Forms.Button();
- this.Tab_Future = new System.Windows.Forms.TabPage();
- this.flowLayoutPanel4 = new System.Windows.Forms.FlowLayoutPanel();
- this.B_DistributionRaids = new System.Windows.Forms.Button();
- this.B_OpenFolder = new System.Windows.Forms.Button();
- this.B_DumpPath = new System.Windows.Forms.Button();
- this.TC_Options.SuspendLayout();
- this.Tab_General.SuspendLayout();
- this.flowLayoutPanel1.SuspendLayout();
- this.Tab_Misc.SuspendLayout();
- this.flowLayoutPanel3.SuspendLayout();
- this.Tab_Future.SuspendLayout();
- this.flowLayoutPanel4.SuspendLayout();
- this.SuspendLayout();
+ TC_Options = new System.Windows.Forms.TabControl();
+ Tab_General = new System.Windows.Forms.TabPage();
+ flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
+ B_ParsePKMDetails = new System.Windows.Forms.Button();
+ B_Raid = new System.Windows.Forms.Button();
+ B_PKText = new System.Windows.Forms.Button();
+ B_Trainers = new System.Windows.Forms.Button();
+ B_Encount = new System.Windows.Forms.Button();
+ B_DumpMoves = new System.Windows.Forms.Button();
+ B_Cooking = new System.Windows.Forms.Button();
+ Tab_Misc = new System.Windows.Forms.TabPage();
+ flowLayoutPanel3 = new System.Windows.Forms.FlowLayoutPanel();
+ B_DumpHash = new System.Windows.Forms.Button();
+ B_DumpArc = new System.Windows.Forms.Button();
+ B_DumpSpecific = new System.Windows.Forms.Button();
+ B_Misc = new System.Windows.Forms.Button();
+ B_DumpPath = new System.Windows.Forms.Button();
+ Tab_Future = new System.Windows.Forms.TabPage();
+ flowLayoutPanel4 = new System.Windows.Forms.FlowLayoutPanel();
+ B_DistributionRaids = new System.Windows.Forms.Button();
+ B_DeliveryOutbreaks = new System.Windows.Forms.Button();
+ B_OpenFolder = new System.Windows.Forms.Button();
+ TC_Options.SuspendLayout();
+ Tab_General.SuspendLayout();
+ flowLayoutPanel1.SuspendLayout();
+ Tab_Misc.SuspendLayout();
+ flowLayoutPanel3.SuspendLayout();
+ Tab_Future.SuspendLayout();
+ flowLayoutPanel4.SuspendLayout();
+ SuspendLayout();
//
// TC_Options
//
- this.TC_Options.Controls.Add(this.Tab_General);
- this.TC_Options.Controls.Add(this.Tab_Misc);
- this.TC_Options.Controls.Add(this.Tab_Future);
- this.TC_Options.Dock = System.Windows.Forms.DockStyle.Fill;
- this.TC_Options.Location = new System.Drawing.Point(0, 0);
- this.TC_Options.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.TC_Options.Name = "TC_Options";
- this.TC_Options.SelectedIndex = 0;
- this.TC_Options.Size = new System.Drawing.Size(484, 321);
- this.TC_Options.TabIndex = 0;
+ TC_Options.Controls.Add(Tab_General);
+ TC_Options.Controls.Add(Tab_Misc);
+ TC_Options.Controls.Add(Tab_Future);
+ TC_Options.Dock = System.Windows.Forms.DockStyle.Fill;
+ TC_Options.Location = new System.Drawing.Point(0, 0);
+ TC_Options.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ TC_Options.Name = "TC_Options";
+ TC_Options.SelectedIndex = 0;
+ TC_Options.Size = new System.Drawing.Size(484, 321);
+ TC_Options.TabIndex = 0;
//
// Tab_General
//
- this.Tab_General.Controls.Add(this.flowLayoutPanel1);
- this.Tab_General.Location = new System.Drawing.Point(4, 24);
- this.Tab_General.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.Tab_General.Name = "Tab_General";
- this.Tab_General.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.Tab_General.Size = new System.Drawing.Size(476, 293);
- this.Tab_General.TabIndex = 0;
- this.Tab_General.Text = "General";
- this.Tab_General.UseVisualStyleBackColor = true;
+ Tab_General.Controls.Add(flowLayoutPanel1);
+ Tab_General.Location = new System.Drawing.Point(4, 24);
+ Tab_General.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ Tab_General.Name = "Tab_General";
+ Tab_General.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ Tab_General.Size = new System.Drawing.Size(476, 293);
+ Tab_General.TabIndex = 0;
+ Tab_General.Text = "General";
+ Tab_General.UseVisualStyleBackColor = true;
//
// flowLayoutPanel1
//
- this.flowLayoutPanel1.Controls.Add(this.B_ParsePKMDetails);
- this.flowLayoutPanel1.Controls.Add(this.B_Raid);
- this.flowLayoutPanel1.Controls.Add(this.B_PKText);
- this.flowLayoutPanel1.Controls.Add(this.B_Trainers);
- this.flowLayoutPanel1.Controls.Add(this.B_Encount);
- this.flowLayoutPanel1.Controls.Add(this.B_DumpMoves);
- this.flowLayoutPanel1.Controls.Add(this.B_Cooking);
- this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
- this.flowLayoutPanel1.Location = new System.Drawing.Point(4, 3);
- this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.flowLayoutPanel1.Name = "flowLayoutPanel1";
- this.flowLayoutPanel1.Size = new System.Drawing.Size(468, 287);
- this.flowLayoutPanel1.TabIndex = 1;
+ flowLayoutPanel1.Controls.Add(B_ParsePKMDetails);
+ flowLayoutPanel1.Controls.Add(B_Raid);
+ flowLayoutPanel1.Controls.Add(B_PKText);
+ flowLayoutPanel1.Controls.Add(B_Trainers);
+ flowLayoutPanel1.Controls.Add(B_Encount);
+ flowLayoutPanel1.Controls.Add(B_DumpMoves);
+ flowLayoutPanel1.Controls.Add(B_Cooking);
+ flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ flowLayoutPanel1.Location = new System.Drawing.Point(4, 3);
+ flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ flowLayoutPanel1.Name = "flowLayoutPanel1";
+ flowLayoutPanel1.Size = new System.Drawing.Size(468, 287);
+ flowLayoutPanel1.TabIndex = 1;
//
// B_ParsePKMDetails
//
- this.B_ParsePKMDetails.Location = new System.Drawing.Point(4, 3);
- this.B_ParsePKMDetails.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.B_ParsePKMDetails.Name = "B_ParsePKMDetails";
- this.B_ParsePKMDetails.Size = new System.Drawing.Size(144, 63);
- this.B_ParsePKMDetails.TabIndex = 1;
- this.B_ParsePKMDetails.Text = "Personal Stats";
- this.B_ParsePKMDetails.UseVisualStyleBackColor = true;
- this.B_ParsePKMDetails.Click += new System.EventHandler(this.B_ParsePKMDetails_Click);
+ B_ParsePKMDetails.Location = new System.Drawing.Point(4, 3);
+ B_ParsePKMDetails.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_ParsePKMDetails.Name = "B_ParsePKMDetails";
+ B_ParsePKMDetails.Size = new System.Drawing.Size(144, 63);
+ B_ParsePKMDetails.TabIndex = 1;
+ B_ParsePKMDetails.Text = "Personal Stats";
+ B_ParsePKMDetails.UseVisualStyleBackColor = true;
+ B_ParsePKMDetails.Click += B_ParsePKMDetails_Click;
//
// B_Raid
//
- this.B_Raid.Location = new System.Drawing.Point(156, 3);
- this.B_Raid.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.B_Raid.Name = "B_Raid";
- this.B_Raid.Size = new System.Drawing.Size(144, 63);
- this.B_Raid.TabIndex = 16;
- this.B_Raid.Text = "Raids";
- this.B_Raid.UseVisualStyleBackColor = true;
- this.B_Raid.Click += new System.EventHandler(this.B_Raid_Click);
+ B_Raid.Location = new System.Drawing.Point(156, 3);
+ B_Raid.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_Raid.Name = "B_Raid";
+ B_Raid.Size = new System.Drawing.Size(144, 63);
+ B_Raid.TabIndex = 16;
+ B_Raid.Text = "Raids";
+ B_Raid.UseVisualStyleBackColor = true;
+ B_Raid.Click += B_Raid_Click;
//
// B_PKText
//
- this.B_PKText.Location = new System.Drawing.Point(308, 3);
- this.B_PKText.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.B_PKText.Name = "B_PKText";
- this.B_PKText.Size = new System.Drawing.Size(144, 63);
- this.B_PKText.TabIndex = 17;
- this.B_PKText.Text = "Text Files";
- this.B_PKText.UseVisualStyleBackColor = true;
- this.B_PKText.Click += new System.EventHandler(this.B_PKText_Click);
+ B_PKText.Location = new System.Drawing.Point(308, 3);
+ B_PKText.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_PKText.Name = "B_PKText";
+ B_PKText.Size = new System.Drawing.Size(144, 63);
+ B_PKText.TabIndex = 17;
+ B_PKText.Text = "Text Files";
+ B_PKText.UseVisualStyleBackColor = true;
+ B_PKText.Click += B_PKText_Click;
//
// B_Trainers
//
- this.B_Trainers.Location = new System.Drawing.Point(4, 72);
- this.B_Trainers.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.B_Trainers.Name = "B_Trainers";
- this.B_Trainers.Size = new System.Drawing.Size(144, 63);
- this.B_Trainers.TabIndex = 18;
- this.B_Trainers.Text = "Trainers";
- this.B_Trainers.UseVisualStyleBackColor = true;
- this.B_Trainers.Click += new System.EventHandler(this.B_Trainers_Click);
+ B_Trainers.Location = new System.Drawing.Point(4, 72);
+ B_Trainers.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_Trainers.Name = "B_Trainers";
+ B_Trainers.Size = new System.Drawing.Size(144, 63);
+ B_Trainers.TabIndex = 18;
+ B_Trainers.Text = "Trainers";
+ B_Trainers.UseVisualStyleBackColor = true;
+ B_Trainers.Click += B_Trainers_Click;
//
// B_Encount
//
- this.B_Encount.Location = new System.Drawing.Point(156, 72);
- this.B_Encount.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.B_Encount.Name = "B_Encount";
- this.B_Encount.Size = new System.Drawing.Size(144, 63);
- this.B_Encount.TabIndex = 19;
- this.B_Encount.Text = "Encounters";
- this.B_Encount.UseVisualStyleBackColor = true;
- this.B_Encount.Click += new System.EventHandler(this.B_Encount_Click);
+ B_Encount.Location = new System.Drawing.Point(156, 72);
+ B_Encount.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_Encount.Name = "B_Encount";
+ B_Encount.Size = new System.Drawing.Size(144, 63);
+ B_Encount.TabIndex = 19;
+ B_Encount.Text = "Encounters";
+ B_Encount.UseVisualStyleBackColor = true;
+ B_Encount.Click += B_Encount_Click;
//
// B_DumpMoves
//
- this.B_DumpMoves.Location = new System.Drawing.Point(308, 72);
- this.B_DumpMoves.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.B_DumpMoves.Name = "B_DumpMoves";
- this.B_DumpMoves.Size = new System.Drawing.Size(144, 63);
- this.B_DumpMoves.TabIndex = 20;
- this.B_DumpMoves.Text = "Moves";
- this.B_DumpMoves.UseVisualStyleBackColor = true;
- this.B_DumpMoves.Click += new System.EventHandler(this.B_DumpMoves_Click);
+ B_DumpMoves.Location = new System.Drawing.Point(308, 72);
+ B_DumpMoves.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_DumpMoves.Name = "B_DumpMoves";
+ B_DumpMoves.Size = new System.Drawing.Size(144, 63);
+ B_DumpMoves.TabIndex = 20;
+ B_DumpMoves.Text = "Moves";
+ B_DumpMoves.UseVisualStyleBackColor = true;
+ B_DumpMoves.Click += B_DumpMoves_Click;
//
// B_Cooking
//
- this.B_Cooking.Location = new System.Drawing.Point(4, 141);
- this.B_Cooking.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.B_Cooking.Name = "B_Cooking";
- this.B_Cooking.Size = new System.Drawing.Size(144, 63);
- this.B_Cooking.TabIndex = 21;
- this.B_Cooking.Text = "Cooking";
- this.B_Cooking.UseVisualStyleBackColor = true;
- this.B_Cooking.Click += new System.EventHandler(this.B_Cooking_Click);
+ B_Cooking.Location = new System.Drawing.Point(4, 141);
+ B_Cooking.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_Cooking.Name = "B_Cooking";
+ B_Cooking.Size = new System.Drawing.Size(144, 63);
+ B_Cooking.TabIndex = 21;
+ B_Cooking.Text = "Cooking";
+ B_Cooking.UseVisualStyleBackColor = true;
+ B_Cooking.Click += B_Cooking_Click;
//
// Tab_Misc
//
- this.Tab_Misc.Controls.Add(this.flowLayoutPanel3);
- this.Tab_Misc.Location = new System.Drawing.Point(4, 24);
- this.Tab_Misc.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.Tab_Misc.Name = "Tab_Misc";
- this.Tab_Misc.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.Tab_Misc.Size = new System.Drawing.Size(476, 293);
- this.Tab_Misc.TabIndex = 2;
- this.Tab_Misc.Text = "Misc";
- this.Tab_Misc.UseVisualStyleBackColor = true;
+ Tab_Misc.Controls.Add(flowLayoutPanel3);
+ Tab_Misc.Location = new System.Drawing.Point(4, 24);
+ Tab_Misc.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ Tab_Misc.Name = "Tab_Misc";
+ Tab_Misc.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ Tab_Misc.Size = new System.Drawing.Size(476, 293);
+ Tab_Misc.TabIndex = 2;
+ Tab_Misc.Text = "Misc";
+ Tab_Misc.UseVisualStyleBackColor = true;
//
// flowLayoutPanel3
//
- this.flowLayoutPanel3.Controls.Add(this.B_DumpHash);
- this.flowLayoutPanel3.Controls.Add(this.B_DumpArc);
- this.flowLayoutPanel3.Controls.Add(this.B_DumpSpecific);
- this.flowLayoutPanel3.Controls.Add(this.B_Misc);
- this.flowLayoutPanel3.Controls.Add(this.B_DumpPath);
- this.flowLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill;
- this.flowLayoutPanel3.Location = new System.Drawing.Point(4, 3);
- this.flowLayoutPanel3.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.flowLayoutPanel3.Name = "flowLayoutPanel3";
- this.flowLayoutPanel3.Size = new System.Drawing.Size(468, 287);
- this.flowLayoutPanel3.TabIndex = 2;
+ flowLayoutPanel3.Controls.Add(B_DumpHash);
+ flowLayoutPanel3.Controls.Add(B_DumpArc);
+ flowLayoutPanel3.Controls.Add(B_DumpSpecific);
+ flowLayoutPanel3.Controls.Add(B_Misc);
+ flowLayoutPanel3.Controls.Add(B_DumpPath);
+ flowLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill;
+ flowLayoutPanel3.Location = new System.Drawing.Point(4, 3);
+ flowLayoutPanel3.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ flowLayoutPanel3.Name = "flowLayoutPanel3";
+ flowLayoutPanel3.Size = new System.Drawing.Size(468, 287);
+ flowLayoutPanel3.TabIndex = 2;
//
// B_DumpHash
//
- this.B_DumpHash.Location = new System.Drawing.Point(4, 3);
- this.B_DumpHash.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.B_DumpHash.Name = "B_DumpHash";
- this.B_DumpHash.Size = new System.Drawing.Size(144, 63);
- this.B_DumpHash.TabIndex = 14;
- this.B_DumpHash.Text = "Hash Tables";
- this.B_DumpHash.UseVisualStyleBackColor = true;
- this.B_DumpHash.Click += new System.EventHandler(this.B_DumpHash_Click);
+ B_DumpHash.Location = new System.Drawing.Point(4, 3);
+ B_DumpHash.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_DumpHash.Name = "B_DumpHash";
+ B_DumpHash.Size = new System.Drawing.Size(144, 63);
+ B_DumpHash.TabIndex = 14;
+ B_DumpHash.Text = "Hash Tables";
+ B_DumpHash.UseVisualStyleBackColor = true;
+ B_DumpHash.Click += B_DumpHash_Click;
//
// B_DumpArc
//
- this.B_DumpArc.Location = new System.Drawing.Point(156, 3);
- this.B_DumpArc.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.B_DumpArc.Name = "B_DumpArc";
- this.B_DumpArc.Size = new System.Drawing.Size(144, 63);
- this.B_DumpArc.TabIndex = 18;
- this.B_DumpArc.Text = "Archives";
- this.B_DumpArc.UseVisualStyleBackColor = true;
- this.B_DumpArc.Click += new System.EventHandler(this.B_DumpArc_Click);
+ B_DumpArc.Location = new System.Drawing.Point(156, 3);
+ B_DumpArc.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_DumpArc.Name = "B_DumpArc";
+ B_DumpArc.Size = new System.Drawing.Size(144, 63);
+ B_DumpArc.TabIndex = 18;
+ B_DumpArc.Text = "Archives";
+ B_DumpArc.UseVisualStyleBackColor = true;
+ B_DumpArc.Click += B_DumpArc_Click;
//
// B_DumpSpecific
//
- this.B_DumpSpecific.Location = new System.Drawing.Point(308, 3);
- this.B_DumpSpecific.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.B_DumpSpecific.Name = "B_DumpSpecific";
- this.B_DumpSpecific.Size = new System.Drawing.Size(144, 63);
- this.B_DumpSpecific.TabIndex = 19;
- this.B_DumpSpecific.Text = "Specific Packed";
- this.B_DumpSpecific.UseVisualStyleBackColor = true;
- this.B_DumpSpecific.Click += new System.EventHandler(this.B_DumpSpecific_Click);
+ B_DumpSpecific.Location = new System.Drawing.Point(308, 3);
+ B_DumpSpecific.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_DumpSpecific.Name = "B_DumpSpecific";
+ B_DumpSpecific.Size = new System.Drawing.Size(144, 63);
+ B_DumpSpecific.TabIndex = 19;
+ B_DumpSpecific.Text = "Specific Packed";
+ B_DumpSpecific.UseVisualStyleBackColor = true;
+ B_DumpSpecific.Click += B_DumpSpecific_Click;
//
// B_Misc
//
- this.B_Misc.Location = new System.Drawing.Point(4, 72);
- this.B_Misc.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.B_Misc.Name = "B_Misc";
- this.B_Misc.Size = new System.Drawing.Size(144, 63);
- this.B_Misc.TabIndex = 20;
- this.B_Misc.Text = "Misc";
- this.B_Misc.UseVisualStyleBackColor = true;
- this.B_Misc.Click += new System.EventHandler(this.B_DumpMisc_Click);
- //
- // Tab_Future
- //
- this.Tab_Future.Controls.Add(this.flowLayoutPanel4);
- this.Tab_Future.Location = new System.Drawing.Point(4, 24);
- this.Tab_Future.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.Tab_Future.Name = "Tab_Future";
- this.Tab_Future.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.Tab_Future.Size = new System.Drawing.Size(476, 293);
- this.Tab_Future.TabIndex = 3;
- this.Tab_Future.Text = "Future";
- this.Tab_Future.UseVisualStyleBackColor = true;
- //
- // flowLayoutPanel4
- //
- this.flowLayoutPanel4.Controls.Add(this.B_DistributionRaids);
- this.flowLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill;
- this.flowLayoutPanel4.Location = new System.Drawing.Point(4, 3);
- this.flowLayoutPanel4.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.flowLayoutPanel4.Name = "flowLayoutPanel4";
- this.flowLayoutPanel4.Size = new System.Drawing.Size(468, 287);
- this.flowLayoutPanel4.TabIndex = 3;
- //
- // B_DistributionRaids
- //
- this.B_DistributionRaids.Location = new System.Drawing.Point(4, 3);
- this.B_DistributionRaids.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.B_DistributionRaids.Name = "B_DistributionRaids";
- this.B_DistributionRaids.Size = new System.Drawing.Size(144, 63);
- this.B_DistributionRaids.TabIndex = 14;
- this.B_DistributionRaids.Text = "Distribution Raids";
- this.B_DistributionRaids.UseVisualStyleBackColor = true;
- this.B_DistributionRaids.Click += new System.EventHandler(this.B_DistributionRaids_Click);
- //
- // B_OpenFolder
- //
- this.B_OpenFolder.Location = new System.Drawing.Point(376, -1);
- this.B_OpenFolder.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.B_OpenFolder.Name = "B_OpenFolder";
- this.B_OpenFolder.Size = new System.Drawing.Size(88, 27);
- this.B_OpenFolder.TabIndex = 2;
- this.B_OpenFolder.Text = "Open Folder";
- this.B_OpenFolder.UseVisualStyleBackColor = true;
- this.B_OpenFolder.Click += new System.EventHandler(this.B_OpenFolder_Click);
+ B_Misc.Location = new System.Drawing.Point(4, 72);
+ B_Misc.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_Misc.Name = "B_Misc";
+ B_Misc.Size = new System.Drawing.Size(144, 63);
+ B_Misc.TabIndex = 20;
+ B_Misc.Text = "Misc";
+ B_Misc.UseVisualStyleBackColor = true;
+ B_Misc.Click += B_DumpMisc_Click;
//
// B_DumpPath
//
- this.B_DumpPath.Location = new System.Drawing.Point(156, 72);
- this.B_DumpPath.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.B_DumpPath.Name = "B_DumpPath";
- this.B_DumpPath.Size = new System.Drawing.Size(144, 63);
- this.B_DumpPath.TabIndex = 21;
- this.B_DumpPath.Text = "Specific File...";
- this.B_DumpPath.UseVisualStyleBackColor = true;
- this.B_DumpPath.Click += new System.EventHandler(this.B_DumpPath_Click);
+ B_DumpPath.Location = new System.Drawing.Point(156, 72);
+ B_DumpPath.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_DumpPath.Name = "B_DumpPath";
+ B_DumpPath.Size = new System.Drawing.Size(144, 63);
+ B_DumpPath.TabIndex = 21;
+ B_DumpPath.Text = "Specific File...";
+ B_DumpPath.UseVisualStyleBackColor = true;
+ B_DumpPath.Click += B_DumpPath_Click;
+ //
+ // Tab_Future
+ //
+ Tab_Future.Controls.Add(flowLayoutPanel4);
+ Tab_Future.Location = new System.Drawing.Point(4, 24);
+ Tab_Future.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ Tab_Future.Name = "Tab_Future";
+ Tab_Future.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ Tab_Future.Size = new System.Drawing.Size(476, 293);
+ Tab_Future.TabIndex = 3;
+ Tab_Future.Text = "Future";
+ Tab_Future.UseVisualStyleBackColor = true;
+ //
+ // flowLayoutPanel4
+ //
+ flowLayoutPanel4.Controls.Add(B_DistributionRaids);
+ flowLayoutPanel4.Controls.Add(B_DeliveryOutbreaks);
+ flowLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill;
+ flowLayoutPanel4.Location = new System.Drawing.Point(4, 3);
+ flowLayoutPanel4.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ flowLayoutPanel4.Name = "flowLayoutPanel4";
+ flowLayoutPanel4.Size = new System.Drawing.Size(468, 287);
+ flowLayoutPanel4.TabIndex = 3;
+ //
+ // B_DistributionRaids
+ //
+ B_DistributionRaids.Location = new System.Drawing.Point(4, 3);
+ B_DistributionRaids.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_DistributionRaids.Name = "B_DistributionRaids";
+ B_DistributionRaids.Size = new System.Drawing.Size(144, 63);
+ B_DistributionRaids.TabIndex = 14;
+ B_DistributionRaids.Text = "Distribution Raids";
+ B_DistributionRaids.UseVisualStyleBackColor = true;
+ B_DistributionRaids.Click += B_DistributionRaids_Click;
+ //
+ // B_DeliveryOutbreaks
+ //
+ B_DeliveryOutbreaks.Location = new System.Drawing.Point(156, 3);
+ B_DeliveryOutbreaks.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_DeliveryOutbreaks.Name = "B_DeliveryOutbreaks";
+ B_DeliveryOutbreaks.Size = new System.Drawing.Size(144, 63);
+ B_DeliveryOutbreaks.TabIndex = 15;
+ B_DeliveryOutbreaks.Text = "Distribution Outbreaks";
+ B_DeliveryOutbreaks.UseVisualStyleBackColor = true;
+ B_DeliveryOutbreaks.Click += B_DeliveryOutbreaks_Click;
+ //
+ // B_OpenFolder
+ //
+ B_OpenFolder.Location = new System.Drawing.Point(376, -1);
+ B_OpenFolder.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ B_OpenFolder.Name = "B_OpenFolder";
+ B_OpenFolder.Size = new System.Drawing.Size(88, 27);
+ B_OpenFolder.TabIndex = 2;
+ B_OpenFolder.Text = "Open Folder";
+ B_OpenFolder.UseVisualStyleBackColor = true;
+ B_OpenFolder.Click += B_OpenFolder_Click;
//
// DumperSV
//
- this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(484, 321);
- this.Controls.Add(this.B_OpenFolder);
- this.Controls.Add(this.TC_Options);
- this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
- this.MaximizeBox = false;
- this.Name = "DumperSV";
- this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
- this.Text = "SVDump";
- this.TC_Options.ResumeLayout(false);
- this.Tab_General.ResumeLayout(false);
- this.flowLayoutPanel1.ResumeLayout(false);
- this.Tab_Misc.ResumeLayout(false);
- this.flowLayoutPanel3.ResumeLayout(false);
- this.Tab_Future.ResumeLayout(false);
- this.flowLayoutPanel4.ResumeLayout(false);
- this.ResumeLayout(false);
-
+ AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+ AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ ClientSize = new System.Drawing.Size(484, 321);
+ Controls.Add(B_OpenFolder);
+ Controls.Add(TC_Options);
+ Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+ MaximizeBox = false;
+ Name = "DumperSV";
+ StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ Text = "SVDump";
+ TC_Options.ResumeLayout(false);
+ Tab_General.ResumeLayout(false);
+ flowLayoutPanel1.ResumeLayout(false);
+ Tab_Misc.ResumeLayout(false);
+ flowLayoutPanel3.ResumeLayout(false);
+ Tab_Future.ResumeLayout(false);
+ flowLayoutPanel4.ResumeLayout(false);
+ ResumeLayout(false);
}
#endregion
@@ -347,5 +359,6 @@ private void InitializeComponent()
private System.Windows.Forms.Button B_DumpMoves;
private System.Windows.Forms.Button B_Cooking;
private System.Windows.Forms.Button B_DumpPath;
+ private System.Windows.Forms.Button B_DeliveryOutbreaks;
}
}
diff --git a/pkNX.WinForms/Dumping/DumperSV.cs b/pkNX.WinForms/Dumping/DumperSV.cs
index ceeebb6a..5fdc5057 100644
--- a/pkNX.WinForms/Dumping/DumperSV.cs
+++ b/pkNX.WinForms/Dumping/DumperSV.cs
@@ -85,7 +85,8 @@ private void B_DumpMisc_Click(object sender, EventArgs e)
private void B_DumpPath_Click(object sender, EventArgs e)
{
- using var f = new TextInput();
+ bool Valid(string path) => Game.HasFile(path);
+ using var f = new TextInput(Valid);
f.ShowDialog();
if (f.DialogResult != DialogResult.OK)
return; // cancel
@@ -126,6 +127,16 @@ private void B_DistributionRaids_Click(object sender, EventArgs e)
Dumper.DumpDistributionRaids(path);
System.Media.SystemSounds.Asterisk.Play();
}
+
+ private void B_DeliveryOutbreaks_Click(object sender, EventArgs e)
+ {
+ using var fbd = new FolderBrowserDialog();
+ if (fbd.ShowDialog() != DialogResult.OK)
+ return;
+ var path = fbd.SelectedPath;
+ Dumper.DumpDeliveryOutbreaks(path);
+ System.Media.SystemSounds.Asterisk.Play();
+ }
#endregion
private void B_Encount_Click(object sender, EventArgs e)
diff --git a/pkNX.WinForms/Dumping/DumperSV.resx b/pkNX.WinForms/Dumping/DumperSV.resx
new file mode 100644
index 00000000..1af7de15
--- /dev/null
+++ b/pkNX.WinForms/Dumping/DumperSV.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/pkNX.WinForms/Dumping/GameDumperSV.cs b/pkNX.WinForms/Dumping/GameDumperSV.cs
index f2b08c48..18745a32 100644
--- a/pkNX.WinForms/Dumping/GameDumperSV.cs
+++ b/pkNX.WinForms/Dumping/GameDumperSV.cs
@@ -9,7 +9,12 @@
using pkNX.Structures;
using pkNX.Structures.FlatBuffers;
using pkNX.Structures.FlatBuffers.SV;
+using pkNX.Structures.FlatBuffers.SV.Trinity;
+using EvolutionType = pkNX.Structures.EvolutionType;
+using GameVersion = pkNX.Structures.GameVersion;
+using Move = pkNX.Structures.Move;
using Schema = pkNX.Structures.FlatBuffers.Reflection;
+using Species = pkNX.Structures.Species;
// ReSharper disable StringLiteralTypo
@@ -249,7 +254,7 @@ public void DumpPersonal()
File.WriteAllBytes(GetPath("pkhex", "evos_sv.pkl"), MiniUtil.PackMini(evos, "sv"));
List<(ushort Internal, ushort National)> map = new();
- for (ushort i = 0; i <= (ushort)DevID.DEV_MANKII3; i++)
+ for (ushort i = 0; i <= (ushort)DevID.DEV_MATCHA2; i++)
{
var pi = pt[i];
var info = pi.FB.Info;
@@ -402,12 +407,27 @@ private static byte[][] SerializeLearnsetPickle(PersonalTable9SV pt)
var t = pt.Table;
var result = new byte[t.Length][];
for (int i = 0; i < t.Length; i++)
- result[i] = Write(t[i].FB.Learnset);
+ {
+ var p = t[i];
+ var learn = p.FB.Learnset;
+ if (i == (int)Species.Zorua && p.Form == 1)
+ learn = Insert(learn, 28, Move.Spite);
+ else if (i == (int)Species.Larvesta && p.Form == 0)
+ learn = Insert(learn, 24, Move.BugBite);
+ result[i] = Write(learn);
+ }
return result;
- static byte[] Write(IEnumerable fbLearnset)
+ static List Insert(IList learn, sbyte level, Move move)
{
- using var ms = new MemoryStream();
+ var list = learn.ToList();
+ list.Add(new PersonalInfoMove { Level = level, Move = (ushort)move });
+ return list.OrderBy(z => z.Level).ToList();
+ }
+
+ static byte[] Write(IList fbLearnset)
+ {
+ using var ms = new MemoryStream(4 + (4 * fbLearnset.Count));
using var bw = new BinaryWriter(ms);
foreach (var m in fbLearnset)
{
@@ -422,19 +442,20 @@ static byte[] Write(IEnumerable fbLearnset)
public void DumpMisc()
{
+ DumpBalloon();
+ DumpBattle();
+ DumpEncount();
DumpDLC();
DumpGymRewards();
DumpGrow();
DumpAudio();
DumpAjito();
DumpField();
- DumpEncount();
DumpJunk();
DumpRaid();
DumpItems();
DumpFieldReturn();
DumpGem();
- DumpBattle();
DumpPokeDex();
DumpUI();
DumpUniquePath();
@@ -520,15 +541,26 @@ private void DumpEncount()
Dump("world/data/event/treeshake/treeshake_pokemon/treeshake_pokemon_array.bfbs", z => z.Table);
Dump("world/data/encount/point_data/point_data/encount_data_atlantis.bfbs", z => z.Table);
Dump("world/data/encount/point_data/point_data/encount_data_100000.bfbs", z => z.Table);
+ Dump("world/data/encount/point_data/point_data/encount_data_su1.bfbs", z => z.Table);
+ Dump("world/data/encount/point_data/outbreak_point_data/outbreak_point_main.bfbs", z => z.Table);
+ Dump("world/data/encount/point_data/outbreak_point_data/outbreak_point_su1.bfbs", z => z.Table);
Dump("world/data/encount/pokedata/pokedata/pokedata_array.bfbs", z => z.Table);
+ Dump("world/data/encount/pokedata/pokedata_su1/pokedata_su1_array.bfbs", z => z.Table);
DumpJson("world/data/encount/setting/setting/data.bfbs");
Dump("world/data/encount/setting/raid_difficulty_lottery/raid_difficulty_lottery_array.bfbs", z => z.Table);
DumpJson("world/data/encount/setting/raid_gem_setting/raid_gem_setting.bfbs");
+ DumpJson("world/data/encount/setting/raid_gem_setting/su1_raid_gem_setting.bfbs");
+ DumpJson("world/data/encount/setting/outbreak_setting/data.bfbs");
Dump("world/data/field/area/field_dungeon_area/field_dungeon_area_array.bfbs", z => z.Table);
Dump("world/data/field/area/field_inside_area/field_inside_area_array.bfbs", z => z.Table);
Dump("world/data/field/area/field_location/field_location_array.bfbs", z => z.Table);
Dump("world/data/field/area/field_main_area/field_main_area_array.bfbs", z => z.Table);
Dump("world/data/field/area/field_sub_area/field_sub_area_array.bfbs", z => z.Table);
+ Dump("world/data/field/area_su1/field_dungeon_area_su1/field_dungeon_area_su1_array.bfbs", z => z.Table);
+ Dump("world/data/field/area_su1/field_inside_area_su1/field_inside_area_su1_array.bfbs", z => z.Table);
+ Dump("world/data/field/area_su1/field_location_su1/field_location_su1_array.bfbs", z => z.Table);
+ Dump("world/data/field/area_su1/field_main_area_su1/field_main_area_su1_array.bfbs", z => z.Table);
+ Dump("world/data/field/area_su1/field_sub_area_su1/field_sub_area_su1_array.bfbs", z => z.Table);
const string gifts = "world/data/event/event_add_pokemon/eventAddPokemon/eventAddPokemon_array.bfbs";
Dump(gifts, z => z.Table);
@@ -575,6 +607,18 @@ private void DumpJunk()
Dump("world/data/ui/ymap/ymap_place_name_data/ymap_place_name_data_array.bfbs", z => z.Table);
}
+ public void DumpBalloon()
+ {
+ Dump("world/data/oniballoon/reward_action_param/reward_action_param_array.bfbs", z => z.Table);
+ Dump("world/data/oniballoon/result_demo_param/result_demo_param_array.bfbs", z => z.Table);
+ //Dump("?? "FirstRewardParamArray" bfbs", z => z.Table);
+ Dump ("world/data/oniballoon/reward_level_param/reward_level_param_array.bfbs", z => z.Table);
+ Dump("world/data/oniballoon/ojama_pokemon_unique_param/ojama_pokemon_unique_param_array.bfbs", z => z.Table);
+ Dump("world/data/oniballoon/game_base_param/game_base_param_array.bfbs", z => z.Table);
+ Dump("world/data/oniballoon/ojama_pokemon_common_param/ojama_pokemon_common_param_array.bfbs", z => z.Table);
+ Dump("world/data/oniballoon/score_base_param/score_base_param_array.bfbs", z => z.Table);
+ }
+
public void DumpEncounters()
{
var dumper = new EncounterDumperSV(ROM);
@@ -601,8 +645,13 @@ public void DumpRaid()
Dump("world/data/raid/raid_trainer_01/raid_trainer_01_array.bfbs", z => z.Table);
Dump("world/data/raid/raid_trainer_02/raid_trainer_02_array.bfbs", z => z.Table);
Dump("world/data/raid/raid_trainer_03/raid_trainer_03_array.bfbs", z => z.Table);
+ Dump("world/data/raid/raid_trainer_04/raid_trainer_04_array.bfbs", z => z.Table);
+ Dump("world/data/raid/raid_trainer_05/raid_trainer_05_array.bfbs", z => z.Table);
+ Dump("world/data/raid/raid_trainer_06/raid_trainer_06_array.bfbs", z => z.Table);
+ Dump("world/data/raid/raid_trainer_07/raid_trainer_07_array.bfbs", z => z.Table);
+ DumpJson("world/data/raid/raid_gem_item_reward_boost/data.bfbs");
- var allRaids = new[]
+ var mainRaids = new[]
{
"world/data/raid/raid_enemy_01/raid_enemy_01_array.bfbs",
"world/data/raid/raid_enemy_02/raid_enemy_02_array.bfbs",
@@ -611,8 +660,17 @@ public void DumpRaid()
"world/data/raid/raid_enemy_05/raid_enemy_05_array.bfbs",
"world/data/raid/raid_enemy_06/raid_enemy_06_array.bfbs",
};
+ var su1Raids = new[]
+ {
+ "world/data/raid/su1_raid_enemy_01/su1_raid_enemy_01_array.bfbs",
+ "world/data/raid/su1_raid_enemy_02/su1_raid_enemy_02_array.bfbs",
+ "world/data/raid/su1_raid_enemy_03/su1_raid_enemy_03_array.bfbs",
+ "world/data/raid/su1_raid_enemy_04/su1_raid_enemy_04_array.bfbs",
+ "world/data/raid/su1_raid_enemy_05/su1_raid_enemy_05_array.bfbs",
+ "world/data/raid/su1_raid_enemy_06/su1_raid_enemy_06_array.bfbs",
+ };
- foreach (var f in allRaids)
+ foreach (var f in mainRaids.Concat(su1Raids))
{
Dump(f, z => z.Table);
static IEnumerable sel(RaidEnemyTableArray z) => z.Table.Select(x => x.Info.BossPokePara);
@@ -620,7 +678,8 @@ public void DumpRaid()
}
var outPath = GetPath("pkhex");
- TeraRaidRipper.DumpRaids(ROM, allRaids, outPath);
+ TeraRaidRipper.DumpRaids(ROM, mainRaids, outPath, "raidTotal.txt", "encounter_gem_paldea.pkl");
+ TeraRaidRipper.DumpRaids(ROM, su1Raids, outPath, "raidTotalKitakami.txt", "encounter_gem_kitakami.pkl");
}
public void DumpMoves()
@@ -642,9 +701,11 @@ private void DumpItems()
Dump("world/data/item/rummagingItemDataTable/rummagingItemDataTable_array.bfbs", z => z.Table);
Dump("world/data/item/itemPointTypeBiomeTable/itemPointTypeBiomeTable_array.bfbs", z => z.Table);
Dump("world/data/item/hiddenItemBiomeTable/hiddenItemBiomeTable_array.bfbs", z => z.Table);
+ Dump("world/data/item/hiddenItemBiomeTable_su1/hiddenItemBiomeTable_su1_array.bfbs", z => z.Table);
Dump("world/data/item/dropitemdata/dropitemdata_array.bfbs", z => z.Table);
Dump("world/data/item/itemdata/itemdata_array.bfbs", z => z.Table);
Dump("world/data/item/hiddenItemDataTable/hiddenItemDataTable_array.bfbs", z => z.Table);
+ Dump("world/data/item/hiddenItemDataTable_su1/hiddenItemDataTable_su1_array.bfbs", z => z.Table);
Dump("world/data/item/monohiroiItemData/monohiroiItemData_array.bfbs", z => z.Table);
}
@@ -692,10 +753,16 @@ private void DumpBattle()
private void DumpPokeDex()
{
Dump("world/data/ui/pokedex/blacklist/blacklist_array.bfbs", z => z.Table);
+ Dump("world/data/ui/pokedex/blacklist_dlc1/blacklist_dlc1_array.bfbs", z => z.Table);
+
Dump("world/data/ui/pokedex/memo_poke_data/memo_poke_data_array.bfbs", z => z.Table);
+ Dump("world/data/ui/pokedex/memo_poke_data_dlc1/memo_poke_data_dlc1_array.bfbs", z => z.Table);
+
Dump("world/data/ui/pokedex/reward_data/reward_data_array.bfbs", z => z.Table);
+ Dump("world/data/ui/pokedex/reward_data_dlc1/reward_data_dlc1_array.bfbs", z => z.Table);
DumpX("world/data/ui/pokedex/distribution_data/distribution_data_array.bfbs", z => z.Table, z => z.Table);
+ DumpX("world/data/ui/pokedex/distribution_data_dlc1/distribution_data_dlc1_array.bfbs", z => z.Table, z => z.Table);
}
private void DumpUI()
@@ -890,6 +957,20 @@ public void DumpSpecific()
{
var files = new[]
{
+ "world/data/encount/delivery_outbreak/delivery_outbreak_pokedata/delivery_outbreak_pokedata_array.bfbs",
+ "world/data/encount/delivery_outbreak/delivery_outbreak_zone_main/delivery_outbreak_zone_main_array.bfbs",
+ "world/data/encount/delivery_outbreak/delivery_outbreak_zone_su1/delivery_outbreak_zone_su1_array.bfbs",
+ "world/data/encount/delivery_outbreak/delivery_outbreak_zone_su2/delivery_outbreak_zone_su2_array.bfbs",
+
+ "world/data/oniballoon/reward_action_param/reward_action_param_array.bfbs",
+ "world/data/oniballoon/result_demo_param/result_demo_param_array.bfbs",
+ //"?? "FirstRewardParamArray" bfbs",
+ "world/data/oniballoon/reward_level_param/reward_level_param_array.bfbs",
+ "world/data/oniballoon/ojama_pokemon_unique_param/ojama_pokemon_unique_param_array.bfbs",
+ "world/data/oniballoon/game_base_param/game_base_param_array.bfbs",
+ "world/data/oniballoon/ojama_pokemon_common_param/ojama_pokemon_common_param_array.bfbs",
+ "world/data/oniballoon/score_base_param/score_base_param_array.bfbs",
+
"world/data/ui/dlc_item_data/dlc_item_group/dlc_item_group_array.bfbs",
"world/data/gym/gym_denki_popup_fix/gym_denki_popup_fix_array.bfbs",
@@ -925,10 +1006,16 @@ public void DumpSpecific()
// Encounters
"world/data/encount/point_data/point_data/encount_data_atlantis.bfbs",
"world/data/encount/point_data/point_data/encount_data_100000.bfbs",
+ "world/data/encount/point_data/point_data/encount_data_su1.bfbs",
+ "world/data/encount/point_data/outbreak_point_data/outbreak_point_main.bfbs",
+ "world/data/encount/point_data/outbreak_point_data/outbreak_point_su1.bfbs",
"world/data/encount/pokedata/pokedata/pokedata_array.bfbs",
+ "world/data/encount/pokedata/pokedata_su1/pokedata_su1_array.bfbs",
"world/data/encount/setting/setting/data.bfbs",
"world/data/encount/setting/raid_difficulty_lottery/raid_difficulty_lottery_array.bfbs",
"world/data/encount/setting/raid_gem_setting/raid_gem_setting.bfbs",
+ "world/data/encount/setting/raid_gem_setting/su1_raid_gem_setting.bfbs",
+ "world/data/encount/setting/outbreak_setting/data.bfbs",
"world/data/event/treeshake/treeshake_pokemon/treeshake_pokemon_array.bfbs",
// Field
"world/data/field/area/field_dungeon_area/field_dungeon_area_array.bfbs",
@@ -936,6 +1023,11 @@ public void DumpSpecific()
"world/data/field/area/field_location/field_location_array.bfbs",
"world/data/field/area/field_main_area/field_main_area_array.bfbs",
"world/data/field/area/field_sub_area/field_sub_area_array.bfbs",
+ "world/data/field/area_su1/field_dungeon_area_su1/field_dungeon_area_su1_array.bfbs",
+ "world/data/field/area_su1/field_inside_area_su1/field_inside_area_su1_array.bfbs",
+ "world/data/field/area_su1/field_location_su1/field_location_su1_array.bfbs",
+ "world/data/field/area_su1/field_main_area_su1/field_main_area_su1_array.bfbs",
+ "world/data/field/area_su1/field_sub_area_su1/field_sub_area_su1_array.bfbs",
"world/data/field/fixed_symbol/fixed_symbol_table/fixed_symbol_table_array.bfbs",
// Event Trade
"world/data/event/eventTradeList/eventTradeList_array.bfbs",
@@ -958,6 +1050,11 @@ public void DumpSpecific()
"world/data/ui/pokedex/memo_poke_data/memo_poke_data_array.bfbs",
"world/data/ui/pokedex/reward_data/reward_data_array.bfbs",
+ "world/data/ui/pokedex/blacklist_dlc1/blacklist_dlc1_array.bfbs",
+ "world/data/ui/pokedex/distribution_data_dlc1/distribution_data_dlc1_array.bfbs",
+ "world/data/ui/pokedex/memo_poke_data_dlc1/memo_poke_data_dlc1_array.bfbs",
+ "world/data/ui/pokedex/reward_data_dlc1/reward_data_dlc1_array.bfbs",
+
// UI
"world/data/ui/shop/shop_data/shop_data_array.bfbs",
"world/data/ui/status/ribbon/ribbon_array.bfbs",
@@ -1003,6 +1100,13 @@ public void DumpSpecific()
"world/data/raid/raid_trainer_01/raid_trainer_01_array.bfbs",
"world/data/raid/raid_trainer_02/raid_trainer_02_array.bfbs",
"world/data/raid/raid_trainer_03/raid_trainer_03_array.bfbs",
+ "world/data/raid/raid_gem_item_reward_boost/data.bfbs",
+ "world/data/raid/su1_raid_enemy_01/su1_raid_enemy_01_array.bfbs",
+ "world/data/raid/su1_raid_enemy_02/su1_raid_enemy_02_array.bfbs",
+ "world/data/raid/su1_raid_enemy_03/su1_raid_enemy_03_array.bfbs",
+ "world/data/raid/su1_raid_enemy_04/su1_raid_enemy_04_array.bfbs",
+ "world/data/raid/su1_raid_enemy_05/su1_raid_enemy_05_array.bfbs",
+ "world/data/raid/su1_raid_enemy_06/su1_raid_enemy_06_array.bfbs",
// Coin
"world/data/field/coin_symbol/coin_symbol_manager/coin_symbol_manager_data.bfbs",
@@ -1141,4 +1245,10 @@ public void DumpDistributionRaids(string path)
{
TeraRaidRipper.DumpDistributionRaids(ROM, path);
}
+
+ public void DumpDeliveryOutbreaks(string path)
+ {
+ var dump = GetPath("encounters");
+ MassOutbreakRipper.DumpDeliveryOutbreaks(ROM, path, dump);
+ }
}
diff --git a/pkNX.WinForms/Dumping/MassOutbreakRipper.cs b/pkNX.WinForms/Dumping/MassOutbreakRipper.cs
new file mode 100644
index 00000000..29c88f3a
--- /dev/null
+++ b/pkNX.WinForms/Dumping/MassOutbreakRipper.cs
@@ -0,0 +1,565 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using PKHeX.Core;
+using pkNX.Containers;
+using pkNX.Structures;
+using pkNX.Structures.FlatBuffers;
+using pkNX.Structures.FlatBuffers.SV;
+using static pkNX.Structures.Species;
+
+namespace pkNX.WinForms;
+
+public static class MassOutbreakRipper
+{
+ private static readonly List Encounters = new();
+ private static Dictionary NameDict = new();
+
+ public static void DumpDeliveryOutbreaks(IFileInternal ROM, string path, string dump)
+ {
+ Encounters.Clear();
+
+ var cfg = new TextConfig(Structures.GameVersion.SV);
+ var place_names = GetCommonText(ROM, "place_name", "English", cfg);
+ var data = ROM.GetPackedFile("message/dat/English/common/place_name.tbl");
+ var ahtb = new AHTB(data);
+ NameDict = EncounterDumperSV.GetPlaceNameMap(place_names, ahtb);
+
+ var dirs = Directory.GetDirectories(path, "*", SearchOption.AllDirectories).OrderBy(z => z);
+ foreach (var dir in dirs)
+ DumpDeliveryOutbreakData(ROM, dir);
+ ExportPickle(dump, Encounters);
+ }
+
+ private sealed record PickledOutbreak
+ {
+ public required CachedOutbreak Parent { get; init; }
+ public required ushort Species { get; init; }
+ public required byte Form { get; init; }
+ public byte Gender { get; init; } = 0xFF;
+
+ public required byte LevelMin { get; init; }
+ public required byte LevelMax { get; init; }
+ public required RibbonIndex Ribbon { get; init; }
+ public required byte MetBase { get; init; }
+
+ public required Dictionary MetPermit { get; init; }
+
+ public required bool ForceScaleRange { get; init; }
+ public required byte ScaleMin { get; init; }
+ public required byte ScaleMax { get; init; }
+ public required bool IsShiny { get; init; }
+ }
+
+ private static void DumpDeliveryOutbreakData(IFileInternal ROM, string path)
+ {
+ var zoneF0 = Path.Combine(path, "zone_main_array_2_0_0");
+ var zoneF1 = Path.Combine(path, "zone_su1_array_2_0_0");
+ var zoneF2 = Path.Combine(path, "zone_su2_array_2_0_0");
+ var pokedata = Path.Combine(path, "pokedata_array_2_0_0");
+
+ if (!File.Exists(pokedata))
+ return;
+ if (!File.Exists(zoneF2)) // temporary workaround until DLC 2
+ zoneF2 = zoneF1;
+
+ var dataZoneF0 = GetDistributionContents(zoneF0, out int indexZoneF0);
+ var dataZoneF1 = GetDistributionContents(Path.Combine(path, zoneF1), out int indexZoneF1);
+ var dataZoneF2 = GetDistributionContents(Path.Combine(path, zoneF2), out int indexZoneF2);
+ var dataPokeData = GetDistributionContents(Path.Combine(path, pokedata), out int indexPokeData);
+
+ var tableZoneF0 = FlatBufferConverter.DeserializeFrom(dataZoneF0);
+ var tableZoneF1 = FlatBufferConverter.DeserializeFrom(dataZoneF1);
+ var tableZoneF2 = FlatBufferConverter.DeserializeFrom(dataZoneF2);
+ var tablePokeData = FlatBufferConverter.DeserializeFrom(dataPokeData);
+
+ var dirDistText = Path.Combine(path, "parse");
+ ExportParse(ROM, dirDistText, tableZoneF0, tableZoneF1, tableZoneF2, tablePokeData);
+
+ AddToPickleJar(ROM, tableZoneF0, tableZoneF1, tableZoneF2, tablePokeData);
+ DumpPretty(ROM, dirDistText);
+ }
+
+ private static void ExportPickle(string dump, IEnumerable encounters)
+ {
+ var dest = Path.Combine(dump, "encounter_outbreak_paldea.pkl");
+ using var fs = File.Create(dest);
+ using var bw = new BinaryWriter(fs);
+ foreach (var enc in encounters.DistinctBy(x => x))
+ {
+ var ordered = enc.MetPermit
+ .OrderBy(z => z.Key.Min)
+ .ThenBy(z => z.Key.Max);
+
+ foreach (var (range, permit) in ordered)
+ WriteEncounter(enc, bw, range, permit);
+ }
+ }
+
+ private static void WriteEncounter(PickledOutbreak enc, BinaryWriter bw, LevelRange range, UInt128 permit)
+ {
+ bw.Write(enc.Species);
+ bw.Write(enc.Form);
+ bw.Write(enc.Gender);
+
+ bw.Write(range.Min);
+ bw.Write(range.Max);
+ bw.Write((byte)enc.Ribbon);
+ bw.Write(enc.MetBase);
+
+ bw.Write(enc.ForceScaleRange ? (byte)1 : (byte)0);
+ bw.Write(enc.ScaleMin);
+ bw.Write(enc.ScaleMax);
+ bw.Write(enc.IsShiny ? (byte)1 : (byte)0);
+
+ bw.Write((ulong)permit);
+ bw.Write((ulong)(permit >> 64));
+
+ return;
+ }
+
+ private static byte ClampAddBoost(byte val, int b) => (byte)Math.Clamp(val + b, 1, 100);
+
+ private static void AddToPickleJar(IFileInternal ROM, DeliveryOutbreakArray f0, DeliveryOutbreakArray f1, DeliveryOutbreakArray f2, DeliveryOutbreakPokeDataArray pd)
+ {
+ var dpF0 = ROM.GetPackedFile("world/data/encount/point_data/outbreak_point_data/outbreak_point_main.bin");
+ var dpF1 = ROM.GetPackedFile("world/data/encount/point_data/outbreak_point_data/outbreak_point_su1.bin");
+ //var dpF2 = ROM.GetPackedFile("world/data/encount/point_data/outbreak_point_data/outbreak_point_su2.bin");
+
+ var pointsF0 = FlatBufferConverter.DeserializeFrom(dpF0).Table;
+ var pointsF1 = FlatBufferConverter.DeserializeFrom(dpF1).Table;
+ //var pointsF2 = FlatBufferConverter.DeserializeFrom(dpF2).Table;
+
+ var field = new PaldeaFieldModel(ROM);
+ var scene = new PaldeaSceneModel(ROM, field);
+
+ ScanAssertions(pd);
+ AddForMap(pointsF0, f0, pd, scene, NameDict, PaldeaFieldIndex.Paldea, 6);
+ AddForMap(pointsF1, f1, pd, scene, NameDict, PaldeaFieldIndex.Kitakami, 132);
+ //AddForMap(pointsF2, f2, pd, scene, NameDict, PaldeaFieldIndex.Blueberry, 170);
+ }
+
+ private static void ScanAssertions(params DeliveryOutbreakPokeDataArray[] obs)
+ {
+ // Ensure unused fields are not observed in the data -- if seen, pickle format needs to be updated.
+ foreach (var ob in obs)
+ {
+ foreach (var o in ob.Table)
+ {
+ if (o.EnableRarePercentage) // Likely will never be 100%, so if we ever see this, change the check to assert that instead.
+ throw new Exception($"Elevated shiny rate {o.RarePercentage}%!");
+ if (o.EnableScaleRange)
+ throw new Exception($"Enforced scale range {o.MinScale}-{o.MaxScale}!");
+ }
+ }
+ }
+
+ private const float Tolerance = 30f;
+ private const float TolX = Tolerance, TolY = Tolerance, TolZ = Tolerance;
+
+ private static void AddForMap(IEnumerable points,
+ DeliveryOutbreakArray possible, DeliveryOutbreakPokeDataArray pd,
+ PaldeaSceneModel scene, Dictionary placeNameMap, PaldeaFieldIndex fieldIndex,
+ byte baseMet)
+ {
+ var encs = GetMetaEncounter(possible.Table, pd);
+ foreach (var enc in encs)
+ enc.MetBase = baseMet;
+
+ var areas = scene.AreaInfos[(int)fieldIndex];
+ var areaNames = scene.AreaNames[(int)fieldIndex];
+ var atlantis = scene.IsAtlantis[(int)fieldIndex];
+ if (fieldIndex == PaldeaFieldIndex.Kitakami)
+ {
+ areas = areas.Where(z => z.Value.AdjustEncLv != 0)
+ .ToDictionary(z => z.Key, z => z.Value);
+ areaNames = areas.Keys.ToList();
+ }
+ foreach (var point in points)
+ {
+ foreach (var enc in encs)
+ {
+ var poke = enc.Poke;
+ if (!poke.IsLevelRangeCompatible(point.LevelRange))
+ continue;
+ if (!poke.IsEnableCompatible(point.EnableTable))
+ continue;
+ if (!poke.IsCompatibleArea((byte)point.AreaNo))
+ continue;
+ if (!poke.IsCompatibleArea(point.AreaName))
+ continue;
+
+ var min = Math.Max((byte)poke.MinLevel, (byte)point.LevelRange.X);
+ var max = Math.Min((byte)poke.MaxLevel, (byte)point.LevelRange.Y);
+ // Cool, can spawn at this point.
+ // Find all met location IDs we can wander to, then bitflag them into the enc field.
+ var metData = GetMetFlags(scene, placeNameMap, fieldIndex, baseMet, areaNames, areas, point, atlantis);
+ var tuple = new LevelRange(min, max);
+ enc.MetInfo.TryGetValue(tuple, out var val);
+ enc.MetInfo[tuple] = val | metData.Met;
+ if (metData.Boost != 0)
+ {
+ tuple = new LevelRange(ClampAddBoost(tuple.Min, metData.Boost), ClampAddBoost(tuple.Max, metData.Boost));
+ enc.MetInfo.TryGetValue(tuple, out val);
+ enc.MetInfo[tuple] = val | metData.Met;
+ }
+ }
+ }
+
+ ConsolidateMetInfo(encs);
+
+ foreach (var e in encs)
+ {
+ if (e.MetInfo.Count == 0)
+ throw new Exception("No met flags found for encounter!");
+ }
+
+ AddToJar(encs);
+ }
+
+ private static void ConsolidateMetInfo(IEnumerable encs)
+ {
+ foreach (var e in encs)
+ {
+ var ranges = e.MetInfo.ToList();
+ // If the level ranges overlap for any key value pair with the same flags, consolidate them.
+ // For each entry, if a later entry has the same flags, and the level ranges overlap, delete the later entry after merging the level ranges into the first entry.
+ for (int i = 0; i < ranges.Count; i++)
+ {
+ var ((min, max), met) = ranges[i];
+ for (int j = i + 1; j < ranges.Count; j++)
+ {
+ var (min2, max2) = ranges[j].Key;
+ var met2 = ranges[j].Value;
+ if (met != met2)
+ continue;
+ if (min2 > max || max2 < min)
+ continue;
+ // Overlap, merge.
+ min = Math.Min(min, min2);
+ max = Math.Max(max, max2);
+ ranges.RemoveAt(j);
+ j--;
+ }
+ ranges[i] = new(new(min, max), met);
+ }
+ e.MetInfo.Clear();
+ foreach (var r in ranges)
+ e.MetInfo[r.Key] = r.Value;
+ }
+ }
+
+ private record struct LevelRange(byte Min, byte Max);
+
+ private static void AddToJar(CachedOutbreak[] encs)
+ {
+ foreach (var enc in encs)
+ {
+ var pk = enc.Poke;
+ ushort species = SpeciesConverterSV.GetNational9((ushort)pk.DevId);
+ byte form = (byte)pk.FormId;
+ if (species is (int)Scatterbug or (int)Spewpa or (int)Vivillon)
+ form = 30;
+
+ var pickled = new PickledOutbreak
+ {
+ Parent = enc,
+ Species = species,
+ Form = form,
+ Gender = pk.Sex switch
+ {
+ SexType.DEFAULT => 0xFF,
+ SexType.MALE => 0,
+ SexType.FEMALE => 1,
+ _ => throw new ArgumentOutOfRangeException(nameof(SexType), pk.Sex, "Unknown Gender"),
+ },
+ LevelMin = (byte)pk.MinLevel,
+ LevelMax = (byte)pk.MaxLevel,
+ Ribbon = unchecked((RibbonIndex)(pk.AddRibbonPercentage == 0 ? -1 : (int)pk.AddRibbonType - 1)),
+
+ ForceScaleRange = pk.EnableScaleRange,
+ ScaleMin = (byte)pk.MinScale,
+ ScaleMax = (byte)pk.MaxScale,
+ IsShiny = pk.RarePercentage >= 100,
+ MetBase = enc.MetBase,
+ MetPermit = enc.MetInfo,
+ };
+ Encounters.Add(pickled);
+ }
+ }
+
+ private static (UInt128 Met, int Boost) GetMetFlags(PaldeaSceneModel scene, Dictionary placeNameMap, PaldeaFieldIndex fieldIndex,
+ byte baseMet, List areaNames, Dictionary areas, OutbreakPointData point, Dictionary atlantis)
+ {
+ UInt128 result = 0;
+ int boost = 0;
+ for (var i = areaNames.Count - 1; i >= 0; i--)
+ {
+ var areaName = areaNames[i];
+ var areaInfo = areas[areaName];
+ if (atlantis[areaName])
+ continue;
+
+ if (areaInfo.Tag is AreaTag.NG_Encount)
+ continue;
+ if (!scene.TryGetContainsCheck(fieldIndex, areaName, out var collider))
+ continue;
+ var pt = point.Position;
+ if (!collider.ContainsPoint(pt.X, pt.Y, pt.Z))
+ continue;
+ if (!EncounterDumperSV.TryGetPlaceName(ref areaName, areaInfo, pt, placeNameMap, areas, scene, fieldIndex, out var placeName))
+ continue;
+ var loc = placeNameMap[placeName].Index;
+
+ var info = areas[areaName];
+ boost = info.AdjustEncLv;
+ var actual = loc - baseMet;
+ result |= (UInt128)1 << actual;
+
+ for (var x = 0; x < areaNames.Count; x++)
+ {
+ var area = areaNames[x];
+ if (area == areaName)
+ continue;
+
+ if (!scene.TryGetContainsCheck(fieldIndex, area, out var subCol))
+ continue;
+ if (!subCol.ContainsPoint(pt.X, pt.Y, pt.Z, TolX, TolY, TolZ))
+ continue;
+ if (!EncounterDumperSV.TryGetPlaceName(ref area, areaInfo, pt, placeNameMap, areas, scene, fieldIndex, out placeName))
+ continue;
+ loc = placeNameMap[placeName].Index;
+ if (!EncounterDumperSV.IsCrossoverAllowed(loc))
+ continue;
+
+ actual = loc - baseMet;
+ result |= (UInt128)1 << actual;
+ }
+
+ break;
+ }
+ return (result, boost);
+ }
+
+ private class CachedOutbreak
+ {
+ public ulong ZoneID { get; init; }
+ public required DeliveryOutbreakPokeData Poke { get; init; }
+
+ public byte MetBase { get; set; }
+ public readonly Dictionary MetInfo = new();
+ }
+
+ private static CachedOutbreak[] GetMetaEncounter(IEnumerable possibleTable, DeliveryOutbreakPokeDataArray pd)
+ {
+ var ret = new List();
+ var hs = new HashSet();
+ foreach (var outbreak in possibleTable)
+ {
+ TryAdd(outbreak.Poke1, outbreak.Poke1LotValue);
+ TryAdd(outbreak.Poke2, outbreak.Poke2LotValue);
+ TryAdd(outbreak.Poke3, outbreak.Poke3LotValue);
+ TryAdd(outbreak.Poke4, outbreak.Poke4LotValue);
+ TryAdd(outbreak.Poke5, outbreak.Poke5LotValue);
+ continue;
+ void TryAdd(ulong ID, short rate)
+ {
+ if (ID == 0 || rate <= 0 || !hs.Add(ID))
+ return;
+ var poke = pd.Table.First(z => z.ID == ID);
+ ret.Add(new CachedOutbreak { ZoneID = outbreak.ZoneID, Poke = poke });
+ }
+ }
+ return ret.ToArray();
+ }
+
+ private static byte[] GetDistributionContents(string path, out int index)
+ {
+ index = 0; // todo
+ return File.ReadAllBytes(path);
+ }
+
+ private static string Humanize(OutbreakEnableTable enable)
+ {
+ var sb = new StringBuilder();
+ if (enable.Air1) sb.Append(" Air1");
+ if (enable.Air2) sb.Append(" Air2");
+ if (enable.Land) sb.Append(" Land");
+ if (enable.UpWater) sb.Append(" UpWater");
+ if (enable.UnderWater) sb.Append(" Underwater");
+ if (sb.Length == 0)
+ return "Enable: Unrestricted";
+ return "Enable:" + sb;
+ }
+
+ private static string Humanize(EnableTable enable)
+ {
+ var sb = new StringBuilder();
+ if (enable.Air1) sb.Append(" Air1");
+ if (enable.Air2) sb.Append(" Air2");
+ if (enable.Land) sb.Append(" Land");
+ if (enable.UpWater) sb.Append(" UpWater");
+ if (enable.Underwater) sb.Append(" Underwater");
+ if (sb.Length == 0)
+ return "Enable: Unrestricted";
+ return "Enable:" + sb;
+ }
+
+ private static string Humanize(VersionTable? ver) => ver switch
+ {
+ { A: true, B: true } => "Version: Both",
+ { A: true } => "Version: Scarlet",
+ { B: true } => "Version: Violet",
+ _ => "Version: None",
+ };
+
+ private static void ExportParse(IFileInternal ROM, string dir, DeliveryOutbreakArray tableZoneF0, DeliveryOutbreakArray tableZoneF1, DeliveryOutbreakArray tableZoneF2, DeliveryOutbreakPokeDataArray tablePokeData)
+ {
+ var dumpZ0 = TableUtil.GetTable(tableZoneF0.Table);
+ var dumpZ1 = TableUtil.GetTable(tableZoneF1.Table);
+ var dumpZ2 = TableUtil.GetTable(tableZoneF2.Table);
+ var dumpPD = TableUtil.GetTable(tablePokeData.Table);
+ var dump = new[]
+ {
+ ("zone_main", dumpZ0),
+ ("zone_su1", dumpZ1),
+ //("zone_su2", dumpZ2),
+ ("pokedata", dumpPD),
+ };
+
+ Directory.CreateDirectory(dir);
+ foreach (var (name, data) in dump)
+ {
+ var path2 = Path.Combine(dir, $"{name}.txt");
+ File.WriteAllText(path2, data);
+ }
+
+ DumpJson(tableZoneF0, dir, "zone_main");
+ DumpJson(tableZoneF1, dir, "zone_su1");
+ //DumpJson(tableZoneF2, dir, "zone_su2");
+ DumpJson(tablePokeData, dir, "pokedata");
+ }
+
+ private static void DumpJson(object flat, string dir, string name)
+ {
+ var opt = new System.Text.Json.JsonSerializerOptions { WriteIndented = true };
+ var json = System.Text.Json.JsonSerializer.Serialize(flat, opt);
+
+ var fileName = Path.ChangeExtension(name, ".json");
+ File.WriteAllText(Path.Combine(dir, fileName), json);
+ }
+
+ private static string[] GetCommonText(IFileInternal ROM, string name, string lang, TextConfig cfg)
+ {
+ var data = ROM.GetPackedFile($"message/dat/{lang}/common/{name}.dat");
+ return new TextFile(data, cfg).Lines;
+ }
+
+ private static void DumpPretty(IFileInternal ROM, string dir)
+ {
+ string fileName = $"pretty_{Encounters[0].Parent.Poke.ID}.txt";
+ using var sw = File.CreateText(Path.Combine(dir, fileName));
+
+ foreach (var enc in Encounters)
+ {
+ var parent = enc.Parent;
+ WriteParent(ROM, sw, parent);
+ WriteLocationList(sw, parent.MetInfo, parent.MetBase, enc.LevelMin, enc.LevelMax);
+ sw.WriteLine();
+ }
+ }
+
+ private static void WriteLocationList(TextWriter sw, Dictionary metFlags, byte baseMet, byte min, byte max)
+ {
+ foreach ((var range, UInt128 flags) in metFlags.OrderBy(z => z.Key.Min).ThenBy(z => z.Key.Max))
+ {
+ for (int i = 0; i < 128; i++)
+ {
+ if (((flags >> i) & 1) != 1)
+ continue;
+
+ var met = baseMet + i;
+ var location = NameDict.First(z => z.Value.Index == met);
+ sw.WriteLine($"\tLv. {range.Min}-{range.Max} @ {location}");
+ }
+ }
+ }
+
+ private static void WriteParent(IFileInternal ROM, StreamWriter sw, CachedOutbreak parent)
+ {
+ const string lang = "English";
+ var cfg = new TextConfig(Structures.GameVersion.SV);
+ var enc = parent.Poke;
+
+ var species = GetCommonText(ROM, "monsname", lang, cfg);
+ var ribbons = GetCommonText(ROM, "ribbon", lang, cfg);
+
+ var form = GetFormName(ROM, (ushort)parent.Poke.DevId, (byte)parent.Poke.FormId) switch
+ {
+ not "" when enc.FormId is 0 => $" ({GetFormName(ROM, (ushort)enc.DevId, (byte)enc.FormId)})",
+ not "" => $"-{enc.FormId} ({GetFormName(ROM, (ushort)enc.DevId, (byte)enc.FormId)})",
+ _ => string.Empty,
+ };
+
+ sw.WriteLine($"ID: {enc.ID}");
+ sw.WriteLine($"{species[(int)enc.DevId]}{form}");
+ sw.WriteLine(Humanize(enc.Enable!.Value));
+ sw.WriteLine(Humanize(enc.Version));
+ sw.WriteLine($"Base Level Range: {enc.MinLevel}-{enc.MaxLevel}");
+ if (enc.Sex is not SexType.DEFAULT)
+ sw.WriteLine($"Gender: {enc.Sex}");
+ if (enc.EnableScaleRange)
+ sw.WriteLine($"Scale: {enc.MinScale}-{enc.MaxScale}");
+ if (enc.EnableRarePercentage)
+ sw.WriteLine($"Shiny Rate: {enc.RarePercentage}%");
+ if (enc.AddRibbonPercentage != 0)
+ sw.WriteLine($"Ribbon/Mark: {ribbons[(int)enc.AddRibbonType - 1]} ({enc.AddRibbonPercentage}%)");
+ }
+
+ private static string GetFormName(IFileInternal ROM, ushort species, byte form)
+ {
+ const string lang = "English";
+ var cfg = new TextConfig(Structures.GameVersion.SV);
+ var text = GetCommonText(ROM, "zkn_form", lang, cfg);
+ var abil = GetCommonText(ROM, "tokusei", lang, cfg);
+ var type = GetCommonText(ROM, "typename", lang, cfg);
+ var path = ROM.GetPackedFile("message/dat/English/common/zkn_form.tbl");
+ var ahtb = new AHTB(path);
+
+ var GenericFormNames = new HashSet() { Tauros, Unown, Kyogre, Groudon, Rotom, Arceus, Kyurem, Greninja, Rockruff };
+ string[] TaurosForms = new[] { "", "Combat Breed", "Blaze Breed", "Aqua Breed" };
+ char[] UnownForms = "ABCDEFGHIJKLMNOPQRSTUVWXYZ!?".ToCharArray();
+ for (int i = 0; i < text.Length; i++)
+ {
+ var entry = ahtb.Entries[i];
+ var name = entry.Name;
+ var line = text[i];
+
+ // some species have form strings that are just the species name (Rotom), or are not descriptive (e.g. Unown "One form"), or no form string at all!
+ if (GenericFormNames.Contains((Structures.Species)species))
+ {
+ return (Structures.Species)species switch
+ {
+ Tauros when form is not 0 => $"Paldean Form / {TaurosForms[form]}",
+ Unown => $"Unown {UnownForms[form]}", // A-Z!?
+ Kyogre or Groudon when form is 0 => "", // Kyogre-0 / Groudon-0
+ Rotom when form is 0 => "", // Rotom-0
+ Arceus => $"{type[form]}", // Types
+ Kyurem when form is 0 => "", // Kyurem-0
+ Greninja when form is 1 => $"{abil[210]}", // Battle Bond Greninja
+ Rockruff when form is 1 => $"{abil[020]}", // Own Tempo Rockruff
+ _ => "",
+ };
+ }
+
+ else if (name == $"ZKN_FORM_{species:000}_{form:000}")
+ {
+ return line;
+ }
+ }
+
+ return "";
+ }
+}
diff --git a/pkNX.WinForms/Dumping/SV/BoxCollision9.cs b/pkNX.WinForms/Dumping/SV/BoxCollision9.cs
index f70baf94..b814864d 100644
--- a/pkNX.WinForms/Dumping/SV/BoxCollision9.cs
+++ b/pkNX.WinForms/Dumping/SV/BoxCollision9.cs
@@ -1,6 +1,4 @@
-
-using pkNX.Structures;
-using pkNX.Structures.FlatBuffers.SV;
+namespace pkNX.Structures.FlatBuffers;
public class BoxCollision9 : IContainsV3f
{
@@ -30,4 +28,6 @@ public bool ContainsPoint(float x, float y, float z, float toleranceX, float tol
return true;
}
+
+ public bool ContainedBy(IContainsV3f outer) => outer.ContainsPoint(Position.X, Position.Y, Position.Z, Size.X / 2.0f, Size.Y / 2.0f, Size.Z / 2.0f);
}
diff --git a/pkNX.WinForms/Dumping/SV/EncounterDumperSV.cs b/pkNX.WinForms/Dumping/SV/EncounterDumperSV.cs
index d9c70e7f..d2a3f31e 100644
--- a/pkNX.WinForms/Dumping/SV/EncounterDumperSV.cs
+++ b/pkNX.WinForms/Dumping/SV/EncounterDumperSV.cs
@@ -3,8 +3,9 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
-using PKHeX.Core;
+using System.Text.Json;
using pkNX.Containers;
+using pkNX.Structures;
using pkNX.Structures.FlatBuffers;
using pkNX.Structures.FlatBuffers.SV;
@@ -19,6 +20,11 @@ public class EncounterDumperSV
public EncounterDumperSV(IFileInternal rom) => ROM = rom;
+ private static readonly string[] BannedFixedSpawnNames =
+ {
+ "ai_area01_30", // Lighthouse Wingull
+ };
+
public void DumpTo(string path, IReadOnlyList specNamesInternal, IReadOnlyList moveNames,
Dictionary placeNameMap,
bool writeText = true, bool writePickle = true)
@@ -32,100 +38,20 @@ public class EncounterDumperSV
var csym = new PaldeaCoinSymbolModel(ROM);
var mlEncPoints = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/encount/point_data/point_data/encount_data_100000.bin"));
var alEncPoints = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/encount/point_data/point_data/encount_data_atlantis.bin"));
- var pokeData = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/encount/pokedata/pokedata/pokedata_array.bin"));
+ var su1EncPoints = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/encount/point_data/point_data/encount_data_su1.bin"));
+ var pokeDataMain = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/encount/pokedata/pokedata/pokedata_array.bin"));
+ var pokeDataSu1 = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/encount/pokedata/pokedata_su1/pokedata_su1_array.bin"));
var db = new LocationDatabase();
- // Overall Logic Flow:
- // 1 - At every point, spawn everything that can exist at that point.
- // 2 - At each area, absorb native points into local points.
- // 3 - At each area, absorb crossover points into crossover points.
- // 4 - Consolidate the encounters from both point lists.
- // Just compute everything (big memory!) then crunch it all down.
-
// Points can be used by multiple areas as crossover sources. Need to be able to "belong" to multiple areas, and indicate their parent area.
var pointMain = ReformatPoints(mlEncPoints);
var pointAtlantis = ReformatPoints(alEncPoints);
+ var pointSu1 = ReformatPoints(su1EncPoints);
- // Fill the point lists for each area, then spawn everything into those points.
- foreach (var areaName in scene.areaNames)
- {
- var areaInfo = scene.AreaInfos[areaName];
-
- // Determine potential spawners
- if (!scene.TryGetContainsCheck(areaName, out var collider))
- {
- Console.WriteLine($"No collider for {areaName}");
- continue;
- }
-
- // Locations that do not spawn encounters can still have crossovers bleed into them.
- // We'll have empty local encounter lists for them.
- var name = areaInfo.LocationNameMain;
- if (string.IsNullOrEmpty(name))
- continue;
- var storage = db.Get(placeNameMap[name].Index, areaName, areaInfo);
- if (areaInfo.Tag is AreaTag.NG_Encount or AreaTag.NG_All)
- continue;
-
- var points = scene.isAtlantis[areaName] ? pointAtlantis : pointMain;
- storage.LoadPoints(points, collider, areaInfo.ActualMinLevel, areaInfo.ActualMaxLevel);
- storage.GetEncounters(pokeData, scene);
- }
-
- // For each area, we need to peek at the other areas to see if they have any crossover points.
- // For each of those crossover points, we need to see if they are in the current area's collider.
- // If they are, we need to add them to the current area's list of crossover points.
- foreach (var areaName in scene.areaNames)
- {
- // Same sanity checking as above iteration.
- var areaInfo = scene.AreaInfos[areaName];
-
- // Determine potential spawners
- if (!scene.TryGetContainsCheck(areaName, out var collider))
- {
- Console.WriteLine($"No collider for {areaName}");
- continue;
- }
-
- var name = areaInfo.LocationNameMain;
- if (string.IsNullOrEmpty(name))
- continue;
- //if (areaInfo.Tag is AreaTag.NG_Encount or AreaTag.NG_All)
- // continue;
-
- var storage = db.Get(placeNameMap[name].Index, areaName, areaInfo);
- if (!IsCrossoverAllowed(storage))
- continue;
-
- // Here's where the fun begins. Iterate over areas inside this loop so we can look for all possible adjacent areas.
- foreach (var otherName in scene.areaNames)
- {
- // Skip self
- if (otherName == areaName)
- continue;
- // Skip areas that don't have a location name
- var otherAreaInfo = scene.AreaInfos[otherName];
- var otherNameMain = otherAreaInfo.LocationNameMain;
- if (string.IsNullOrEmpty(otherNameMain))
- continue;
-
- // Skip areas that don't have a collider
- if (!scene.TryGetContainsCheck(otherName, out _))
- continue;
-
- // Iterate over all crossover points in the other area.
- var cross = db.Get(placeNameMap[otherNameMain].Index, otherName, otherAreaInfo);
- if (!IsCrossoverAllowed(cross))
- continue;
- foreach (var point in cross.Local)
- {
- // If the crossover point is close enough to the current area's collider, add it to the current area's list of crossover points.
- if (collider.ContainsPoint(point.X, point.Y, point.Z, tolX, tolY, tolZ))
- storage.Nearby.Add(point);
- }
- }
- }
+ // Process all field indices
+ ProcessAreas(PaldeaFieldIndex.Paldea);
+ ProcessAreas(PaldeaFieldIndex.Kitakami);
// Each area and their local / crossover points have been aggregated.
// Integrate the points' slots into a single list, and consolidate entries with same level ranges to as few objects as possible.
@@ -134,6 +60,8 @@ public class EncounterDumperSV
// Consolidate encounters
storage.Integrate();
storage.Consolidate();
+ if (storage.AreaName == "a_su0104")
+ storage.Consolidate();
}
// Output to stream if available.
@@ -156,155 +84,197 @@ public class EncounterDumperSV
// Fixed symbols
List serialized = new();
- int[] bannedIndexes =
- {
- 31, // Lighthouse Wingull
- };
var fsymData = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/fixed_symbol/fixed_symbol_table/fixed_symbol_table_array.bin"));
var eventBattle = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/battle/eventBattlePokemon/eventBattlePokemon_array.bin"));
- foreach (var (game, gamePoints) in new[] { ("sl", fsym.scarletPoints), ("vl", fsym.violetPoints)})
+ foreach (var (game, gamePoints) in new[] { ("sl", fsym.scarletPoints), ("vl", fsym.violetPoints) })
{
using var gw = File.CreateText(Path.Combine(path, $"titan_fixed_{game}.txt"));
- for (var i = 0; i < fsymData.Table.Count; i++)
+ foreach (var fieldIndex in new[] { PaldeaFieldIndex.Paldea, PaldeaFieldIndex.Kitakami })
{
- var entry = fsymData.Table[i];
- var tableKey = entry.TableKey;
- var points = gamePoints.Where(p => p.TableKey == tableKey).ToList();
- if (points.Count == 0)
- continue;
+ var areaNames = scene.AreaNames[(int)fieldIndex];
+ var areas = scene.AreaInfos[(int)fieldIndex];
+ var atlantis = scene.IsAtlantis[(int)fieldIndex];
+ var allPoints = gamePoints[(int)fieldIndex];
- var areas = new List();
- var tmpPoints = points.ToList();
- for (var x = scene.areaNames.Count - 1; x >= 0; x--)
+ if (fieldIndex == PaldeaFieldIndex.Kitakami)
{
- var areaName = scene.areaNames[x];
- if (scene.isAtlantis[areaName])
+ areas = areas.Where(z => z.Value.AdjustEncLv != 0)
+ .ToDictionary(z => z.Key, z => z.Value);
+ areaNames = areas.Keys.ToList();
+ }
+
+ for (var i = 0; i < fsymData.Table.Count; i++)
+ {
+ var entry = fsymData.Table[i];
+ var tableKey = entry.TableKey;
+ var points = allPoints.FindAll(p => p.TableKey == tableKey);
+ if (points.Count == 0)
continue;
- var areaInfo = scene.AreaInfos[areaName];
- var name = areaInfo.LocationNameMain;
- if (string.IsNullOrEmpty(name))
- continue;
- if (areaInfo.Tag is AreaTag.NG_Encount)
- continue;
+ var appearAreas = new List();
- for (int p = 0; p < tmpPoints.Count; p++)
+ if (!FindArea(AreaType.Cave))
+ FindArea(AreaType.Default);
+
+ bool FindArea(AreaType type)
{
- var point = tmpPoints[p];
- if (!scene.IsPointContained(areaName, point.Position.X, point.Position.Y, point.Position.Z))
- continue;
- tmpPoints.RemoveAt(p);
- p--;
- if (!areas.Contains(areaName))
- areas.Add(areaName);
+ for (var x = areaNames.Count - 1; x >= 0; x--)
+ {
+ var areaName = areaNames[x];
+ if (atlantis[areaName])
+ continue;
+
+ var areaInfo = areas[areaName];
+ if (type != AreaType.Default && areaInfo.Type != type)
+ continue;
+ if (areaInfo.Tag is AreaTag.NG_Encount)
+ continue;
+ if (!scene.TryGetContainsCheck(fieldIndex, areaName, out var collider))
+ continue;
+ for (int p = 0; p < points.Count; p++)
+ {
+ var point = points[p];
+ var pt = point.Position;
+ if (!collider.ContainsPoint(pt.X, pt.Y, pt.Z))
+ continue;
+ if (!TryGetPlaceName(ref areaName, areaInfo, pt, placeNameMap, areas, scene, fieldIndex, out var placeName))
+ continue;
+ areaName = areaNames[x];
+ if (!appearAreas.Exists(z => z.Point == pt && z.AreaName == areaName))
+ appearAreas.Add(new(placeName, areaName, areaInfo.AdjustEncLv, pt));
+ points.RemoveAt(p);
+ p--;
+ }
+
+ if (points.Count == 0)
+ return true;
+ }
+ return false;
+ }
+
+ var locs = appearAreas.Select(a => placeNameMap[a.PlaceName].Index).Distinct().ToList();
+
+ gw.WriteLine("===");
+ gw.WriteLine($"{tableKey} - {i}");
+ gw.WriteLine("===");
+ gw.WriteLine(" PokeData:");
+ var pd = entry.Symbol;
+ gw.WriteLine($" Species: {specNamesInternal[(int)pd.DevId]}");
+ gw.WriteLine($" Form: {pd.FormId}");
+ gw.Write($" Level: {pd.Level}");
+ foreach (var adj in appearAreas.Select(a => a.Adjust).Where(lv => lv != 0).Distinct().Order())
+ {
+ gw.Write($", {pd.Level + adj}");
+ }
+ gw.WriteLine();
+ gw.WriteLine($" Sex: {Humanize(pd.Sex)}");
+ gw.WriteLine($" Shiny: {Humanize(pd.RareType)}");
+
+ var talentStr = pd.TalentType switch
+ {
+ TalentType.RANDOM => "Random",
+ TalentType.V_NUM => $"{pd.TalentVNum} Perfect",
+ TalentType.VALUE => $"{pd.TalentValue.HP}/{pd.TalentValue.ATK}/{pd.TalentValue.DEF}/{pd.TalentValue.SPA}/{pd.TalentValue.SPD}/{pd.TalentValue.SPE}",
+ _ => "Invalid",
+ };
+ gw.WriteLine($" IVs: {talentStr}");
+ gw.WriteLine($" Ability: {Humanize(pd.TokuseiIndex)}");
+ switch (pd.WazaType)
+ {
+ case WazaType.DEFAULT:
+ gw.WriteLine(" Moves: Random");
+ break;
+ case WazaType.MANUAL:
+ gw.WriteLine($" Moves: {moveNames[(int)pd.Waza1.WazaId]}/{moveNames[(int)pd.Waza2.WazaId]}/{moveNames[(int)pd.Waza3.WazaId]}/{moveNames[(int)pd.Waza4.WazaId]}");
+ break;
+ }
+
+ gw.WriteLine($" Scale: {Humanize(pd.ScaleType, pd.ScaleValue)}");
+ gw.WriteLine($" GemType: {(int)pd.GemType}");
+
+ gw.WriteLine(" Points:");
+ foreach (var point in points)
+ {
+ gw.WriteLine($" - ({point.Position.X}, {point.Position.Y}, {point.Position.Z})");
+ }
+
+ gw.WriteLine(" Areas:");
+ foreach (var area in appearAreas)
+ {
+ var loc = area.PlaceName;
+ (string name, int index) = placeNameMap[loc];
+ gw.WriteLine($" - {area.PlaceName} - {loc} - {name} ({index})");
+ }
+
+ // Serialize
+ if (locs.Count == 0)
+ continue;
+ if (BannedFixedSpawnNames.Contains(entry.TableKey))
+ continue;
+
+ // If not stationary, allow some tolerance.
+ var aiStationary = GetIsStationary(entry.PokeAI.ActionId);
+ var wanderAreas = new List(0);
+ if (!aiStationary)
+ {
+ var allInfos = scene.AreaInfos[(int)fieldIndex];
+ var allNames = scene.AreaNames[(int)fieldIndex];
+ for (var a = 0; a < allNames.Count; a++)
+ {
+ var areaName = allNames[a];
+ if (atlantis[areaName])
+ continue;
+
+ var areaInfo = allInfos[areaName];
+ if (!scene.TryGetContainsCheck(fieldIndex, areaName, out var collider))
+ continue;
+ if (areaInfo.Tag is AreaTag.NG_Encount)
+ continue;
+ if (!TryGetBleedArea(collider, appearAreas, scene, fieldIndex, out var bledFrom))
+ continue; // can't bleed into this area
+
+ // Bleeding from zones should start from the sub-zone, so we don't need to check other sub-zones.
+ if (!TryGetPlaceName(ref areaName, areaInfo, collider, placeNameMap, allInfos, scene, fieldIndex, out var placeName))
+ continue;
+ wanderAreas.Add(bledFrom with { PlaceName = placeName, AreaName = allNames[a] });
+ }
+ }
+
+ foreach (var area in appearAreas.GroupBy(z => z.Adjust))
+ {
+ var adjust = area.Key;
+ var wander = wanderAreas.Where(z => z.Adjust == adjust);
+ var allLocations = area.Concat(wander);
+ var locationIDs = allLocations.Select(z => placeNameMap[z.PlaceName].Index).Distinct().ToList();
+ if (fieldIndex == PaldeaFieldIndex.Paldea && entry.PokeAI.ActionId == PokemonActionID.FS_POP_AREA22_DRAGONITE) // Flies around not using tolerance.
+ locationIDs.Add(46); // North Province (Area One)
+ locationIDs.Sort();
+
+ WriteFixedSymbol(serialized, entry, locationIDs);
+ WriteFixedSymbol(serialized, entry, locationIDs, adjust);
}
}
-
- var locs = areas.Select(a => placeNameMap[scene.AreaInfos[a].LocationNameMain].Index).Distinct().ToList();
-
- gw.WriteLine("===");
- gw.WriteLine(entry.TableKey);
- gw.WriteLine("===");
- gw.WriteLine(" PokeData:");
- var pd = entry.Symbol;
- gw.WriteLine($" Species: {specNamesInternal[(int)pd.DevId]}");
- gw.WriteLine($" Form: {pd.FormId}");
- gw.WriteLine($" Level: {pd.Level}");
- gw.WriteLine($" Sex: {new[] { "Random", "Male", "Female" }[(int)pd.Sex]}");
- gw.WriteLine($" Shiny: {new[] { "Random", "Never", "Always" }[(int)pd.RareType]}");
-
- var talentStr = pd.TalentType switch
- {
- TalentType.RANDOM => "Random",
- TalentType.V_NUM => $"{pd.TalentVNum} Perfect",
- TalentType.VALUE => $"{pd.TalentValue.HP}/{pd.TalentValue.ATK}/{pd.TalentValue.DEF}/{pd.TalentValue.SPA}/{pd.TalentValue.SPD}/{pd.TalentValue.SPE}",
- _ => "Invalid",
- };
- gw.WriteLine($" IVs: {talentStr}");
- gw.WriteLine($" Ability: {new[] { "1/2", "1/2/3", "1", "2", "3" }[(int)pd.TokuseiIndex]}");
- switch (pd.WazaType)
- {
- case WazaType.DEFAULT:
- gw.WriteLine(" Moves: Random");
- break;
- case WazaType.MANUAL:
- gw.WriteLine($" Moves: {moveNames[(int)pd.Waza1.WazaId]}/{moveNames[(int)pd.Waza2.WazaId]}/{moveNames[(int)pd.Waza3.WazaId]}/{moveNames[(int)pd.Waza4.WazaId]}");
- break;
- }
-
- gw.WriteLine($" Scale: {new[] { "Random", "XS", "S", "M", "L", "XL", $"{pd.ScaleValue}" }[(int)pd.ScaleType]}");
- gw.WriteLine($" GemType: {(int)pd.GemType}");
-
- gw.WriteLine(" Points:");
- foreach (var point in points)
- {
- gw.WriteLine($" - ({point.Position.X}, {point.Position.Y}, {point.Position.Z})");
- }
- gw.WriteLine(" Areas:");
- foreach (var areaName in areas)
- {
- var areaInfo = scene.AreaInfos[areaName];
- var loc = areaInfo.LocationNameMain;
- (string name, int index) = placeNameMap[loc];
- gw.WriteLine($" - {areaName} - {loc} - {name} ({index})");
- }
-
- // Serialize
- if (locs.Count == 0)
- continue;
- if (bannedIndexes.Contains(i))
- continue;
-
- // If not stationary, allow some tolerance.
- var aiStationary = GetIsStationary(entry.PokeAI.ActionId);
- if (!aiStationary)
- {
- areas.Clear();
- foreach (var areaName in scene.areaNames)
- {
- if (scene.isAtlantis[areaName])
- continue;
-
- var areaInfo = scene.AreaInfos[areaName];
- var name = areaInfo.LocationNameMain;
- if (string.IsNullOrEmpty(name))
- continue;
- if (areaInfo.Tag is AreaTag.NG_Encount)
- continue;
-
- if (!scene.TryGetContainsCheck(areaName, out var collider))
- continue;
- if (points.Any(p => collider.ContainsPoint(p.Position.X, p.Position.Y, p.Position.Z, tolX, tolY, tolZ)))
- areas.Add(areaName);
- }
- }
-
- locs = areas.Select(a => placeNameMap[scene.AreaInfos[a].LocationNameMain].Index).Distinct().ToList();
- if (entry.PokeAI.ActionId == PokemonActionID.FS_POP_AREA22_DRAGONITE) // Flies around not using tolerance.
- locs.Add(46); // North Province (Area One)
-
- locs.Sort();
- WriteFixedSymbol(serialized, entry, locs);
}
}
+ // Gimmighoul only in Paldea
using var cw = File.CreateText(Path.Combine(path, "titan_coin_symbol.txt"));
- foreach (var entry in csym.Points)
+ foreach (var entry in csym.Points[(int)PaldeaFieldIndex.Paldea])
{
var areas = new List();
- foreach (var areaName in scene.areaNames)
+ foreach (var areaName in scene.AreaNames[(int)PaldeaFieldIndex.Paldea])
{
- if (scene.isAtlantis[areaName])
+ if (scene.IsAtlantis[(int)PaldeaFieldIndex.Paldea][areaName])
continue;
- var areaInfo = scene.AreaInfos[areaName];
+ var areaInfo = scene.AreaInfos[(int)PaldeaFieldIndex.Paldea][areaName];
var name = areaInfo.LocationNameMain;
- if (string.IsNullOrEmpty(name))
+ if (string.IsNullOrEmpty(name)) // Don't worry about subzones
continue;
if (areaInfo.Tag is AreaTag.NG_Encount or AreaTag.NG_All)
continue;
- if (scene.IsPointContained(areaName, entry.Position.X, entry.Position.Y, entry.Position.Z))
+ if (scene.IsPointContained(PaldeaFieldIndex.Paldea, areaName, entry.Position.X, entry.Position.Y, entry.Position.Z))
areas.Add(areaName);
}
@@ -325,8 +295,8 @@ public class EncounterDumperSV
cw.WriteLine($" Species: {specNamesInternal[(int)pd.DevId]}");
cw.WriteLine($" Form: {pd.FormId}");
cw.WriteLine($" Level: {pd.Level}");
- cw.WriteLine($" Sex: {new[] { "Random", "Male", "Female" }[(int)pd.Sex]}");
- cw.WriteLine($" Shiny: {new[] { "Random", "Never", "Always" }[(int)pd.RareType]}");
+ cw.WriteLine($" Sex: {Humanize(pd.Sex)}");
+ cw.WriteLine($" Shiny: {Humanize(pd.RareType)}");
var talentStr = pd.TalentType switch
{
@@ -336,25 +306,25 @@ public class EncounterDumperSV
_ => "Invalid",
};
cw.WriteLine($" IVs: {talentStr}");
- cw.WriteLine($" Ability: {new[] { "1/2", "1/2/3", "1", "2", "3" }[(int)pd.Tokusei]}");
+ cw.WriteLine($" Ability: {Humanize(pd.Tokusei)}");
switch (pd.WazaType)
{
case WazaType.DEFAULT:
- cw.WriteLine( " Moves: Random");
+ cw.WriteLine(" Moves: Random");
break;
case WazaType.MANUAL:
cw.WriteLine($" Moves: {moveNames[(int)pd.Waza1.WazaId]}/{moveNames[(int)pd.Waza2.WazaId]}/{moveNames[(int)pd.Waza3.WazaId]}/{moveNames[(int)pd.Waza4.WazaId]}");
break;
}
- cw.WriteLine($" Scale: {new[] { "Random", "XS", "S", "M", "L", "XL", $"{pd.ScaleValue}" }[(int)pd.ScaleType]}");
+ cw.WriteLine($" Scale: {Humanize(pd.ScaleType, pd.ScaleValue)}");
cw.WriteLine($" GemType: {(int)pd.GemType}");
}
cw.WriteLine(" Areas:");
foreach (var areaName in areas)
{
- var areaInfo = scene.AreaInfos[areaName];
+ var areaInfo = scene.AreaInfos[(int)PaldeaFieldIndex.Paldea][areaName];
var loc = areaInfo.LocationNameMain;
(string name, int index) = placeNameMap[loc];
cw.WriteLine($" - {areaName} - {loc} - {name} ({index})");
@@ -367,6 +337,254 @@ public class EncounterDumperSV
.ThenBy(z => z[3]) // Level
;
File.WriteAllBytes(pathPickle, ordered.SelectMany(z => z).ToArray());
+ DumpScene(scene, path);
+ DumpField(field, path);
+ return;
+
+ // HELPERS
+ LocationPointDetail[] GetPoints(PaldeaFieldIndex fieldIndex, bool isAtlantis) => fieldIndex switch
+ {
+ PaldeaFieldIndex.Paldea => isAtlantis ? pointAtlantis : pointMain,
+ PaldeaFieldIndex.Kitakami => pointSu1,
+ _ => throw new ArgumentException($"Could not handle {fieldIndex}"),
+ };
+
+ EncountPokeDataArray GetPokeData(PaldeaFieldIndex fieldIndex) => fieldIndex switch
+ {
+ PaldeaFieldIndex.Paldea => pokeDataMain,
+ PaldeaFieldIndex.Kitakami => pokeDataSu1,
+ _ => throw new ArgumentException($"Could not handle {fieldIndex}"),
+ };
+
+ void ProcessAreas(PaldeaFieldIndex fieldIndex)
+ {
+ // Overall Logic Flow:
+ // 1 - At every point, spawn everything that can exist at that point.
+ // 2 - At each area, absorb native points into local points.
+ // 3 - At each area, absorb crossover points into crossover points.
+ // 4 - Consolidate the encounters from both point lists.
+ // Just compute everything (big memory!) then crunch it all down.
+
+ // Fill the point lists for each area, then spawn everything into those points.
+ var areaNames = scene.AreaNames[(int)fieldIndex];
+ var areas = scene.AreaInfos[(int)fieldIndex];
+ var atlantis = scene.IsAtlantis[(int)fieldIndex];
+ for (var i = areaNames.Count - 1; i >= 0; i--)
+ {
+ var areaName = areaNames[i];
+ var areaInfo = areas[areaName];
+
+ // Determine potential spawners
+ if (!scene.TryGetContainsCheck(fieldIndex, areaName, out var collider))
+ {
+ Console.WriteLine($"No collider for {areaName}");
+ continue;
+ }
+
+ // Areas without a location name can't be reversed into location ID.
+ if (!TryGetPlaceName(ref areaName, areaInfo, collider, placeNameMap, areas, scene, fieldIndex, out var placeName))
+ continue;
+
+ // Locations that do not spawn encounters can still have crossovers bleed into them.
+ // We'll have empty local encounter lists for them.
+ var storage = db.Get(placeNameMap[placeName].Index, fieldIndex, areaName, areaInfo);
+ if (areaInfo.Tag is AreaTag.NG_Encount or AreaTag.NG_All)
+ continue;
+
+ var points = GetPoints(fieldIndex, atlantis[areaName]);
+ storage.LoadPoints(points, collider, areaInfo.ActualMinLevel, areaInfo.ActualMaxLevel, areaInfo.AdjustEncLv);
+ storage.GetEncounters(GetPokeData(fieldIndex), scene);
+ }
+
+ // For each area, we need to peek at the other areas to see if they have any crossover points.
+ // For each of those crossover points, we need to see if they are in the current area's collider.
+ // If they are, we need to add them to the current area's list of crossover points.
+ foreach (var areaName in areaNames)
+ {
+ // Same sanity checking as above iteration.
+ var areaInfo = areas[areaName];
+
+ // Determine potential spawners
+ if (!scene.TryGetContainsCheck(fieldIndex, areaName, out var collider))
+ {
+ Console.WriteLine($"No collider for {areaName}");
+ continue;
+ }
+
+ var name = areaInfo.LocationNameMain;
+ if (string.IsNullOrEmpty(name))
+ continue;
+ //if (areaInfo.Tag is AreaTag.NG_Encount or AreaTag.NG_All)
+ // continue;
+
+ var storage = db.Get(placeNameMap[name].Index, fieldIndex, areaName, areaInfo);
+ if (!IsCrossoverAllowed(storage))
+ continue;
+
+ // Here's where the fun begins. Iterate over areas inside this loop so we can look for all possible adjacent areas.
+ foreach (var otherName in areaNames)
+ {
+ // Skip self
+ if (otherName == areaName)
+ continue;
+ // Skip areas that don't have a location name -- subzones were the initial spawn spot if so.
+ var otherAreaInfo = areas[otherName];
+ var otherNameMain = otherAreaInfo.LocationNameMain;
+ if (string.IsNullOrEmpty(otherNameMain))
+ continue;
+
+ // Skip areas that don't have a collider
+ if (!scene.TryGetContainsCheck(fieldIndex, otherName, out _))
+ continue;
+
+ // Iterate over all crossover points in the other area.
+ var cross = db.Get(placeNameMap[otherNameMain].Index, fieldIndex, otherName, otherAreaInfo);
+ if (!IsCrossoverAllowed(cross))
+ continue;
+ foreach (var point in cross.Local)
+ {
+ // If the crossover point is close enough to the current area's collider, add it to the current area's list of crossover points.
+ if (collider.ContainsPoint(point.X, point.Y, point.Z, tolX, tolY, tolZ))
+ storage.Nearby.Add(point);
+ }
+ }
+ }
+ }
+ }
+
+ private static bool TryGetBleedArea(IContainsV3f collider, List appearAreas, PaldeaSceneModel scene, PaldeaFieldIndex fieldIndex, out AppearTuple bledFrom)
+ {
+ foreach (var a in appearAreas)
+ {
+ var p = a.Point;
+ if (!collider.ContainsPoint(p.X, p.Y, p.Z, tolX, tolY, tolZ))
+ continue;
+ // Get the original area it bled from.
+ bledFrom = appearAreas.First(z =>
+ scene.TryGetContainsCheck(fieldIndex, z.AreaName, out var c) &&
+ c.ContainsPoint(p.X, p.Y, p.Z));
+ return true;
+ }
+ bledFrom = default;
+ return false;
+ }
+
+ private static bool TryGetPlaceName(ref string areaName, AreaInfo areaInfo,
+ IContainsV3f collider, Dictionary placeNameMap,
+ IReadOnlyDictionary areas,
+ PaldeaSceneModel scene, PaldeaFieldIndex fieldIndex, out string placeName)
+ {
+ placeName = areaInfo.LocationNameMain;
+ if (!string.IsNullOrEmpty(placeName))
+ return true;
+
+ // Maybe this is a sub-area? Try to get the parent area name.
+ bool IsValidParentAreaName(string aName)
+ {
+ if (!areas.TryGetValue(aName, out var info))
+ return false;
+ var n = info.LocationNameMain;
+ if (string.IsNullOrEmpty(n))
+ return false;
+ return placeNameMap.ContainsKey(n);
+ }
+
+ if (!scene.TryGetParentAreaName(fieldIndex, areaName, collider, IsValidParentAreaName, out var parentAreaName))
+ {
+ Console.WriteLine($"No parent area for {areaName}");
+ return false;
+ }
+
+ areaName = parentAreaName;
+ placeName = areas[parentAreaName].LocationNameMain;
+ return true;
+ }
+
+ public static bool TryGetPlaceName(ref string areaName, AreaInfo areaInfo,
+ PackedVec3f point, Dictionary placeNameMap,
+ IReadOnlyDictionary areas,
+ PaldeaSceneModel scene, PaldeaFieldIndex fieldIndex, out string placeName)
+ {
+ placeName = areaInfo.LocationNameMain;
+ if (!string.IsNullOrEmpty(placeName))
+ return true;
+
+ // Maybe this is a sub-area? Try to get the parent area name.
+ bool IsValidParentAreaName(string aName)
+ {
+ if (!areas.TryGetValue(aName, out var info))
+ return false;
+ var n = info.LocationNameMain;
+ if (string.IsNullOrEmpty(n))
+ return false;
+ return placeNameMap.ContainsKey(n);
+ }
+
+ if (!scene.TryGetParentAreaName(fieldIndex, areaName, point, IsValidParentAreaName, out var parentAreaName))
+ {
+ Console.WriteLine($"No parent area for {areaName}");
+ return false;
+ }
+
+ areaName = parentAreaName;
+ placeName = areas[parentAreaName].LocationNameMain;
+ return true;
+ }
+
+ private record struct AppearTuple(string PlaceName, string AreaName, int Adjust, PackedVec3f Point);
+
+ private static string Humanize(SizeType type, short value) => type switch
+ {
+ SizeType.RANDOM => "Random",
+ SizeType.XS => "XS",
+ SizeType.S => "S",
+ SizeType.M => "M",
+ SizeType.L => "L",
+ SizeType.XL => "XL",
+ SizeType.VALUE => value.ToString(),
+ _ => throw new ArgumentOutOfRangeException(nameof(type), type, null),
+ };
+
+ private static string Humanize(RareType type) => type switch
+ {
+ RareType.DEFAULT => "Random",
+ RareType.NO_RARE => "Never",
+ RareType.RARE => "Always",
+ _ => throw new ArgumentOutOfRangeException(nameof(type), type, null),
+ };
+
+ private static string Humanize(SexType type) => type switch
+ {
+ SexType.DEFAULT => "Random",
+ SexType.MALE => "Male",
+ SexType.FEMALE => "Female",
+ _ => throw new ArgumentOutOfRangeException(nameof(type), type, null),
+ };
+
+ private static string Humanize(TokuseiType type) => type switch
+ {
+ TokuseiType.RANDOM_12 => "1/2",
+ TokuseiType.RANDOM_123 => "1/2/H",
+ TokuseiType.SET_1 => "1",
+ TokuseiType.SET_2 => "2",
+ TokuseiType.SET_3 => "H",
+ _ => throw new ArgumentOutOfRangeException(nameof(type), type, "Invalid ability index"),
+ };
+
+ private static void DumpScene(PaldeaSceneModel scene, string path)
+ {
+ // Dump each property to json.
+ var dest = Path.Combine(path, "paldea_scene.json");
+ var json = JsonSerializer.Serialize(scene, new JsonSerializerOptions { WriteIndented = true, IncludeFields = true });
+ File.WriteAllText(dest, json);
+ }
+
+ private static void DumpField(PaldeaFieldModel field, string path)
+ {
+ // Dump each property to json.
+ var dest = Path.Combine(path, "paldea_field.json");
+ var json = JsonSerializer.Serialize(field, new JsonSerializerOptions { WriteIndented = true, IncludeFields = true });
+ File.WriteAllText(dest, json);
}
///
@@ -375,13 +593,16 @@ public class EncounterDumperSV
private static bool IsCrossoverAllowed(LocationStorage storage)
{
var loc = storage.Location;
- if (loc == 124) // Area Zero
- return false;
- if (loc == 8) // Mesagoza
- return false;
- return true;
+ return IsCrossoverAllowed(loc);
}
+ public static bool IsCrossoverAllowed(int MetLocation) => MetLocation switch
+ {
+ 8 => false, // Mesagoza
+ 124 => false, // Area Zero
+ _ => true,
+ };
+
private static bool GetIsStationary(PokemonActionID action) => action switch
{
PokemonActionID.FS_POP_ALWAYS_GAZE_BIRD_TARGET_PLAYER => true,
@@ -402,7 +623,7 @@ private static LocationPointDetail[] ReformatPoints(PointDataArray all)
return result;
}
- private static void WriteFixedSymbol(ICollection exist, FixedSymbolTable entry, IReadOnlyList locs)
+ private static void WriteFixedSymbol(ICollection exist, FixedSymbolTable entry, IReadOnlyList locs, int adjustLevel = 0)
{
var enc = entry.Symbol;
using var ms = new MemoryStream();
@@ -410,7 +631,7 @@ private static void WriteFixedSymbol(ICollection exist, FixedSymbolTable
bw.Write(SpeciesConverterSV.GetNational9((ushort)enc.DevId));
bw.Write((byte)enc.FormId);
- bw.Write((byte)enc.Level);
+ bw.Write((byte)(enc.Level + adjustLevel));
bw.Write((byte)enc.TalentVNum);
bw.Write((byte)enc.GemType);
@@ -480,6 +701,8 @@ private static byte[] SerializeLocationSet(ushort loc, ushort crossover, IReadOn
string areaName, AreaInfo areaInfo, List encounts)
{
var loc = areaInfo.LocationNameMain;
+ if (!placeNameMap.ContainsKey(loc))
+ return;
(string name, int index) = placeNameMap[loc];
var heading = $"{areaName} - {loc} - {name} ({index})";
WriteEncounts(tw, specNamesInternal, heading, encounts);
@@ -527,7 +750,7 @@ private static byte[] SerializeLocationSet(ushort loc, ushort crossover, IReadOn
private static void WriteBiomes(TextWriter tw, string heading, List points)
{
- var biomes = points.Select(z => z.Point.Biome).Distinct().Select(z => z.ToString()).OrderBy(z => z);
+ var biomes = points.Select(z => z.Point.Biome).Distinct().Select(z => z.ToString()).Order();
var btext = string.Join(',', biomes);
tw.WriteLine($"{heading}\t{btext}");
}
diff --git a/pkNX.WinForms/Dumping/SV/LocationDatabase.cs b/pkNX.WinForms/Dumping/SV/LocationDatabase.cs
index baa456da..2b9ac679 100644
--- a/pkNX.WinForms/Dumping/SV/LocationDatabase.cs
+++ b/pkNX.WinForms/Dumping/SV/LocationDatabase.cs
@@ -7,10 +7,10 @@ public class LocationDatabase
{
public readonly Dictionary Locations = new();
- public LocationStorage Get(int location, string areaName, AreaInfo areaInfo)
+ public LocationStorage Get(int location, PaldeaFieldIndex fieldIndex, string areaName, AreaInfo areaInfo)
{
if (!Locations.TryGetValue(location, out var loc))
- Locations[location] = loc = new LocationStorage(location, areaName, areaInfo);
+ Locations[location] = loc = new LocationStorage(location, fieldIndex, areaName, areaInfo);
return loc;
}
}
diff --git a/pkNX.WinForms/Dumping/SV/LocationPointDetail.cs b/pkNX.WinForms/Dumping/SV/LocationPointDetail.cs
index 7677a297..ee9c99e2 100644
--- a/pkNX.WinForms/Dumping/SV/LocationPointDetail.cs
+++ b/pkNX.WinForms/Dumping/SV/LocationPointDetail.cs
@@ -12,6 +12,7 @@ public class LocationPointDetail
public float Y => Point.Position.Y;
public float Z => Point.Position.Z;
public int Location { get; init; }
+ public int LevelAdjust { get; init; }
public bool IsWithinLevelRange(int areaMin, int areaMax)
{
@@ -24,6 +25,7 @@ public bool IsWithinLevelRange(int areaMin, int areaMax)
public string GetString()
{
- return $"{Location:0000} ({X:0.0000},{Y:0.0000},{Z:0.0000}) {Point.Biome} ({Point.LevelRange.X}-{Point.LevelRange.Y}) {Slots.Count:00}";
+ var adjustStr = LevelAdjust != 0 ? $", {Point.LevelRange.X + LevelAdjust}-{Point.LevelRange.Y + LevelAdjust}" : "";
+ return $"{Location:0000} ({X:0.0000},{Y:0.0000},{Z:0.0000}) {Point.Biome} ({Point.LevelRange.X}-{Point.LevelRange.Y}{adjustStr}) {Slots.Count:00}";
}
}
diff --git a/pkNX.WinForms/Dumping/SV/LocationStorage.cs b/pkNX.WinForms/Dumping/SV/LocationStorage.cs
index eb496ae9..bd9f28cd 100644
--- a/pkNX.WinForms/Dumping/SV/LocationStorage.cs
+++ b/pkNX.WinForms/Dumping/SV/LocationStorage.cs
@@ -7,6 +7,7 @@ namespace pkNX.Structures.FlatBuffers;
public class LocationStorage
{
public readonly int Location;
+ private readonly PaldeaFieldIndex FieldIndex;
public readonly AreaInfo AreaInfo;
public readonly string AreaName;
@@ -16,9 +17,10 @@ public class LocationStorage
public readonly List Local = new();
public readonly List Nearby = new();
- public LocationStorage(int loc, string areaName, AreaInfo info)
+ public LocationStorage(int loc, PaldeaFieldIndex fieldIndex, string areaName, AreaInfo info)
{
Location = loc;
+ FieldIndex = fieldIndex;
AreaName = areaName;
AreaInfo = info;
}
@@ -32,8 +34,9 @@ private void Add(PaldeaEncounter slot)
private void AddCrossover(PaldeaEncounter slot, int loc)
{
+ // If slots cross over, they are necessarily in the same field
if (!SlotsCrossover.TryGetValue(loc, out var s))
- SlotsCrossover[loc] = s = new LocationStorage(loc, AreaName, AreaInfo);
+ SlotsCrossover[loc] = s = new LocationStorage(loc, FieldIndex, AreaName, AreaInfo);
s.Add(slot with { CrossFromLocation = (ushort)Location });
}
@@ -53,7 +56,12 @@ public void Integrate()
public void Consolidate()
{
- ConsolidateEncounters(Slots);
+ var len = -1;
+ while (len != Slots.Count)
+ {
+ len = Slots.Count;
+ ConsolidateEncounters(Slots);
+ }
foreach (var loc in SlotsCrossover.Values)
loc.Consolidate();
}
@@ -106,7 +114,7 @@ private static bool TryAbsorbFromRange(List encounters, int sta
return false;
}
- public void LoadPoints(IEnumerable points, IContainsV3f collider, int areaMin, int areaMax)
+ public void LoadPoints(IEnumerable points, IContainsV3f collider, int areaMin, int areaMax, int areaAdjust)
{
foreach (var w in points)
{
@@ -114,26 +122,19 @@ public void LoadPoints(IEnumerable points, IContainsV3f col
continue;
if (collider.ContainsPoint(w.X, w.Y, w.Z))
{
- var composite = GetCompositePoint(w.Point, areaMin, areaMax, Location);
+ var composite = GetCompositePoint(w.Point, areaMin, areaMax, areaAdjust, Location);
Local.Add(composite); // native
}
// Don't check here for cross-area, as our areaMin/areaMax is not valid for that crossover case.
}
}
- private static LocationPointDetail GetCompositePoint(PointData ep, int areaMin, int areaMax, int location)
+ private static LocationPointDetail GetCompositePoint(PointData ep, int areaMin, int areaMax, int adjust, int location)
{
var newX = Math.Max(ep.LevelRange.X, areaMin);
var newY = Math.Min(ep.LevelRange.Y, areaMax);
- var newPoint = new PointData
- {
- Position = ep.Position,
- LevelRange = new SV.PackedVec2f { X = newX, Y = newY },
- Biome = ep.Biome,
- Substance = ep.Substance,
- AreaNo = ep.AreaNo,
- };
- return new LocationPointDetail(newPoint) { Location = location };
+ var newPoint = ep with { LevelRange = new PackedVec2f { X = newX, Y = newY } };
+ return new LocationPointDetail(newPoint) { Location = location, LevelAdjust = adjust };
}
public void GetEncounters(EncountPokeDataArray pokeData, PaldeaSceneModel scene)
@@ -142,34 +143,46 @@ public void GetEncounters(EncountPokeDataArray pokeData, PaldeaSceneModel scene)
{
foreach (var pd in pokeData.Table)
{
- if (!IsAbleToSpawnAt(pd, spawner, AreaName, scene))
+ if (!IsAbleToSpawnAt(pd, spawner, AreaName, scene, FieldIndex))
continue;
// Add encount
- spawner.Add(PaldeaEncounter.GetNew(pd, spawner.Point));
+ var point = spawner.Point;
+ spawner.Add(PaldeaEncounter.GetNew(pd, point));
if (pd.BandPoke != 0) // Add band encount
- spawner.Add(PaldeaEncounter.GetBand(pd, spawner.Point));
+ spawner.Add(PaldeaEncounter.GetBand(pd, point));
+
+ var boost = spawner.LevelAdjust;
+ if (boost == 0)
+ continue;
+
+ // Add adjusted encount (different level range)
+ spawner.Add(PaldeaEncounter.GetNew(pd, point, boost));
+ if (pd.BandPoke != 0) // Add band encount
+ spawner.Add(PaldeaEncounter.GetBand(pd, point, boost));
}
}
}
- private static bool IsAbleToSpawnAt(EncountPokeData pd, LocationPointDetail ep, string areaName, PaldeaSceneModel scene)
+ private static bool IsAbleToSpawnAt(EncountPokeData pd, LocationPointDetail ep, string areaName, PaldeaSceneModel scene, PaldeaFieldIndex fieldIndex)
{
+ var point = ep.Point;
// Check area
- if (!string.IsNullOrEmpty(pd.Area) && !IsInArea(pd.Area, ep.Point.AreaNo))
+ if (!string.IsNullOrEmpty(pd.Area) && !IsInArea(pd.Area, point.AreaNo))
return false;
// Check loc
- if (!string.IsNullOrEmpty(pd.LocationName) && !IsInArea(pd.LocationName, areaName, scene, ep.Point))
+ if (!IsMatchAreaFilter(pd.LocationName, areaName, scene, fieldIndex, point))
return false;
// Check biome
- if (!HasBiome(pd, (Biome)(int)ep.Point.Biome))
+ if (!HasBiome(pd, (Biome)(int)point.Biome))
return false;
// check level range overlap
// check area level range overlap -- already done via point
- if (!LevelWithinRange(pd, ep.Point))
+ var range = point.LevelRange;
+ if (!pd.IsLevelRangeOverlap(range.X, range.Y))
return false;
// Assume flag, enable table, timetable are fine
@@ -178,11 +191,6 @@ private static bool IsAbleToSpawnAt(EncountPokeData pd, LocationPointDetail ep,
return true;
}
- private static bool LevelWithinRange(EncountPokeData pd, PointData clamp)
- {
- return clamp.LevelRange.X <= pd.MaxLevel && pd.MinLevel <= clamp.LevelRange.Y;
- }
-
private static bool HasBiome(EncountPokeData pd, Biome biome)
{
if (biome == pd.Biome1)
@@ -211,19 +219,23 @@ private static bool IsInArea(ReadOnlySpan areaName, int areaNo)
return int.TryParse(areaName[start..], out var x) && areaNo == x;
}
- private static bool IsInArea(string locName, string areaName, PaldeaSceneModel scene, PointData ep)
+ private static bool IsMatchAreaFilter(ReadOnlySpan filterToLocations, string areaName, PaldeaSceneModel scene, PaldeaFieldIndex fieldIndex, PointData ep)
{
- var split = locName.Split(",");
- foreach (string a in split)
+ if (filterToLocations.Length == 0)
+ return true; // Filter not specified
+
+ while (true)
{
- if (a == areaName)
+ var index = filterToLocations.IndexOf(',');
+ var name = index == -1 ? filterToLocations : filterToLocations[..index];
+ if (name.SequenceEqual(areaName))
+ return true;
+ if (scene.IsPointContained(fieldIndex, name.ToString(), ep.Position.X, ep.Position.Y, ep.Position.Z))
return true;
- if (!scene.IsPointContained(a, ep.Position.X, ep.Position.Y, ep.Position.Z))
- continue;
-
- return true;
+ if (index == -1)
+ return false;
+ filterToLocations = filterToLocations[(index + 1)..];
}
- return false;
}
}
diff --git a/pkNX.WinForms/Dumping/SV/PaldeaCoinSymbolModel.cs b/pkNX.WinForms/Dumping/SV/PaldeaCoinSymbolModel.cs
index 5ed8d366..40ee8e62 100644
--- a/pkNX.WinForms/Dumping/SV/PaldeaCoinSymbolModel.cs
+++ b/pkNX.WinForms/Dumping/SV/PaldeaCoinSymbolModel.cs
@@ -8,18 +8,18 @@ namespace pkNX.WinForms;
public class PaldeaCoinSymbolModel
{
- public readonly List Points;
+ public readonly List[] Points = new List[] { new(), new() };
public PaldeaCoinSymbolModel(IFileInternal ROM)
{
- Points = new List();
-
var cData = ROM.GetPackedFile("world/scene/parts/field/streaming_event/world_coin_placement_symbol_/world_coin_placement_symbol_0.trscn");
// NOTE: Fine to only use Scarlet, Violet data is identical.
var c = FlatBufferConverter.DeserializeFrom(cData);
- Points.AddRange(GetObjectTemplateSymbolPoints(c));
+ Points[(int)PaldeaFieldIndex.Paldea].AddRange(GetObjectTemplateSymbolPoints(c));
+
+ // TODO: are there coin points in su1/su2?
}
private static IEnumerable GetObjectTemplateSymbolPoints(TrinitySceneObjectTemplate template)
diff --git a/pkNX.WinForms/Dumping/SV/PaldeaCoinSymbolPoint.cs b/pkNX.WinForms/Dumping/SV/PaldeaCoinSymbolPoint.cs
index 63653f4e..578837e0 100644
--- a/pkNX.WinForms/Dumping/SV/PaldeaCoinSymbolPoint.cs
+++ b/pkNX.WinForms/Dumping/SV/PaldeaCoinSymbolPoint.cs
@@ -1,4 +1,4 @@
-using pkNX.Structures.FlatBuffers.SV;
+using pkNX.Structures.FlatBuffers;
namespace pkNX.WinForms;
diff --git a/pkNX.WinForms/Dumping/SV/PaldeaEncounter.cs b/pkNX.WinForms/Dumping/SV/PaldeaEncounter.cs
index 39da875e..8b051f39 100644
--- a/pkNX.WinForms/Dumping/SV/PaldeaEncounter.cs
+++ b/pkNX.WinForms/Dumping/SV/PaldeaEncounter.cs
@@ -19,21 +19,23 @@ public record PaldeaEncounter(ushort Species, byte Form, byte Sex, byte MinLevel
// Match the Mark time of day order: Noon, Night, Evening, Morning
private static byte GetTimeBits(TimeTable t) => (byte)((t.Noon ? 0 : 1) | (t.Night ? 0 : 2) | (t.Evening ? 0 : 4) | (t.Morning ? 0 : 8));
- public static PaldeaEncounter GetNew(EncountPokeData pd, PointData ep)
+ public static PaldeaEncounter GetNew(EncountPokeData pd, PointData ep, int adjust = 0)
{
// Combine the 4 bools into a single byte
var time = GetTimeBits(pd.Time);
- var min = (byte)Math.Max(ep.LevelRange.X, pd.MinLevel);
- var max = (byte)Math.Min(ep.LevelRange.Y, pd.MaxLevel);
+ var min = (byte)(Math.Max(ep.LevelRange.X, pd.MinLevel) + adjust);
+ var max = (byte)(Math.Min(ep.LevelRange.Y, pd.MaxLevel) + adjust);
+ if (max > 100)
+ max = 100;
return new(SpeciesConverterSV.GetNational9((ushort)pd.DevId), (byte)pd.Form, (byte)pd.Sex, min, max, time);
}
- public static PaldeaEncounter GetBand(EncountPokeData pd, PointData ep)
+ public static PaldeaEncounter GetBand(EncountPokeData pd, PointData ep, int adjust = 0)
{
// Combine the 4 bools into a single byte
var time = GetTimeBits(pd.Time);
- var min = (byte)Math.Max(ep.LevelRange.X, pd.MinLevel);
- var max = (byte)Math.Min(ep.LevelRange.Y, pd.MaxLevel);
+ var min = (byte)(Math.Max(ep.LevelRange.X, pd.MinLevel) + adjust);
+ var max = (byte)(Math.Min(ep.LevelRange.Y, pd.MaxLevel) + adjust);
return new(SpeciesConverterSV.GetNational9((ushort)pd.BandPoke), (byte)pd.BandForm, (byte)pd.BandSex, min, max, time);
}
diff --git a/pkNX.WinForms/Dumping/SV/PaldeaFieldModel.cs b/pkNX.WinForms/Dumping/SV/PaldeaFieldModel.cs
index 241ddccb..e3c042c6 100644
--- a/pkNX.WinForms/Dumping/SV/PaldeaFieldModel.cs
+++ b/pkNX.WinForms/Dumping/SV/PaldeaFieldModel.cs
@@ -7,44 +7,51 @@ namespace pkNX.Structures.FlatBuffers;
public class PaldeaFieldModel
{
- private readonly IList mainAreas;
- private readonly IList subAreas;
- private readonly IList insideAreas;
- private readonly IList dungeonAreas;
- private readonly IList fieldLocations;
+ private const int MapCount = 2;
+ public IList[] MainAreas { get; } = new IList[MapCount];
+ public IList[] SubAreas { get; } = new IList[MapCount];
+ public IList[] InsideAreas { get; } = new IList[MapCount];
+ public IList[] DungeonAreas { get; } = new IList[MapCount];
+ public IList[] FieldLocations { get; } = new IList[MapCount];
public PaldeaFieldModel(IFileInternal ROM)
{
- mainAreas = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_main_area/field_main_area_array.bin")).Table;
- subAreas = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_sub_area/field_sub_area_array.bin")).Table;
- insideAreas = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_inside_area/field_inside_area_array.bin")).Table;
- dungeonAreas = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_dungeon_area/field_dungeon_area_array.bin")).Table;
- fieldLocations = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_location/field_location_array.bin")).Table;
+ MainAreas[(int)PaldeaFieldIndex.Paldea] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_main_area/field_main_area_array.bin")).Table;
+ SubAreas[(int)PaldeaFieldIndex.Paldea] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_sub_area/field_sub_area_array.bin")).Table;
+ InsideAreas[(int)PaldeaFieldIndex.Paldea] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_inside_area/field_inside_area_array.bin")).Table;
+ DungeonAreas[(int)PaldeaFieldIndex.Paldea] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_dungeon_area/field_dungeon_area_array.bin")).Table;
+ FieldLocations[(int)PaldeaFieldIndex.Paldea] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_location/field_location_array.bin")).Table;
+
+ MainAreas[(int)PaldeaFieldIndex.Kitakami] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area_su1/field_main_area_su1/field_main_area_su1_array.bin")).Table;
+ SubAreas[(int)PaldeaFieldIndex.Kitakami] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area_su1/field_sub_area_su1/field_sub_area_su1_array.bin")).Table;
+ InsideAreas[(int)PaldeaFieldIndex.Kitakami] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area_su1/field_inside_area_su1/field_inside_area_su1_array.bin")).Table;
+ DungeonAreas[(int)PaldeaFieldIndex.Kitakami] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area_su1/field_dungeon_area_su1/field_dungeon_area_su1_array.bin")).Table;
+ FieldLocations[(int)PaldeaFieldIndex.Kitakami] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area_su1/field_location_su1/field_location_su1_array.bin")).Table;
}
- public AreaInfo FindAreaInfo(string name)
+ public AreaInfo FindAreaInfo(PaldeaFieldIndex index, string name)
{
- foreach (var area in mainAreas)
+ foreach (var area in MainAreas[(int)index])
{
if (area.Name == name)
return area.Info;
}
- foreach (var area in subAreas)
+ foreach (var area in SubAreas[(int)index])
{
if (area.Name == name)
return area.Info;
}
- foreach (var area in insideAreas)
+ foreach (var area in InsideAreas[(int)index])
{
if (area.Name == name)
return area.Info;
}
- foreach (var area in dungeonAreas)
+ foreach (var area in DungeonAreas[(int)index])
{
if (area.Name == name)
return area.Info;
}
- foreach (var area in fieldLocations)
+ foreach (var area in FieldLocations[(int)index])
{
if (area.Name == name)
return area.Info;
@@ -52,3 +59,10 @@ public AreaInfo FindAreaInfo(string name)
throw new ArgumentException($"Unknown area {name}");
}
}
+
+public enum PaldeaFieldIndex
+{
+ Paldea = 0,
+ Kitakami = 1,
+ Blueberry = 2,
+}
diff --git a/pkNX.WinForms/Dumping/SV/PaldeaFixedSymbolModel.cs b/pkNX.WinForms/Dumping/SV/PaldeaFixedSymbolModel.cs
index ae97396c..8ad2a0ab 100644
--- a/pkNX.WinForms/Dumping/SV/PaldeaFixedSymbolModel.cs
+++ b/pkNX.WinForms/Dumping/SV/PaldeaFixedSymbolModel.cs
@@ -8,22 +8,30 @@ namespace pkNX.WinForms;
public class PaldeaFixedSymbolModel
{
- public readonly List scarletPoints;
- public readonly List violetPoints;
+ public readonly List[] scarletPoints = new List[] { new(), new() };
+ public readonly List[] violetPoints = new List[] { new(), new() };
public PaldeaFixedSymbolModel(IFileInternal ROM)
{
- scarletPoints = new List();
- violetPoints = new List();
-
+ // Paldea
var p0Data = ROM.GetPackedFile("world/scene/parts/field/streaming_event/world_fixed_placement_symbol_/world_fixed_placement_symbol_0.trscn");
var p1Data = ROM.GetPackedFile("world/scene/parts/field/streaming_event/world_fixed_placement_symbol_/world_fixed_placement_symbol_1.trscn");
var p0 = FlatBufferConverter.DeserializeFrom(p0Data);
var p1 = FlatBufferConverter.DeserializeFrom(p1Data);
- scarletPoints.AddRange(GetObjectTemplateSymbolPoints(p0));
- violetPoints.AddRange(GetObjectTemplateSymbolPoints(p1));
+ scarletPoints[(int)PaldeaFieldIndex.Paldea].AddRange(GetObjectTemplateSymbolPoints(p0));
+ violetPoints[(int)PaldeaFieldIndex.Paldea].AddRange(GetObjectTemplateSymbolPoints(p1));
+
+ // Kitakami
+ var k0Data = ROM.GetPackedFile("world/scene/parts/field/streaming_event/su1_world_fixed_placement_symbol_/su1_world_fixed_placement_symbol_0.trscn");
+ var k1Data = ROM.GetPackedFile("world/scene/parts/field/streaming_event/su1_world_fixed_placement_symbol_/su1_world_fixed_placement_symbol_1.trscn");
+
+ var k0 = FlatBufferConverter.DeserializeFrom(k0Data);
+ var k1 = FlatBufferConverter.DeserializeFrom(k1Data);
+
+ scarletPoints[(int)PaldeaFieldIndex.Kitakami].AddRange(GetObjectTemplateSymbolPoints(k0));
+ violetPoints[(int)PaldeaFieldIndex.Kitakami].AddRange(GetObjectTemplateSymbolPoints(k1));
}
private IEnumerable GetObjectTemplateSymbolPoints(TrinitySceneObjectTemplate template)
@@ -82,7 +90,18 @@ private static IEnumerable GetScenePointSymbolPoints(Tri
foreach (var f in GetScenePointSymbolPoints(subScenePoint, sobj.SubObjects))
yield return f;
break;
- }
+ }
+ case "trinity_ObjectTemplate":
+ {
+ var ssObj = FlatBufferConverter.DeserializeFrom(sobj.Data);
+ if (ssObj.Type != "trinity_ScenePoint")
+ continue;
+ var subScenePoint = FlatBufferConverter.DeserializeFrom(ssObj.Data);
+
+ foreach (var f in GetScenePointSymbolPoints(subScenePoint, sobj.SubObjects))
+ yield return f;
+ break;
+ }
default:
throw new ArgumentException($"Unknown SubObject {sobj.Type}");
}
diff --git a/pkNX.WinForms/Dumping/SV/PaldeaFixedSymbolPoint.cs b/pkNX.WinForms/Dumping/SV/PaldeaFixedSymbolPoint.cs
index d1d481e2..6f4501f5 100644
--- a/pkNX.WinForms/Dumping/SV/PaldeaFixedSymbolPoint.cs
+++ b/pkNX.WinForms/Dumping/SV/PaldeaFixedSymbolPoint.cs
@@ -1,4 +1,4 @@
-using pkNX.Structures.FlatBuffers.SV;
+using pkNX.Structures.FlatBuffers;
namespace pkNX.WinForms;
diff --git a/pkNX.WinForms/Dumping/SV/PaldeaSceneModel.cs b/pkNX.WinForms/Dumping/SV/PaldeaSceneModel.cs
index 3cfefed7..79b8104c 100644
--- a/pkNX.WinForms/Dumping/SV/PaldeaSceneModel.cs
+++ b/pkNX.WinForms/Dumping/SV/PaldeaSceneModel.cs
@@ -1,3 +1,4 @@
+using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
@@ -10,27 +11,34 @@ namespace pkNX.Structures.FlatBuffers;
public class PaldeaSceneModel
{
- public readonly List areaNames = new();
- public readonly Dictionary AreaInfos = new();
- public readonly Dictionary areaColTrees = new();
- public readonly Dictionary areaColBoxes = new();
- public readonly Dictionary isAtlantis = new();
+ public List[] AreaNames { get; } = { new(), new() };
+ public Dictionary[] AreaInfos { get; } = { new(), new() };
+ public Dictionary[] AreaCollisionTrees { get; } = { new(), new() };
+ public Dictionary[] AreaCollisionBoxes { get; } = { new(), new() };
+ public Dictionary[] IsAtlantis { get; } = { new(), new() };
public PaldeaSceneModel(IFileInternal ROM, PaldeaFieldModel field)
{
// NOTE: Safe to only use _0 because _1 is identical.
- var area_management = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/scene/parts/field/field_system/area_management_/area_management_0.trscn"));
- Debug.Assert(area_management.ObjectTemplateName == "area_management");
+ var area_collision = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/scene/parts/field/resident_event/resident_area_collision_/resident_area_collision_0.trscn"));
+ Debug.Assert(area_collision.ObjectTemplateName == "resident_area_collision");
// NOTE: Safe to only use _0 because _1 is identical.
var a_w23_field_area_col = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/scene/parts/field/room/a_w23_field/a_w23_field_area_col_/a_w23_field_area_col_0.trscn"));
Debug.Assert(a_w23_field_area_col.ObjectTemplateName == "a_w23_field_area_col");
- foreach (var obj in area_management.Objects.Concat(a_w23_field_area_col.Objects))
- AddIfAppropriate(ROM, field, a_w23_field_area_col, obj);
+ foreach (var obj in area_collision.Objects.Concat(a_w23_field_area_col.Objects))
+ AddIfAppropriate(ROM, field, PaldeaFieldIndex.Paldea, a_w23_field_area_col.Objects, obj);
+
+ // TODO: is this _0 or _1? Identical? Name?
+ var area_collision_su1 = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile(0x441FE0A17C85BEAA));
+ Debug.Assert(area_collision_su1.ObjectTemplateName == "resident_area_collision");
+
+ foreach (var obj in area_collision_su1.Objects)
+ AddIfAppropriate(ROM, field, PaldeaFieldIndex.Kitakami, new List(), obj);
}
- private void AddIfAppropriate(IFileInternal ROM, PaldeaFieldModel field, TrinitySceneObjectTemplate w23, TrinitySceneObjectTemplateEntry obj)
+ private void AddIfAppropriate(IFileInternal ROM, PaldeaFieldModel field, PaldeaFieldIndex index, IList