diff --git a/src/ZoneCode/Game/T6/T6_Commands.txt b/src/ZoneCode/Game/T6/T6_Commands.txt index 19107204..783a31db 100644 --- a/src/ZoneCode/Game/T6/T6_Commands.txt +++ b/src/ZoneCode/Game/T6/T6_Commands.txt @@ -65,17 +65,22 @@ block normal XFILE_BLOCK_PHYSICAL; // ========================================= use XModelPieces; set string name; +set name name; set count pieces numpieces; // ========================================= // PhysPreset // ========================================= -set string PhysPreset::name; +use PhysPreset; +set string name; +set name name; // ========================================= // PhysConstraints // ========================================= -set string PhysConstraints::name; +use PhysConstraints; +set string name; +set name name; use PhysConstraint; set scriptstring targetname; @@ -87,6 +92,7 @@ set scriptstring target_ent2; // ========================================= use DestructibleDef; set string name; +set name name; set count pieces numPieces; // DestructiblePiece @@ -100,6 +106,7 @@ set scriptstring DestructibleStage::showBone; // ========================================= use XAnimParts; set string name; +set name name; set scriptstring names; set count names boneCount[9]; set count notify notifyCount; @@ -176,6 +183,7 @@ set count u::frames::frames size + 1; // ========================================= use XModel; set string name; +set name name; set scriptstring boneNames; set reusable boneNames; set count boneNames numBones; @@ -266,6 +274,7 @@ set count plane 1; // ========================================= use Material; set string info::name; +set name info::name; set reusable textureTable; set count textureTable textureCount; set reusable constantTable; @@ -284,6 +293,7 @@ set count rasterizerState 0; // ========================================= use MaterialTechniqueSet; set string name; +set name name; set reusable techniques; // MaterialTechnique @@ -338,6 +348,7 @@ set count u::literalConst 1; // ========================================= use GfxImage; set string name; +set name name; reorder: name texture; @@ -355,6 +366,7 @@ set arraysize GfxImageLoadDef::data resourceSize; // ========================================= use SndBank; set string name; +set name name; set count alias aliasCount; set count aliasIndex aliasCount; set count radverbs radverbCount; @@ -389,50 +401,86 @@ set count data dataSize; // ========================================= // SndPatch // ========================================= +use SndPatch; +set string name; +set name name; // ========================================= // clipMap_t // ========================================= +use clipMap_t; +set string name; +set name name; // ========================================= // ComWorld // ========================================= +use ComWorld; +set string name; +set name name; // ========================================= // GameWorldSp // ========================================= +use GameWorldSp; +set string name; +set name name; // ========================================= // GameWorldMp // ========================================= +use GameWorldMp; +set string name; +set name name; // ========================================= // MapEnts // ========================================= +use MapEnts; +set string name; +set name name; // ========================================= // GfxWorld // ========================================= +use GfxWorld; +set string name; +set name name; // ========================================= // GfxLightDef // ========================================= +use GfxLightDef; +set string name; +set name name; // ========================================= // Font_s // ========================================= +use Font_s; +set string fontName; +set name fontName; // ========================================= // FontIcon // ========================================= +use FontIcon; +set string name; +set name name; // ========================================= // MenuList // ========================================= +use MenuList; +set string name; +set name name; // ========================================= // menuDef_t // ========================================= +use menuDef_t; +set string window::name; +set name window::name; // ========================================= // LocalizeEntry @@ -440,42 +488,67 @@ set count data dataSize; use LocalizeEntry; set string value; set string name; +set name name; // ========================================= // WeaponVariantDef // ========================================= +use WeaponVariantDef; +set string szInternalName; +set name szInternalName; // ========================================= // WeaponAttachment // ========================================= +use WeaponAttachment; +set string szInternalName; +set name szInternalName; // ========================================= // WeaponAttachmentUnique // ========================================= +use WeaponAttachmentUnique; +set string szInternalName; +set name szInternalName; // ========================================= // WeaponCamo // ========================================= +use WeaponCamo; +set string name; +set name name; // ========================================= // SndDriverGlobals // ========================================= +use SndDriverGlobals; +set string name; +set name name; // ========================================= // FxEffectDef // ========================================= +use FxEffectDef; +set string name; +set name name; + +// FxElemVisuals use FxElemVisuals; set condition anonymous never; // ========================================= // FxImpactTable // ========================================= +use FxImpactTable; +set string name; +set name name; // ========================================= // RawFile // ========================================= use RawFile; set string name; +set name name; set count buffer len + 1; // ========================================= @@ -483,6 +556,7 @@ set count buffer len + 1; // ========================================= use StringTable; set string name; +set name name; set count values columnCount * rowCount; set count cellIndex columnCount * rowCount; @@ -492,16 +566,23 @@ set string StringTableCell::string; // ========================================= // LeaderboardDef // ========================================= +use LeaderboardDef; +set string name; +set name name; // ========================================= // XGlobals // ========================================= +use XGlobals; +set string name; +set name name; // ========================================= // ddlRoot_t // ========================================= use ddlRoot_t; set string name; +set name name; set count ddlDef 1; // ddlDef_t @@ -526,6 +607,13 @@ set string members; set count members memberCount; set count hashTable memberCount; +// ========================================= +// Glasses +// ========================================= +use Glasses; +set string name; +set name name; + // ========================================= // EmblemSet // ========================================= @@ -535,6 +623,7 @@ set count hashTable memberCount; // ========================================= use ScriptParseTree; set string name; +set name name; set count buffer len + 1; // ========================================= @@ -542,6 +631,7 @@ set count buffer len + 1; // ========================================= use KeyValuePairs; set string name; +set name name; set count keyValuePairs numVariables; // KeyValuePair @@ -552,6 +642,7 @@ set string KeyValuePair::value; // ========================================= use VehicleDef; set string name; +set name name; set string turretWeapon; set string gunnerWeapon; set string sndNames; @@ -578,25 +669,37 @@ set string accelGraphName; // ========================================= // MemoryBlock // ========================================= +use MemoryBlock; +set string name; +set name name; // ========================================= // AddonMapEnts // ========================================= +use AddonMapEnts; +set string name; +set name name; // ========================================= // TracerDef // ========================================= +use TracerDef; +set string name; +set name name; // ========================================= // SkinnedVertsDef // ========================================= -set string SkinnedVertsDef::name; +use SkinnedVertsDef; +set string name; +set name name; // ========================================= // Qdb // ========================================= use Qdb; set string name; +set name name; set count buffer len + 1; // ========================================= @@ -604,18 +707,28 @@ set count buffer len + 1; // ========================================= use Slug; set string name; +set name name; set count buffer len + 1; // ========================================= // FootstepTableDef // ========================================= +use FootstepTableDef; +set string name; +set name name; // ========================================= // FootstepFXTableDef // ========================================= +use FootstepFXTableDef; +set string name; +set name name; // ========================================= // ZBarrierDef // ========================================= +use ZBarrierDef; +set string name; +set name name; // EOF \ No newline at end of file diff --git a/src/ZoneCodeGenerator/Generating/Templates/ZoneLoad.stg b/src/ZoneCodeGenerator/Generating/Templates/ZoneLoad.stg index 7d96fb03..e11d6d59 100644 --- a/src/ZoneCodeGenerator/Generating/Templates/ZoneLoad.stg +++ b/src/ZoneCodeGenerator/Generating/Templates/ZoneLoad.stg @@ -16,7 +16,7 @@ HeaderSinglePtrLoadMethodDeclaration(structure) ::= "void LoadPtr_$structure.Typ HeaderArrayPtrLoadMethodDeclaration(structure) ::= "void LoadArray_$structure.Type.Name$(bool atStreamStart, size_t count);" HeaderLoadMethodDeclaration(structure) ::= "void Load_$structure.Type.Name$(bool atStreamStart);" -HeaderGetNameMethodDeclaration(asset) ::= "static std::string GetAssetName($asset.Type.FullName$* p$asset.Type.Name$);" +HeaderGetNameMethodDeclaration(asset) ::= "static std::string GetAssetName($asset.Type.FullName$* pAsset);" HeaderAssetLoadMethodDeclaration(asset) ::= "void LoadAsset_$asset.Type.Name$($asset.Type.FullName$** pAsset);" HeaderMainLoadMethodDeclaration(asset) ::= "void Load($asset.Type.FullName$** pAsset);" @@ -246,10 +246,10 @@ void $LoaderClassName(context.Asset)$::Load($context.Asset.Type.FullName$** pAss >> GetNameMethod(context) ::= << -std::string $LoaderClassName(context.Asset)$::GetAssetName($context.Asset.Type.FullName$* p$context.Asset.Type.Name$) +std::string $LoaderClassName(context.Asset)$::GetAssetName($context.Asset.Type.FullName$* pAsset) { $if(context.Asset.NameChain)$ - return p$context.Asset.Type.Name$->$first(context.Asset.NameChain):{member | $member.Member.Name$}$$rest(context.Asset.NameChain):{member | .$member.Member.Name$}$; + return pAsset->$first(context.Asset.NameChain):{member | $member.Member.Name$}$$rest(context.Asset.NameChain):{member | .$member.Member.Name$}$; $else$ return "$context.Asset.Type.Name$"; $endif$ diff --git a/src/ZoneCodeGenerator/Parsing/CommandFile/CommandFileReader.cs b/src/ZoneCodeGenerator/Parsing/CommandFile/CommandFileReader.cs index fb609615..089376a8 100644 --- a/src/ZoneCodeGenerator/Parsing/CommandFile/CommandFileReader.cs +++ b/src/ZoneCodeGenerator/Parsing/CommandFile/CommandFileReader.cs @@ -13,7 +13,6 @@ namespace ZoneCodeGenerator.Parsing.CommandFile { private static readonly IDataPostProcessor[] postProcessors = { - new PostProcessorAssetName(), new PostProcessorDefaultBlock(), new PostProcessorUsages(), new PostProcessorLeafs() diff --git a/src/ZoneCodeGenerator/Parsing/CommandFile/Impl/CommandParserState.cs b/src/ZoneCodeGenerator/Parsing/CommandFile/Impl/CommandParserState.cs index ec3a4b58..8a735ef3 100644 --- a/src/ZoneCodeGenerator/Parsing/CommandFile/Impl/CommandParserState.cs +++ b/src/ZoneCodeGenerator/Parsing/CommandFile/Impl/CommandParserState.cs @@ -20,6 +20,7 @@ namespace ZoneCodeGenerator.Parsing.CommandFile.Impl new TestCondition(), new TestCount(), new TestGame(), + new TestName(), new TestReorder(), new TestReusable(), new TestScriptString(), diff --git a/src/ZoneCodeGenerator/Parsing/CommandFile/PostProcessor/PostProcessorAssetName.cs b/src/ZoneCodeGenerator/Parsing/CommandFile/PostProcessor/PostProcessorAssetName.cs deleted file mode 100644 index 84e0c995..00000000 --- a/src/ZoneCodeGenerator/Parsing/CommandFile/PostProcessor/PostProcessorAssetName.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using ZoneCodeGenerator.Domain; -using ZoneCodeGenerator.Domain.Information; -using ZoneCodeGenerator.Persistence; - -namespace ZoneCodeGenerator.Parsing.CommandFile.PostProcessor -{ - class PostProcessorAssetName : IDataPostProcessor - { - private const string NameMemberName = "name"; - - private static List FindNameMember(StructureInformation information) - { - var nameMemberInformation = - information.OrderedMembers.FirstOrDefault(memberInformation => - memberInformation.Member.Name.Equals(NameMemberName)); - - if (nameMemberInformation != null) - { - var result = new List {nameMemberInformation}; - return result; - } - - foreach (var embeddedMembers in information.OrderedMembers.Where(memberInformation => - memberInformation.Computations.IsEmbeddedReference && memberInformation.StructureType != null)) - { - var embeddedMemberName = FindNameMember(embeddedMembers.StructureType); - - if (embeddedMemberName == null) continue; - - embeddedMemberName.Insert(0, embeddedMembers); - return embeddedMemberName; - } - - return null; - } - - public bool PostProcess(IDataRepository repository) - { - var assetDataTypes = - repository.GetAllStructs() - .AsEnumerable() - .Concat(repository.GetAllUnions()) - .Select(repository.GetInformationFor) - .Where(information => information.IsAsset); - - foreach (var assetInformation in assetDataTypes) - { - assetInformation.NameChain = FindNameMember(assetInformation); - } - - return true; - } - } -} \ No newline at end of file diff --git a/src/ZoneCodeGenerator/Parsing/CommandFile/Tests/TestName.cs b/src/ZoneCodeGenerator/Parsing/CommandFile/Tests/TestName.cs new file mode 100644 index 00000000..54700aed --- /dev/null +++ b/src/ZoneCodeGenerator/Parsing/CommandFile/Tests/TestName.cs @@ -0,0 +1,67 @@ +using System; +using System.Linq; +using ZoneCodeGenerator.Domain.Information; +using ZoneCodeGenerator.Parsing.Matching; +using ZoneCodeGenerator.Parsing.Matching.Matchers; +using ZoneCodeGenerator.Parsing.Testing; + +namespace ZoneCodeGenerator.Parsing.CommandFile.Tests +{ + class TestName : AbstractTokenTest + { + private const string MemberTypeNameToken = "name"; + + private static readonly TokenMatcher[] matchers = { + new MatcherLiteral("set"), + new MatcherLiteral("name"), + new MatcherTypename().WithName(MemberTypeNameToken), + new MatcherLiteral(";") + }; + + public TestName() : base(matchers) + { + + } + + protected override void ProcessMatch(ICommandParserState state) + { + var typeName = NextMatch(MemberTypeNameToken); + var typeNameParts = typeName.Split(new[] { "::" }, StringSplitOptions.None); + StructureInformation structure; + + if (state.DataTypeInUse != null && + state.GetMembersFromParts(typeNameParts, state.DataTypeInUse, out var memberList)) + { + structure = state.DataTypeInUse; + } + else if (state.GetTypenameAndMembersFromParts(typeNameParts, out structure, out memberList)) + { + // Do nothing + } + else + { + throw new TestFailedException($"Could not find type '{typeName}'."); + } + + if (memberList == null || !memberList.Any()) + { + throw new TestFailedException("Need to specify a member when trying to set to a structure name."); + } + + for (var i = 0; i < memberList.Count - 1; i++) + { + if (!memberList[i].Computations.IsEmbeddedReference) + { + throw new TestFailedException("Can only add embedded members to name chain."); + } + } + + if (!memberList[memberList.Count - 1].IsString) + { + throw new TestFailedException("Final name member must be a string."); + } + + structure.NameChain = memberList; + } + } +} diff --git a/src/ZoneCommon/Game/T6/T6_Assets.h b/src/ZoneCommon/Game/T6/T6_Assets.h index 79ef4199..7d014e08 100644 --- a/src/ZoneCommon/Game/T6/T6_Assets.h +++ b/src/ZoneCommon/Game/T6/T6_Assets.h @@ -789,7 +789,7 @@ struct SndBank struct SndPatch { - char *name; + const char *name; unsigned int elementCount; unsigned int *elements; };