diff --git a/src/ZoneCode/Game/T6/T6_Commands.txt b/src/ZoneCode/Game/T6/T6_Commands.txt index 783a31db..238e5f07 100644 --- a/src/ZoneCode/Game/T6/T6_Commands.txt +++ b/src/ZoneCode/Game/T6/T6_Commands.txt @@ -482,6 +482,29 @@ use menuDef_t; set string window::name; set name window::name; +// expressionRpnDataUnion +use expressionRpnDataUnion; +set condition cmd never; + +// textDefData_t +use textDefData_t; +set condition data never; + +// itemDefData_t +use itemDefData_t; +set condition data never; + +// focusDefData_t +use focusDefData_t; +set condition data never; + +// Operand +use Operand; +set condition internals::intVal dataType == VAL_INT; +set condition internals::floatVal dataType == VAL_FLOAT; +set condition internals::string dataType == VAL_STRING; +set condition internals::dvar never; + // ========================================= // LocalizeEntry // ========================================= @@ -536,6 +559,10 @@ set name name; use FxElemVisuals; set condition anonymous never; +// FxElemExtendedDefPtr +use FxElemExtendedDefPtr; +set condition unknownDef never; + // ========================================= // FxImpactTable // ========================================= @@ -664,7 +691,9 @@ set string moveUpButtonName; set string moveDownButtonName; set string switchSeatButtonName; set string steerGraphName; +set condition steerGraph never; set string accelGraphName; +set condition accelGraph never; // ========================================= // MemoryBlock diff --git a/src/ZoneCodeGenerator/Generating/RenderingContext.cs b/src/ZoneCodeGenerator/Generating/RenderingContext.cs index 70522d96..8b19998f 100644 --- a/src/ZoneCodeGenerator/Generating/RenderingContext.cs +++ b/src/ZoneCodeGenerator/Generating/RenderingContext.cs @@ -17,7 +17,8 @@ namespace ZoneCodeGenerator.Generating public ISet Structures { get; } public ISet MemberTypes { get; } - public IEnumerable ReferencedAssets => Structures.Where(inf => inf.IsAsset && inf != Asset); + public IEnumerable ReferencedAssets => + Structures.Where(inf => inf.IsAsset && inf != Asset); public IList Blocks { get; private set; } @@ -38,10 +39,10 @@ namespace ZoneCodeGenerator.Generating if (structureInformation.IsAsset && structureInformation != Asset) return; - foreach (var member in structureInformation.OrderedMembers) + foreach (var member in structureInformation.OrderedMembers + .Where(member => member.StructureType != null && !member.Computations.ShouldIgnore)) { - if(member.StructureType != null) - AddToContext(member.StructureType); + AddToContext(member.StructureType); } } @@ -55,14 +56,17 @@ namespace ZoneCodeGenerator.Generating }; context.AddToContext(asset); - context.MemberTypes.UnionWith(context.Structures.Where(information => !information.IsAsset || information == asset) + context.MemberTypes.UnionWith(context.Structures + .Where(structureInformation => !structureInformation.IsAsset || structureInformation == asset) + .Where(structureInformation => + structureInformation.Computations.IsUsed || structureInformation == asset) .SelectMany(information => information.OrderedMembers) + .Where(information => !information.Computations.ShouldIgnore) .Select(information => information.Member.VariableType.Type) .Where(type => !(type is DataTypeBaseType) && type != asset.Type) .Distinct()); - return context; } } -} +} \ No newline at end of file diff --git a/src/ZoneCodeGenerator/Generating/Templates/Common.stg b/src/ZoneCodeGenerator/Generating/Templates/Common.stg index 3baa696a..52a83d44 100644 --- a/src/ZoneCodeGenerator/Generating/Templates/Common.stg +++ b/src/ZoneCodeGenerator/Generating/Templates/Common.stg @@ -17,7 +17,10 @@ $endif$ %> PrintOperandDynamic(op) ::= <% -$TypeVarName(op.Structure)$->$first(op.ReferencedMemberChain):{member | $member.Member.Name$}$$rest(op.ReferencedMemberChain):{member | .$member.Member.Name$}$ +$TypeVarName(op.Structure)$ +->$first(op.ReferencedMemberChain):{member | $member.Member.Name$}$ +$rest(op.ReferencedMemberChain):{member | .$member.Member.Name$}$ +$op.ArrayIndices:{ arrayIndex | [$arrayIndex$]}$ %> PrintOperation(operation) ::= <% diff --git a/src/ZoneCodeGenerator/Generating/Templates/Loading/Embedded.stg b/src/ZoneCodeGenerator/Generating/Templates/Loading/Embedded.stg index e04da2aa..f3e2f4b0 100644 --- a/src/ZoneCodeGenerator/Generating/Templates/Loading/Embedded.stg +++ b/src/ZoneCodeGenerator/Generating/Templates/Loading/Embedded.stg @@ -1,8 +1,21 @@ // Everything related to loading an embedded reference -LoadEmbedded(context, structure, member) ::= << -$if(!member.Computations.ShouldIgnore)$ +LoadEmbedded_Load(context, structure, member) ::= << $TypeVarName(member.StructureType)$ = &$TypeVarName(structure)$->$member.Member.Name$; Load_$member.Member.VariableType.Type.Name$(false); + +>> + +LoadEmbedded_Array(context, structure, member) ::= << + +>> + +LoadEmbedded(context, structure, member) ::= <% +$if(!member.Computations.ShouldIgnore)$ +$if(member.Computations.IsArray)$ +$LoadEmbedded_Array(context, structure, member)$ +$else$ +$LoadEmbedded_Load(context, structure, member)$ $endif$ ->> \ No newline at end of file +$endif$ +%> \ No newline at end of file diff --git a/src/ZoneCodeGenerator/Generating/Templates/Loading/String.stg b/src/ZoneCodeGenerator/Generating/Templates/Loading/String.stg index 2d60ee69..4906678b 100644 --- a/src/ZoneCodeGenerator/Generating/Templates/Loading/String.stg +++ b/src/ZoneCodeGenerator/Generating/Templates/Loading/String.stg @@ -1,26 +1,30 @@ // String -LoadStringSingleDepth(context, structure, member) ::= << +LoadStringSingleDepth(context, structure, member) ::= <% $if(!member.Computations.IsArray)$ -varXString = &$TypeVarName(structure)$->$member.Member.Name$; -LoadXString(false); $\\$ +varXString = &$TypeVarName(structure)$->$member.Member.Name$;$\n$ +LoadXString(false);$\n$ $else$ -varXString = $TypeVarName(structure)$->$member.Member.Name$; -LoadXStringArray(false, $first(member.Computations.ArraySizes)$); $\\$ +varXString = $TypeVarName(structure)$->$member.Member.Name$;$\n$ +LoadXStringArray(false, $first(member.Computations.ArraySizes)$);$\n$ $endif$ ->> +%> -LoadString(context, structure, member) ::= << -$if(member.Computations.PointerDepthIsOne)$ -$LoadStringSingleDepth(context, structure, member)$ $\\$ -$elseif(member.Computations.PointerDepthIsTwo && member.Computations.ArrayPointerCountEvaluation)$ +LoadString_PointerCheck(context, structure, member) ::= << if ($TypeVarName(structure)$->$member.Member.Name$) { $TypeVarName(structure)$->$member.Member.Name$ = m_stream->Alloc<$TypeDeclaration(member.Member.VariableType)$*>(alignof($TypeDeclaration(member.Member.VariableType)$*)); varXString = $TypeVarName(structure)$->$member.Member.Name$; LoadXStringArray(true, $PrintEvaluation(member.Computations.ArrayPointerCountEvaluation)$); -} $\\$ +} +>> + +LoadString(context, structure, member) ::= <% +$if(member.Computations.PointerDepthIsOne)$ +$LoadStringSingleDepth(context, structure, member)$ +$elseif(member.Computations.PointerDepthIsTwo && member.Computations.ArrayPointerCountEvaluation)$ +$LoadString_PointerCheck(context, structure, member)$ $else$ -#error Cannot load string $member.Member.Name$ $\\$ +#error Cannot load string $member.Member.Name$ $endif$ ->> \ No newline at end of file +%> \ No newline at end of file diff --git a/src/ZoneCodeGenerator/Generating/Templates/ZoneLoad.stg b/src/ZoneCodeGenerator/Generating/Templates/ZoneLoad.stg index e11d6d59..32baff89 100644 --- a/src/ZoneCodeGenerator/Generating/Templates/ZoneLoad.stg +++ b/src/ZoneCodeGenerator/Generating/Templates/ZoneLoad.stg @@ -5,6 +5,7 @@ import "Common.stg" import "Loading/Common.stg" import "Loading/String.stg" import "Loading/ArrayPointer.stg" +import "Loading/Embedded.stg" import "Loading/SinglePointer.stg" // Loading common @@ -39,7 +40,7 @@ $HeaderArrayPtrLoadMethodDeclaration(structure)$ $\n$ $endif$ -$if(structure.NonEmbeddedReferenceExists && !structure.IsLeaf)$ +$if(!structure.IsLeaf && structure.Computations.IsUsed)$ $HeaderLoadMethodDeclaration(structure)$ $\n$ $endif$ @@ -98,7 +99,8 @@ $elseif(member.Computations.IsArrayPointerReference && member.Computations.Point $LoadArrayPointer(context, structure, member)$ $elseif(member.Computations.IsSinglePointerReference)$ $LoadSinglePointer(context, structure, member)$ -$elseif(member.Computations.IsEmbeddedReference && member.StructureType)$ +$elseif(member.Computations.IsEmbeddedReference && member.StructureType && !member.StructureType.IsLeaf)$ +$LoadEmbedded(context, structure, member)$ $endif$ %> @@ -200,7 +202,7 @@ $if(structure.ArrayPointerReferenceExists && !structure.IsLeaf)$ $LoadArrayPtrMethod(structure, context)$ $endif$ -$if(structure.NonEmbeddedReferenceExists && !structure.IsLeaf)$ +$if(!structure.IsLeaf && structure.Computations.IsUsed)$ $LoadMethod(structure, context)$ $endif$