Enhance FlatSharp generated code with Attributes, TypeConverter (#391)

Fixes #390
Fixes #382
Fixes #381
Fixes #370
Fixes #355
This commit is contained in:
Kurt
2025-02-07 09:51:37 -06:00
committed by GitHub
parent 38a9c45fef
commit ddffb91cf5
759 changed files with 1163 additions and 3470 deletions

View File

@@ -45,6 +45,23 @@ 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_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_prefer_system_threading_lock = 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
csharp_indent_labels = one_less_than_current
dotnet_diagnostic.WFO1000.severity = none
# Generated Code
[**/obj/**.cs]
@@ -64,4 +81,54 @@ dotnet_analyzer_diagnostic.severity = none
# Naming rules
dotnet_naming_style.begins_with_i.required_prefix = I
dotnet_naming_style.begins_with_i.capitalization = pascal_case
dotnet_naming_style.begins_with_i.capitalization = pascal_case
[*.{cs,vb}]
#### Naming styles ####
# 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_coalesce_expression = true:suggestion
dotnet_style_operator_placement_when_wrapping = beginning_of_line
tab_width = 4

View File

@@ -1,7 +1,8 @@
<Project>
<PropertyGroup>
<LangVersion>12</LangVersion>
<LangVersion>13</LangVersion>
<Nullable>enable</Nullable>
<TargetFramework>net9.0</TargetFramework>
<NeutralLanguage>en</NeutralLanguage>
<Product>pkNX</Product>
<Company>Project Pokémon</Company>

View File

@@ -0,0 +1,10 @@
namespace pkNX.Structures.FlatBuffers.Arceus;
public partial class ConfigEntry
{
public string ConfiguredValue
{
get => Parameters[0];
set => Parameters[0] = value;
}
}

View File

@@ -0,0 +1,8 @@
namespace pkNX.Structures.FlatBuffers.Arceus;
public partial class TriggerCondition : IHasCondition
{
// For interface compat
public string ConditionArg4 { get; set; } = string.Empty;
public string ConditionArg5 { get; set; } = string.Empty;
}

View File

@@ -1,21 +1,5 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using pkNX.Containers;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class LandmarkItemSpawnTable;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class LandmarkItemSpawn
{
public bool UsesTable(ulong table) => EncounterTableID == table;
@@ -90,6 +74,3 @@ public string NameSummary
return result;
}
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class LandmarkItemSpawn_F03;

View File

@@ -1,18 +1,5 @@
using System.ComponentModel;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class LandmarkItemTable;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class LandmarkItem : ISlotTableConsumer
{
public PlacementParameters Parameters

View File

@@ -0,0 +1,3 @@
namespace pkNX.Structures.FlatBuffers.Arceus;
public partial class MassOutbreakCondition : IHasCondition;

View File

@@ -1,18 +1,5 @@
using System.ComponentModel;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class NewHugeOutbreakGroupArchive;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class NewHugeOutbreakGroup
{
public int SumTable => Table.Sum(z => z.Rate);
@@ -26,7 +13,6 @@ public bool UsesTable(ulong tableID)
}
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class NewHugeOutbreakDetail : IHasCondition
{
public override string ToString() => $"PlacementParameters(/* ConditionTypeID = */ {this.GetConditionTypeSummary()}, /* Condition = */ {this.GetConditionSummary()}, {EncounterTableID:X16}, {Rate})";

View File

@@ -1,17 +1,5 @@
using System;
using System.ComponentModel;
using System.Linq;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class NewHugeOutbreakGroupLotteryArchive
{
public bool IsAreaGroup(PlacementSpawner spawner, NewHugeOutbreakGroupArchive groups, ulong tableID)
@@ -25,7 +13,6 @@ public bool IsAreaGroup(PlacementSpawner spawner, NewHugeOutbreakGroupArchive gr
}
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class NewHugeOutbreakGroupLottery
{
public int SumTableCommon => TableCommon.Sum(z => z.Rate);
@@ -53,7 +40,6 @@ public bool IsUseTable(NewHugeOutbreakGroupArchive groups, ulong tableID)
}
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class NewHugeOutbreakGroupLotteryDetail
{
public override string ToString() => $"{Group:X16}|{Rate}";

View File

@@ -1,16 +1,7 @@
using System.ComponentModel;
using System.Numerics;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PlacementLocation
{
public const ulong ShapeIdSphere = 0x645FB59E96A6F998;

View File

@@ -1,18 +1,5 @@
using System.ComponentModel;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PlacementMkrgTable;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PlacementMkrgEntry
{
public PlacementParameters Parameters

View File

@@ -0,0 +1,6 @@
namespace pkNX.Structures.FlatBuffers.Arceus;
public partial class PlacementParameters : IHasCondition
{
public override string ToString() => $"PlacementParameters(/* ConditionTypeID = */ {this.GetConditionTypeSummary()}, /* Condition = */ {this.GetConditionSummary()}, {Coordinates}, {Rotation}, {Scale})";
}

View File

@@ -1,21 +1,5 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PlacementSearchItemTable;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PlacementSearchItem
{
public PlacementParameters Parameters

View File

@@ -1,15 +1,5 @@
using System.ComponentModel;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PlacementSpawner : ISlotTableConsumer
{
public PlacementParameters Parameters

View File

@@ -1,15 +1,5 @@
using System.ComponentModel;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PlacementSpawnerF20 : IHasCondition
{
public override string ToString() => $"Spawn_20(/* EncounterTableId = */ {EncounterTable.GetTableName(EncounterTableID)}, /* ConditionTypeID = */ {this.GetConditionTypeSummary()}, /* Condition = */ {this.GetConditionSummary()}, {BonusLevelMin}, {BonusLevelMax})";

View File

@@ -1,15 +1,5 @@
using System.ComponentModel;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PlacementSpawnerF21
{
public string SlotSummary

View File

@@ -1,18 +1,5 @@
using System.ComponentModel;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PlacementUnnnTable;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PlacementUnnnEntry
{
public PlacementParameters Parameters

View File

@@ -0,0 +1,25 @@
namespace pkNX.Structures.FlatBuffers.Arceus;
public partial class AreaSettingsTable
{
public AreaSettings Find(string name) => Table.First(z => z.Name == name);
}
public partial class AreaSettings
{
// Get the in game name of the area
public string FriendlyAreaName
{
get => Name switch
{
"ha_area00" => "Jubilife Village",
"ha_area01" => "Obsidian Fieldlands",
"ha_area02" => "Crimson Mirelands",
"ha_area03" => "Cobalt Coastlands",
"ha_area04" => "Coronet Highlands",
"ha_area05" => "Alabaster Icelands",
"ha_area06" => "Ancient Retreat",
_ => $"Unknown Area ({Name})",
};
}
}

View File

@@ -0,0 +1,6 @@
namespace pkNX.Structures.FlatBuffers.Arceus;
public partial class AreaWeather
{
public int WeightTotal => WeightSunny + WeightCloudy + WeightRain + WeightSnow + WeightDrought + WeightFog + WeightRainstorm + WeightSnowstorm;
}

View File

@@ -1,6 +1,3 @@
using System;
using System.Collections.Generic;
namespace pkNX.Structures.FlatBuffers.Arceus;
/// <summary>

View File

@@ -1,27 +1,12 @@
using System.ComponentModel;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class EncounterDataArchive;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class EncounterEligiblityTraits : IHasCondition, ISlotModifierTime, ISlotModifierWeather;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class EncounterOybnTraits
{
public bool IsOybnAny => Oybn1 || Oybn2 || Field02 || Field03;
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class EncounterTable
{
// lazy init
@@ -95,7 +80,6 @@ public static string GetTableName(ulong tableId)
public override string ToString() => $"{TableName} (Lv. {MinLevel}-{MaxLevel})";
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class EncounterSlot
{
public override string ToString() => $"{(Species)Species}{(Form == 0 ? "" : $"-{Form}")}{(Oybn.IsOybnAny ? "*" : "")} - {BaseProbability}={ShinyLock}";

View File

@@ -1,16 +1,7 @@
using System.ComponentModel;
using System.Diagnostics;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class EncounterMultiplier : ISlotModifierTime, ISlotModifierWeather
{
public float GetTimeMultiplier(int index) => index switch
@@ -40,7 +31,6 @@ public partial class EncounterMultiplier : ISlotModifierTime, ISlotModifierWeath
public bool HasWeatherModifier(int index) => index != 0 && GetWeatherMultiplier(index) != -1.0f;
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class EncounterMultiplierArchive
{
public EncounterMultiplier GetEncounterMultiplier(EncounterSlot slot)

View File

@@ -1,13 +1,11 @@
using System;
namespace pkNX.Structures.FlatBuffers.Arceus;
public interface ISlotModifierTime
{
float TimeOfDayMultiplier0 {get;set;}
float TimeOfDayMultiplier1 {get;set;}
float TimeOfDayMultiplier2 {get;set;}
float TimeOfDayMultiplier3 {get;set;}
float TimeOfDayMultiplier0 { get; set; }
float TimeOfDayMultiplier1 { get; set; }
float TimeOfDayMultiplier2 { get; set; }
float TimeOfDayMultiplier3 { get; set; }
}
public static class SlotModifierTimeExtensions

View File

@@ -1,17 +1,15 @@
using System;
namespace pkNX.Structures.FlatBuffers.Arceus;
public interface ISlotModifierWeather
{
float WeatherMultiplier1 {get; set;}
float WeatherMultiplier2 {get; set;}
float WeatherMultiplier3 {get; set;}
float WeatherMultiplier4 {get; set;}
float WeatherMultiplier5 {get; set;}
float WeatherMultiplier6 {get; set;}
float WeatherMultiplier7 {get; set;}
float WeatherMultiplier8 {get; set;}
float WeatherMultiplier1 { get; set; }
float WeatherMultiplier2 { get; set; }
float WeatherMultiplier3 { get; set; }
float WeatherMultiplier4 { get; set; }
float WeatherMultiplier5 { get; set; }
float WeatherMultiplier6 { get; set; }
float WeatherMultiplier7 { get; set; }
float WeatherMultiplier8 { get; set; }
}
public static class SlotModifierWeatherExtensions

View File

@@ -1,22 +1,5 @@
using System;
using System.ComponentModel;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class EventEncount;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class EventEncountArchive;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class EventEncountPoke
{
public bool HasMoveset => Move1 != 0;

View File

@@ -1,21 +1,5 @@
using System.ComponentModel;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class EvolutionTable;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class EvolutionEntry;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class EvolutionSet
{
public byte[] Write()

View File

@@ -1,10 +1,8 @@
using System.ComponentModel;
using System.Diagnostics;
namespace pkNX.Structures.FlatBuffers.Arceus;
// resident_release.bin -> bin/field/param/placement/common/pokemon_model_set.bin
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeModelSet
{
public PokeModelSetEntry GetEntry(ushort species)
@@ -39,6 +37,3 @@ public PokeModelSetEntry AddEntry(ushort species, ushort form)
return entry;
}
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeModelSetEntry;

View File

@@ -1,14 +1,7 @@
using System;
using System.ComponentModel;
namespace pkNX.Structures.FlatBuffers.Arceus;
// *.trmtr
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class SamplerState;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class Float4Parameter
{
public Float4Parameter(string shaderPropertyBinding, Color4f value)
@@ -20,7 +13,6 @@ public Float4Parameter(string shaderPropertyBinding, Color4f value)
public override string ToString() => $"{{ {PropertyBinding}: {ColorValue} }}";
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class FloatParameter
{
public FloatParameter(string shaderPropertyBinding, float value)
@@ -32,7 +24,6 @@ public FloatParameter(string shaderPropertyBinding, float value)
public override string ToString() => $"{{ {PropertyBinding}: {FloatValue} }}";
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class IntParameter
{
public IntParameter(string shaderPropertyBinding, int value)
@@ -44,7 +35,6 @@ public IntParameter(string shaderPropertyBinding, int value)
public override string ToString() => $"{{ {PropertyBinding}: {IntValue} }}";
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class StringParameter
{
public StringParameter(string shaderPropertyBinding, string value)
@@ -56,13 +46,11 @@ public StringParameter(string shaderPropertyBinding, string value)
public override string ToString() => $"{{ {PropertyBinding}: {StringValue} }}";
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class ShaderBinding
{
public override string ToString() => $"{{ {ShaderName} }}";
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class TextureParameter
{
public TextureParameter(string shaderPropertyBinding, uint slot, string textureFile)
@@ -75,14 +63,3 @@ public TextureParameter(string shaderPropertyBinding, uint slot, string textureF
public override string ToString() => $"{{ {TextureFile}, Bound to: {PropertyBinding}, t{TextureSlot} }}";
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class WriteMaskData;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class IntExtraData;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class MaterialPass;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class Material;

View File

@@ -0,0 +1,18 @@
namespace pkNX.Structures.FlatBuffers.Arceus;
// *.trmsh
public partial class BoneWeight
{
public override string ToString() => $"{{ [{RigIndex}]: {Weight} }}";
}
public partial class InputLayoutElement
{
public override string ToString() => $"{{ {SemanticName}{SemanticIndex:#} ({Format}) @ {Offset:00} }}";
}
public partial class VertexSize
{
public override string ToString() => $"{{ {Size} }}";
}

View File

@@ -1,10 +1,3 @@
using pkNX.Containers;
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Xml.Linq;
using static System.Buffers.Binary.BinaryPrimitives;
namespace pkNX.Structures.FlatBuffers.Arceus;
@@ -19,7 +12,6 @@ public class VertexWrapper(InputLayoutElement layoutElement, object data)
public override string ToString() => $"{{ {LayoutElement.SemanticName}{LayoutElement.SemanticIndex:#}, {Data} }}";
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class ByteBuffer
{
public VertexAttributeLayout? Debug_InputLayout { get; set; }
@@ -55,8 +47,3 @@ public VertexWrapper[][] FromInputLayout(VertexAttributeLayout inputLayout)
}
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class MeshBuffer;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class MeshBufferTable;

View File

@@ -1,12 +1,7 @@
using FlatSharp.Attributes;
using System;
using System.ComponentModel;
namespace pkNX.Structures.FlatBuffers.Arceus;
// *.trmdl
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class FileReference
{
public override string ToString() => $"{{ {Filename} }}";
@@ -14,13 +9,6 @@ public partial class FileReference
public static FileReference Empty => new() { Filename = string.Empty };
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class LODIndex;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class LOD;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class Model
{
public static Model Empty => new()

View File

@@ -0,0 +1,11 @@
namespace pkNX.Structures.FlatBuffers.Arceus;
// *.trmmt
public partial class MultiMaterialTable
{
public static MultiMaterialTable Empty => new()
{
Material = [],
};
}

View File

@@ -1,17 +1,14 @@
using pkNX.Containers;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FlatSharp.Attributes;
using System.ComponentModel;
namespace pkNX.Structures.FlatBuffers.Arceus;
[FlatBufferTable, TypeConverter(typeof(ExpandableObjectConverter))]
// ReSharper disable once PartialTypeWithSinglePart
#pragma warning disable RCS1043
[FlatBufferTable]
public partial class MeshMaterialWrapper
#pragma warning restore RCS1043
{
[FlatBufferItem(0)] public string Name { get; set; } = string.Empty;
[FlatBufferItem(1)] public Material[] Materials { get; set; } = [];
@@ -37,12 +34,12 @@ public PokemonModelArchive(GFPack sourceArchive)
{
SourceArchive = sourceArchive;
string FileName = Path.GetFileNameWithoutExtension(sourceArchive.FilePath);
string FileName = Path.GetFileNameWithoutExtension(sourceArchive.FilePath)!;
int SpeciesId = int.Parse(FileName.Substring(2, 4));
string BasePath = $"bin/pokemon/pm{SpeciesId:0000}/{FileName}/";
string ModelPath = BasePath + "mdl/";
string AnimationsPath = BasePath + "anm/";
//string AnimationsPath = BasePath + "anm/";
Config = FlatBufferConverter.DeserializeFrom<PokeConfig>(SourceArchive.GetDataFullPath(BasePath + $"{FileName}.trpokecfg"));
TRMMT = FlatBufferConverter.DeserializeFrom<MultiMaterialTable>(SourceArchive.GetDataFullPath(ModelPath + $"{FileName}.trmmt"));
@@ -62,7 +59,7 @@ public PokemonModelArchive(GFPack sourceArchive)
MeshMaterials = TRMMT.Material.Select(
x => new MeshMaterialWrapper
{
Name = x.Name,
Name = x.Name!,
Materials = x.FileNames.Select(
fileName => FlatBufferConverter.DeserializeFrom<Material>(SourceArchive.GetDataFullPath(ModelPath + $"{fileName}"))
).ToArray(),

View File

@@ -1,7 +1,3 @@
using FlatSharp.Attributes;
using System;
using System.ComponentModel;
namespace pkNX.Structures.FlatBuffers.Arceus;
// *.trsha

View File

@@ -1,23 +1,5 @@
using System;
using System.ComponentModel;
using System.IO;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class Learnset;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class LearnsetEntry;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class LearnsetMeta
{
public byte[] WriteLearnsetAsLearn6()

View File

@@ -1,16 +1,7 @@
using System.ComponentModel;
using System.Diagnostics;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeAIArchive
{
public PokeAI GetEntry(ushort species, ushort form)
@@ -37,7 +28,6 @@ public PokeAI AddEntry(ushort species, ushort form, bool isAlpha)
}
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeAI
{
public static PokeAI GetNew(ushort species = 0, ushort form = 0, bool isAlpha = false) => new()
@@ -65,13 +55,6 @@ public static PokeAI GetNew(ushort species = 0, ushort form = 0, bool isAlpha =
};
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeAI_F24;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeAI_F18;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeAI_F09
{
public static readonly PokeAI_F09 DefaultBehaviour02 = new()
@@ -127,7 +110,6 @@ public partial class PokeAI_F09
};
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeAIBehaviour
{
public static readonly PokeAIBehaviour DefaultBehaviour02 = new() { BehaviourHash = 9252365659083253459, Parameters = ["0.2", "35"] };

View File

@@ -1,19 +1,5 @@
using System;
using System.ComponentModel;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeAddArchive;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeAdd
{
public string Dump(string[] speciesNames)

View File

@@ -1,22 +1,7 @@
using System.ComponentModel;
using System.Diagnostics;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeCaptureCollision;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeCaptureCollider;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeCaptureCollisionArchive
{
public PokeCaptureCollision GetEntry(ushort species, ushort form)

View File

@@ -0,0 +1,13 @@
namespace pkNX.Structures.FlatBuffers.Arceus;
public partial class PokeDropItem
{
public string Dump(string[] itemNames) => $"{Hash:X16}\t{itemNames[RegularItem]}\t{RegularItemProbability}\t{itemNames[RareItem]}\t{RareItemProbability}";
public override string ToString() =>
$"Hash: {Hash:X16}, " +
$"RegularItem: {RegularItem}, " +
$"RegularItemProbability: {RegularItemProbability}, " +
$"RareItem: {RareItem}, " +
$"RareItemProbability: {RareItemProbability}";
}

View File

@@ -0,0 +1,6 @@
namespace pkNX.Structures.FlatBuffers.Arceus;
public partial class PokeDropItemBattle
{
public string Dump(string[] n) => $"{RateItem1}\t{n[IndexItem1]}\t{RateItem2}\t{n[IndexItem2]}\t{RateItem3}\t{n[IndexItem3]}\t{RateItem4}\t{n[IndexItem4]}\t{RateItem5}\t{n[IndexItem5]}";
}

View File

@@ -1,16 +1,7 @@
using System.ComponentModel;
using System.Diagnostics;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeMisc
{
// lazy set reference for remembering the fetched object
@@ -18,7 +9,6 @@ public partial class PokeMisc
public PokeDropItem? AlphaDropTable { get; set; }
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeMiscTable
{
public PokeMisc GetEntry(ushort species, ushort form)

View File

@@ -1,18 +1,9 @@
using System.ComponentModel;
using System.Diagnostics;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
// bin/appli/res_pokemon/list/pokemon_info_list.bin
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeInfoList
{
public PokeInfo GetEntry(ushort species)
@@ -131,21 +122,3 @@ public IEnumerable<int> GetDexFormEntries()
}
}
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeInfo;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeInfoDetail;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeInfoDetail_2;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeInfoDetail_3;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeInfoDetail_5;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeInfoGender;

View File

@@ -1,33 +1,10 @@
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
// poke_resource_table.trpmcatalog
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeResourceMeta;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeModelConfig;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeModelSpeciesInfo;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class FileNamePathPair;
/// <summary> <see cref="PokeResourceTable"/> for Legends: Arceus, adding <see cref="PokeModelConfig.ArceusType"/></summary>
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class PokeResourceTable
{
public PokeModelConfig GetEntry(ushort species, ushort form, byte gender)

View File

@@ -0,0 +1,22 @@
namespace pkNX.Structures.FlatBuffers.Arceus;
public partial class PokedexResearchTable
{
public PokedexResearchTask[] GetEntries(int species)
{
return Table.Where(z => z.Species == species).ToArray();
}
public PokedexResearchTask AddTask(int species)
{
var task = new PokedexResearchTask { Species = species };
AddTask(task);
return task;
}
public void AddTask(PokedexResearchTask task) => Table = Table.Append(task).ToArray();
public bool RemoveTask(PokedexResearchTask taskToRemove)
{
return Table.Remove(taskToRemove);
}
}

View File

@@ -0,0 +1,6 @@
namespace pkNX.Structures.FlatBuffers.Arceus;
public partial class ThrowParam
{
public string Dump() => $"{ThrowParamType:X16}\t{Velocity}\t{Arc}\t{GravityDirection}\t{ThrowAngle}";
}

View File

@@ -0,0 +1,13 @@
namespace pkNX.Structures.FlatBuffers.Arceus;
public partial class ThrowableParamTable
{
public void AddEntry(int i)
{
Table = Table.Append(new ThrowableParam
{
Label01 = string.Empty,
Label02 = string.Empty,
}).ToList();
}
}

View File

@@ -1,21 +1,10 @@
using System.ComponentModel;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class TrainerData
{
public string TeamSummary => Environment.NewLine + string.Join(Environment.NewLine, Team.Select(z => "\t" + z));
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class TrainerPoke
{
public override string ToString()
@@ -24,13 +13,11 @@ public override string ToString()
}
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class WazaSet
{
public override string ToString() => $"{Move}{(Mastered ? "*":"")}";
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class TrFloatQuad
{
public override string ToString() => $"({Float00},{Float01},{Float02},{Float03})";

View File

@@ -1,15 +1,5 @@
using System.ComponentModel;
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable ClassNeverInstantiated.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable UnusedType.Global
// ReSharper disable UnusedMember.Global
// ReSharper disable AutoPropertyCanBeMadeGetOnly.Global
namespace pkNX.Structures.FlatBuffers.Arceus;
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class ArchiveContents
{
public ArchiveContent AddEntry()
@@ -35,6 +25,3 @@ public ArchiveContent AddEntry(string archiveFile, string[] internalArchiveFiles
return entry;
}
}
[TypeConverter(typeof(ExpandableObjectConverter))]
public partial class ArchiveContent;

View File

@@ -1,6 +1,3 @@
using System.Collections.Generic;
using System.Linq;
namespace pkNX.Structures.FlatBuffers.Arceus;
public record struct EncounterDetail(double Rate, double MultT, double MultW, int Unk, EncounterSlot Slot)

View File

@@ -1,7 +1,5 @@
namespace pkNX.Structures.FlatBuffers.Arceus;
// ReSharper disable UnusedMember.Global
public enum Weather
{
None = 0,

View File

@@ -0,0 +1,11 @@
<Project>
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)..\'))" />
<ItemGroup>
<ProjectReference Include="..\..\pkNX.Structures\pkNX.Structures.csproj" />
<ProjectReference Include="..\pkNX.Structures.FlatBuffers\pkNX.Structures.FlatBuffers.csproj" />
<FlatSharpSchema Include="Schemas\**\*.fbs">
<IncludePath>..\pkNX.Structures.FlatBuffers\Schemas\</IncludePath>
</FlatSharpSchema>
</ItemGroup>
</Project>

View File

@@ -4,7 +4,7 @@ attribute "fs_serializer";
table EvolutionSet {
Species:ushort;
Form:ushort;
Table:[EvolutionEntry];
Table:[EvolutionEntry]; // not required!
}
table EvolutionEntry {

Some files were not shown because too many files have changed in this diff Show More