diff --git a/.editorconfig b/.editorconfig index aa72961d3..1786a6e00 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,24 +8,440 @@ end_of_line = LF insert_final_newline = true trim_trailing_whitespace = true -; 4-column tab indentation and .NET coding conventions -[*.cs] +; 4-column tab indentation +[*.{cs,csproj,yaml,lua,sh,ps1}] indent_style = tab indent_size = 4 -dotnet_separate_import_directive_groups = false -dotnet_sort_system_directives_first = true +; .NET coding conventions +#### Code Style Rules +#### https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/style-rules/ + +# Severity Levels: https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/configuration-options#severity-level +# Below we enable specific rules by setting severity to warning. +# Rules are disabled by setting severity to silent (to still allow use in IDE) or none (to prevent all use). +# Rules are listed below with any options available. +# Options are commented out if they match the defaults. + +### Language Rules +### https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/style-rules/language-rules + +## this and Me preferences + +# IDE0003/IDE0009 Remove 'this' or 'Me' qualification/Add 'this' or 'Me' qualification +#dotnet_style_qualification_for_field = false +#dotnet_style_qualification_for_property = false +#dotnet_style_qualification_for_method = false +#dotnet_style_qualification_for_event = false +dotnet_diagnostic.IDE0003.severity = warning +dotnet_diagnostic.IDE0009.severity = warning + +## Use languages keywords for types + +# IDE0049 Use language keywords instead of framework type names for type references +#dotnet_style_predefined_type_for_locals_parameters_members = true +#dotnet_style_predefined_type_for_member_access = true +dotnet_diagnostic.IDE0049.severity = warning + +## Modifier preferences + +# IDE0036 Order modifiers +#csharp_preferred_modifier_order = public, private, protected, internal, file, static, extern, new, virtual, abstract, sealed, override, readonly, unsafe, required, volatile, async +dotnet_diagnostic.IDE0036.severity = warning + +# IDE0040 Add accessibility modifiers +dotnet_style_require_accessibility_modifiers = omit_if_default +dotnet_diagnostic.IDE0040.severity = warning + +# IDE0044 Add readonly modifier +#dotnet_style_readonly_field = true +dotnet_diagnostic.IDE0044.severity = warning + +# IDE0062 Make local function static +#csharp_prefer_static_local_function = true +dotnet_diagnostic.IDE0062.severity = warning + +# IDE0064 Make struct fields writable +# No options +dotnet_diagnostic.IDE0064.severity = warning + +## Parentheses preferences + +# IDE0047/IDE0048 Remove unnecessary parentheses/Add parentheses for clarity +dotnet_style_parentheses_in_arithmetic_binary_operators = never_if_unnecessary +dotnet_style_parentheses_in_relational_binary_operators = never_if_unnecessary +#dotnet_style_parentheses_in_other_binary_operators = always_for_clarity +#dotnet_style_parentheses_in_other_operators = never_if_unnecessary +dotnet_diagnostic.IDE0047.severity = warning +dotnet_diagnostic.IDE0048.severity = warning + +## Expression-level preferences + +# IDE0010 Add missing cases to switch statement +# No options +dotnet_diagnostic.IDE0010.severity = silent + +# IDE0017 Use object initializers +#dotnet_style_object_initializer = true +dotnet_diagnostic.IDE0017.severity = warning + +# IDE0018 Inline variable declaration +#csharp_style_inlined_variable_declaration = true +dotnet_diagnostic.IDE0018.severity = warning + +# IDE0028 Use collection initializers +#dotnet_style_collection_initializer = true +dotnet_diagnostic.IDE0028.severity = warning + +# IDE0032 Use auto-implemented property +#dotnet_style_prefer_auto_properties = true +dotnet_diagnostic.IDE0032.severity = warning + +# IDE0033 Use explicitly provided tuple name +#dotnet_style_explicit_tuple_names = true +dotnet_diagnostic.IDE0033.severity = warning + +# IDE0034 Simplify 'default' expression +#csharp_prefer_simple_default_expression = true +dotnet_diagnostic.IDE0034.severity = warning + +# IDE0037 Use inferred member name +#dotnet_style_prefer_inferred_tuple_names = true +#dotnet_style_prefer_inferred_anonymous_type_member_names = true +dotnet_diagnostic.IDE0037.severity = silent + +# IDE0039 Use local function instead of lambda +#csharp_style_prefer_local_over_anonymous_function = true +dotnet_diagnostic.IDE0039.severity = warning + +# IDE0042 Deconstruct variable declaration +#csharp_style_deconstructed_variable_declaration = true +dotnet_diagnostic.IDE0042.severity = warning + +# IDE0045 Use conditional expression for assignment +#dotnet_style_prefer_conditional_expression_over_assignment = true +dotnet_diagnostic.IDE0045.severity = silent + +# IDE0046 Use conditional expression for return +#dotnet_style_prefer_conditional_expression_over_return = true +dotnet_diagnostic.IDE0046.severity = silent + +# IDE0050 Convert anonymous type to tuple +# No options +dotnet_diagnostic.IDE0050.severity = silent + +# IDE0054/IDE0074 Use compound assignment/Use coalesce compound assignment +#dotnet_style_prefer_compound_assignment = true +dotnet_diagnostic.IDE0054.severity = warning +dotnet_diagnostic.IDE0074.severity = warning + +# IDE0056 Use index operator +#csharp_style_prefer_index_operator = true +dotnet_diagnostic.IDE0056.severity = warning + +# IDE0057 Use range operator +#csharp_style_prefer_range_operator = true +dotnet_diagnostic.IDE0057.severity = warning + +# IDE0070 Use 'System.HashCode.Combine' +# No options +dotnet_diagnostic.IDE0070.severity = warning + +# IDE0071 Simplify interpolation +#dotnet_style_prefer_simplified_interpolation = true +dotnet_diagnostic.IDE0071.severity = warning + +# IDE0072 Add missing cases to switch expression +# No options +dotnet_diagnostic.IDE0072.severity = silent + +# IDE0075 Simplify conditional expression +#dotnet_style_prefer_simplified_boolean_expressions = true +dotnet_diagnostic.IDE0075.severity = warning + +# IDE0082 Convert 'typeof' to 'nameof' +# No options +dotnet_diagnostic.IDE0082.severity = warning + +# IDE0090 Simplify 'new' expression +#csharp_style_implicit_object_creation_when_type_is_apparent = true +dotnet_diagnostic.IDE0090.severity = warning + +# IDE0180 Use tuple to swap values +#csharp_style_prefer_tuple_swap = true +dotnet_diagnostic.IDE0180.severity = warning + +## Namespace declaration preferences + +# IDE0160/IDE0161 Use block-scoped namespace/Use file-scoped namespace +#csharp_style_namespace_declarations = block_scoped +dotnet_diagnostic.IDE0160.severity = warning +dotnet_diagnostic.IDE0161.severity = warning + +## Null-checking preferences + +# IDE0016 Use throw expression +#csharp_style_throw_expression = true +dotnet_diagnostic.IDE0016.severity = silent + +# IDE0029/IDE0030/IDE0270 Use coalesce expression (non-nullable types)/Use coalesce expression (nullable types)/Use coalesce expression (if null) +#dotnet_style_coalesce_expression = true +dotnet_diagnostic.IDE0029.severity = warning +dotnet_diagnostic.IDE0030.severity = warning +dotnet_diagnostic.IDE0270.severity = silent + +# IDE0031 Use null propagation +#dotnet_style_null_propagation = true +dotnet_diagnostic.IDE0031.severity = warning + +# IDE0041 Use 'is null' check +#dotnet_style_prefer_is_null_check_over_reference_equality_method = true +dotnet_diagnostic.IDE0041.severity = warning + +# IDE0150 Prefer 'null' check over type check +#csharp_style_prefer_null_check_over_type_check = true +dotnet_diagnostic.IDE0150.severity = warning + +# IDE1005 Use conditional delegate call +csharp_style_conditional_delegate_call = true # true is the default, but the rule is not triggered if this is not specified. +dotnet_diagnostic.IDE1005.severity = warning + +## var preferences + +# IDE0007/IDE0008 Use 'var' instead of explicit type/Use explicit type instead of 'var' +csharp_style_var_for_built_in_types = true +csharp_style_var_when_type_is_apparent = true +csharp_style_var_elsewhere = true +dotnet_diagnostic.IDE0007.severity = warning +dotnet_diagnostic.IDE0008.severity = warning + +## Expression-bodied-members + +# IDE0021 Use expression body for constructors +#csharp_style_expression_bodied_constructors = false +dotnet_diagnostic.IDE0021.severity = silent + +# IDE0022 Use expression body for methods +#csharp_style_expression_bodied_methods = false +dotnet_diagnostic.IDE0022.severity = silent + +# IDE0023/IDE0024 Use expression body for conversion operators/Use expression body for operators +#csharp_style_expression_bodied_operators = false +dotnet_diagnostic.IDE0023.severity = silent +dotnet_diagnostic.IDE0024.severity = silent + +# IDE0025 Use expression body for properties +#csharp_style_expression_bodied_properties = true +dotnet_diagnostic.IDE0025.severity = silent + +# IDE0026 Use expression body for indexers +#csharp_style_expression_bodied_indexers = true +dotnet_diagnostic.IDE0026.severity = silent + +# IDE0027 Use expression body for accessors +#csharp_style_expression_bodied_accessors = true +dotnet_diagnostic.IDE0027.severity = warning + +# IDE0053 Use expression body for lambdas +# This rule is buggy and not enforced for builds. ':warning' will at least enforce it in the IDE. +csharp_style_expression_bodied_lambdas = when_on_single_line:warning +dotnet_diagnostic.IDE0053.severity = warning + +# IDE0061 Use expression body for local functions +csharp_style_expression_bodied_local_functions = when_on_single_line +dotnet_diagnostic.IDE0061.severity = warning + +## Pattern matching preferences + +# IDE0019 Use pattern matching to avoid 'as' followed by a 'null' check +#csharp_style_pattern_matching_over_as_with_null_check = true +dotnet_diagnostic.IDE0019.severity = warning + +# IDE0020/IDE0038 Use pattern matching to avoid 'is' check followed by a cast (with variable)/Use pattern matching to avoid 'is' check followed by a cast (without variable) +#csharp_style_pattern_matching_over_is_with_cast_check = true +dotnet_diagnostic.IDE0020.severity = warning +dotnet_diagnostic.IDE0038.severity = warning + +# IDE0066 Use switch expression +#csharp_style_prefer_switch_expression = true +dotnet_diagnostic.IDE0066.severity = silent + +# IDE0078 Use pattern matching +#csharp_style_prefer_pattern_matching = true +dotnet_diagnostic.IDE0078.severity = silent + +# IDE0083 Use pattern matching ('not' operator) +#csharp_style_prefer_not_pattern = true +dotnet_diagnostic.IDE0083.severity = warning + +# IDE0170 Simplify property pattern +#csharp_style_prefer_extended_property_pattern = true +dotnet_diagnostic.IDE0170.severity = silent # Requires C# 10 + +## Code block preferences + +# IDE0011 Add braces +#csharp_prefer_braces = true +# No options match the style used in OpenRA. +dotnet_diagnostic.IDE0011.severity = none + +# IDE0063 Use simple 'using' statement +#csharp_prefer_simple_using_statement = true +dotnet_diagnostic.IDE0063.severity = silent + +## 'using' directive preferences + +# IDE0065 'using' directive placement +#csharp_using_directive_placement = outside_namespace +dotnet_diagnostic.IDE0065.severity = silent + +## File header preferences + +# IDE0073 Require file header +#file_header_template = unset +# This rule does not allow us to enforce our desired header, as it prefixes the header lines with // comments, meaning we can't apply a region. +dotnet_diagnostic.IDE0073.severity = none + +## Namespace naming preferences + +# IDE0130 Namespace does not match folder structure +#dotnet_style_namespace_match_folder = true +# This rule doesn't appear to work (never reports violations) +dotnet_diagnostic.IDE0130.severity = none + +### Unnecessary Code Rules +### https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/style-rules/unnecessary-code-rules + +# IDE0001 Simplify name +# No options +dotnet_diagnostic.IDE0001.severity = warning -csharp_style_var_elsewhere = true:suggestion -csharp_style_var_for_built_in_types = true:suggestion -csharp_style_var_when_type_is_apparent = true:suggestion +# IDE0002 Simplify member access +# No options +dotnet_diagnostic.IDE0002.severity = warning -csharp_prefer_braces = when_multiline:suggestion -csharp_using_directive_placement = outside_namespace:suggestion -csharp_new_line_before_open_brace = all -csharp_space_around_binary_operators = before_and_after +# IDE0004 Remove unnecessary cast +# No options +dotnet_diagnostic.IDE0004.severity = warning -## Naming styles: +# IDE0005 Remove unnecessary import +# No options +# IDE0005 is only enabled in the IDE by default. https://github.com/dotnet/roslyn/issues/41640 +# To enable it for builds outside the IDE the 'GenerateDocumentationFile' property must be enabled on the build. +# GenerateDocumentationFile generates additional warnings about XML docs, so disable any we don't care about. +dotnet_diagnostic.CS1591.severity = none # Missing XML comment for publicly visible type or member +dotnet_diagnostic.IDE0005.severity = warning + +# IDE0035 Remove unreachable code +# No options +# Duplicates compiler warning CS0162 +dotnet_diagnostic.IDE0035.severity = none + +# IDE0051 Remove unused private member +# No options +dotnet_diagnostic.IDE0051.severity = warning + +# IDE0052 Remove unread private member +# No options +dotnet_diagnostic.IDE0052.severity = warning + +# IDE0058 Remove unnecessary expression value +#csharp_style_unused_value_expression_statement_preference = discard_variable +dotnet_diagnostic.IDE0058.severity = silent + +# IDE0059 Remove unnecessary value assignment +#csharp_style_unused_value_assignment_preference = discard_variable +dotnet_diagnostic.IDE0059.severity = warning + +# IDE0060 Remove unused parameter +dotnet_code_quality_unused_parameters = non_public +dotnet_diagnostic.IDE0060.severity = warning + +# IDE0079 Remove unnecessary suppression +#dotnet_remove_unnecessary_suppression_exclusions = none +dotnet_diagnostic.IDE0079.severity = warning + +# IDE0080 Remove unnecessary suppression operator +# No options +dotnet_diagnostic.IDE0080.severity = warning + +# IDE0100 Remove unnecessary equality operator +# No options +dotnet_diagnostic.IDE0100.severity = warning + +# IDE0110 Remove unnecessary discard +# No options +dotnet_diagnostic.IDE0110.severity = warning + +### Miscellaneous Rules +### https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/style-rules/miscellaneous-rules + +# IDE0076 Remove invalid global 'SuppressMessageAttribute' +# No options +dotnet_diagnostic.IDE0076.severity = warning + +# IDE0077 Avoid legacy format target in global 'SuppressMessageAttribute' +# No options +dotnet_diagnostic.IDE0077.severity = warning + +### Formatting Rules (IDE0055) +### https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/style-rules/ide0055 + +# We may eventually wish to enforce this rule, however some existing formatting conflicts with the rule despite being reasonable. +# Additionally, the rule is buggy and likes to report spuriously after invoking Format Document in the IDE. +dotnet_diagnostic.IDE0055.severity = none + +#dotnet_sort_system_directives_first = true +#dotnet_separate_import_directive_groups = false +#dotnet_style_namespace_match_folder = true + +#csharp_new_line_before_open_brace = all +#csharp_new_line_before_else = true +#csharp_new_line_before_catch = true +#csharp_new_line_before_finally = true +#csharp_new_line_before_members_in_object_initializers = true +#csharp_new_line_before_members_in_anonymous_types = true +#csharp_new_line_between_query_expression_clauses = true + +#csharp_indent_case_contents = true +#csharp_indent_switch_labels = true +#csharp_indent_labels = one_less_than_current +#csharp_indent_block_contents = true +#csharp_indent_braces = false +#csharp_indent_case_contents_when_block = true + +#csharp_space_after_cast = false +#csharp_space_after_keywords_in_control_flow_statements = true +#csharp_space_between_parentheses = +#csharp_space_before_colon_in_inheritance_clause = true +#csharp_space_after_colon_in_inheritance_clause = true +#csharp_space_around_binary_operators = before_and_after +#csharp_space_between_method_declaration_parameter_list_parentheses = false +#csharp_space_between_method_declaration_empty_parameter_list_parentheses = false +#csharp_space_between_method_declaration_name_and_open_parenthesis = false +#csharp_space_between_method_call_parameter_list_parentheses = false +#csharp_space_between_method_call_empty_parameter_list_parentheses = false +#csharp_space_between_method_call_name_and_opening_parenthesis = false +#csharp_space_after_comma = true +#csharp_space_before_comma = false +#csharp_space_after_dot = false +#csharp_space_before_dot = false +#csharp_space_after_semicolon_in_for_statement = true +#csharp_space_before_semicolon_in_for_statement = false +#csharp_space_around_declaration_statements = false +#csharp_space_before_open_square_brackets = false +#csharp_space_between_empty_square_brackets = false +#csharp_space_between_square_brackets = false + +#csharp_preserve_single_line_statements = true +#csharp_preserve_single_line_blocks = true + + +### Naming Rules (IDE1006) +### https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/style-rules/naming-rules +dotnet_diagnostic.IDE1006.severity = warning + +## Naming styles dotnet_naming_style.camel_case.capitalization = camel_case @@ -34,7 +450,7 @@ dotnet_naming_style.pascal_case.capitalization = pascal_case dotnet_naming_style.i_prefix_pascal_case.capitalization = pascal_case dotnet_naming_style.i_prefix_pascal_case.required_prefix = I -## Symbol specifications: +## Naming Symbols dotnet_naming_symbols.const_locals.applicable_kinds = local dotnet_naming_symbols.const_locals.applicable_accessibilities = * @@ -64,7 +480,7 @@ dotnet_naming_symbols.parameters_and_locals.applicable_accessibilities = * dotnet_naming_symbols.most_symbols.applicable_kinds = namespace, class, struct, enum, field, property, method, local_function, event, delegate, type_parameter dotnet_naming_symbols.most_symbols.applicable_accessibilities = * -## Naming rules: +## Naming Rules dotnet_naming_rule.const_locals_should_be_pascal_case.symbols = const_locals dotnet_naming_rule.const_locals_should_be_pascal_case.style = pascal_case @@ -98,89 +514,378 @@ dotnet_naming_rule.most_symbols_should_be_pascal_case.symbols = most_symbols dotnet_naming_rule.most_symbols_should_be_pascal_case.style = pascal_case dotnet_naming_rule.most_symbols_should_be_pascal_case.severity = warning -## Formatting: -# Also handled by StyleCopAnalyzers - SA1024: ColonsMustBeSpacedCorrectly. -csharp_space_after_colon_in_inheritance_clause = true +### StyleCop.Analyzers +### https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/DOCUMENTATION.md + +# Below we enable rule categories by setting severity to warning. +# We'll only list rules to disable. +# Individual rules we wish to disable are typically set to none severity. + +# Covers SAxxxx and SXxxxx rules +dotnet_analyzer_diagnostic.category-StyleCop.CSharp.DocumentationRules.severity = warning +dotnet_analyzer_diagnostic.category-StyleCop.CSharp.LayoutRules.severity = warning +dotnet_analyzer_diagnostic.category-StyleCop.CSharp.MaintainabilityRules.severity = warning +dotnet_analyzer_diagnostic.category-StyleCop.CSharp.NamingRules.severity = warning +dotnet_analyzer_diagnostic.category-StyleCop.CSharp.OrderingRules.severity = warning +dotnet_analyzer_diagnostic.category-StyleCop.CSharp.ReadabilityRules.severity = warning +dotnet_analyzer_diagnostic.category-StyleCop.CSharp.SpacingRules.severity = warning +dotnet_analyzer_diagnostic.category-StyleCop.CSharp.SpecialRules.severity = warning + +# Rules that are covered by IDE0001 Simplify name +dotnet_diagnostic.SA1125.severity = none # UseShorthandForNullableTypes + +# Rules that are covered by IDE0047 Remove unnecessary parentheses +dotnet_diagnostic.SA1119.severity = none # StatementMustNotUseUnnecessaryParenthesis + +# Rules that are covered by IDE0055 Formatting Rules +dotnet_diagnostic.SA1027.severity = none # UseTabsCorrectly + +# Rules that are covered by IDE1006 Naming Rules +dotnet_diagnostic.SA1300.severity = none # ElementMustBeginWithUpperCaseLetter +dotnet_diagnostic.SA1302.severity = none # InterfaceNamesMustBeginWithI +dotnet_diagnostic.SA1303.severity = none # ConstFieldNamesMustBeginWithUpperCaseLetter +dotnet_diagnostic.SA1304.severity = none # NonPrivateReadonlyFieldsMustBeginWithUpperCaseLetter +dotnet_diagnostic.SA1306.severity = none # FieldNamesMustBeginWithLowerCaseLetter +dotnet_diagnostic.SA1307.severity = none # AccessibleFieldsMustBeginWithUpperCaseLetter +dotnet_diagnostic.SA1311.severity = none # StaticReadonlyFieldsMustBeginWithUpperCaseLetter +dotnet_diagnostic.SA1312.severity = none # VariableNamesMustBeginWithLowerCaseLetter +dotnet_diagnostic.SA1313.severity = none # ParameterNamesMustBeginWithLowerCaseLetter + +# Rules that conflict with OpenRA project style conventions +dotnet_diagnostic.SA1101.severity = none # PrefixLocalCallsWithThis +dotnet_diagnostic.SA1107.severity = none # CodeMustNotContainMultipleStatementsOnOneLine +dotnet_diagnostic.SA1116.severity = none # SplitParametersMustStartOnLineAfterDeclaration +dotnet_diagnostic.SA1117.severity = none # ParametersMustBeOnSameLineOrSeparateLines +dotnet_diagnostic.SA1118.severity = none # ParameterMustNotSpanMultipleLines +dotnet_diagnostic.SA1122.severity = none # UseStringEmptyForEmptyStrings +dotnet_diagnostic.SA1124.severity = none # DoNotUseRegions +dotnet_diagnostic.SA1127.severity = none # GenericTypeConstraintsMustBeOnOwnLine +dotnet_diagnostic.SA1132.severity = none # DoNotCombineFields +dotnet_diagnostic.SA1135.severity = none # UsingDirectivesMustBeQualified +dotnet_diagnostic.SA1136.severity = none # EnumValuesShouldBeOnSeparateLines +dotnet_diagnostic.SA1200.severity = none # UsingDirectivesMustBePlacedCorrectly +dotnet_diagnostic.SA1201.severity = none # ElementsMustAppearInTheCorrectOrder +dotnet_diagnostic.SA1202.severity = none # ElementsMustBeOrderedByAccess +dotnet_diagnostic.SA1204.severity = none # StaticElementsMustAppearBeforeInstanceElements +dotnet_diagnostic.SA1214.severity = none # ReadonlyElementsMustAppearBeforeNonReadonlyElements +dotnet_diagnostic.SX1309.severity = none # FieldNamesMustBeginWithUnderscore +dotnet_diagnostic.SX1309S.severity = none # StaticFieldNamesMustBeginWithUnderscore +dotnet_diagnostic.SA1314.severity = none # TypeParameterNamesMustBeginWithT +dotnet_diagnostic.SA1400.severity = none # AccessModifierMustBeDeclared +dotnet_diagnostic.SA1401.severity = none # FieldsMustBePrivate +dotnet_diagnostic.SA1402.severity = none # FileMayOnlyContainASingleType +dotnet_diagnostic.SA1407.severity = none # ArithmeticExpressionsMustDeclarePrecedence +dotnet_diagnostic.SA1413.severity = none # UseTrailingCommasInMultiLineInitializers +dotnet_diagnostic.SA1501.severity = none # StatementMustNotBeOnSingleLine +dotnet_diagnostic.SA1502.severity = none # ElementMustNotBeOnSingleLine +dotnet_diagnostic.SA1503.severity = none # BracesMustNotBeOmitted +dotnet_diagnostic.SA1516.severity = none # ElementsMustBeSeparatedByBlankLine +dotnet_diagnostic.SA1519.severity = none # BracesMustNotBeOmittedFromMultiLineChildStatement +dotnet_diagnostic.SA1520.severity = none # UseBracesConsistently +dotnet_diagnostic.SA1600.severity = none # ElementsMustBeDocumented +dotnet_diagnostic.SA1601.severity = none # PartialElementsMustBeDocumented +dotnet_diagnostic.SA1602.severity = none # EnumerationItemsMustBeDocumented +dotnet_diagnostic.SA1611.severity = none # ElementParametersShouldBeDocumented +dotnet_diagnostic.SA1615.severity = none # ElementReturnValueShouldBeDocumented +dotnet_diagnostic.SA1618.severity = none # GenericTypeParametersShouldBeDocumented +dotnet_diagnostic.SA1623.severity = none # PropertySummaryDocumentationShouldMatchAccessors +dotnet_diagnostic.SA1633.severity = none # FileMustHaveHeader +dotnet_diagnostic.SA1642.severity = none # ConstructorSummaryDocumentationShouldBeginWithStandardText +dotnet_diagnostic.SA1649.severity = none # FileNameMustMatchTypeName + +#### Code Quality Rules +#### https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ + +# Below we enable specific rules by setting severity to warning. +# Rules are listed below with any options available. +# Options are commented out if they match the defaults. + +# Rule options that apply over multiple rules are set here. +# https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/code-quality-rule-options +dotnet_code_quality.api_surface = all + +### Design Rules +### https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/design-warnings + +# Collections should implement generic interface. +#dotnet_code_quality.CA1010.additional_required_generic_interfaces = +dotnet_diagnostic.CA1010.severity = warning + +# Abstract types should not have public constructors. +dotnet_diagnostic.CA1012.severity = warning + +# Mark attributes with 'AttributeUsageAttribute'. +dotnet_diagnostic.CA1018.severity = warning + +# Override methods on comparable types. +dotnet_diagnostic.CA1036.severity = warning + +# Provide ObsoleteAttribute message. +dotnet_diagnostic.CA1041.severity = warning + +# Do not declare protected members in sealed types. +dotnet_diagnostic.CA1047.severity = warning + +# Declare types in namespaces. +dotnet_diagnostic.CA1050.severity = warning + +# Static holder types should be 'Static' or 'NotInheritable'. +dotnet_diagnostic.CA1052.severity = warning + +# Do not hide base class methods. +dotnet_diagnostic.CA1061.severity = warning + +# Exceptions should be public. +dotnet_diagnostic.CA1064.severity = warning + +# Implement 'IEquatable' when overriding 'Equals'. +dotnet_diagnostic.CA1066.severity = warning + +# Override 'Equals' when implementing 'IEquatable'. +dotnet_diagnostic.CA1067.severity = warning + +# 'CancellationToken' parameters must come last. +dotnet_diagnostic.CA1068.severity = warning + +# Do not declare event fields as virtual. +dotnet_diagnostic.CA1070.severity = warning + +### Documentation Rules +### https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/documentation-warnings + +# Avoid using 'cref' tags with a prefix. +dotnet_diagnostic.CA1200.severity = warning + +### Globalization Rules +### https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/globalization-warnings + +### Portability and Interoperability Rules +### https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/interoperability-warnings -# Also handled by StyleCopAnalyzers - SA1024: ColonsMustBeSpacedCorrectly. -csharp_space_before_colon_in_inheritance_clause = true +# Do not use 'OutAttribute' on string parameters for P/Invokes. +dotnet_diagnostic.CA1417.severity = warning -# Also handled by StyleCopAnalyzers - SA1000: KeywordsMustBeSpacedCorrectly. -csharp_space_after_keywords_in_control_flow_statements = true +### Maintainability Rules +### https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/maintainability-warnings -# Leave code block on single line. -csharp_preserve_single_line_blocks = true +# Use 'nameof' in place of string. +dotnet_diagnostic.CA1507.severity = warning -# Leave statements and member declarations on the same line. -csharp_preserve_single_line_statements = true +### Naming Rules +### https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/naming-warnings -# IDE0049, IDE-only counterpart of StyleCopAnalyzers - SA1121: UseBuiltInTypeAlias. -dotnet_style_predefined_type_for_member_access = true +# Do not prefix enum values with type name. +dotnet_code_quality.CA1712.enum_values_prefix_trigger = AnyEnumValue +dotnet_diagnostic.CA1712.severity = warning -# IDE0049, IDE-only counterpart of StyleCopAnalyzers - SA1121: UseBuiltInTypeAlias. -dotnet_style_predefined_type_for_locals_parameters_members = true +# Flags enums should have plural names. +dotnet_diagnostic.CA1714.severity = warning -## Others: +# Only 'FlagsAttribute' enums should have plural names. +dotnet_diagnostic.CA1717.severity = warning -# Show an IDE warning when default access modifiers are explicitly specified. -dotnet_style_require_accessibility_modifiers = omit_if_default:warning +### Performance Rules +### https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/performance-warnings -# Use 'var' instead of explicit type. -dotnet_diagnostic.IDE0007.severity = warning +# Use Literals Where Appropriate. +#dotnet_code_quality.CA1802.required_modifiers = static +dotnet_diagnostic.CA1802.severity = warning -# Don't prefer braces (for one liners). -dotnet_diagnostic.IDE0011.severity = silent +# Remove empty finalizers. +dotnet_diagnostic.CA1821.severity = warning -# Object initialization can be simplified / Use object initializer. -dotnet_diagnostic.IDE0017.severity = warning +# Mark members as static. +dotnet_code_quality.CA1822.api_surface = private,internal +dotnet_diagnostic.CA1822.severity = warning -# Collection initialization can be simplified -dotnet_diagnostic.IDE0028.severity = warning +# Avoid unused private fields. +dotnet_diagnostic.CA1823.severity = warning -# Simplify 'default' expression -dotnet_diagnostic.IDE0034.severity = warning +# Avoid zero-length array allocations. +dotnet_diagnostic.CA1825.severity = warning -# Modifiers are not ordered. -dotnet_diagnostic.IDE0036.severity = warning +# Use property instead of Linq Enumerable method. +#dotnet_code_quality.CA1826.exclude_ordefault_methods = false +dotnet_diagnostic.CA1826.severity = warning -# Raise a warning on build when default access modifiers are explicitly specified. -dotnet_diagnostic.IDE0040.severity = warning +# Do not use Count/LongCount when Any can be used. +dotnet_diagnostic.CA1827.severity = warning -# Make field readonly. -dotnet_diagnostic.IDE0044.severity = warning +# Do not use CountAsync/LongCountAsync when AnyAsync can be used. +dotnet_diagnostic.CA1828.severity = warning -# Unused private member. -dotnet_diagnostic.IDE0052.severity = warning +# Use Length/Count property instead of Enumerable.Count method. +dotnet_diagnostic.CA1829.severity = warning -# Unnecessary value assignment. -dotnet_diagnostic.IDE0059.severity = warning +# Prefer strongly-typed Append and Insert method overloads on StringBuilder. +dotnet_diagnostic.CA1830.severity = warning -# Unused parameter. -dotnet_diagnostic.IDE0060.severity = warning +# Use AsSpan instead of Range-based indexers for string when appropriate. +dotnet_diagnostic.CA1831.severity = warning -# Naming rule violation. -dotnet_diagnostic.IDE1006.severity = warning +# Use AsSpan or AsMemory instead of Range-based indexers for getting ReadOnlySpan or ReadOnlyMemory portion of an array. +dotnet_diagnostic.CA1832.severity = warning -# Avoid unnecessary zero-length array allocations. -dotnet_diagnostic.CA1825.severity = warning +# Use AsSpan or AsMemory instead of Range-based indexers for getting Span or Memory portion of an array. +dotnet_diagnostic.CA1833.severity = warning -# Do not use Enumerable methods on indexable collections. Instead use the collection directly. -dotnet_diagnostic.CA1826.severity = warning +# Use StringBuilder.Append(char) for single character strings. +dotnet_diagnostic.CA1834.severity = warning -# Count() is used where Any() could be used instead to improve performance. -dotnet_diagnostic.CA1827.severity = warning +# Prefer the memory-based overloads of ReadAsync/WriteAsync methods in stream-based classes. +dotnet_diagnostic.CA1835.severity = warning -# Use Length/Count property instead of Enumerable.Count method. -dotnet_diagnostic.CA1829.severity = warning +# Prefer IsEmpty over Count when available. +dotnet_diagnostic.CA1836.severity = warning + +# Use Environment.ProcessId instead of Process.GetCurrentProcess().Id. +dotnet_diagnostic.CA1837.severity = warning + +# Avoid StringBuilder parameters for P/Invokes. +dotnet_diagnostic.CA1838.severity = warning + +# Use Environment.ProcessPath instead of Process.GetCurrentProcess().MainModule.FileName. +dotnet_diagnostic.CA1839.severity = warning + +# Use Environment.CurrentManagedThreadId instead of Thread.CurrentThread.ManagedThreadId. +dotnet_diagnostic.CA1840.severity = warning + +# Prefer Dictionary Contains methods. +dotnet_diagnostic.CA1841.severity = warning + +# Do not use 'WhenAll' with a single task. +dotnet_diagnostic.CA1842.severity = warning + +# Do not use 'WaitAll' with a single task. +dotnet_diagnostic.CA1843.severity = warning + +# Provide memory-based overrides of async methods when subclassing 'Stream'. +dotnet_diagnostic.CA1844.severity = warning + +# Use span-based 'string.Concat'. (Not available on mono) +dotnet_diagnostic.CA1845.severity = none + +# Prefer AsSpan over Substring. +dotnet_diagnostic.CA1846.severity = warning # Use string.Contains(char) instead of string.Contains(string) with single characters. dotnet_diagnostic.CA1847.severity = warning -; 4-column tab indentation -[*.yaml] -indent_style = tab -indent_size = 4 +# Call async methods when in an async method. +dotnet_diagnostic.CA1849.severity = warning + +# Prefer static HashData method over ComputeHash. (Not available on mono) +dotnet_diagnostic.CA1850.severity = none + +# Seal internal types. +dotnet_diagnostic.CA1852.severity = warning + +# Unnecessary call to 'Dictionary.ContainsKey(key)'. +dotnet_diagnostic.CA1853.severity = warning + +# Prefer the IDictionary.TryGetValue(TKey, out TValue) method. +dotnet_diagnostic.CA1854.severity = warning + +# Use Span.Clear() instead of Span.Fill(). +dotnet_diagnostic.CA1855.severity = warning + +# Use StartsWith instead of IndexOf. +dotnet_diagnostic.CA1858.severity = warning + +# Avoid using 'Enumerable.Any()' extension method. +dotnet_diagnostic.CA1860.severity = warning + +### Reliability Rules +### https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/reliability-warnings + +# Do not assign property within its setter. +dotnet_diagnostic.CA2011.severity = warning + +# Use ValueTasks correctly. +dotnet_diagnostic.CA2012.severity = warning + +# Do not use ReferenceEquals with value types. +dotnet_diagnostic.CA2013.severity = warning + +# Do not use stackalloc in loops. +dotnet_diagnostic.CA2014.severity = warning + +# Forward the CancellationToken parameter to methods that take one. +dotnet_diagnostic.CA2016.severity = warning + +# The 'count' argument to Buffer.BlockCopy should specify the number of bytes to copy. +dotnet_diagnostic.CA2018.severity = warning + +# ThreadStatic fields should not use inline initialization. +dotnet_diagnostic.CA2019.severity = warning + +### Security Rules +### https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/security-warnings + +# Do Not Use Broken Cryptographic Algorithms. +dotnet_diagnostic.CA5351.severity = warning + +### Usage Rules +### https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/usage-warnings + +# Call GC.SuppressFinalize correctly. +dotnet_diagnostic.CA1816.severity = warning + +# Rethrow to preserve stack details. +dotnet_diagnostic.CA2200.severity = warning + +# Initialize value type static fields inline. +dotnet_diagnostic.CA2207.severity = warning + +# Instantiate argument exceptions correctly. +dotnet_diagnostic.CA2208.severity = warning + +# Dispose methods should call base class dispose. +dotnet_diagnostic.CA2215.severity = warning + +# Disposable types should declare finalizer. +dotnet_diagnostic.CA2216.severity = warning + +# Override GetHashCode on overriding Equals. +dotnet_diagnostic.CA2218.severity = warning + +# Overload operator equals on overriding ValueType.Equals. +dotnet_diagnostic.CA2231.severity = warning + +# Provide correct arguments to formatting methods. +#dotnet_code_quality.CA2241.additional_string_formatting_methods = +dotnet_code_quality.CA2241.try_determine_additional_string_formatting_methods_automatically = true +dotnet_diagnostic.CA2241.severity = warning + +# Test for NaN correctly. +dotnet_diagnostic.CA2242.severity = warning + +# Attribute string literals should parse correctly. +dotnet_diagnostic.CA2243.severity = warning + +# Do not duplicate indexed element initializations. +dotnet_diagnostic.CA2244.severity = warning + +# Do not assign a property to itself. +dotnet_diagnostic.CA2245.severity = warning + +# Argument passed to TaskCompletionSource constructor should be TaskCreationOptions enum instead of TaskContinuationOptions enum. +dotnet_diagnostic.CA2247.severity = warning + +# Provide correct enum argument to Enum.HasFlag. +dotnet_diagnostic.CA2248.severity = warning + +# Use ThrowIfCancellationRequested. +dotnet_diagnostic.CA2250.severity = warning + +# Ensure ThreadStatic is only used with static fields. +dotnet_diagnostic.CA2259.severity = warning + +### Roslynator +### https://github.com/JosefPihrt/Roslynator/tree/main/docs/analyzers + +# Below we enable specific rules by setting severity to warning. # Use 'Count' property instead of 'Any' method. dotnet_diagnostic.RCS1080.severity = warning diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c55fc01a5..803d6747f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,12 +4,18 @@ on: push: pull_request: +permissions: + contents: read # to fetch code (actions/checkout) + jobs: linux: name: Linux (.NET 6.0) runs-on: ubuntu-22.04 steps: + - name: Remove System .NET + run: sudo apt-get remove -y dotnet* + - name: Clone Repository uses: actions/checkout@v3 @@ -32,7 +38,7 @@ jobs: run: | sudo apt-get install lua5.1 make check-scripts - make test + make TREAT_WARNINGS_AS_ERRORS=true test linux-mono: name: Linux (mono) @@ -56,7 +62,7 @@ jobs: - name: Check Mod run: | # check-scripts does not depend on .net/mono, so is not needed here - make RUNTIME=mono test + make RUNTIME=mono TREAT_WARNINGS_AS_ERRORS=true test windows: name: Windows (.NET 6.0) @@ -80,7 +86,8 @@ jobs: - name: Check Mods run: | - chocolatey install lua --version 5.1.5.52 + choco install lua --version 5.1.5.52 --no-progress $ENV:Path = $ENV:Path + ";C:\Program Files (x86)\Lua\5.1\" + $ENV:TREAT_WARNINGS_AS_ERRORS = "true" .\make.ps1 check-scripts .\make.ps1 test diff --git a/Makefile b/Makefile index 7dbd192e6..9452a9798 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ # to compile, run: # make # -# to compile using Mono (version 6.4 or greater) instead of .NET 6, run: +# to compile using Mono (version 6.12 or greater) instead of .NET 6, run: # make RUNTIME=mono # # to compile using system libraries for native dependencies, run: @@ -22,7 +22,7 @@ # make [RUNTIME=net6] check # # to check your mod yaml for errors, run: -# make [RUNTIME=net6] test +# make [RUNTIME=net6] [TREAT_WARNINGS_AS_ERRORS=false] test # # the following are internal sdk helpers that are not intended to be run directly: # make check-variables @@ -145,7 +145,7 @@ engine: check-variables check-sdk-scripts all: engine ifeq ($(RUNTIME), mono) - @command -v $(MSBUILD) >/dev/null || (echo "OpenRA requires the '$(MSBUILD)' tool provided by Mono >= 6.4."; exit 1) + @command -v $(MSBUILD) >/dev/null || (echo "OpenRA requires the '$(MSBUILD)' tool provided by Mono >= 6.12."; exit 1) ifneq ("$(MOD_SOLUTION_FILES)","") @find . -maxdepth 1 -name '*.sln' -exec $(MSBUILD) -t:Build -restore -p:Configuration=${CONFIGURATION} -p:TargetPlatform=$(TARGETPLATFORM) -p:Mono=true \; endif @@ -181,11 +181,10 @@ check: engine ifneq ("$(MOD_SOLUTION_FILES)","") @echo "Compiling in Debug mode..." ifeq ($(RUNTIME), mono) -# Enabling EnforceCodeStyleInBuild and GenerateDocumentationFile as a workaround for some code style rules (in particular IDE0005) being bugged and not reporting warnings/errors otherwise. - @$(MSBUILD) -t:build -restore -p:Configuration=Debug -warnaserror -p:TargetPlatform=$(TARGETPLATFORM) -p:Mono=true -p:EnforceCodeStyleInBuild=true -p:GenerateDocumentationFile=true + @$(MSBUILD) -t:clean\;build -restore -p:Configuration=Debug -warnaserror -p:TargetPlatform=$(TARGETPLATFORM) else -# Enabling EnforceCodeStyleInBuild and GenerateDocumentationFile as a workaround for some code style rules (in particular IDE0005) being bugged and not reporting warnings/errors otherwise. - @$(DOTNET) build -c Debug -nologo -warnaserror -p:TargetPlatform=$(TARGETPLATFORM) -p:EnforceCodeStyleInBuild=true -p:GenerateDocumentationFile=true + @$(DOTNET) clean -c Debug --nologo --verbosity minimal + @$(DOTNET) build -c Debug -nologo -warnaserror -p:TargetPlatform=$(TARGETPLATFORM) endif endif @echo "Checking for explicit interface violations..." diff --git a/OpenRA.Mods.RA2/Activities/EnterCarrierParent.cs b/OpenRA.Mods.RA2/Activities/EnterCarrierParent.cs index 9e49b7310..9824fc758 100644 --- a/OpenRA.Mods.RA2/Activities/EnterCarrierParent.cs +++ b/OpenRA.Mods.RA2/Activities/EnterCarrierParent.cs @@ -17,7 +17,7 @@ namespace OpenRA.Mods.RA2.Activities { - class EnterCarrierParent : Enter + sealed class EnterCarrierParent : Enter { readonly Actor parent; readonly CarrierParent spawnerParent; diff --git a/OpenRA.Mods.RA2/FileSystem/BagFile.cs b/OpenRA.Mods.RA2/FileSystem/BagFile.cs index e7592adaa..609407236 100644 --- a/OpenRA.Mods.RA2/FileSystem/BagFile.cs +++ b/OpenRA.Mods.RA2/FileSystem/BagFile.cs @@ -35,15 +35,12 @@ public BagFile(Stream s, List entries, string filename) Name = filename; this.s = s; - index = entries.ToDictionaryWithConflictLog(x => x.Filename, - "{0} (bag format)".F(filename), - null, x => "(offs={0}, len={1})".F(x.Offset, x.Length)); + index = entries.ToDictionaryWithConflictLog(x => x.Filename, $"{filename} (bag format)", null, x => $"(offs={x.Offset}, len={x.Length})"); } public Stream GetStream(string filename) { - IdxEntry entry; - if (!index.TryGetValue(filename, out entry)) + if (!index.TryGetValue(filename, out var entry)) return null; var waveHeaderMemoryStream = new MemoryStream(); @@ -71,8 +68,8 @@ public Stream GetStream(string filename) if ((entry.Flags & 8) > 0) { // IMA ADPCM - var samplesPerChunk = (2 * (entry.ChunkSize - 4)) + 1; - var bytesPerSec = (int)Math.Floor(((double)(2 * entry.ChunkSize) / samplesPerChunk) * ((double)entry.SampleRate / 2)); + var samplesPerChunk = 2 * (entry.ChunkSize - 4) + 1; + var bytesPerSec = (int)Math.Floor((double)(2 * entry.ChunkSize) / samplesPerChunk * ((double)entry.SampleRate / 2)); var chunkSize = entry.ChunkSize > entry.Length ? entry.Length : entry.ChunkSize; waveHeaderMemoryStream.WriteArray(Encoding.ASCII.GetBytes("RIFF")); diff --git a/OpenRA.Mods.RA2/Graphics/ArcRenderable.cs b/OpenRA.Mods.RA2/Graphics/ArcRenderable.cs index ec6e7463a..e95d57045 100644 --- a/OpenRA.Mods.RA2/Graphics/ArcRenderable.cs +++ b/OpenRA.Mods.RA2/Graphics/ArcRenderable.cs @@ -14,32 +14,31 @@ namespace OpenRA.Mods.RA2.Graphics { - public struct ArcRenderable : IRenderable, IFinalizedRenderable + public readonly struct ArcRenderable : IRenderable, IFinalizedRenderable { readonly Color color; - readonly WPos a, b; + readonly WPos end; readonly WAngle angle; - readonly int zOffset; readonly WDist width; readonly int segments; - public ArcRenderable(WPos a, WPos b, int zOffset, WAngle angle, Color color, WDist width, int segments) + public ArcRenderable(WPos start, WPos end, int zOffset, WAngle angle, Color color, WDist width, int segments) { - this.a = a; - this.b = b; + Pos = start; + ZOffset = zOffset; + this.end = end; this.angle = angle; this.color = color; - this.zOffset = zOffset; this.width = width; this.segments = segments; } - public WPos Pos => a; - public int ZOffset => zOffset; + public WPos Pos { get; } + public int ZOffset { get; } public bool IsDecoration => true; - public IRenderable WithZOffset(int newOffset) { return new ArcRenderable(a, b, zOffset, angle, color, width, segments); } - public IRenderable OffsetBy(in WVec vec) { return new ArcRenderable(a + vec, b + vec, zOffset, angle, color, width, segments); } + public IRenderable WithZOffset(int newOffset) { return new ArcRenderable(Pos, end, ZOffset, angle, color, width, segments); } + public IRenderable OffsetBy(in WVec vec) { return new ArcRenderable(Pos + vec, end + vec, ZOffset, angle, color, width, segments); } public IRenderable AsDecoration() { return this; } public IFinalizedRenderable PrepareRender(WorldRenderer wr) { return this; } @@ -50,7 +49,7 @@ void IFinalizedRenderable.Render(WorldRenderer wr) var points = new float3[segments + 1]; for (var i = 0; i <= segments; i++) - points[i] = wr.Screen3DPosition(WPos.LerpQuadratic(a, b, angle, i, segments)); + points[i] = wr.Screen3DPosition(WPos.LerpQuadratic(Pos, end, angle, i, segments)); Game.Renderer.WorldRgbaColorRenderer.DrawLine(points, screenWidth, color, false); } diff --git a/OpenRA.Mods.RA2/Graphics/ElectricBoltRenderable.cs b/OpenRA.Mods.RA2/Graphics/ElectricBoltRenderable.cs index 6533248af..ba22e1e27 100644 --- a/OpenRA.Mods.RA2/Graphics/ElectricBoltRenderable.cs +++ b/OpenRA.Mods.RA2/Graphics/ElectricBoltRenderable.cs @@ -15,23 +15,22 @@ namespace OpenRA.Mods.RA2.Graphics { - public struct ElectricBoltRenderable : IRenderable, IFinalizedRenderable + public readonly struct ElectricBoltRenderable : IRenderable, IFinalizedRenderable { readonly WPos[] offsets; - readonly int zOffset; readonly WDist width; readonly Color color; public ElectricBoltRenderable(WPos[] offsets, int zOffset, WDist width, Color color) { this.offsets = offsets; - this.zOffset = zOffset; + ZOffset = zOffset; this.width = width; this.color = color; } - public WPos Pos => new WPos(offsets[0].X, offsets[0].Y, 0); - public int ZOffset => zOffset; + public WPos Pos => new(offsets[0].X, offsets[0].Y, 0); + public int ZOffset { get; } public bool IsDecoration => true; public IRenderable WithZOffset(int newOffset) { return new ElectricBoltRenderable(offsets, newOffset, width, color); } @@ -39,7 +38,7 @@ public ElectricBoltRenderable(WPos[] offsets, int zOffset, WDist width, Color co public IRenderable OffsetBy(in WVec vec) { var vec2 = vec; - return new ElectricBoltRenderable(offsets.Select(offset => offset + vec2).ToArray(), zOffset, width, color); + return new ElectricBoltRenderable(offsets.Select(offset => offset + vec2).ToArray(), ZOffset, width, color); } public IRenderable AsDecoration() { return this; } diff --git a/OpenRA.Mods.RA2/Graphics/ExtendedTilesetSpecificSpriteSequenceLoader.cs b/OpenRA.Mods.RA2/Graphics/ExtendedTilesetSpecificSpriteSequenceLoader.cs deleted file mode 100644 index 2590e7783..000000000 --- a/OpenRA.Mods.RA2/Graphics/ExtendedTilesetSpecificSpriteSequenceLoader.cs +++ /dev/null @@ -1,103 +0,0 @@ -#region Copyright & License Information -/* - * Copyright (c) The OpenRA Developers and Contributors - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System.Collections.Generic; -using System.Linq; -using OpenRA.Graphics; -using OpenRA.Mods.Common.Graphics; - -namespace OpenRA.Mods.RA2.Graphics -{ - public class ExtendedTilesetSpecificSpriteSequenceLoader : DefaultSpriteSequenceLoader - { - public readonly string DefaultSpriteExtension = ".shp"; - public readonly Dictionary TilesetExtensions = new Dictionary(); - public readonly Dictionary TilesetCodes = new Dictionary(); - public readonly Dictionary TilesetSuffixes = new Dictionary(); - - public ExtendedTilesetSpecificSpriteSequenceLoader(ModData modData) - : base(modData) - { - var metadata = modData.Manifest.Get().Metadata; - MiniYaml yaml; - - if (metadata.TryGetValue("DefaultSpriteExtension", out yaml)) - DefaultSpriteExtension = yaml.Value; - - if (metadata.TryGetValue("TilesetExtensions", out yaml)) - TilesetExtensions = yaml.ToDictionary(kv => kv.Value); - - if (metadata.TryGetValue("TilesetCodes", out yaml)) - TilesetCodes = yaml.ToDictionary(kv => kv.Value); - - if (metadata.TryGetValue("TilesetSuffixes", out yaml)) - TilesetSuffixes = yaml.ToDictionary(kv => kv.Value); - } - - public override ISpriteSequence CreateSequence(ModData modData, string tileSet, SpriteCache cache, string sequence, string animation, MiniYaml info) - { - return new ExtendedTilesetSpecificSpriteSequence(modData, tileSet, cache, this, sequence, animation, info); - } - } - - public class ExtendedTilesetSpecificSpriteSequence : DefaultSpriteSequence - { - public ExtendedTilesetSpecificSpriteSequence(ModData modData, string tileSet, SpriteCache cache, ISpriteSequenceLoader loader, string sequence, string animation, MiniYaml info) - : base(modData, tileSet, cache, loader, sequence, animation, info) { } - - string ResolveTilesetId(string tileSet, Dictionary d) - { - MiniYaml yaml; - if (d.TryGetValue("TilesetOverrides", out yaml)) - { - var tsNode = yaml.Nodes.FirstOrDefault(n => n.Key == tileSet); - if (tsNode != null) - tileSet = tsNode.Value.Value; - } - - return tileSet; - } - - protected override string GetSpriteSrc(ModData modData, string tileSet, string sequence, string animation, string sprite, Dictionary d) - { - var loader = (ExtendedTilesetSpecificSpriteSequenceLoader)Loader; - - var spriteName = sprite ?? sequence; - - if (LoadField(d, "UseTilesetCode", false)) - { - string code; - if (loader.TilesetCodes.TryGetValue(ResolveTilesetId(tileSet, d), out code)) - spriteName = spriteName.Substring(0, 1) + code + spriteName.Substring(2, spriteName.Length - 2); - } - - if (LoadField(d, "UseTilesetSuffix", false)) - { - string tilesetSuffix; - if (loader.TilesetSuffixes.TryGetValue(ResolveTilesetId(tileSet, d), out tilesetSuffix)) - spriteName = spriteName + tilesetSuffix; - } - - if (LoadField(d, "AddExtension", true)) - { - var useTilesetExtension = LoadField(d, "UseTilesetExtension", false); - - string tilesetExtension; - if (useTilesetExtension && loader.TilesetExtensions.TryGetValue(ResolveTilesetId(tileSet, d), out tilesetExtension)) - return spriteName + tilesetExtension; - - return spriteName + loader.DefaultSpriteExtension; - } - - return spriteName; - } - } -} diff --git a/OpenRA.Mods.RA2/Graphics/RadBeamRenderable.cs b/OpenRA.Mods.RA2/Graphics/RadBeamRenderable.cs index f4413ab19..7dadb6f00 100644 --- a/OpenRA.Mods.RA2/Graphics/RadBeamRenderable.cs +++ b/OpenRA.Mods.RA2/Graphics/RadBeamRenderable.cs @@ -14,10 +14,8 @@ namespace OpenRA.Mods.RA2.Graphics { - public struct RadBeamRenderable : IRenderable, IFinalizedRenderable + public readonly struct RadBeamRenderable : IRenderable, IFinalizedRenderable { - readonly WPos pos; - readonly int zOffset; readonly WVec sourceToTarget; readonly WDist width; readonly Color color; @@ -27,8 +25,8 @@ public struct RadBeamRenderable : IRenderable, IFinalizedRenderable public RadBeamRenderable(WPos pos, int zOffset, WVec sourceToTarget, WDist width, Color color, WDist amplitude, WDist wavelength, int quantizationCount) { - this.pos = pos; - this.zOffset = zOffset; + Pos = pos; + ZOffset = zOffset; this.sourceToTarget = sourceToTarget; this.width = width; this.color = color; @@ -37,18 +35,19 @@ public RadBeamRenderable(WPos pos, int zOffset, WVec sourceToTarget, WDist width this.quantizationCount = quantizationCount; } - public WPos Pos => pos; + public WPos Pos { get; } public PaletteReference Palette => null; - public int ZOffset => zOffset; + public int ZOffset { get; } public bool IsDecoration => true; - public IRenderable WithZOffset(int newOffset) { return new RadBeamRenderable(pos, zOffset, sourceToTarget, width, color, amplitude, wavelength, quantizationCount); } + public IRenderable WithZOffset(int newOffset) => new RadBeamRenderable(Pos, ZOffset, sourceToTarget, width, color, amplitude, wavelength, quantizationCount); - public IRenderable OffsetBy(in WVec vec) { return new RadBeamRenderable(pos + vec, zOffset, sourceToTarget, width, color, amplitude, wavelength, quantizationCount); } + public IRenderable OffsetBy(in WVec vec) => new RadBeamRenderable(Pos + vec, ZOffset, sourceToTarget, width, color, amplitude, wavelength, quantizationCount); - public IRenderable AsDecoration() { return this; } + public IRenderable AsDecoration() => this; + + public IFinalizedRenderable PrepareRender(WorldRenderer wr) => this; - public IFinalizedRenderable PrepareRender(WorldRenderer wr) { return this; } public void Render(WorldRenderer wr) { if (sourceToTarget == WVec.Zero) @@ -58,7 +57,7 @@ public void Render(WorldRenderer wr) // forward step, pointing from src to target. // QuantizationCont * forwardStep == One cycle of beam in src2target direction. - var forwardStep = (wavelength.Length * sourceToTarget) / (quantizationCount * sourceToTarget.Length); + var forwardStep = wavelength.Length * sourceToTarget / (quantizationCount * sourceToTarget.Length); var cycleCount = sourceToTarget.Length / wavelength.Length; if (sourceToTarget.Length % wavelength.Length != 0) @@ -70,7 +69,7 @@ public void Render(WorldRenderer wr) var angleStep = new WAngle(1024 / quantizationCount); // last point the rad beam "reached" - var pos = this.pos; // where we are + var pos = Pos; // where we are var last = wr.Screen3DPosition(pos); // we start from the shooter for (var i = 0; i < cycleCount * quantizationCount; i++) { @@ -86,6 +85,6 @@ public void Render(WorldRenderer wr) public void RenderDebugGeometry(WorldRenderer wr) { } - public Rectangle ScreenBounds(WorldRenderer wr) { return Rectangle.Empty; } + public Rectangle ScreenBounds(WorldRenderer wr) => Rectangle.Empty; } } diff --git a/OpenRA.Mods.RA2/Graphics/TintedCell.cs b/OpenRA.Mods.RA2/Graphics/TintedCell.cs index c1e68e9be..bb896be30 100644 --- a/OpenRA.Mods.RA2/Graphics/TintedCell.cs +++ b/OpenRA.Mods.RA2/Graphics/TintedCell.cs @@ -94,7 +94,7 @@ public void SetLevel(int value) var level = Level.Clamp(0, layer.Info.MaxLevel); // Linear interpolation - alpha = layer.Info.Darkest + (layer.TintLevel * level) / 255; + alpha = layer.Info.Darkest + layer.TintLevel * level / 255; } public void RenderDebugGeometry(WorldRenderer wr) { } diff --git a/OpenRA.Mods.RA2/Projectiles/ArcLaserZap.cs b/OpenRA.Mods.RA2/Projectiles/ArcLaserZap.cs index 63f98cd3f..be65ccce8 100644 --- a/OpenRA.Mods.RA2/Projectiles/ArcLaserZap.cs +++ b/OpenRA.Mods.RA2/Projectiles/ArcLaserZap.cs @@ -23,7 +23,7 @@ namespace OpenRA.Mods.RA2.Projectiles public class ArcLaserZapInfo : IProjectileInfo { [Desc("The width of the zap.")] - public readonly WDist Width = new WDist(86); + public readonly WDist Width = new(86); [Desc("Equivalent to sequence ZOffset. Controls Z sorting.")] public readonly int ZOffset = 0; @@ -94,7 +94,7 @@ public ArcLaserZap(ArcLaserZapInfo info, ProjectileArgs args, Color color) if (info.Inaccuracy.Length > 0) { - var inaccuracy = OpenRA.Mods.Common.Util.ApplyPercentageModifiers(info.Inaccuracy.Length, args.InaccuracyModifiers); + var inaccuracy = Common.Util.ApplyPercentageModifiers(info.Inaccuracy.Length, args.InaccuracyModifiers); var maxOffset = inaccuracy * (target - source).Length / args.Weapon.Range.Length; target += WVec.FromPDF(args.SourceActor.World.SharedRandom, 2) * maxOffset / 1024; } @@ -110,9 +110,8 @@ public void Tick(World world) target = args.Weapon.TargetActorCenter ? args.GuidedTarget.CenterPosition : args.GuidedTarget.Positions.PositionClosestTo(source); // Check for blocking actors - WPos blockedPos; if (info.Blockable && BlocksProjectiles.AnyBlockingActorsBetween(world, args.SourceActor.Owner, source, target, - info.Width, out blockedPos)) + info.Width, out var blockedPos)) target = blockedPos; if (!doneDamage) @@ -126,8 +125,7 @@ public void Tick(World world) doneDamage = true; } - if (hitanim != null) - hitanim.Tick(); + hitanim?.Tick(); if (++ticks >= info.Duration && animationComplete) world.AddFrameEndTask(w => w.Remove(this)); diff --git a/OpenRA.Mods.RA2/Projectiles/ElectricBolt.cs b/OpenRA.Mods.RA2/Projectiles/ElectricBolt.cs index c374c1fef..6804550d6 100644 --- a/OpenRA.Mods.RA2/Projectiles/ElectricBolt.cs +++ b/OpenRA.Mods.RA2/Projectiles/ElectricBolt.cs @@ -24,7 +24,7 @@ namespace OpenRA.Mods.RA2.Projectiles public class ElectricBoltInfo : IProjectileInfo { [Desc("The width of the zap.")] - public readonly WDist Width = new WDist(12); + public readonly WDist Width = new(12); [Desc("Equivalent to sequence ZOffset. Controls Z sorting.")] public readonly int ZOffset = 0; @@ -50,7 +50,7 @@ public class ElectricBoltInfo : IProjectileInfo public readonly WAngle Angle = WAngle.FromDegrees(90); [Desc("Maximum length per segment.")] - public readonly WDist SegmentLength = new WDist(320); + public readonly WDist SegmentLength = new(320); [Desc("Image containing launch effect sequence.")] public readonly string LaunchEffectImage = null; @@ -123,9 +123,9 @@ public ElectricBolt(ElectricBoltInfo info, ProjectileArgs args) var numSegments = (direction.Length - 1) / info.SegmentLength.Length + 1; var offsets = new WPos[numSegments + 1]; offsets[0] = args.Source; - offsets[offsets.Length - 1] = args.PassiveTarget; + offsets[^1] = args.PassiveTarget; - var angle = new WAngle((-info.Angle.Angle / 2) + random.Next(info.Angle.Angle)); + var angle = new WAngle(-info.Angle.Angle / 2 + random.Next(info.Angle.Angle)); for (var i = 1; i < numSegments; i++) offsets[i] = WPos.LerpQuadratic(source, target, angle, i, numSegments); diff --git a/OpenRA.Mods.RA2/Projectiles/RadBeam.cs b/OpenRA.Mods.RA2/Projectiles/RadBeam.cs index 194a013f9..1c2ce4a28 100644 --- a/OpenRA.Mods.RA2/Projectiles/RadBeam.cs +++ b/OpenRA.Mods.RA2/Projectiles/RadBeam.cs @@ -22,13 +22,13 @@ namespace OpenRA.Mods.RA2.Projectiles public class RadBeamInfo : IProjectileInfo { [Desc("The thickness of the beam.")] - public readonly WDist Thickness = new WDist(16); + public readonly WDist Thickness = new(16); [Desc("The amplitude of the beam .")] - public readonly WDist Amplitude = new WDist(128); + public readonly WDist Amplitude = new(128); [Desc("The wavelength of the beam.")] - public readonly WDist WaveLength = new WDist(512); + public readonly WDist WaveLength = new(512); [Desc("Draw each cycle with this many quantization steps.")] public readonly int QuantizationCount = 8; @@ -99,8 +99,7 @@ public void Tick(World world) doneDamage = true; } - if (hitanim != null) - hitanim.Tick(); + hitanim?.Tick(); if (++ticks >= info.BeamDuration && animationComplete) world.AddFrameEndTask(w => w.Remove(this)); diff --git a/OpenRA.Mods.RA2/Traits/BaseSpawnerChild.cs b/OpenRA.Mods.RA2/Traits/BaseSpawnerChild.cs index 831c335d5..0e9da0e32 100644 --- a/OpenRA.Mods.RA2/Traits/BaseSpawnerChild.cs +++ b/OpenRA.Mods.RA2/Traits/BaseSpawnerChild.cs @@ -73,7 +73,7 @@ public virtual void LinkParent(Actor self, Actor parent, BaseSpawnerParent spawn this.spawnerParent = spawnerParent; } - bool TargetSwitched(Target lastTarget, Target newTarget) + static bool TargetSwitched(Target lastTarget, Target newTarget) { if (newTarget.Type != lastTarget.Type) return true; diff --git a/OpenRA.Mods.RA2/Traits/BaseSpawnerParent.cs b/OpenRA.Mods.RA2/Traits/BaseSpawnerParent.cs index 811de773e..36caba7ed 100644 --- a/OpenRA.Mods.RA2/Traits/BaseSpawnerParent.cs +++ b/OpenRA.Mods.RA2/Traits/BaseSpawnerParent.cs @@ -48,7 +48,7 @@ public class BaseSpawnerParentInfo : ConditionalTraitInfo [Desc("Name of the armaments that grants the LaunchingCondition.", "The rate of fire of the dummy weapon determines the launch cycle as each shot.")] - public readonly HashSet ArmamentNames = new HashSet() { "primary" }; + public readonly HashSet ArmamentNames = new() { "primary" }; [Desc("What happens to the children when the parent is killed?")] public readonly SpawnerChildDisposal ChildDisposalOnKill = SpawnerChildDisposal.KillChildren; @@ -70,10 +70,10 @@ public override void RulesetLoaded(Ruleset rules, ActorInfo ai) base.RulesetLoaded(rules, ai); if (InitialActorCount > Actors.Length) - throw new YamlException("InitialActorCount can't be larger than the actors defined! (Actor type = {0})".F(ai.Name)); + throw new YamlException($"InitialActorCount can't be larger than the actors defined! (Actor type = {ai.Name})"); if (InitialActorCount < -1) - throw new YamlException("InitialActorCount must be -1 or non-negative. Actor type = {0}".F(ai.Name)); + throw new YamlException($"InitialActorCount must be -1 or non-negative. Actor type = {ai.Name}"); } public override object Create(ActorInitializer init) { return new BaseSpawnerParent(init, this); } diff --git a/OpenRA.Mods.RA2/Traits/CarrierChild.cs b/OpenRA.Mods.RA2/Traits/CarrierChild.cs index 66f972493..ddac58136 100644 --- a/OpenRA.Mods.RA2/Traits/CarrierChild.cs +++ b/OpenRA.Mods.RA2/Traits/CarrierChild.cs @@ -18,7 +18,7 @@ namespace OpenRA.Mods.RA2.Traits public class CarrierChildInfo : BaseSpawnerChildInfo { [Desc("Move this close to the spawner, before entering it.")] - public readonly WDist LandingDistance = new WDist(5 * 1024); + public readonly WDist LandingDistance = new(5 * 1024); public override object Create(ActorInitializer init) { return new CarrierChild(this); } } diff --git a/OpenRA.Mods.RA2/Traits/CarrierParent.cs b/OpenRA.Mods.RA2/Traits/CarrierParent.cs index 5cac5a61a..b63f5a1cd 100644 --- a/OpenRA.Mods.RA2/Traits/CarrierParent.cs +++ b/OpenRA.Mods.RA2/Traits/CarrierParent.cs @@ -44,16 +44,16 @@ public class CarrierParentInfo : BaseSpawnerParentInfo public class CarrierParent : BaseSpawnerParent, ITick, INotifyAttack, INotifyBecomingIdle { - class CarrierChildEntry : BaseSpawnerChildEntry + sealed class CarrierChildEntry : BaseSpawnerChildEntry { public int RearmTicks = 0; public bool IsLaunched = false; public new CarrierChild SpawnerChild; } - readonly Dictionary> spawnContainTokens = new Dictionary>(); + readonly Dictionary> spawnContainTokens = new(); readonly CarrierParentInfo info; - readonly Stack loadedTokens = new Stack(); + readonly Stack loadedTokens = new(); CarrierChildEntry[] childEntries; @@ -133,11 +133,10 @@ void INotifyAttack.Attacking(Actor self, in Target target, Armament a, Barrel ba SpawnIntoWorld(self, carrierChildEntry.Actor, self.CenterPosition); - Stack spawnContainToken; - if (spawnContainTokens.TryGetValue(a.Info.Name, out spawnContainToken) && spawnContainToken.Any()) + if (spawnContainTokens.TryGetValue(a.Info.Name, out var spawnContainToken) && spawnContainToken.Count != 0) self.RevokeCondition(spawnContainToken.Pop()); - if (loadedTokens.Any()) + if (loadedTokens.Count != 0) self.RevokeCondition(loadedTokens.Pop()); var localTarget = target; diff --git a/OpenRA.Mods.RA2/Traits/ChronoResourceDelivery.cs b/OpenRA.Mods.RA2/Traits/ChronoResourceDelivery.cs index 83b13cf1f..cca885a32 100644 --- a/OpenRA.Mods.RA2/Traits/ChronoResourceDelivery.cs +++ b/OpenRA.Mods.RA2/Traits/ChronoResourceDelivery.cs @@ -84,7 +84,7 @@ void INotifyHarvesterAction.MovingToResources(Actor self, CPos targetCell) void INotifyHarvesterAction.MovingToRefinery(Actor self, Actor refineryActor) { var iao = refineryActor.Trait(); - var targetCell = refineryActor.Location + iao.DeliveryOffset; + var targetCell = self.World.Map.CellContaining(iao.DeliveryPosition); if (destination != null && destination.Value != targetCell) ticksTillCheck = 0; diff --git a/OpenRA.Mods.RA2/Traits/DamagedByTintedCells.cs b/OpenRA.Mods.RA2/Traits/DamagedByTintedCells.cs index e41a046ec..be5c3afa1 100644 --- a/OpenRA.Mods.RA2/Traits/DamagedByTintedCells.cs +++ b/OpenRA.Mods.RA2/Traits/DamagedByTintedCells.cs @@ -18,7 +18,7 @@ namespace OpenRA.Mods.RA2.Traits { [Desc("This actor receives damage when in `TintedCell` area.")] - class DamagedByTintedCellsInfo : ConditionalTraitInfo, Requires, IRulesetLoaded + sealed class DamagedByTintedCellsInfo : ConditionalTraitInfo, Requires, IRulesetLoaded { [Desc("Receive damage from the `TintedCellLayer` with this name.")] public readonly string LayerName = "radioactivity"; @@ -57,7 +57,7 @@ public override void RulesetLoaded(Ruleset rules, ActorInfo info) } } - class DamagedByTintedCells : ConditionalTrait, ITick, ISync + sealed class DamagedByTintedCells : ConditionalTrait, ITick, ISync { readonly TintedCellsLayer tintedCellLayer; diff --git a/OpenRA.Mods.RA2/Traits/MindControllable.cs b/OpenRA.Mods.RA2/Traits/MindControllable.cs index b12d6163b..9fe62704e 100644 --- a/OpenRA.Mods.RA2/Traits/MindControllable.cs +++ b/OpenRA.Mods.RA2/Traits/MindControllable.cs @@ -104,7 +104,7 @@ public void RevokeMindControl(Actor self) UnlinkMaster(self, Master); - if (info.RevokeControlSounds.Any()) + if (info.RevokeControlSounds.Length != 0) Game.Sound.Play(SoundType.World, info.RevokeControlSounds.Random(self.World.SharedRandom), self.CenterPosition); self.World.AddFrameEndTask(_ => controlChanging = false); diff --git a/OpenRA.Mods.RA2/Traits/MindController.cs b/OpenRA.Mods.RA2/Traits/MindController.cs index 477cf4f45..1826d5d69 100644 --- a/OpenRA.Mods.RA2/Traits/MindController.cs +++ b/OpenRA.Mods.RA2/Traits/MindController.cs @@ -11,7 +11,6 @@ using System; using System.Collections.Generic; -using System.Linq; using OpenRA.Mods.Common.Traits; using OpenRA.Traits; @@ -21,7 +20,7 @@ namespace OpenRA.Mods.RA2.Traits public class MindControllerInfo : PausableConditionalTraitInfo, Requires, Requires { [Desc("Name of the armaments that grant this condition.")] - public readonly HashSet ArmamentNames = new HashSet { "primary" }; + public readonly HashSet ArmamentNames = new() { "primary" }; [Desc("Up to how many units can this unit control?", "Use 0 or negative numbers for infinite.")] @@ -44,9 +43,9 @@ public class MindControllerInfo : PausableConditionalTraitInfo, Requires, INotifyAttack, INotifyKilled, INotifyActorDisposing { - readonly List slaves = new List(); + readonly List slaves = new(); - readonly Stack controllingTokens = new Stack(); + readonly Stack controllingTokens = new(); public IEnumerable Slaves => slaves; @@ -99,8 +98,7 @@ void INotifyAttack.Attacking(Actor self, in Target target, Armament a, Barrel ba if (mindControllable == null) { throw new InvalidOperationException( - "`{0}` tried to mindcontrol `{1}`, but the latter does not have the necessary trait!" - .F(self.Info.Name, target.Actor.Info.Name)); + $"`{self.Info.Name}` tried to mindcontrol `{target.Actor.Info.Name}`, but the latter does not have the necessary trait!"); } if (mindControllable.IsTraitDisabled || mindControllable.IsTraitPaused) @@ -113,7 +111,7 @@ void INotifyAttack.Attacking(Actor self, in Target target, Armament a, Barrel ba StackControllingCondition(self, Info.ControllingCondition); mindControllable.LinkMaster(target.Actor, self); - if (Info.Sounds.Any()) + if (Info.Sounds.Length != 0) Game.Sound.Play(SoundType.World, Info.Sounds.Random(self.World.SharedRandom), self.CenterPosition); if (Info.Capacity > 0 && Info.DiscardOldest && slaves.Count > Info.Capacity) @@ -131,7 +129,7 @@ void ReleaseSlaves(Actor self) } slaves.Clear(); - while (controllingTokens.Any()) + while (controllingTokens.Count != 0) UnstackControllingCondition(self, Info.ControllingCondition); } diff --git a/OpenRA.Mods.RA2/Traits/Mirage.cs b/OpenRA.Mods.RA2/Traits/Mirage.cs index 7fd5bc0d1..332ba904a 100644 --- a/OpenRA.Mods.RA2/Traits/Mirage.cs +++ b/OpenRA.Mods.RA2/Traits/Mirage.cs @@ -21,12 +21,12 @@ public class MirageTargetInfo : TraitInfo { } public class MirageTarget { } [Desc("Overrides the default Tooltip to aid in deceiving enemy players.")] - class MirageTooltipInfo : TooltipInfo, Requires + sealed class MirageTooltipInfo : TooltipInfo, Requires { public override object Create(ActorInitializer init) { return new MirageTooltip(init.Self, this); } } - class MirageTooltip : ConditionalTrait, ITooltip + sealed class MirageTooltip : ConditionalTrait, ITooltip { readonly Actor self; readonly Mirage mirage; @@ -94,16 +94,14 @@ public class MirageInfo : PausableConditionalTraitInfo public override object Create(ActorInitializer init) { return new Mirage(init, this); } } - public class Mirage : PausableConditionalTrait, INotifyDamage, IEffectiveOwner, INotifyUnload, INotifyDemolition, INotifyInfiltration, - INotifyAttack, ITick, INotifyCreated, INotifyHarvesterAction + public class Mirage : PausableConditionalTrait, INotifyDamage, IEffectiveOwner, INotifyDemolition, INotifyInfiltration, + INotifyAttack, ITick, INotifyCreated { readonly Actor self; [Sync] int remainingTime; - bool isDocking; - CPos? lastPos; bool wasMirage; int mirageToken = Actor.InvalidConditionToken; @@ -123,7 +121,7 @@ public Mirage(ActorInitializer init, MirageInfo info) var targets = self.World.ActorsWithTrait().Distinct(); var targetTypes = targets.Select(a => a.Actor.Info).ToArray(); - if (!targetTypes.Any() && info.DefaultTargetTypes != null) + if (targetTypes.Length == 0 && info.DefaultTargetTypes != null) targetTypes = self.World.Map.Rules.Actors.Where(a => info.DefaultTargetTypes.Contains(a.Key)).Select(a => a.Value).ToArray(); ActorType = targetTypes.RandomOrDefault(self.World.SharedRandom); @@ -170,7 +168,7 @@ void ITick.Tick(Actor self) { if (!IsTraitDisabled && !IsTraitPaused) { - if (remainingTime > 0 && !isDocking) + if (remainingTime > 0) remainingTime--; if (Info.RevealOn.HasFlag(MirageRevealType.Move) && (lastPos == null || lastPos.Value != self.Location)) @@ -202,34 +200,6 @@ protected override void TraitEnabled(Actor self) protected override void TraitDisabled(Actor self) { Reveal(); } - void INotifyHarvesterAction.MovingToResources(Actor self, CPos targetCell) { } - - void INotifyHarvesterAction.MovingToRefinery(Actor self, Actor refineryActor) { } - - void INotifyHarvesterAction.MovementCancelled(Actor self) { } - - void INotifyHarvesterAction.Harvested(Actor self, string resourceType) { } - - void INotifyHarvesterAction.Docked() - { - if (Info.RevealOn.HasFlag(MirageRevealType.Dock)) - { - isDocking = true; - Reveal(); - } - } - - void INotifyHarvesterAction.Undocked() - { - isDocking = false; - } - - void INotifyUnload.Unloading(Actor self) - { - if (Info.RevealOn.HasFlag(MirageRevealType.Unload)) - Reveal(); - } - void INotifyDemolition.Demolishing(Actor self) { if (Info.RevealOn.HasFlag(MirageRevealType.Demolish)) diff --git a/OpenRA.Mods.RA2/Traits/PeriodicExplosion.cs b/OpenRA.Mods.RA2/Traits/PeriodicExplosion.cs index da97e875e..6c340f17d 100644 --- a/OpenRA.Mods.RA2/Traits/PeriodicExplosion.cs +++ b/OpenRA.Mods.RA2/Traits/PeriodicExplosion.cs @@ -1,4 +1,4 @@ -#region Copyright & License Information +#region Copyright & License Information /* * Copyright (c) The OpenRA Developers and Contributors * This file is part of OpenRA, which is free software. It is made @@ -44,18 +44,18 @@ void IRulesetLoaded.RulesetLoaded(Ruleset rules, ActorInfo info) { var weaponToLower = Weapon.ToLowerInvariant(); if (!rules.Weapons.TryGetValue(weaponToLower, out var weaponInfo)) - throw new YamlException("Weapons Ruleset does not contain an entry '{0}'".F(weaponToLower)); + throw new YamlException($"Weapons Ruleset does not contain an entry '{weaponToLower}'"); WeaponInfo = weaponInfo; } } - class PeriodicExplosion : ConditionalTrait, ITick, INotifyCreated + public class PeriodicExplosion : ConditionalTrait, ITick, INotifyCreated { readonly PeriodicExplosionInfo info; readonly WeaponInfo weapon; readonly BodyOrientation body; - readonly List<(int Ticks, Action Action)> delayedActions = new List<(int, Action)>(); + readonly List<(int Ticks, Action Action)> delayedActions = new(); int fireDelay; int burst; @@ -112,10 +112,10 @@ void ITick.Tick(Actor self) weapon.Impact(args.WeaponTarget, args); - if (weapon.Report != null && weapon.Report.Any()) + if (weapon.Report != null && weapon.Report.Length != 0) Game.Sound.Play(SoundType.World, weapon.Report.Random(self.World.SharedRandom), self.CenterPosition); - if (burst == weapon.Burst && weapon.StartBurstReport != null && weapon.StartBurstReport.Any()) + if (burst == weapon.Burst && weapon.StartBurstReport != null && weapon.StartBurstReport.Length != 0) Game.Sound.Play(SoundType.World, weapon.StartBurstReport.Random(self.World.SharedRandom), self.CenterPosition); if (--burst > 0) @@ -132,11 +132,9 @@ void ITick.Tick(Actor self) fireDelay = Util.ApplyPercentageModifiers(weapon.ReloadDelay, modifiers); burst = weapon.Burst; - if (weapon.AfterFireSound != null && weapon.AfterFireSound.Any()) - { + if (weapon.AfterFireSound != null && weapon.AfterFireSound.Length != 0) ScheduleDelayedAction(weapon.AfterFireSoundDelay, () => Game.Sound.Play(SoundType.World, weapon.AfterFireSound.Random(self.World.SharedRandom), self.CenterPosition)); - } } } } diff --git a/OpenRA.Mods.RA2/Traits/Render/WithMindControlArc.cs b/OpenRA.Mods.RA2/Traits/Render/WithMindControlArc.cs index b972d397e..a9da9ff88 100644 --- a/OpenRA.Mods.RA2/Traits/Render/WithMindControlArc.cs +++ b/OpenRA.Mods.RA2/Traits/Render/WithMindControlArc.cs @@ -29,13 +29,13 @@ public class WithMindControlArcInfo : TraitInfo public readonly int Transparency = 255; [Desc("Relative offset from the actor's center position where the arc should start.")] - public readonly WVec Offset = new WVec(0, 0, 0); + public readonly WVec Offset = new(0, 0, 0); [Desc("The angle of the arc.")] - public readonly WAngle Angle = new WAngle(64); + public readonly WAngle Angle = new(64); [Desc("The width of the arc.")] - public readonly WDist Width = new WDist(43); + public readonly WDist Width = new(43); [Desc("Controls how fine-grained the resulting arc should be.")] public readonly int QuantizedSegments = 16; diff --git a/OpenRA.Mods.RA2/Traits/Render/WithMirageSpriteBody.cs b/OpenRA.Mods.RA2/Traits/Render/WithMirageSpriteBody.cs index 530bc5ab1..e6f0bf3f4 100644 --- a/OpenRA.Mods.RA2/Traits/Render/WithMirageSpriteBody.cs +++ b/OpenRA.Mods.RA2/Traits/Render/WithMirageSpriteBody.cs @@ -15,12 +15,12 @@ namespace OpenRA.Mods.RA2.Traits.Render { [Desc("Creates the illusion of another actor.")] - class WithMirageSpriteBodyInfo : WithSpriteBodyInfo, Requires + sealed class WithMirageSpriteBodyInfo : WithSpriteBodyInfo, Requires { public override object Create(ActorInitializer init) { return new WithMirageSpriteBody(init, this); } } - class WithMirageSpriteBody : WithSpriteBody, ITick + sealed class WithMirageSpriteBody : WithSpriteBody, ITick { readonly Mirage mirage; readonly RenderSprites renderSprites; diff --git a/OpenRA.Mods.RA2/Traits/WeatherControlSupportPower.cs b/OpenRA.Mods.RA2/Traits/WeatherControlSupportPower.cs index 10cf57605..ee40525ac 100644 --- a/OpenRA.Mods.RA2/Traits/WeatherControlSupportPower.cs +++ b/OpenRA.Mods.RA2/Traits/WeatherControlSupportPower.cs @@ -39,10 +39,10 @@ public class WeatherControlSupportPowerInfo : SupportPowerInfo, IRulesetLoaded public readonly int ScatterCount = 1; [Desc("Spawn offset interval for the clouds relative to the target in X direction.")] - public int2 OffsetsX = new int2(-5120, 5120); + public int2 OffsetsX = new(-5120, 5120); [Desc("Spawn offset interval for the clouds relative to the target in Y direction.")] - public int2 OffsetsY = new int2(-5120, 5120); + public int2 OffsetsY = new(-5120, 5120); public override object Create(ActorInitializer init) { @@ -53,10 +53,9 @@ public override object Create(ActorInitializer init) public override void RulesetLoaded(Ruleset rules, ActorInfo ai) { - WeaponInfo weapon; var weaponToLower = (Weapon ?? string.Empty).ToLowerInvariant(); - if (!rules.Weapons.TryGetValue(weaponToLower, out weapon)) - throw new YamlException("Weapons Ruleset does not contain an entry '{0}'".F(weaponToLower)); + if (!rules.Weapons.TryGetValue(weaponToLower, out var weapon)) + throw new YamlException($"Weapons Ruleset does not contain an entry '{weaponToLower}'"); WeaponInfo = weapon; @@ -150,7 +149,7 @@ void ITick.Tick(Actor self) } } - if (info.WeaponInfo.Report != null && info.WeaponInfo.Report.Any()) + if (info.WeaponInfo.Report != null && info.WeaponInfo.Report.Length != 0) Game.Sound.Play(SoundType.World, info.WeaponInfo.Report.Random(self.World.LocalRandom), targetPos); } } diff --git a/OpenRA.Mods.RA2/Traits/World/TintedCellsLayer.cs b/OpenRA.Mods.RA2/Traits/World/TintedCellsLayer.cs index efa2d11ec..c64ba1e74 100644 --- a/OpenRA.Mods.RA2/Traits/World/TintedCellsLayer.cs +++ b/OpenRA.Mods.RA2/Traits/World/TintedCellsLayer.cs @@ -64,13 +64,13 @@ public class TintedCellsLayer : INotifyActorDisposing, ITick, ITickRender // In the following, I think dictionary is better than array, as radioactivity has similar affecting area as smudges. // Tiles without considering fog of war. - readonly Dictionary tiles = new Dictionary(); + readonly Dictionary tiles = new(); // What's visible to the player. - readonly Dictionary renderedTiles = new Dictionary(); + readonly Dictionary renderedTiles = new(); // Dirty, as in cache dirty bits. - readonly HashSet dirty = new HashSet(); + readonly HashSet dirty = new(); // There's LERP function but the problem is, it is better to reuse these constants than computing // related constants (in LERP) every time. @@ -125,16 +125,16 @@ void ITickRender.TickRender(WorldRenderer wr, Actor self) if (self.World.FogObscures(c)) continue; - if (renderedTiles.ContainsKey(c)) + if (renderedTiles.TryGetValue(c, out var renderedTile)) { - world.Remove(renderedTiles[c]); + world.Remove(renderedTile); renderedTiles.Remove(c); } - // synchronize observations with true value. - if (tiles.ContainsKey(c)) + // Synchronize observations with true value. + if (tiles.TryGetValue(c, out var tile)) { - renderedTiles[c] = new TintedCell(tiles[c]); + renderedTiles[c] = new TintedCell(tile); world.Add(renderedTiles[c]); } @@ -147,11 +147,11 @@ void ITickRender.TickRender(WorldRenderer wr, Actor self) public int GetLevel(CPos cell) { - if (!tiles.ContainsKey(cell)) + if (!tiles.TryGetValue(cell, out var tile)) return 0; // The damage is constrained by MaxLevel - var level = tiles[cell].Level; + var level = tile.Level; if (level > Info.MaxLevel) return Info.MaxLevel; else diff --git a/OpenRA.Mods.RA2/UtilityCommands/ImportRA2MapCommand.cs b/OpenRA.Mods.RA2/UtilityCommands/ImportRA2MapCommand.cs index f3ec6cc4a..9fabfb596 100644 --- a/OpenRA.Mods.RA2/UtilityCommands/ImportRA2MapCommand.cs +++ b/OpenRA.Mods.RA2/UtilityCommands/ImportRA2MapCommand.cs @@ -24,12 +24,12 @@ namespace OpenRA.Mods.RA2.UtilityCommands { - class ImportRA2MapCommand : IUtilityCommand + sealed class ImportRA2MapCommand : IUtilityCommand { string IUtilityCommand.Name { get { return "--import-ra2-map"; } } bool IUtilityCommand.ValidateArguments(string[] args) { return args.Length >= 2; } - static readonly Dictionary OverlayToActor = new Dictionary() + static readonly Dictionary OverlayToActor = new() { { 0x01, "gasand" }, { 0x03, "gawall" }, @@ -154,7 +154,7 @@ class ImportRA2MapCommand : IUtilityCommand { 0xF2, "crate" }, // wcrate (water crate) }; - static readonly Dictionary OverlayShapes = new Dictionary() + static readonly Dictionary OverlayShapes = new() { { 0x4A, new Size(1, 3) }, { 0x4B, new Size(1, 3) }, @@ -222,7 +222,7 @@ class ImportRA2MapCommand : IUtilityCommand { 0xEC, new Size(3, 1) }, }; - static readonly Dictionary OverlayToHealth = new Dictionary() + static readonly Dictionary OverlayToHealth = new() { // 1,3 wooden bridge tiles { 0x4A, DamageState.Undamaged }, @@ -309,7 +309,7 @@ class ImportRA2MapCommand : IUtilityCommand { 0xE8, DamageState.Undamaged }, }; - static readonly Dictionary ResourceFromOverlay = new Dictionary() + static readonly Dictionary ResourceFromOverlay = new() { // Ore { @@ -342,7 +342,7 @@ class ImportRA2MapCommand : IUtilityCommand "INYELWLAMP", "PURPLAMP", "INPURPLAMP", "INORANLAMP", "INGRNLMP", "INREDLMP", "INBLULMP" }; - static readonly Dictionary ReplaceActors = new Dictionary() + static readonly Dictionary ReplaceActors = new() { { "adog", "dog" } }; @@ -599,10 +599,8 @@ static void ReadTerrainActors(Map map, IniFile file, int2 fullSize) var cell = new MPos(dx / 2, dy).ToCPos(map); var name = kv.Value.ToLowerInvariant(); - if (ReplaceActors.ContainsKey(name)) - { - name = ReplaceActors[name]; - } + if (ReplaceActors.TryGetValue(name, out var newName)) + name = newName; var ar = new ActorReference(name) { @@ -713,7 +711,7 @@ static void ReadLighting(Map map, IniFile file) { map.RuleDefinitions.Nodes.Add(new MiniYamlNode("^BaseWorld", new MiniYaml("", new List() { - new MiniYamlNode("TerrainLighting", new MiniYaml("", lightingNodes)) + new("TerrainLighting", new MiniYaml("", lightingNodes)) }))); } } @@ -741,11 +739,11 @@ static void ReadLamps(Map map, IniFile file) var visibility = FieldLoader.GetValue(kv.Key, kv.Value); lightingNodes.Add(new MiniYamlNode("Range", FieldSaver.FormatValue(new WDist(visibility * 4)))); } - else if (lightingTypes.ContainsKey(kv.Key)) + else if (lightingTypes.TryGetValue(kv.Key, out var lightingType)) { // Some maps use "," instead of "."! var value = FieldLoader.GetValue(kv.Key, kv.Value.Replace(',', '.')); - lightingNodes.Add(new MiniYamlNode(lightingTypes[kv.Key], FieldSaver.FormatValue(value))); + lightingNodes.Add(new MiniYamlNode(lightingType, FieldSaver.FormatValue(value))); } } @@ -753,7 +751,7 @@ static void ReadLamps(Map map, IniFile file) { map.RuleDefinitions.Nodes.Add(new MiniYamlNode(lamp, new MiniYaml("", new List() { - new MiniYamlNode("TerrainLightSource", new MiniYaml("", lightingNodes)) + new("TerrainLightSource", new MiniYaml("", lightingNodes)) }))); } } diff --git a/OpenRA.Mods.RA2/Warheads/CreateTintedCellsWarhead.cs b/OpenRA.Mods.RA2/Warheads/CreateTintedCellsWarhead.cs index 552cdf467..e9d51abfe 100644 --- a/OpenRA.Mods.RA2/Warheads/CreateTintedCellsWarhead.cs +++ b/OpenRA.Mods.RA2/Warheads/CreateTintedCellsWarhead.cs @@ -22,7 +22,7 @@ namespace OpenRA.Mods.RA2.Warheads public class CreateTintedCellsWarhead : DamageWarhead, IRulesetLoaded { [Desc("Range between falloff steps in cells.")] - public readonly WDist Spread = new WDist(1024); + public readonly WDist Spread = new(1024); [Desc("Level percentage at each range step.")] public readonly int[] Falloff = { 100, 37, 14, 5, 0 }; diff --git a/OpenRA.Mods.RA2/Widgets/PowerMeterWidget.cs b/OpenRA.Mods.RA2/Widgets/PowerMeterWidget.cs index 3d3eac82b..22bf28036 100644 --- a/OpenRA.Mods.RA2/Widgets/PowerMeterWidget.cs +++ b/OpenRA.Mods.RA2/Widgets/PowerMeterWidget.cs @@ -175,8 +175,8 @@ public override void Tick() // Display a percentage if the bar is maxed out if (totalPowerStep > Children.Count) { - var powerFraction = (float)Children.Count / (float)totalPowerStep; - totalPowerDisplay = (int)((float)totalPowerDisplay * powerFraction); + var powerFraction = Children.Count / (float)totalPowerStep; + totalPowerDisplay = (int)(totalPowerDisplay * powerFraction); totalPowerStep = (int)((float)totalPowerStep * powerFraction); powerUsedStep = (int)((float)powerUsedStep * powerFraction); powerAvailableStep = (int)((float)powerAvailableStep * powerFraction); @@ -186,8 +186,7 @@ public override void Tick() for (var i = 0; i < Children.Count; i++) { - var image = Children[i] as ImageWidget; - if (image == null) + if (Children[i] is not ImageWidget image) continue; if (i > totalPowerStep || totalPowerStep == 0) diff --git a/launch-dedicated.cmd b/launch-dedicated.cmd index 58dca9a89..c346a9574 100644 --- a/launch-dedicated.cmd +++ b/launch-dedicated.cmd @@ -1,8 +1,9 @@ -:: example launch script, see https://github.com/OpenRA/OpenRA/wiki/Dedicated for details +:: example launch script, see https://github.com/OpenRA/OpenRA/wiki/Dedicated-Server for details @echo on set Name="Dedicated Server" +set Map="" set ListenPort=1234 set AdvertiseOnline=True set Password="" @@ -18,7 +19,7 @@ set EnableGeoIP=True set EnableLintChecks=True set ShareAnonymizedIPs=True -set JoinChatDelay=5000 +set FloodLimitJoinCooldown=5000 @echo off setlocal EnableDelayedExpansion @@ -37,7 +38,7 @@ if not exist %ENGINE_DIRECTORY%\bin\OpenRA.exe goto noengine cd %ENGINE_DIRECTORY% :loop -bin\OpenRA.Server.exe Game.Mod=%MOD_ID% Engine.EngineDir=".." Server.Name=%Name% Server.ListenPort=%ListenPort% Server.AdvertiseOnline=%AdvertiseOnline% Server.EnableSingleplayer=%EnableSingleplayer% Server.Password=%Password% Server.RequireAuthentication=%RequireAuthentication% Server.RecordReplays=%RecordReplays% Server.ProfileIDBlacklist=%ProfileIDBlacklist% Server.ProfileIDWhitelist=%ProfileIDWhitelist% Server.EnableSyncReports=%EnableSyncReports% Server.EnableGeoIP=%EnableGeoIP% Server.ShareAnonymizedIPs=%ShareAnonymizedIPs% Server.EnableLintChecks=%EnableLintChecks% Engine.SupportDir=%SupportDir% Server.JoinChatDelay=%JoinChatDelay% +bin\OpenRA.Server.exe Game.Mod=%MOD_ID% Engine.EngineDir=".." Server.Name=%Name% Server.Map=%Map% Server.ListenPort=%ListenPort% Server.AdvertiseOnline=%AdvertiseOnline% Server.EnableSingleplayer=%EnableSingleplayer% Server.Password=%Password% Server.RequireAuthentication=%RequireAuthentication% Server.RecordReplays=%RecordReplays% Server.ProfileIDBlacklist=%ProfileIDBlacklist% Server.ProfileIDWhitelist=%ProfileIDWhitelist% Server.EnableSyncReports=%EnableSyncReports% Server.EnableGeoIP=%EnableGeoIP% Server.ShareAnonymizedIPs=%ShareAnonymizedIPs% Server.EnableLintChecks=%EnableLintChecks% Engine.SupportDir=%SupportDir% Server.FloodLimitJoinCooldown=%FloodLimitJoinCooldown% goto loop :noengine diff --git a/launch-dedicated.sh b/launch-dedicated.sh index ae52ac832..d965ab693 100755 --- a/launch-dedicated.sh +++ b/launch-dedicated.sh @@ -50,6 +50,7 @@ fi NAME="${Name:-"Dedicated Server"}" LAUNCH_MOD="${Mod:-"${MOD_ID}"}" +MAP="${Map:-""}" LISTEN_PORT="${ListenPort:-"1234"}" ADVERTISE_ONLINE="${AdvertiseOnline:-"True"}" PASSWORD="${Password:-""}" @@ -65,7 +66,7 @@ ENABLE_GEOIP="${EnableGeoIP:-"True"}" ENABLE_LINT_CHECKS="${EnableLintChecks:-"True"}" SHARE_ANONYMISED_IPS="${ShareAnonymizedIPs:-"True"}" -JOIN_CHAT_DELAY="${JoinChatDelay:-"5000"}" +FLOOD_LIMIT_JOIN_COOLDOWN="${FloodLimitJoinCooldown:-"5000"}" SUPPORT_DIR="${SupportDir:-""}" @@ -79,9 +80,10 @@ fi cd "${ENGINE_DIRECTORY}" while true; do - MOD_SEARCH_PATHS="${MOD_SEARCH_PATHS}" + MOD_SEARCH_PATHS="${MOD_SEARCH_PATHS}" \ ${RUNTIME_LAUNCHER} bin/OpenRA.Server.dll Engine.EngineDir=".." Game.Mod="${LAUNCH_MOD}" \ Server.Name="${NAME}" \ + Server.Map="${MAP}" \ Server.ListenPort="${LISTEN_PORT}" \ Server.AdvertiseOnline="${ADVERTISE_ONLINE}" \ Server.Password="${PASSWORD}" \ @@ -94,6 +96,6 @@ while true; do Server.EnableGeoIP="${ENABLE_GEOIP}" \ Server.EnableLintChecks="${ENABLE_LINT_CHECKS}" \ Server.ShareAnonymizedIPs="${SHARE_ANONYMISED_IPS}" \ - Server.JoinChatDelay="${JOIN_CHAT_DELAY}" \ + Server.FloodLimitJoinCooldown="${FLOOD_LIMIT_JOIN_COOLDOWN}" \ Engine.SupportDir="${SUPPORT_DIR}" done diff --git a/make.ps1 b/make.ps1 index 4bf144a91..548adbee3 100644 --- a/make.ps1 +++ b/make.ps1 @@ -118,8 +118,9 @@ function Check-Command Write-Host "Compiling $modID in Debug configuration..." -ForegroundColor Cyan - # Enabling EnforceCodeStyleInBuild and GenerateDocumentationFile as a workaround for some code style rules (in particular IDE0005) being bugged and not reporting warnings/errors otherwise. - dotnet build -c Debug --nologo -warnaserror -p:TargetPlatform=win-x64 -p:EnforceCodeStyleInBuild=true -p:GenerateDocumentationFile=true + dotnet clean -c Debug --nologo --verbosity minimal + dotnet build -c Debug --nologo -warnaserror -p:TargetPlatform=win-x64 + if ($lastexitcode -ne 0) { Write-Host "Build failed." -ForegroundColor Red diff --git a/mod.config b/mod.config index 5b38eec9f..813550724 100644 --- a/mod.config +++ b/mod.config @@ -4,7 +4,7 @@ MOD_ID="ra2" -ENGINE_VERSION="release-20230225" +ENGINE_VERSION="release-20231010" ########################### # Packaging Configuration # diff --git a/mods/ra2/installer/firstdecade.yaml b/mods/ra2/installer/firstdecade.yaml index 4effe34d2..95572a73e 100644 --- a/mods/ra2/installer/firstdecade.yaml +++ b/mods/ra2/installer/firstdecade.yaml @@ -1,4 +1,5 @@ tfd: C&C The First Decade (English) + Type: Disc IDFiles: data1.hdr: bef3a08c3fc1b1caf28ca0dbb97c1f900005930e data7.cab: 49ded3814a0463874994a1af578559388811a85a diff --git a/mods/ra2/installer/origin.yaml b/mods/ra2/installer/origin.yaml index e07d2c7e0..c1305d270 100644 --- a/mods/ra2/installer/origin.yaml +++ b/mods/ra2/installer/origin.yaml @@ -6,7 +6,16 @@ origin: C&C The Ultimate Collection (Origin version, English) IDFiles: theme.mix: 184f99e3292ab19c71c08a1ad7097ce739396190 Install: - copy: . - ^SupportDir|Content/ra2/theme.mix: theme.mix - ^SupportDir|Content/ra2/ra2.mix: ra2.mix - ^SupportDir|Content/ra2/language.mix: language.mix + # Base game files: + ContentPackage: + Name: base + Actions: + Copy: . + ^SupportDir|Content/ra2/ra2.mix: ra2.mix + ^SupportDir|Content/ra2/language.mix: language.mix + # Game music (optional): + ContentPackage: + Name: music + Actions: + Copy: . + ^SupportDir|Content/ra2/theme.mix: theme.mix diff --git a/mods/ra2/installer/ra2.yaml b/mods/ra2/installer/ra2.yaml index 4cc9d561c..10368a34d 100644 --- a/mods/ra2/installer/ra2.yaml +++ b/mods/ra2/installer/ra2.yaml @@ -1,9 +1,18 @@ ra2: Red Alert 2 (Allied or Soviet Disc, English) + Type: Disc IDFiles: README.txt: e125e2742509d73b20dc4aa65b22497c805cd6f5 Install: - copy: . - ^SupportDir|Content/ra2/theme.mix: theme.mix - extract-mscab: INSTALL/Game1.CAB - ^SupportDir|Content/ra2/ra2.mix: ra2.mix - ^SupportDir|Content/ra2/language.mix: language.mix + # Base game files: + ContentPackage: + Name: base + Actions: + ExtractMscab: INSTALL/Game1.CAB + ^SupportDir|Content/ra2/ra2.mix: ra2.mix + ^SupportDir|Content/ra2/language.mix: language.mix + # Game music (optional): + ContentPackage: + Name: music + Actions: + Copy: . + ^SupportDir|Content/ra2/theme.mix: theme.mix diff --git a/mods/ra2/languages/rules/en.ftl b/mods/ra2/languages/rules/en.ftl new file mode 100644 index 000000000..41e843141 --- /dev/null +++ b/mods/ra2/languages/rules/en.ftl @@ -0,0 +1,20 @@ +## Player +options-tech-level = + .infantry-only = Infantry Only + .low = Low + .medium = Medium + .unrestricted = Unrestricted + +checkbox-redeployable-mcvs = + .label = Redeployable MCVs + .description = Allow undeploying Construction Yard + +## World +options-starting-units = + .mcv-only = MCV Only + .light = Light + .medium = Medium + .heavy = Heavy + +options-difficulty = + .normal = Normal diff --git a/mods/ra2/mod.yaml b/mods/ra2/mod.yaml index c043bf7bb..b828bc306 100644 --- a/mods/ra2/mod.yaml +++ b/mods/ra2/mod.yaml @@ -199,6 +199,8 @@ Music: Translations: common|languages/en.ftl + common|languages/rules/en.ftl + ra2|languages/rules/en.ftl Hotkeys: common|hotkeys/game.yaml @@ -271,7 +273,7 @@ VideoFormats: Vqa TerrainFormat: DefaultTerrain -SpriteSequenceFormat: ExtendedTilesetSpecificSpriteSequence +SpriteSequenceFormat: TilesetSpecificSpriteSequence TilesetExtensions: TEMPERATE: .tem SNOW: .sno @@ -296,27 +298,27 @@ GameSpeeds: DefaultSpeed: default Speeds: slowest: - Name: slowest + Name: options-game-speed.slowest Timestep: 80 OrderLatency: 2 slower: - Name: slower + Name: options-game-speed.slower Timestep: 50 OrderLatency: 3 default: - Name: normal + Name: options-game-speed.normal Timestep: 40 OrderLatency: 3 fast: - Name: fast + Name: options-game-speed.fast Timestep: 35 OrderLatency: 4 faster: - Name: faster + Name: options-game-speed.faster Timestep: 30 OrderLatency: 4 fastest: - Name: fastest + Name: options-game-speed.fastest Timestep: 20 OrderLatency: 6 @@ -324,11 +326,15 @@ ModContent: InstallPromptMessage: Red Alert 2 requires artwork and audio from the original game. HeaderMessage: The original game content must be copied from an original game disc. Packages: - base: Base Game Files + ContentPackage@base: + Title: Base Game Files + Identifier: base TestFiles: ^SupportDir|Content/ra2/ra2.mix, ^SupportDir|Content/ra2/language.mix Sources: ra2, origin, tfd Required: true - music: Base Game Music + ContentPackage@music: + Title: Game Music + Identifier: music TestFiles: ^SupportDir|Content/ra2/theme.mix Sources: ra2, origin, tfd Sources: diff --git a/mods/ra2/rules/allied-infantry.yaml b/mods/ra2/rules/allied-infantry.yaml index 923280fd8..423d55d49 100644 --- a/mods/ra2/rules/allied-infantry.yaml +++ b/mods/ra2/rules/allied-infantry.yaml @@ -22,7 +22,7 @@ engineer: HP: 75 Passenger: CustomPipType: blue - EngineerRepair: + InstantlyRepairs: RepairsBridges: RepairNotification: BridgeRepaired Captures: diff --git a/mods/ra2/rules/allied-structures.yaml b/mods/ra2/rules/allied-structures.yaml index ad80f875d..f7874428d 100644 --- a/mods/ra2/rules/allied-structures.yaml +++ b/mods/ra2/rules/allied-structures.yaml @@ -230,7 +230,7 @@ garefn: Type: Wood RevealsShroud: Range: 6c0 - TiberianSunRefinery: + Refinery: DockOffset: 3,1 ShowTicks: True TickLifetime: 30 diff --git a/mods/ra2/rules/defaults.yaml b/mods/ra2/rules/defaults.yaml index ab398b364..990f8dcdc 100644 --- a/mods/ra2/rules/defaults.yaml +++ b/mods/ra2/rules/defaults.yaml @@ -360,7 +360,7 @@ Weapon: BuildingExplode RepairableBuilding: RepairingNotification: Repairing - EngineerRepairable: + InstantlyRepairable: SpawnActorsOnSell@allies: ActorTypes: e1, e1, e1 Factions: america, germany, england, france, korea diff --git a/mods/ra2/rules/misc.yaml b/mods/ra2/rules/misc.yaml index 3dc216cf3..c26e1ed99 100644 --- a/mods/ra2/rules/misc.yaml +++ b/mods/ra2/rules/misc.yaml @@ -49,12 +49,12 @@ crate: Sequence: reveal-map LevelUpCrateAction: SelectionShares: 25 - GiveMcvCrateAction@soviets: + GiveBaseBuilderCrateAction@soviets: SelectionShares: 0 NoBaseSelectionShares: 150 ValidFactions: cuba, libya, iraq, russia Units: smcv - GiveMcvCrateAction@allied: + GiveBaseBuilderCrateAction@allied: SelectionShares: 0 NoBaseSelectionShares: 150 ValidFactions: america, germany, england, france, korea diff --git a/mods/ra2/rules/player.yaml b/mods/ra2/rules/player.yaml index 8d17636b4..940a0f574 100644 --- a/mods/ra2/rules/player.yaml +++ b/mods/ra2/rules/player.yaml @@ -97,8 +97,8 @@ Player: FogCheckboxDisplayOrder: 3 LobbyPrerequisiteCheckbox@GLOBALFACTUNDEPLOY: ID: factundeploy - Label: Redeployable MCVs - Description: Allow undeploying Construction Yard. + Label: checkbox-redeployable-mcvs.label + Description: checkbox-redeployable-mcvs.description Enabled: True DisplayOrder: 7 Prerequisites: global-factundeploy @@ -115,19 +115,19 @@ Player: ArrowSequence: CircleSequence: ProvidesTechPrerequisite@infonly: - Name: Infantry Only + Name: options-tech-level.infantry-only Prerequisites: techlevel.infonly Id: infantryonly ProvidesTechPrerequisite@low: - Name: Low + Name: options-tech-level.low Prerequisites: techlevel.infonly, techlevel.low Id: low ProvidesTechPrerequisite@medium: - Name: Medium + Name: options-tech-level.medium Prerequisites: techlevel.infonly, techlevel.low, techlevel.medium Id: medium ProvidesTechPrerequisite@unrestricted: - Name: Unrestricted + Name: options-tech-level.unrestricted Prerequisites: techlevel.infonly, techlevel.low, techlevel.medium, techlevel.unrestricted Id: unrestricted GrantConditionOnPrerequisiteManager: diff --git a/mods/ra2/rules/soviet-structures.yaml b/mods/ra2/rules/soviet-structures.yaml index f6d1ef210..b709f75a1 100644 --- a/mods/ra2/rules/soviet-structures.yaml +++ b/mods/ra2/rules/soviet-structures.yaml @@ -245,7 +245,7 @@ narefn: Type: Wood RevealsShroud: Range: 6c0 - TiberianSunRefinery: + Refinery: DockOffset: 3, 1 ShowTicks: True TickLifetime: 30 diff --git a/mods/ra2/rules/tech-structures.yaml b/mods/ra2/rules/tech-structures.yaml index a22f6209b..5c79489fd 100644 --- a/mods/ra2/rules/tech-structures.yaml +++ b/mods/ra2/rules/tech-structures.yaml @@ -6,7 +6,7 @@ caoild: Building: Footprint: xx xx Dimensions: 2, 2 - EngineerRepairable: + InstantlyRepairable: CashTrickler: Interval: 100 Amount: 20 diff --git a/mods/ra2/rules/world.yaml b/mods/ra2/rules/world.yaml index 4f68daa6a..1de62d382 100644 --- a/mods/ra2/rules/world.yaml +++ b/mods/ra2/rules/world.yaml @@ -266,13 +266,13 @@ World: CreateMapPlayers: StartingUnits@amcv: Class: none - ClassName: MCV Only + ClassName: options-starting-units.mcv-only Factions: allies, america, germany, england, france, korea BaseActor: amcv BaseActorFacing: 896 StartingUnits@lightallies: Class: light - ClassName: Light Support + ClassName: options-starting-units.light Factions: allies, america, germany, england, france, korea BaseActor: amcv BaseActorFacing: 896 @@ -282,7 +282,7 @@ World: OuterSupportRadius: 5 StartingUnits@mediumallies: Class: medium - ClassName: Medium Support + ClassName: options-starting-units.medium Factions: allies, america, germany, england, france, korea BaseActor: amcv BaseActorFacing: 896 @@ -292,7 +292,7 @@ World: OuterSupportRadius: 5 StartingUnits@heavyallies: Class: heavy - ClassName: Heavy Support + ClassName: options-starting-units.heavy Factions: allies, america, germany, england, france, korea BaseActor: amcv BaseActorFacing: 896 @@ -302,13 +302,13 @@ World: OuterSupportRadius: 5 StartingUnits@smcv: Class: none - ClassName: MCV Only + ClassName: options-starting-units.mcv-only Factions: soviets, cuba, libya, iraq, russia BaseActor: smcv BaseActorFacing: 896 StartingUnits@lightsoviets: Class: light - ClassName: Light Support + ClassName: options-starting-units.light Factions: soviets, cuba, libya, iraq, russia BaseActor: smcv BaseActorFacing: 896 @@ -318,7 +318,7 @@ World: OuterSupportRadius: 5 StartingUnits@mediumsoviets: Class: medium - ClassName: Medium Support + ClassName: options-starting-units.medium Factions: soviets, cuba, libya, iraq, russia BaseActor: smcv BaseActorFacing: 896 @@ -328,7 +328,7 @@ World: OuterSupportRadius: 5 StartingUnits@heavysoviets: Class: heavy - ClassName: Heavy Support + ClassName: options-starting-units.heavy Factions: soviets, cuba, libya, iraq, russia BaseActor: smcv BaseActorFacing: 896 @@ -370,8 +370,7 @@ World: HierarchicalPathFinderOverlay: ColorPickerManager: PreviewActor: amcv.colorpicker - PresetHues: 0, 0.125, 0.185, 0.4, 0.54, 0.66, 0.79, 0.875, 0, 0.14, 0.23, 0.43, 0.54, 0.625, 0.77, 0.85 - PresetSaturations: 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.4, 0.5, 0.4, 0.5, 0.4, 0.5, 0.4, 0.5 + PresetColors: F21818, F2BC18, DAF218, 18F26F, 18BEF2, 1821F2, BA18F2, F218BC, F29191, F2DF79, CDF291, 79F2BF, 91DBF2, 7997F2, CD91F2, F279E6 OrderEffects: TerrainFlashImage: moveflsh TerrainFlashSequence: idle diff --git a/mods/ra2/sequences/aircraft.yaml b/mods/ra2/sequences/aircraft.yaml index a47c25371..0568d147c 100644 --- a/mods/ra2/sequences/aircraft.yaml +++ b/mods/ra2/sequences/aircraft.yaml @@ -1,28 +1,39 @@ asw: - icon: xxicon + icon: + Filename: xxicon.shp beag: - icon: beagicon + icon: + Filename: beagicon.shp cargoplane: - icon: xxicon + icon: + Filename: xxicon.shp falc: - icon: falcicon + icon: + Filename: falcicon.shp hind: - icon: hindicon + icon: + Filename: hindicon.shp hornet: - icon: xxicon + icon: + Filename: xxicon.shp pdplane: - icon: xxicon + icon: + Filename: xxicon.shp shad: Inherits@MC: ^MindControllable Inherits@Muzzle: ^WithMachineGunMuzzle - icon: shadicon + icon: + Filename: shadicon.shp + muzzle: + Filename: shad.shp zep: - icon: zepicon + icon: + Filename: zepicon.shp diff --git a/mods/ra2/sequences/allied-infantry.yaml b/mods/ra2/sequences/allied-infantry.yaml index 0295f171a..603a9109f 100644 --- a/mods/ra2/sequences/allied-infantry.yaml +++ b/mods/ra2/sequences/allied-infantry.yaml @@ -1,12 +1,17 @@ engineer: Inherits: ^Infantry Inherits@MC: ^MindControllable + Defaults: + Filename: engineer.shp paradrop: Start: 244 - icon: engnicon + icon: + Filename: engnicon.shp adog: Inherits: ^BasicInfantry + Defaults: + Filename: adog.shp cheer: Start: 164 die1: @@ -21,12 +26,16 @@ adog: Start: 166 Length: 6 Facings: 8 - jump: adogp + jump: + Filename: adogp.shp Length: 1 Facings: 32 - icon: adogicon + icon: + Filename: adogicon.shp dlph: + Defaults: + Filename: dlph.shp stand: Start: 48 Facings: -8 @@ -51,12 +60,14 @@ dlph: Start: 56 Length: 6 Facings: 8 - icon: dlphicon + icon: + Filename: dlphicon.shp e1: Inherits: ^ArmedInfantry Inherits@MC: ^MindControllable - Defaults: gi + Defaults: + Filename: gi.shp run: Tick: 120 deployed: @@ -76,105 +87,98 @@ e1: Start: 363 cheer: Start: 364 - icon: giicon + icon: + Filename: giicon.shp snipe: Inherits: ^ArmedInfantry Inherits@MC: ^MindControllable + Defaults: + Filename: snipe.shp paradrop: Start: 292 - icon: snipicon + icon: + Filename: snipicon.shp spy: Inherits: ^Infantry Inherits@MC: ^MindControllable + Defaults: + Filename: spy.shp liedown: Start: 164 standup: Start: 180 cheer: Start: 196 - icon: spyicon + icon: + Filename: spyicon.shp seal: Inherits: ^ArmedInfantry Inherits@MC: ^MindControllable + Defaults: + Filename: seal.shp + TilesetFilenames: + SNOW: seala.shp stand: - UseTilesetSuffix: true idle1: - UseTilesetSuffix: true idle2: - UseTilesetSuffix: true die1: - UseTilesetSuffix: true die2: - UseTilesetSuffix: true shoot: - UseTilesetSuffix: true prone-shoot: - UseTilesetSuffix: true prone-stand: - UseTilesetSuffix: true prone-run: - UseTilesetSuffix: true liedown: - UseTilesetSuffix: true standup: - UseTilesetSuffix: true run: - UseTilesetSuffix: true Tick: 120 swim-stand: - UseTilesetSuffix: true Start: 340 Facings: 8 Length: 6 Tick: 160 swim-idle1: - UseTilesetSuffix: true Start: 484 Length: 15 Tick: 160 swim-idle2: - UseTilesetSuffix: true Start: 499 Length: 15 Tick: 160 swim-run: - UseTilesetSuffix: true Start: 388 Facings: 8 Length: 6 Tick: 120 swim-die1: - UseTilesetSuffix: true Start: 512 Length: 22 swim-die2: - UseTilesetSuffix: true Start: 534 Length: 20 swim-shoot: - UseTilesetSuffix: true Start: 436 Length: 6 Facings: 8 Tick: 80 cheer: - UseTilesetSuffix: true Start: 603 swim-cheer: - UseTilesetSuffix: true Start: 611 Length: 8 Tick: 120 paradrop: - UseTilesetSuffix: true Start: 602 - icon: sealicon + icon: + Filename: sealicon.shp + TilesetFilenames: ccomand: Inherits: seal + Defaults: + Filename: ccomand.shp -swim-stand: -swim-idle1: -swim-idle2: @@ -183,52 +187,42 @@ ccomand: -swim-die2: -swim-shoot: stand: - UseTilesetSuffix: false idle1: - UseTilesetSuffix: false idle2: - UseTilesetSuffix: false die1: - UseTilesetSuffix: false die2: - UseTilesetSuffix: false shoot: - UseTilesetSuffix: false prone-shoot: - UseTilesetSuffix: false prone-stand: - UseTilesetSuffix: false prone-run: - UseTilesetSuffix: false liedown: - UseTilesetSuffix: false standup: - UseTilesetSuffix: false run: - UseTilesetSuffix: false shoot: - UseTilesetSuffix: false liedown: - UseTilesetSuffix: false standup: - UseTilesetSuffix: false run: - UseTilesetSuffix: false cheer: - UseTilesetSuffix: false Start: 340 -swim-cheer: -paradrop: - icon: ccomicon + icon: + Filename: ccomicon.shp ptroop: Inherits: ccomand - muzzle: yuricntl + Defaults: + Filename: ptroop.shp + muzzle: + Filename: yuricntl.shp Length: * - icon: psicicon + icon: + Filename: psicicon.shp tany: Inherits: ^ArmedInfantry + Defaults: + Filename: tany.shp run: Tick: 120 swim-stand: @@ -268,10 +262,12 @@ tany: Tick: 120 paradrop: Start: 602 - icon: tanyicon + icon: + Filename: tanyicon.shp jumpjet: - Defaults: rock + Defaults: + Filename: rock.shp Length: 6 Facings: 8 stand: @@ -306,11 +302,13 @@ jumpjet: Length: 15 Facings: 2 Tick: 80 - die4: nukedie + die4: + Filename: nukedie.shp Length: * Tick: 50 Facings: 1 - die6: electro + die6: + Filename: electro.shp Length: * Facings: 1 Tick: 80 @@ -336,16 +334,19 @@ jumpjet: Length: 9 Facings: 1 Tick: 100 - shadow: infshdw + shadow: + Filename: infshdw.shp Start: 1 Length: 1 Facings: 1 - icon: jjeticon + icon: + Filename: jjeticon.shp Length: 1 Facings: 1 jumpjet.husk: - idle: rock + idle: + Filename: rock.shp Start: 340 Length: 16 Facings: 2 @@ -354,6 +355,8 @@ jumpjet.husk: cleg: Inherits: ^BasicInfantry Inherits@MC: ^MindControllable + Defaults: + Filename: cleg.shp run: Start: 117 shoot: @@ -372,4 +375,5 @@ cleg: Start: 116 cheer: Start: 165 - icon: clegicon + icon: + Filename: clegicon.shp diff --git a/mods/ra2/sequences/allied-structures.yaml b/mods/ra2/sequences/allied-structures.yaml index df76bb111..ac1003e41 100644 --- a/mods/ra2/sequences/allied-structures.yaml +++ b/mods/ra2/sequences/allied-structures.yaml @@ -1,472 +1,883 @@ gacnst: Inherits: ^Structure Defaults: + Filename: ggcnst.shp Offset: 3, -60, 60 - idle: ggcnst - make: ggcnstmk + idle: + Filename: ggcnst.shp + TilesetFilenames: + SNOW: gacnst.shp + make: + TilesetFilenames: + TEMPERATE: gtcnstmk.shp + SNOW: gacnstmk.shp + URBAN: gucnstmk.shp Length: 29 ShadowStart: 29 - damaged-idle: ggcnst - idle-fans: ggcnst_a + damaged-idle: + Filename: ggcnst.shp + TilesetFilenames: + SNOW: gacnst.shp + idle-fans: + Filename: ggcnst_a.shp + TilesetFilenames: + SNOW: gacnst_a.shp Length: 6 Tick: 150 - damaged-idle-fans: ggcnst_a + damaged-idle-fans: + Filename: ggcnst_a.shp + TilesetFilenames: + SNOW: gacnst_a.shp Start: 5 Length: 6 Tick: 150 - crane-overlay: ggcnst_b + crane-overlay: + Filename: ggcnst_b.shp + TilesetFilenames: + SNOW: gacnst_b.shp Length: 20 Tick: 150 - damaged-crane-overlay: ggcnst_b + damaged-crane-overlay: + Filename: ggcnst_b.shp + TilesetFilenames: + SNOW: gacnst_b.shp Start: 20 Length: 20 Tick: 150 - dead: ggcnstdm # SHP broken & unused + dead: # SHP broken & unused + Filename: ggcnstdm.shp + TilesetFilenames: + SNOW: gacnstdm.shp Length: 30 ShadowStart: 30 Tick: 100 - icon: acnsicon + icon: + Filename: acnsicon.shp gapowr: Inherits: ^Structure Defaults: + Filename: ggpowr.shp Offset: 0, -31, 31 - idle: ggpowr - damaged-idle: gtpowr - idle-glow: ggpowr_a + idle: + Filename: ggpowr.shp + TilesetFilenames: + SNOW: gapowr.shp + damaged-idle: + Filename: ggpowr.shp + TilesetFilenames: + SNOW: gapowr.shp + idle-glow: + Filename: ggpowr_a.shp + TilesetFilenames: + SNOW: gapowr_a.shp Length: 8 ShadowStart: 16 Tick: 150 - damaged-idle-glow: ggpowr_a + damaged-idle-glow: + Filename: ggpowr_a.shp + TilesetFilenames: + SNOW: gapowr_a.shp Start: 8 Length: 8 ShadowStart: 24 Tick: 150 - make: gtpowrmk - icon: powricon + make: + TilesetFilenames: + TEMPERATE: gtpowrmk.shp + SNOW: gapowrmk.shp + URBAN: gupowrmk.shp + icon: + Filename: powricon.shp gapile: Inherits: ^Structure Defaults: + Filename: ggpile.shp Offset: -15, -38, 38 - idle: ggpile - damaged-idle: ggpile - idle-flag: ggpile_a + idle: + Filename: ggpile.shp + TilesetFilenames: + SNOW: gapile.shp + damaged-idle: + Filename: ggpile.shp + TilesetFilenames: + SNOW: gapile.shp + idle-flag: + Filename: ggpile_a.shp + TilesetFilenames: + SNOW: gapile_a.shp Length: 16 ShadowStart: 32 - damaged-idle-flag: ggpile_a + damaged-idle-flag: + Filename: ggpile_a.shp + TilesetFilenames: + SNOW: gapile_a.shp Start: 16 Length: 16 ShadowStart: 48 - dead: ggpiledm # SHP broken & unused + dead: # SHP broken & unused + Filename: ggpiledm.shp + TilesetFilenames: + SNOW: gapiledm.shp Length: 25 ShadowStart: 25 Tick: 100 - make: gtpilemk - icon: brrkicon + make: + TilesetFilenames: + TEMPERATE: gtpilemk.shp + SNOW: gapilemk.shp + URBAN: gupilemk.shp + icon: + Filename: brrkicon.shp garefn: Inherits: ^Structure Defaults: + Filename: ggrefn.shp Offset: -12, -52, 48 - idle: ggrefn - damaged-idle: ggrefn - make: gurefnmk - idle-drill: ggrefnl1 + idle: + Filename: ggrefn.shp + TilesetFilenames: + SNOW: garefn.shp + damaged-idle: + Filename: ggrefn.shp + TilesetFilenames: + SNOW: garefn.shp + make: + TilesetFilenames: + TEMPERATE: gtrefnmk.shp + SNOW: garefnmk.shp + URBAN: gurefnmk.shp + idle-drill: + Filename: ggrefnl1.shp + TilesetFilenames: + SNOW: garefnl1.shp Length: 6 Tick: 200 - idle-bib: ggrefnbb + idle-bib: + Filename: ggrefnbb.shp + TilesetFilenames: + SNOW: garefnbb.shp ShadowStart: 2 ZOffset: -512 Offset: -12, -52, 12 ZRamp: 1 - -DepthSprite: - damaged-idle-bib: ggrefnbb + DepthSprite: + damaged-idle-bib: + Filename: ggrefnbb.shp + TilesetFilenames: + SNOW: garefnbb.shp Start: 1 ShadowStart: 3 ZOffset: -512 Offset: -12, -52, 12 ZRamp: 1 - -DepthSprite: - docking-overlay: ggrefnor + DepthSprite: + docking-overlay: + Filename: ggrefnor.shp + TilesetFilenames: + SNOW: garefnor.shp Length: 20 ShadowStart: 20 - icon: reficon + icon: + Filename: reficon.shp gaairc: Inherits: ^Structure Defaults: + Filename: ggairc.shp Offset: -14, -38, 52 - idle: ggairc + idle: + Filename: ggairc.shp + TilesetFilenames: + SNOW: gaairc.shp ShadowStart: -1 Length: 1 - damaged-idle: ggairc + damaged-idle: + Filename: ggairc.shp + TilesetFilenames: + SNOW: gaairc.shp Length: 2 - idle-top: gaairc_c + idle-top: + Filename: ggairc_c.shp + TilesetFilenames: + SNOW: gaairc_c.shp Length: 16 ShadowStart: 16 Tick: 320 - idle-bottom: ggaircbb + idle-bottom: + Filename: ggaircbb.shp + TilesetFilenames: + SNOW: gaaircbb.shp Length: 1 ZOffset: -512 Offset: -14, -38, 4 ZRamp: 1 - -DepthSprite: - damage-idle-bottom: ggaircbb + DepthSprite: + damage-idle-bottom: + Filename: ggaircbb.shp + TilesetFilenames: + SNOW: gaaircbb.shp Start: 1 Length: 1 ZOffset: -512 Offset: -14, -38, 4 ZRamp: 1 - -DepthSprite: - idle-lights: ggairc_a + DepthSprite: + idle-lights: + Filename: ggairc_a.shp + TilesetFilenames: + SNOW: gaairc_a.shp Length: 4 Tick: 120 ZOffset: -512 Offset: -14, -38, 5 ZRamp: 1 - -DepthSprite: - damaged-idle-lights: ggairc_a + DepthSprite: + damaged-idle-lights: + Filename: ggairc_a.shp + TilesetFilenames: + SNOW: gaairc_a.shp Start: 5 Length: 4 Tick: 120 ZOffset: -512 Offset: -14, -38, 5 ZRamp: 1 - -DepthSprite: - idle-mid: ggairc_b + DepthSprite: + idle-mid: + Filename: ggairc_b.shp + TilesetFilenames: + SNOW: gaairc_b.shp Length: 6 Tick: 120 ZOffset: -512 Offset: -14, -38, 5 ZRamp: 1 - -DepthSprite: - damage-idle-mid: ggairc_b + DepthSprite: + damage-idle-mid: + Filename: ggairc_b.shp + TilesetFilenames: + SNOW: gaairc_b.shp Start: 7 Length: 6 Tick: 120 ZOffset: -512 Offset: -14, -38, 5 ZRamp: 1 - -DepthSprite: - make: gtaircmk - icon: heliicon + DepthSprite: + make: + TilesetFilenames: + TEMPERATE: gtaircmk.shp + SNOW: gaaircmk.shp + URBAN: guaircmk.shp + icon: + Filename: heliicon.shp gaweap: Inherits: ^Structure Defaults: + Filename: ggweap.shp Offset: -30, -60, 60 - idle: ggweap + idle: + Filename: ggweap.shp + TilesetFilenames: + SNOW: gaweap.shp ZOffset: -1024 - damaged-idle: ggweap + damaged-idle: + Filename: ggweap.shp + TilesetFilenames: + SNOW: gaweap.shp ZOffset: -1024 - build-ramp: ggweap_1 + build-ramp: + Filename: ggweap_1.shp + TilesetFilenames: + SNOW: gaweap_1.shp ShadowStart: 2 Offset: -30, -60, 15 ZRamp: 1 - -DepthSprite: - damaged-build-ramp: ggweap_1 + DepthSprite: + damaged-build-ramp: + Filename: ggweap_1.shp + TilesetFilenames: + SNOW: gaweap_1.shp Start: 1 ShadowStart: 3 Offset: -30, -60, 15 ZRamp: 1 - -DepthSprite: - build-top: ggweap_2 + DepthSprite: + build-top: + Filename: ggweap_2.shp + TilesetFilenames: + SNOW: gaweap_2.shp ShadowStart: 2 ZOffset: 1024 - damaged-build-top: ggweap_2 + damaged-build-top: + Filename: ggweap_2.shp + TilesetFilenames: + SNOW: gaweap_2.shp Start: 1 ShadowStart: 3 ZOffset: 1024 - build-air-open: ggweap_3 + build-air-open: + Filename: ggweap_3.shp + TilesetFilenames: + SNOW: gaweap_3.shp ShadowStart: 2 - damaged-air-open: ggweap_3 + damaged-air-open: + Filename: ggweap_3.shp + TilesetFilenames: + SNOW: gaweap_3.shp Start: 1 ShadowStart: 3 - build-air-inside: ggweap_4 + build-air-inside: + Filename: ggweap_4.shp + TilesetFilenames: + SNOW: gaweap_4.shp ShadowStart: 2 - damaged-air-inside: ggweap_4 + damaged-air-inside: + Filename: ggweap_4.shp + TilesetFilenames: + SNOW: gaweap_4.shp Start: 1 ShadowStart: 3 - bib: ggweapbb + bib: + Filename: ggweapbb.shp + TilesetFilenames: + SNOW: gaweapbb.shp ShadowStart: 2 ZOffset: -1024 Offset: -30, -60, 15 ZRamp: 1 - -DepthSprite: - damaged-bib: ggweapbb + DepthSprite: + damaged-bib: + Filename: ggweapbb.shp + TilesetFilenames: + SNOW: gaweapbb.shp Start: 1 ShadowStart: 3 ZOffset: -1024 Offset: -30, -60, 15 ZRamp: 1 - -DepthSprite: - idle-flag: ggweap_a + DepthSprite: + idle-flag: + Filename: ggweap_a.shp + TilesetFilenames: + SNOW: gaweap_a.shp Length: 14 ShadowStart: 31 - damaged-idle-flag: ggweap_a + damaged-idle-flag: + Filename: ggweap_a.shp + TilesetFilenames: + SNOW: gaweap_a.shp Start: 15 Length: 14 ShadowStart: 45 - overlay-fan: ggweap_b + overlay-fan: + Filename: ggweap_b.shp + TilesetFilenames: + SNOW: gaweap_b.shp Length: 5 ShadowStart: 6 - make: gtweapmk - icon: gwepicon + make: + TilesetFilenames: + TEMPERATE: gtweapmk.shp + SNOW: gaweapmk.shp + URBAN: guweapmk.shp + icon: + Filename: gwepicon.shp gayard: Inherits: ^Structure Defaults: + Filename: ggyard.shp Offset: 0, -45, 45 - idle: ggyard + idle: + Filename: ggyard.shp + TilesetFilenames: + SNOW: gayard.shp ShadowStart: 4 - damaged-idle: ggyard + damaged-idle: + Filename: ggyard.shp + TilesetFilenames: + SNOW: gayard.shp Start: 2 ShadowStart: 5 - idle-crane: ggyard_a + idle-crane: + Filename: ggyard_a.shp + TilesetFilenames: + SNOW: gayard_a.shp Length: 15 ShadowStart: 30 Tick: 200 - damaged-idle-crane: ggyard_a + damaged-idle-crane: + Filename: ggyard_a.shp + TilesetFilenames: + SNOW: gayard_a.shp Start: 15 Length: 15 ShadowStart: 45 Tick: 200 - idle-waves: ggyard_c + idle-waves: + Filename: ggyard_c.shp + TilesetFilenames: + SNOW: gayard_c.shp Length: 15 ShadowStart: 30 Tick: 200 - damaged-idle-waves: ggyard_c + damaged-idle-waves: + Filename: ggyard_c.shp + TilesetFilenames: + SNOW: gayard_c.shp Start: 30 Length: 15 ShadowStart: 30 Tick: 200 - make: gtyardmk - repair: ggyard_s + make: + TilesetFilenames: + TEMPERATE: gtyardmk.shp + SNOW: gayardmk.shp + URBAN: guyardmk.shp + repair: + Filename: ggyard_s.shp + TilesetFilenames: + SNOW: gayard_s.shp Length: 18 ShadowStart: 36 - damaged-repair: ggyard_s + damaged-repair: + Filename: ggyard_s.shp + TilesetFilenames: + SNOW: gayard_s.shp Start: 18 Length: 18 ShadowStart: 54 - icon: ayaricon + icon: + Filename: ayaricon.shp gadept: Inherits: ^Structure Defaults: + Filename: ggdept.shp Offset: 7, -40, 40 - idle: ggdept_d + idle: + Filename: ggdept_d.shp + TilesetFilenames: + SNOW: gadept_d.shp ShadowStart: 2 - damaged-idle: ggdept_d + damaged-idle: + Filename: ggdept_d.shp + TilesetFilenames: + SNOW: gadept_d.shp ShadowStart: 3 - idle-side: ggdept + idle-side: + Filename: ggdept.shp + TilesetFilenames: + SNOW: gadept.shp ShadowStart: 3 - damaged-idle-side: ggdept + damaged-idle-side: + Filename: ggdept.shp + TilesetFilenames: + SNOW: gadept.shp Start: 1 Length: 2 ShadowStart: 4 - bib: ggdeptbb + bib: + Filename: ggdeptbb.shp + TilesetFilenames: + SNOW: gadeptbb.shp ShadowStart: 3 ZOffset: -1c511 Offset: 7, -40, 10 ZRamp: 1 - -DepthSprite: - make: gtdeptmk - repair: ggdept_c + DepthSprite: + make: + TilesetFilenames: + TEMPERATE: gtdeptmk.shp + SNOW: gadeptmk.shp + URBAN: gudeptmk.shp + repair: + Filename: ggdept_c.shp + TilesetFilenames: + SNOW: gadept_c.shp Length: 10 ShadowStart: 20 Tick: 180 - damaged-repair: ggdept_c + damaged-repair: + Filename: ggdept_c.shp + TilesetFilenames: + SNOW: gadept_c.shp Start: 10 Length: 10 ShadowStart: 30 Tick: 180 - icon: fixicon + icon: + Filename: fixicon.shp gatech: Inherits: ^Structure Defaults: + Filename: ggtech.shp Offset: -15, -40, 40 - idle: ggtech - damaged-idle: ggtech - idle-lights: ggtech_a + idle: + Filename: ggtech.shp + TilesetFilenames: + SNOW: gatech.shp + damaged-idle: + Filename: ggtech.shp + TilesetFilenames: + SNOW: gatech.shp + idle-lights: + Filename: ggtech_a.shp + TilesetFilenames: + SNOW: gatech_a.shp Length: 12 ShadowStart: 24 - damaged-idle-ights: ggtech_a + damaged-idle-ights: + Filename: ggtech_a.shp + TilesetFilenames: + SNOW: gatech_a.shp Start: 12 Length: 12 ShadowStart: 36 - make: gttechmk - icon: techicon + make: + TilesetFilenames: + TEMPERATE: gttechmk.shp + SNOW: gatechmk.shp + URBAN: gutechmk.shp + icon: + Filename: techicon.shp gaorep: Inherits: ^Structure Defaults: + Filename: ggorep.shp Offset: 0, -45, 45 - idle: ggorep - damaged-idle: ggorep - idle-glow: ggorep_a + idle: + Filename: ggorep.shp + TilesetFilenames: + SNOW: gaorep.shp + damaged-idle: + Filename: ggorep.shp + TilesetFilenames: + SNOW: gaorep.shp + idle-glow: + Filename: ggorep_a.shp + TilesetFilenames: + SNOW: gaorep_a.shp Length: 8 ShadowStart: 16 Tick: 180 - damaged-idle-glow: ggorep_a + damaged-idle-glow: + Filename: ggorep_a.shp + TilesetFilenames: + SNOW: gaorep_a.shp Start: 8 Length: 8 ShadowStart: 24 Tick: 180 - make: gtorepmk - icon: gorep + make: + TilesetFilenames: + TEMPERATE: gtorepmk.shp + SNOW: gaorepmk.shp + URBAN: guorepmk.shp + icon: + Filename: gorep.shp gawall: Inherits: ^Wall - Defaults: gtwall - icon: wallicon + Defaults: + TilesetFilenames: + TEMPERATE: gtwall.shp + SNOW: gawall.shp + URBAN: guwall.shp + icon: + Filename: wallicon.shp + TilesetFilenames: gapill: Inherits: ^Structure Inherits@Muzzle: ^WithMachineGunMuzzle Defaults: + Filename: ggpill.shp + TilesetFilenames: + SNOW: gapill.shp Offset: 0, -15, 15 - idle: ggpill - damaged-idle: ggpill - critical-idle: ggpill + idle: + Filename: ggpill.shp + TilesetFilenames: + SNOW: gapill.shp + damaged-idle: + Filename: ggpill.shp + TilesetFilenames: + SNOW: gapill.shp + critical-idle: + Filename: ggpill.shp + TilesetFilenames: + SNOW: gapill.shp Start: 2 ShadowStart: 5 - make: gtpillmk + make: + TilesetFilenames: + TEMPERATE: gtpillmk.shp + SNOW: gapillmk.shp + URBAN: gupillmk.shp Length: 8 ShadowStart: 8 - icon: pillicon + icon: + Filename: pillicon.shp + TilesetFilenames: nasam: Inherits: ^Structure Defaults: + Filename: ngsam.shp Offset: 0, -15, 15 ZOffset: -512 - idle: ngsam - damaged-idle: ngsam - critical-idle: ngsam + idle: + Filename: ngsam.shp + TilesetFilenames: + SNOW: nasam.shp + damaged-idle: + Filename: ngsam.shp + TilesetFilenames: + SNOW: nasam.shp + critical-idle: + Filename: ngsam.shp + TilesetFilenames: + SNOW: nasam.shp Start: 2 ShadowStart: 5 - make: ntsammk + make: + TilesetFilenames: + TEMPERATE: ntsammk.shp + SNOW: nasammk.shp + URBAN: nusammk.shp Length: 8 ShadowStart: 8 ZOffset: 0 - icon: samicon + icon: + Filename: samicon.shp gtgcan: Inherits: ^Structure Defaults: + Filename: gggcan.shp Offset: 0, -30, 30 ZOffset: -512 - idle: gggcan - damaged-idle: gggcan - critical-idle: gggcan + idle: + Filename: gggcan.shp + TilesetFilenames: + SNOW: gagcan.shp + damaged-idle: + Filename: gggcan.shp + TilesetFilenames: + SNOW: gagcan.shp + critical-idle: + Filename: gggcan.shp + TilesetFilenames: + SNOW: gagcan.shp Start: 2 ShadowStart: 5 Offset: 0, -30 - make: gtgcanmk + make: + TilesetFilenames: + TEMPERATE: gtgcanmk.shp + SNOW: gagcanmk.shp + URBAN: gugcanmk.shp Length: 12 ShadowStart: 12 ZOffset: 0 - muzzle: gcmuzzle + muzzle: + Filename: gcmuzzle.shp Length: * Offset: 0,0 - UseTilesetCode: false - icon: gcanicon + icon: + Filename: gcanicon.shp gaspysat: Inherits: ^Structure Defaults: + Filename: ggspysat.shp Offset: 0, -31, 31 - idle: ggspst + idle: + Filename: ggspst.shp + TilesetFilenames: + SNOW: gaspst.shp Tick: 180 - damaged-idle: ggspst + damaged-idle: + Filename: ggspst.shp + TilesetFilenames: + SNOW: gaspst.shp Tick: 180 - idle-dish: ggspst_a + idle-dish: + Filename: ggspst_a.shp + TilesetFilenames: + SNOW: gaspst_a.shp Length: 16 Tick: 180 - damaged-idle-dish: ggspst_a + damaged-idle-dish: + Filename: ggspst_a.shp + TilesetFilenames: + SNOW: gaspst_a.shp Start: 16 Length: 16 Tick: 180 - make: gtspstmk + make: + TilesetFilenames: + TEMPERATE: gtspstmk.shp + SNOW: gaspstmk.shp + URBAN: guspstmk.shp Tick: 90 - icon: asaticon + icon: + Filename: asaticon.shp gagap: Inherits: ^Structure Defaults: + Filename: gggap.shp Offset: 0, -15, 15 - idle: gggap + idle: + Filename: gggap.shp + TilesetFilenames: + SNOW: gagap.shp Length: 1 - damaged-idle: gggap + damaged-idle: + Filename: gggap.shp + TilesetFilenames: + SNOW: gagap.shp Start: 2 Length: 1 - make: gtgapmk + make: + TilesetFilenames: + TEMPERATE: gtgapmk.shp + SNOW: gagapmk.shp + URBAN: gugapmk.shp Length: 9 ShadowStart: 9 Tick: 90 - icon: gapicon + icon: + Filename: gapicon.shp gaweat: Inherits: ^Structure Defaults: + Filename: ggweat.shp Offset: 0, -45, 45 - idle: ggweth - damaged-idle: ggweth - make: guwethmk - icon: wethicon + idle: + Filename: ggweth.shp + TilesetFilenames: + SNOW: gaweth.shp + damaged-idle: + Filename: ggweth.shp + TilesetFilenames: + SNOW: gaweth.shp + make: + TilesetFilenames: + TEMPERATE: gtwethmk.shp + SNOW: gawethmk.shp + URBAN: guwethmk.shp + icon: + Filename: wethicon.shp gacsph: Inherits: ^Structure Defaults: + Filename: ggcsph.shp Offset: -15, -50, 50 - idle: ggcsph + idle: + Filename: ggcsph.shp + TilesetFilenames: + SNOW: gacsph.shp ShadowStart: 3 - damaged-idle: ggcsph - idle-dome: ggcsph_e + damaged-idle: + Filename: ggcsph.shp + TilesetFilenames: + SNOW: gacsph.shp + idle-dome: + Filename: ggcsph_e.shp + TilesetFilenames: + SNOW: gacsph_e.shp ShadowStart: 2 - damaged-idle-dome: ggcsph_e + damaged-idle-dome: + Filename: ggcsph_e.shp + TilesetFilenames: + SNOW: gacsph_e.shp Start: 1 ShadowStart: 3 - dead: ggcsphdm # SHP broken & unused + dead: # SHP broken & unused + Filename: ggcsphdm.shp + TilesetFilenames: + SNOW: gacsphdm.shp Length: 25 ShadowStart: 25 Tick: 50 - make: gtcsphmk - icon: csphicon + make: + TilesetFilenames: + TEMPERATE: gtcsphmk.shp + SNOW: gacsphmk.shp + URBAN: gucsphmk.shp + icon: + Filename: csphicon.shp atesla: Inherits: ^Structure Defaults: + Filename: agesla.shp Offset: 1,-15, 15 - idle-normal: ggpris + idle-normal: + Filename: ggpris.shp + TilesetFilenames: + SNOW: gapris.shp ShadowStart: 3 - damaged-idle-normal: ggpris - idle: ggpris_b + damaged-idle-normal: + Filename: ggpris.shp + TilesetFilenames: + SNOW: gapris.shp + idle: + Filename: ggpris_b.shp + TilesetFilenames: + SNOW: gapris_b.shp Length: 9 Tick: 100 ShadowStart: 18 - damaged-idle: ggpris_b + damaged-idle: + Filename: ggpris_b.shp + TilesetFilenames: + SNOW: gapris_b.shp Start: 9 Length: 9 Tick: 180 ShadowStart: 27 - active: ggpris_a + active: + Filename: ggpris_a.shp + TilesetFilenames: + SNOW: gapris_a.shp Length: 10 Tick: 100 ShadowStart: 20 - damaged-active: ggpris_a + damaged-active: + Filename: ggpris_a.shp + TilesetFilenames: + SNOW: gapris_a.shp Start: 10 Length: 10 Tick: 100 ShadowStart: 30 - dead: ggprisdm # SHP broken & unused + dead: # SHP broken & unused + Filename: ggprisdm.shp + TilesetFilenames: + SNOW: gaprisdm.shp Length: 21 ShadowStart: 21 Tick: 100 - icon: prisicon - make: gtprismk + icon: + Filename: prisicon.shp + make: + TilesetFilenames: + TEMPERATE: gtprismk.shp + SNOW: gaprismk.shp + URBAN: guprismk.shp Length: 8 ShadowStart: 8 Tick: 160 diff --git a/mods/ra2/sequences/animals.yaml b/mods/ra2/sequences/animals.yaml index 338127daa..c161d36e1 100644 --- a/mods/ra2/sequences/animals.yaml +++ b/mods/ra2/sequences/animals.yaml @@ -1,5 +1,7 @@ cow: Inherits: ^Animal + Defaults: + Filename: cow.shp stand: ShadowStart: 116 run: @@ -18,6 +20,8 @@ cow: all: Inherits: ^Animal + Defaults: + Filename: all.shp stand: ShadowStart: 164 run: @@ -34,6 +38,8 @@ all: polarb: Inherits: ^Animal + Defaults: + Filename: polarb.shp run: Tick: 120 shoot: @@ -43,18 +49,23 @@ polarb: josh: Inherits: ^Animal + Defaults: + Filename: josh.shp run: Tick: 120 shoot: Start: 116 Length: 6 Facings: 8 - die4: nukedie + die4: + Filename: nukedie.shp Length: * Tick: 50 - die5: yuridie + die5: + Filename: yuridie.shp Length: * Tick: 80 - die6: electro + die6: + Filename: electro.shp Length: * Tick: 80 diff --git a/mods/ra2/sequences/bridges.yaml b/mods/ra2/sequences/bridges.yaml index 73c9b10ed..e3c292da8 100644 --- a/mods/ra2/sequences/bridges.yaml +++ b/mods/ra2/sequences/bridges.yaml @@ -1,145 +1,413 @@ lobrdb_a: Inherits: ^bridge - idle: lobrdb10 - idle2: lobrdb11 - idle3: lobrdb12 - idle4: lobrdb13 - adead: lobrdb15 - bdead: lobrdb14 - abdead: lobrdb16 + idle: + TilesetFilenames: + TEMPERATE: lobrdb10.tem + SNOW: lobrdb10.sno + URBAN: lobrdb10.urb + idle2: + TilesetFilenames: + TEMPERATE: lobrdb11.tem + SNOW: lobrdb11.sno + URBAN: lobrdb11.urb + idle3: + TilesetFilenames: + TEMPERATE: lobrdb12.tem + SNOW: lobrdb12.sno + URBAN: lobrdb12.urb + idle4: + TilesetFilenames: + TEMPERATE: lobrdb13.tem + SNOW: lobrdb13.sno + URBAN: lobrdb13.urb + adead: + TilesetFilenames: + TEMPERATE: lobrdb15.tem + SNOW: lobrdb15.sno + URBAN: lobrdb15.urb + bdead: + TilesetFilenames: + TEMPERATE: lobrdb14.tem + SNOW: lobrdb14.sno + URBAN: lobrdb14.urb + abdead: + TilesetFilenames: + TEMPERATE: lobrdb16.tem + SNOW: lobrdb16.sno + URBAN: lobrdb16.urb lobrdb_a_d: Inherits: ^bridge - idle: lobrdb28 - aramp: lobrdb17 - bramp: lobrdb18 - abramp: lobrdb28 - editor: lobrdb10 + idle: + TilesetFilenames: + TEMPERATE: lobrdb28.tem + SNOW: lobrdb28.sno + URBAN: lobrdb28.urb + aramp: + TilesetFilenames: + TEMPERATE: lobrdb17.tem + SNOW: lobrdb17.sno + URBAN: lobrdb17.urb + bramp: + TilesetFilenames: + TEMPERATE: lobrdb18.tem + SNOW: lobrdb18.sno + URBAN: lobrdb18.urb + abramp: + TilesetFilenames: + TEMPERATE: lobrdb28.tem + SNOW: lobrdb28.sno + URBAN: lobrdb28.urb + editor: + TilesetFilenames: + TEMPERATE: lobrdb10.tem + SNOW: lobrdb10.sno + URBAN: lobrdb10.urb lobrdb_b: Inherits: ^bridge - idle: lobrdb01 - idle2: lobrdb02 - idle3: lobrdb03 - idle4: lobrdb04 - adead: lobrdb05 - bdead: lobrdb06 - abdead: lobrdb07 + idle: + TilesetFilenames: + TEMPERATE: lobrdb01.tem + SNOW: lobrdb01.sno + URBAN: lobrdb01.urb + idle2: + TilesetFilenames: + TEMPERATE: lobrdb02.tem + SNOW: lobrdb02.sno + URBAN: lobrdb02.urb + idle3: + TilesetFilenames: + TEMPERATE: lobrdb03.tem + SNOW: lobrdb03.sno + URBAN: lobrdb03.urb + idle4: + TilesetFilenames: + TEMPERATE: lobrdb04.tem + SNOW: lobrdb04.sno + URBAN: lobrdb04.urb + adead: + TilesetFilenames: + TEMPERATE: lobrdb05.tem + SNOW: lobrdb05.sno + URBAN: lobrdb05.urb + bdead: + TilesetFilenames: + TEMPERATE: lobrdb06.tem + SNOW: lobrdb06.sno + URBAN: lobrdb06.urb + abdead: + TilesetFilenames: + TEMPERATE: lobrdb07.tem + SNOW: lobrdb07.sno + URBAN: lobrdb07.urb lobrdb_b_d: Inherits: ^bridge - idle: lobrdb27 - aramp: lobrdb08 - bramp: lobrdb09 - abramp: lobrdb27 - editor: lobrdb01 + idle: + TilesetFilenames: + TEMPERATE: lobrdb27.tem + SNOW: lobrdb27.sno + URBAN: lobrdb27.urb + aramp: + TilesetFilenames: + TEMPERATE: lobrdb08.tem + SNOW: lobrdb08.sno + URBAN: lobrdb08.urb + bramp: + TilesetFilenames: + TEMPERATE: lobrdb09.tem + SNOW: lobrdb09.sno + URBAN: lobrdb09.urb + abramp: + TilesetFilenames: + TEMPERATE: lobrdb27.tem + SNOW: lobrdb27.sno + URBAN: lobrdb27.urb + editor: + TilesetFilenames: + TEMPERATE: lobrdb01.tem + SNOW: lobrdb01.sno + URBAN: lobrdb01.urb lobrdb_r_se: Inherits: ^bridge - idle: lobrdb19 - damaged-idle: lobrdb20 + idle: + TilesetFilenames: + TEMPERATE: lobrdb19.tem + SNOW: lobrdb19.sno + URBAN: lobrdb19.urb + damaged-idle: + TilesetFilenames: + TEMPERATE: lobrdb20.tem + SNOW: lobrdb20.sno + URBAN: lobrdb20.urb lobrdb_r_nw: Inherits: ^bridge - idle: lobrdb21 - damaged-idle: lobrdb22 + idle: + TilesetFilenames: + TEMPERATE: lobrdb21.tem + SNOW: lobrdb21.sno + URBAN: lobrdb21.urb + damaged-idle: + TilesetFilenames: + TEMPERATE: lobrdb22.tem + SNOW: lobrdb22.sno + URBAN: lobrdb22.urb lobrdb_r_ne: Inherits: ^bridge - idle: lobrdb23 - damaged-idle: lobrdb24 + idle: + TilesetFilenames: + TEMPERATE: lobrdb23.tem + SNOW: lobrdb23.sno + URBAN: lobrdb23.urb + damaged-idle: + TilesetFilenames: + TEMPERATE: lobrdb24.tem + SNOW: lobrdb24.sno + URBAN: lobrdb24.urb lobrdb_r_sw: Inherits: ^bridge - idle: lobrdb25 - damaged-idle: lobrdb26 + idle: + TilesetFilenames: + TEMPERATE: lobrdb25.tem + SNOW: lobrdb25.sno + URBAN: lobrdb25.urb + damaged-idle: + TilesetFilenames: + TEMPERATE: lobrdb26.tem + SNOW: lobrdb26.sno + URBAN: lobrdb26.urb lobrdg_a: Inherits: ^bridge - idle: lobrdg10 - idle2: lobrdg11 - idle3: lobrdg12 - idle4: lobrdg13 - adead: lobrdg15 - bdead: lobrdg14 - abdead: lobrdg16 + idle: + TilesetFilenames: + TEMPERATE: lobrdg10.tem + SNOW: lobrdg10.sno + URBAN: lobrdg10.urb + idle2: + TilesetFilenames: + TEMPERATE: lobrdg11.tem + SNOW: lobrdg11.sno + URBAN: lobrdg11.urb + idle3: + TilesetFilenames: + TEMPERATE: lobrdg12.tem + SNOW: lobrdg12.sno + URBAN: lobrdg12.urb + idle4: + TilesetFilenames: + TEMPERATE: lobrdg13.tem + SNOW: lobrdg13.sno + URBAN: lobrdg13.urb + adead: + TilesetFilenames: + TEMPERATE: lobrdg15.tem + SNOW: lobrdg15.sno + URBAN: lobrdg15.urb + bdead: + TilesetFilenames: + TEMPERATE: lobrdg14.tem + SNOW: lobrdg14.sno + URBAN: lobrdg14.urb + abdead: + TilesetFilenames: + TEMPERATE: lobrdg16.tem + SNOW: lobrdg16.sno + URBAN: lobrdg16.urb lobrdg_a_d: Inherits: ^bridge - idle: lobrdg28 - aramp: lobrdg17 - bramp: lobrdg18 - abramp: lobrdg28 - editor: lobrdg10 + idle: + TilesetFilenames: + TEMPERATE: lobrdg28.tem + SNOW: lobrdg28.sno + URBAN: lobrdg28.urb + aramp: + TilesetFilenames: + TEMPERATE: lobrdg17.tem + SNOW: lobrdg17.sno + URBAN: lobrdg17.urb + bramp: + TilesetFilenames: + TEMPERATE: lobrdg18.tem + SNOW: lobrdg18.sno + URBAN: lobrdg18.urb + abramp: + TilesetFilenames: + TEMPERATE: lobrdg28.tem + SNOW: lobrdg28.sno + URBAN: lobrdg28.urb + editor: + TilesetFilenames: + TEMPERATE: lobrdg10.tem + SNOW: lobrdg10.sno + URBAN: lobrdg10.urb lobrdg_b: Inherits: ^bridge - idle: lobrdg01 - idle2: lobrdg02 - idle3: lobrdg03 - idle4: lobrdg04 - adead: lobrdg05 - bdead: lobrdg06 - abdead: lobrdg07 + idle: + TilesetFilenames: + TEMPERATE: lobrdg01.tem + SNOW: lobrdg01.sno + URBAN: lobrdg01.urb + idle2: + TilesetFilenames: + TEMPERATE: lobrdg02.tem + SNOW: lobrdg02.sno + URBAN: lobrdg02.urb + idle3: + TilesetFilenames: + TEMPERATE: lobrdg03.tem + SNOW: lobrdg03.sno + URBAN: lobrdg03.urb + idle4: + TilesetFilenames: + TEMPERATE: lobrdg04.tem + SNOW: lobrdg04.sno + URBAN: lobrdg04.urb + adead: + TilesetFilenames: + TEMPERATE: lobrdg05.tem + SNOW: lobrdg05.sno + URBAN: lobrdg05.urb + bdead: + TilesetFilenames: + TEMPERATE: lobrdg06.tem + SNOW: lobrdg06.sno + URBAN: lobrdg06.urb + abdead: + TilesetFilenames: + TEMPERATE: lobrdg07.tem + SNOW: lobrdg07.sno + URBAN: lobrdg07.urb lobrdg_b_d: Inherits: ^bridge - idle: lobrdg27 - aramp: lobrdg08 - bramp: lobrdg09 - abramp: lobrdg27 - editor: lobrdg01 + idle: + TilesetFilenames: + TEMPERATE: lobrdg27.tem + SNOW: lobrdg27.sno + URBAN: lobrdg27.urb + aramp: + TilesetFilenames: + TEMPERATE: lobrdg08.tem + SNOW: lobrdg08.sno + URBAN: lobrdg08.urb + bramp: + TilesetFilenames: + TEMPERATE: lobrdg09.tem + SNOW: lobrdg09.sno + URBAN: lobrdg09.urb + abramp: + TilesetFilenames: + TEMPERATE: lobrdg27.tem + SNOW: lobrdg27.sno + URBAN: lobrdg27.urb + editor: + TilesetFilenames: + TEMPERATE: lobrdg01.tem + SNOW: lobrdg01.sno + URBAN: lobrdg01.urb lobrdg_r_se: Inherits: ^bridge - idle: lobrdg19 - damaged-idle: lobrdg20 + idle: + TilesetFilenames: + TEMPERATE: lobrdg19.tem + SNOW: lobrdg19.sno + URBAN: lobrdg19.urb + damaged-idle: + TilesetFilenames: + TEMPERATE: lobrdg20.tem + SNOW: lobrdg20.sno + URBAN: lobrdg20.urb lobrdg_r_nw: Inherits: ^bridge - idle: lobrdg21 - damaged-idle: lobrdg22 + idle: + TilesetFilenames: + TEMPERATE: lobrdg21.tem + SNOW: lobrdg21.sno + URBAN: lobrdg21.urb + damaged-idle: + TilesetFilenames: + TEMPERATE: lobrdg22.tem + SNOW: lobrdg22.sno + URBAN: lobrdg22.urb lobrdg_r_ne: Inherits: ^bridge - idle: lobrdg23 - damaged-idle: lobrdg24 + idle: + TilesetFilenames: + TEMPERATE: lobrdg23.tem + SNOW: lobrdg23.sno + URBAN: lobrdg23.urb + damaged-idle: + TilesetFilenames: + TEMPERATE: lobrdg24.tem + SNOW: lobrdg24.sno + URBAN: lobrdg24.urb lobrdg_r_sw: Inherits: ^bridge - idle: lobrdg25 - damaged-idle: lobrdg26 + idle: + TilesetFilenames: + TEMPERATE: lobrdg25.tem + SNOW: lobrdg25.sno + URBAN: lobrdg25.urb + damaged-idle: + TilesetFilenames: + TEMPERATE: lobrdg26.tem + SNOW: lobrdg26.sno + URBAN: lobrdg26.urb bridge1: - idle: bridge + idle: + TilesetFilenames: + TEMPERATE: bridge.tem + SNOW: bridge.sno + URBAN: bridge.urb # Disabled to avoid glitches until shadow rendering is fixed # ShadowStart: 18 - UseTilesetExtension: true ZRamp: 1 Offset: 0, -16, 12 bridge2: - idle: bridge + idle: + TilesetFilenames: + TEMPERATE: bridge.tem + SNOW: bridge.sno + URBAN: bridge.urb Start: 9 # Disabled to avoid glitches until shadow rendering is fixed # ShadowStart: 27 - UseTilesetExtension: true ZRamp: 1 Offset: 0, -31, 12 bridgb1: - idle: bridgb + idle: + TilesetFilenames: + TEMPERATE: bridgb.tem + SNOW: bridgb.sno + URBAN: bridgb.urb # Disabled to avoid glitches until shadow rendering is fixed # ShadowStart: 18 - UseTilesetExtension: true ZRamp: 1 Offset: 0, -16, 12 bridgb2: - idle: bridgb + idle: + TilesetFilenames: + TEMPERATE: bridgb.tem + SNOW: bridgb.sno + URBAN: bridgb.urb Start: 9 # Disabled to avoid glitches until shadow rendering is fixed # ShadowStart: 27 - UseTilesetExtension: true ZRamp: 1 Offset: 0, -31, 12 diff --git a/mods/ra2/sequences/civilian-props.yaml b/mods/ra2/sequences/civilian-props.yaml index 7f65d3db9..878124b65 100644 --- a/mods/ra2/sequences/civilian-props.yaml +++ b/mods/ra2/sequences/civilian-props.yaml @@ -1,171 +1,385 @@ hdstn01: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: hdstn01.tem + SNOW: hdstn01.sno + URBAN: hdstn01.urb lt_gen01: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: lt_gen01.tem + SNOW: lt_gen01.sno + URBAN: lt_gen01.urb lt_gen02: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: lt_gen02.tem + SNOW: lt_gen02.sno + URBAN: lt_gen02.urb lt_gen03: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: lt_gen03.tem + SNOW: lt_gen03.sno + URBAN: lt_gen03.urb lt_gen04: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: lt_gen04.tem + SNOW: lt_gen04.sno + URBAN: lt_gen04.urb lt_sgn01: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: lt_sgn01.tem + SNOW: lt_sgn01.sno + URBAN: lt_sgn01.urb lt_sgn02: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: lt_sgn02.tem + SNOW: lt_sgn02.sno + URBAN: lt_sgn02.urb lt_sgn03: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: lt_sgn03.tem + SNOW: lt_sgn03.sno + URBAN: lt_sgn03.urb lt_sgn04: Inherits: ^Pole idle: + TilesetFilenames: + TEMPERATE: lt_sgn04.tem + SNOW: lt_sgn04.sno + URBAN: lt_sgn04.urb ShadowStart: -1 lt_eur01: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: lt_eur01.tem + SNOW: lt_eur01.sno + URBAN: lt_eur01.urb lt_eur02: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: lt_eur02.tem + SNOW: lt_eur02.sno + URBAN: lt_eur02.urb pole01: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: pole01.tem + SNOW: pole01.sno + URBAN: pole01.urb pole02: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: pole02.tem + SNOW: pole02.sno + URBAN: pole02.urb sign01: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: sign01.tem + SNOW: sign01.sno + URBAN: sign01.urb sign02: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: sign02.tem + SNOW: sign02.sno + URBAN: sign02.urb sign03: Inherits: ^Pole idle: + TilesetFilenames: + TEMPERATE: sign03.tem + SNOW: sign03.sno + URBAN: sign03.urb ShadowStart: -1 sign04: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: sign04.tem + SNOW: sign04.sno + URBAN: sign04.urb sign05: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: sign05.tem + SNOW: sign05.sno + URBAN: sign05.urb sign06: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: sign06.tem + SNOW: sign06.sno + URBAN: sign06.urb trff01: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: trff01.tem + SNOW: trff01.sno + URBAN: trff01.urb camsc01: Inherits: ^Prop + idle: + TilesetFilenames: + TEMPERATE: ctmsc01.shp + SNOW: camsc01.shp + URBAN: cumsc01.shp camsc02: Inherits: ^Prop + idle: + TilesetFilenames: + TEMPERATE: ctmsc02.shp + SNOW: camsc02.shp + URBAN: cumsc02.shp camsc03: Inherits: ^Prop + idle: + TilesetFilenames: + TEMPERATE: ctmsc03.shp + SNOW: camsc03.shp + URBAN: cumsc03.shp camsc04: Inherits: ^Prop + idle: + TilesetFilenames: + TEMPERATE: ctmsc04.shp + SNOW: camsc04.shp + URBAN: cumsc04.shp camsc05: Inherits: ^Prop + idle: + TilesetFilenames: + TEMPERATE: ctmsc05.shp + SNOW: camsc05.shp + URBAN: cumsc05.shp camsc06: Inherits: ^Prop - idle-fire: camsc06a + idle-fire: + TilesetFilenames: + TEMPERATE: ctmsc06a.shp + SNOW: camsc06a.shp + URBAN: cumsc06a.shp Length: 4 ShadowStart: 4 Tick: 80 + idle: + TilesetFilenames: + TEMPERATE: ctmsc06.shp + SNOW: camsc06.shp + URBAN: cumsc06.shp camsc11: Inherits: ^Prop + idle: + TilesetFilenames: + TEMPERATE: ctmsc11.shp + SNOW: camsc11.shp + URBAN: cumsc11.shp camsc12: Inherits: ^Prop + idle: + TilesetFilenames: + TEMPERATE: ctmsc12.shp + SNOW: camsc12.shp + URBAN: cumsc12.shp camsc13: Inherits: ^Prop + idle: + TilesetFilenames: + TEMPERATE: ctmsc13.shp + SNOW: camsc13.shp + URBAN: cumsc13.shp trff02: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: trff02.tem + SNOW: trff02.sno + URBAN: trff02.urb trff03: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: trff03.tem + SNOW: trff03.sno + URBAN: trff03.urb trff04: Inherits: ^Pole + idle: + TilesetFilenames: + TEMPERATE: trff04.tem + SNOW: trff04.sno + URBAN: trff04.urb camisc01: Inherits: ^Prop + idle: + TilesetFilenames: + TEMPERATE: ctmisc01.shp + SNOW: camisc01.shp + URBAN: cumisc01.shp camisc02: Inherits: ^Prop idle: + TilesetFilenames: + TEMPERATE: ctmisc02.shp + SNOW: camisc02.shp + URBAN: cumisc02.shp ShadowStart: -1 camisc03: Inherits: ^Prop + idle: + TilesetFilenames: + TEMPERATE: ctmisc03.shp + SNOW: camisc03.shp + URBAN: cumisc03.shp camisc04: Inherits: ^Prop + idle: + TilesetFilenames: + TEMPERATE: ctmisc04.shp + SNOW: camisc04.shp + URBAN: cumisc04.shp camisc05: Inherits: ^Prop + Defaults: + TilesetFilenames: + TEMPERATE: ctmisc05.shp + SNOW: camisc05.shp + URBAN: cumisc05.shp camisc06: Inherits: ^Prop + idle: + TilesetFilenames: + TEMPERATE: ctmisc06.shp + SNOW: camisc06.shp + URBAN: cumisc06.shp caeuro05: Inherits: ^CivStructureNoRubble Defaults: + TilesetFilenames: + TEMPERATE: cteuro05.shp + SNOW: caeuro05.shp + URBAN: cueuro05.shp Offset: 0, -30, 30 capark01: Inherits: ^Prop + idle: + TilesetFilenames: + TEMPERATE: ctpark01.shp + SNOW: capark01.shp + URBAN: cupark01.shp capark02: Inherits: ^Prop Defaults: + TilesetFilenames: + TEMPERATE: ctpark02.shp + SNOW: capark02.shp + URBAN: cupark02.shp Offset: -15, -22, 22 capark03: Inherits: ^Prop Defaults: + TilesetFilenames: + TEMPERATE: ctpark03.shp + SNOW: capark03.shp + URBAN: cupark03.shp Offset: 0, -30, 30 ammo01: Inherits: ^Prop idle: - UseTilesetCode: false + Filename: ammo01.shp cabhut: Inherits: ^Prop idle: - UseTilesetCode: false + Filename: cabhut.shp Offset: 0, -15, 15 ShadowStart: 3 gagate_a: Inherits: ^Prop Defaults: + TilesetFilenames: + TEMPERATE: gtgate_a.shp + SNOW: gagate_a.shp + URBAN: gugate_a.shp Offset: 0, -15 idle: Length: 10 ShadowStart: 21 - make: gagate_a - Start: 10 - Length: -10 - ShadowStart: 30 + make: + TilesetFilenames: + TEMPERATE: gtgate_a.shp + SNOW: gagate_a.shp + URBAN: gugate_a.shp + #ShadowStart: 30 + Frames: 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 spkr01: - Defaults: - AddExtension: false - idle: spkr01.urb + idle: + Filename: spkr01.urb ShadowStart: 1 diff --git a/mods/ra2/sequences/civilian-structures.yaml b/mods/ra2/sequences/civilian-structures.yaml index baf1193ce..ecfbbb221 100644 --- a/mods/ra2/sequences/civilian-structures.yaml +++ b/mods/ra2/sequences/civilian-structures.yaml @@ -1,124 +1,207 @@ cafncb: Inherits: ^Fence - Defaults: ctfncb - icon: wallicon + Defaults: + TilesetFilenames: + TEMPERATE: ctfncb.shp + SNOW: cafncb.shp + URBAN: cufncb.shp + icon: + Filename: wallicon.shp + TilesetFilenames: cafncw: Inherits: ^Fence - Defaults: ctfncw - icon: wallicon + Defaults: + TilesetFilenames: + TEMPERATE: ctfncw.shp + SNOW: cafncw.shp + URBAN: cufncw.shp + icon: + Filename: wallicon.shp + TilesetFilenames: gasand: Inherits: ^Fence - Defaults: gtsand - icon: wallicon + Defaults: + TilesetFilenames: + TEMPERATE: gtsand.shp + SNOW: gasand.shp + URBAN: gusand.shp + icon: + Filename: wallicon.shp + TilesetFilenames: cafncp: Inherits: ^Fence - Defaults: ctfncp - icon: wallicon + Defaults: + TilesetFilenames: + TEMPERATE: ctfncp.shp + SNOW: cafncp.shp + URBAN: cufncp.shp + icon: + Filename: wallicon.shp + TilesetFilenames: cakrmw: Inherits: ^Wall - Defaults: ctkrmw - icon: wallicon + Defaults: + TilesetFilenames: + TEMPERATE: ctkrmw.shp + SNOW: cakrmw.shp + URBAN: cukrmw.shp + icon: + Filename: wallicon.shp + TilesetFilenames: cawash01: Inherits: ^CivStructure - Defaults: cgwash01 + Defaults: + Filename: cgwash01.shp Offset: 0, -60, 60 - UseTilesetCode: false cawash03: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctwash03.shp + SNOW: cawash03.shp + URBAN: cuwash03.shp Offset: -15, -52, 52 cawash04: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctwash04.shp + SNOW: cawash04.shp + URBAN: cuwash04.shp Offset: 0, -60, 60 cawash05: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctwash05.shp + SNOW: cawash05.shp + URBAN: cuwash05.shp Offset: -30, -45, 45 cawash06: Inherits: ^CivStructure Defaults: Offset: 0, -60, 60 - UseTilesetCode: false - idle: cgwash06_a # Custom artwork, original lacked shadow. + idle: # Custom artwork, original lacked shadow. + Filename: cgwash06_a.shp ShadowStart: 1 - damaged-idle: cuwash06 - rubble: cuwash06 + damaged-idle: + Filename: cuwash06.shp + rubble: + Filename: cuwash06.shp cawash07: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctwash07.shp + SNOW: cawash07.shp + URBAN: cuwash07.shp Offset: 0, -45, 45 cawash08: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctwash08.shp + SNOW: cawash08.shp + URBAN: cuwash08.shp Offset: 15, -52, 52 cawash09: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctwash09.shp + SNOW: cawash09.shp + URBAN: cuwash09.shp Offset: 0, -45, 45 cawash10: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctwash10.shp + SNOW: cawash10.shp + URBAN: cuwash10.shp Offset: 0, -60, 60 cawash11: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctwash11.shp + SNOW: cawash11.shp + URBAN: cuwash11.shp Offset: 0, -60, 60 cawsh12: Inherits: ^CivStructure - Defaults: cgwsh12 + Defaults: + Filename: cgwsh12.shp Offset: 0, -45, 45 - UseTilesetCode: false cawash13: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctwash13.shp + SNOW: cawash13.shp + URBAN: cuwash13.shp Offset: 15, -52, 52 cawash14: Inherits: ^CivStructure - Defaults: cgwash14 + Defaults: + Filename: cgwash14.shp Offset: 0, -45, 45 - UseTilesetCode: false cawash15: Inherits: ^CivStructure - Defaults: cgwash15 + Defaults: + Filename: cgwash15.shp Offset: 15, -52, 52 - UseTilesetCode: false cawash16: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctwash16.shp + SNOW: cawash16.shp + URBAN: cuwash16.shp Offset: -30, -60, 60 cawash17: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctwash17.shp + SNOW: cawash17.shp + URBAN: cuwash17.shp Offset: -30, -75, 75 cawash18: Defaults: + TilesetFilenames: + TEMPERATE: ctwash18.shp + SNOW: cawash18.shp + URBAN: cuwash18.shp Offset: 0, -30, 30 - UseTilesetCode: true idle: ShadowStart: 3 - idle-water: cawsh18a + idle-water: + TilesetFilenames: + TEMPERATE: ctwsh18a.shp + SNOW: cawsh18a.shp + URBAN: cuwsh18a.shp Length: 10 ShadowStart: 10 Tick: 80 @@ -126,23 +209,39 @@ cawash18: cawash19: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctwash19.shp + SNOW: cawash19.shp + URBAN: cuwash19.shp Offset: 0, -60, 60 - idle-flag: cawa19_a + idle-flag: + TilesetFilenames: + TEMPERATE: ctwa19_a.shp + SNOW: cawa19_a.shp + URBAN: cuwa19_a.shp Length: 16 - damaged-idle-flag: cawa19_a + damaged-idle-flag: + TilesetFilenames: + TEMPERATE: ctwa19_a.shp + SNOW: cawa19_a.shp + URBAN: cuwa19_a.shp Start: 16 Length: 16 canewy01: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnewy01.shp + SNOW: canewy01.shp + URBAN: cunewy01.shp Offset: 0, -60, 60 canewy04: Inherits: ^CivStructure - Defaults: cgnewy04 + Defaults: + Filename: cgnewy04.shp Offset: 0, -45, 45 - UseTilesetCode: false idle: ShadowStart: -1 damaged-idle: @@ -151,216 +250,433 @@ canewy04: canewy05: Defaults: + TilesetFilenames: + TEMPERATE: ctnewy05.shp + SNOW: canewy05.shp + URBAN: cunewy05.shp Offset: 0, -30, 30 - UseTilesetCode: true idle: ShadowStart: 3 canewy06: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnewy06.shp + SNOW: canewy06.shp + URBAN: cunewy06.shp Offset: 0, -45, 45 canewy07: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnewy07.shp + SNOW: canewy07.shp + URBAN: cunewy07.shp Offset: 0, -45, 45 canewy08: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnewy08.shp + SNOW: canewy08.shp + URBAN: cunewy08.shp Offset: 0, -45, 45 canewy10: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnewy10.shp + SNOW: canewy10.shp + URBAN: cunewy10.shp Offset: -15, -37, 37 canewy11: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnewy11.shp + SNOW: canewy11.shp + URBAN: cunewy11.shp Offset: -15, -37, 37 canewy12: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnewy12.shp + SNOW: canewy12.shp + URBAN: cunewy12.shp Offset: 15, -37, 37 canewy13: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnewy13.shp + SNOW: canewy13.shp + URBAN: cunewy13.shp Offset: 0, -45, 45 canewy14: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnewy14.shp + SNOW: canewy14.shp + URBAN: cunewy14.shp Offset: 0, -45, 45 canewy15: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnewy15.shp + SNOW: canewy15.shp + URBAN: cunewy15.shp Offset: 0, -45, 45 canewy16: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnewy16.shp + SNOW: canewy16.shp + URBAN: cunewy16.shp Offset: 0, -30, 30 canewy17: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnewy17.shp + SNOW: canewy17.shp + URBAN: cunewy17.shp Offset: 0, -30, 30 canewy18: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnewy18.shp + SNOW: canewy18.shp + URBAN: cunewy18.shp Offset: 0, -30, 30 canewy20: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnewy20.shp + SNOW: canewy20.shp + URBAN: cunewy20.shp Offset: 30, -60, 60 canewy21: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnewy21.shp + SNOW: canewy21.shp + URBAN: cunewy21.shp Offset: -30, -60, 60 caarmy01: Inherits: ^CivStructureNoRubble Defaults: + TilesetFilenames: + TEMPERATE: ctarmy01.shp + SNOW: caarmy01.shp + URBAN: cuarmy01.shp Offset: -15, -37, 37 caarmy02: Inherits: ^CivStructureNoRubble Defaults: + TilesetFilenames: + TEMPERATE: ctarmy02.shp + SNOW: caarmy02.shp + URBAN: cuarmy02.shp Offset: 0, -15, 15 caarmy03: Inherits: ^CivStructureNoRubble Defaults: + TilesetFilenames: + TEMPERATE: ctarmy03.shp + SNOW: caarmy03.shp + URBAN: cuarmy03.shp Offset: 0, -15, 15 caarmy04: Inherits: ^CivStructureNoRubble Defaults: + TilesetFilenames: + TEMPERATE: ctarmy04.shp + SNOW: caarmy04.shp + URBAN: cuarmy04.shp Offset: 0, -15, 15 cawa2a: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctwa2a.shp + SNOW: cawa2a.shp + URBAN: cuwa2a.shp Offset: 0, -60, 60 cawa2b: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctwa2b.shp + SNOW: cawa2b.shp + URBAN: cuwa2b.shp Offset: 0, -60, 60 cawa2c: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctwa2c.shp + SNOW: cawa2c.shp + URBAN: cuwa2c.shp Offset: 0, -60, 60 cawa2d: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctwa2d.shp + SNOW: cawa2d.shp + URBAN: cuwa2d.shp Offset: 0, -60, 60 cafarm01: Inherits: ^CivStructureNoRubble Defaults: + TilesetFilenames: + TEMPERATE: ctfarm01.shp + SNOW: cafarm01.shp + URBAN: cufarm01.shp Offset: 0, -30, 30 cafarm02: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctfarm02.shp + SNOW: cafarm02.shp + URBAN: cufarm02.shp Offset: 0, -15, 15 cafarm06: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctfarm06.shp + SNOW: cafarm06.shp + URBAN: cufarm06.shp Offset: 0, -30, 30 cafrma: Inherits: ^CivStructureNoRubble Defaults: + TilesetFilenames: + TEMPERATE: ctfrma.shp + SNOW: cafrma.shp + URBAN: cufrma.shp Offset: 0, -30, 30 cafrmb: Inherits: ^CivStructureNoRubble Defaults: + TilesetFilenames: + TEMPERATE: ctfrmb.shp + SNOW: cafrmb.shp + URBAN: cufrmb.shp Offset: 0, -15, 15 cabarn02: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctbarn02.shp + SNOW: cabarn02.shp + URBAN: cubarn02.shp Offset: 0, -30, 30 causfgl: Inherits: ^Flag - flag: causfgl_a + Defaults: + TilesetFilenames: + TEMPERATE: ctusfgl.shp + SNOW: causfgl.shp + URBAN: cuusfgl.shp + flag: + TilesetFilenames: + TEMPERATE: ctusfgl_a.shp + SNOW: causfgl_a.shp + URBAN: cuusfgl_a.shp carufgl: Inherits: ^Flag - flag: carufgl_a + Defaults: + TilesetFilenames: + TEMPERATE: ctrufgl.shp + SNOW: carufgl.shp + URBAN: curufgl.shp + flag: + TilesetFilenames: + TEMPERATE: ctrufgl_a.shp + SNOW: carufgl_a.shp + URBAN: curufgl_a.shp cairfgl: Inherits: ^Flag - flag: cairfgl_a + Defaults: + TilesetFilenames: + TEMPERATE: ctirfgl.shp + SNOW: cairfgl.shp + URBAN: cuirfgl.shp + flag: + TilesetFilenames: + TEMPERATE: ctirfgl_a.shp + SNOW: cairfgl_a.shp + URBAN: cuirfgl_a.shp capofgl: Inherits: ^Flag - Defaults: capofgl - UseTilesetCode: false - flag: capofgl_a + Defaults: + Filename: capofgl.shp + flag: + Filename: capofgl_a.shp caskfgl: Inherits: ^Flag - flag: cuskfgl_a + Defaults: + TilesetFilenames: + TEMPERATE: ctskfgl.shp + SNOW: caskfgl.shp + URBAN: cuskfgl.shp + flag: + TilesetFilenames: + TEMPERATE: ctskfgl_a.shp + SNOW: caskfgl_a.shp + URBAN: cuskfgl_a.shp calbfgl: Inherits: ^Flag - flag: culbfgl_a + Defaults: + TilesetFilenames: + TEMPERATE: ctlbfgl.shp + SNOW: calbfgl.shp + URBAN: culbfgl.shp + flag: + TilesetFilenames: + TEMPERATE: ctlbfgl_a.shp + SNOW: calbfgl_a.shp + URBAN: culbfgl_a.shp cafrfgl: Inherits: ^Flag - flag: cufrfgl_a + Defaults: + TilesetFilenames: + TEMPERATE: ctfrfgl.shp + SNOW: cafrfgl.shp + URBAN: cufrfgl.shp + flag: + TilesetFilenames: + TEMPERATE: ctfrfgl_a.shp + SNOW: cafrfgl_a.shp + URBAN: cufrfgl_a.shp cagefgl: Inherits: ^Flag - flag: cugefgl_a + Defaults: + TilesetFilenames: + TEMPERATE: ctgefgl.shp + SNOW: cagefgl.shp + URBAN: cugefgl.shp + flag: + TilesetFilenames: + TEMPERATE: ctgefgl_a.shp + SNOW: cagefgl_a.shp + URBAN: cugefgl_a.shp cacufgl: Inherits: ^Flag - flag: cucufgl_a + Defaults: + TilesetFilenames: + TEMPERATE: ctcufgl.shp + SNOW: cacufgl.shp + URBAN: cucufgl.shp + flag: + TilesetFilenames: + TEMPERATE: ctcufgl_a.shp + SNOW: cacufgl_a.shp + URBAN: cucufgl_a.shp caukfgl: Inherits: ^Flag - flag: cuukfgl_a + Defaults: + TilesetFilenames: + TEMPERATE: ctukfgl.shp + SNOW: caukfgl.shp + URBAN: cuukfgl.shp + flag: + TilesetFilenames: + TEMPERATE: ctukfgl_a.shp + SNOW: caukfgl_a.shp + URBAN: cuukfgl_a.shp camisc01: Inherits: ^Prop Defaults: + TilesetFilenames: + TEMPERATE: ctmisc01.shp + SNOW: camisc01.shp + URBAN: cumisc01.shp Offset: 0, -15, 15 camisc02: Inherits: ^Prop Defaults: + TilesetFilenames: + TEMPERATE: ctmisc02.shp + SNOW: camisc02.shp + URBAN: cumisc02.shp Offset: 0, -15, 15 camisc03: Inherits: ^Prop Defaults: + TilesetFilenames: + TEMPERATE: ctmisc03.shp + SNOW: camisc03.shp + URBAN: cumisc03.shp Offset: 0, -15, 15 camisc04: Inherits: ^Prop Defaults: + TilesetFilenames: + TEMPERATE: ctmisc04.shp + SNOW: camisc04.shp + URBAN: cumisc04.shp Offset: 0, -15, 15 camisc05: Inherits: ^CivStructureNoRubble Defaults: + TilesetFilenames: + TEMPERATE: ctmisc05.shp + SNOW: camisc05.shp + URBAN: cumisc05.shp Offset: 0, -15, 15 idle: ShadowStart: 2 @@ -370,250 +686,415 @@ camisc05: camisc06: Inherits: ^Prop Defaults: + TilesetFilenames: + TEMPERATE: ctmisc06.shp + SNOW: camisc06.shp + URBAN: cumisc06.shp Offset: -15, -22, 22 camsc07: Inherits: ^CivStructureNoRubble Defaults: + TilesetFilenames: + TEMPERATE: ctmsc07.shp + SNOW: camsc07.shp + URBAN: cumsc07.shp Offset: 0, -30, 30 camsc08: Inherits: ^CivStructureNoRubble Defaults: + TilesetFilenames: + TEMPERATE: ctmsc08.shp + SNOW: camsc08.shp + URBAN: cumsc08.shp Offset: 0, -15, 15 camsc09: Inherits: ^CivStructureNoRubble Defaults: + TilesetFilenames: + TEMPERATE: ctmsc09.shp + SNOW: camsc09.shp + URBAN: cumsc09.shp Offset: 0, -15, 15 camsc10: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctmsc10.shp + SNOW: camsc10.shp + URBAN: cumsc10.shp Offset: 0, -60, 60 camiam01: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctmiam01.shp + SNOW: camiam01.shp + URBAN: cumiam01.shp Offset: -30, -45, 45 camiam02: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctmiam02.shp + SNOW: camiam02.shp + URBAN: cumiam02.shp Offset: -30, -45, 45 camiam03: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctmiam03.shp + SNOW: camiam03.shp + URBAN: cumiam03.shp Offset: 15, -37, 37 camiam04: Inherits: ^CivStructureNoRubble Defaults: + TilesetFilenames: + TEMPERATE: ctmiam04.shp + SNOW: camiam04.shp + URBAN: cumiam04.shp Offset: 0, -15, 15 camiam05: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctmiam05.shp + SNOW: camiam05.shp + URBAN: cumiam05.shp Offset: 15, -52, 52 camiam06: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctmiam06.shp + SNOW: camiam06.shp + URBAN: cumiam06.shp Offset: 0, -60, 60 camiam07: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctmiam07.shp + SNOW: camiam07.shp + URBAN: cumiam07.shp Offset: 0, -60, 60 camiam08: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctmiam08.shp + SNOW: camiam08.shp + URBAN: cumiam08.shp Offset: -30, -30, 30 castrt01: Defaults: + TilesetFilenames: + TEMPERATE: ctstrt01.shp + SNOW: castrt01.shp + URBAN: custrt01.shp Offset: 0, -15, 15 - UseTilesetCode: true idle: ShadowStart: 3 castrt02: Defaults: + Filename: castrt02.shp Offset: 0, -15, 15 idle: ShadowStart: 3 castrt03: Defaults: + Filename: castrt03.shp Offset: 0, -15, 15 idle: ShadowStart: 3 castrt04: Defaults: + Filename: castrt04.shp Offset: 0, -15, 15 idle: ShadowStart: 3 castrt05: Defaults: + TilesetFilenames: + TEMPERATE: ctstrt05.shp + SNOW: castrt05.shp + URBAN: custrt05.shp Offset: 0, -15, 15 - UseTilesetCode: true idle: ShadowStart: 3 camex01: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctmex01.shp + SNOW: camex01.shp + URBAN: cumex01.shp Offset: -15, -37, 37 camex02: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctmex02.shp + SNOW: camex02.shp + URBAN: cumex02.shp Offset: -30, -75, 75 camex03: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctmex03.shp + SNOW: camex03.shp + URBAN: cumex03.shp Offset: 0, -45, 45 camex04: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctmex04.shp + SNOW: camex04.shp + URBAN: cumex04.shp Offset: 0, -60, 60 camex05: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctmex05.shp + SNOW: camex05.shp + URBAN: cumex05.shp Offset: 0, -30, 30 castl01: Inherits: ^CivStructure - Defaults: custl01 + Defaults: + Filename: custl01.shp + TilesetFilenames: + TEMPERATE: ctstl01.shp Offset: 0, -60, 60 - TilesetOverrides: - SNOW: URBAN castl02: Inherits: ^CivStructure - Defaults: custl02 + Defaults: + TilesetFilenames: + TEMPERATE: ctstl02.shp + SNOW: castl02.shp + URBAN: custl02.shp Offset: 0, -60, 60 castl03: Inherits: ^CivStructure - Defaults: custl03 + Defaults: + TilesetFilenames: + TEMPERATE: ctstl03.shp + SNOW: castl03.shp + URBAN: custl03.shp Offset: 0, -60, 60 castl04: Inherits: ^CivStructure - Defaults: cgstl04 + Defaults: + Filename: cgstl04.shp Offset: 60, -60, 60 - UseTilesetCode: false castl05a: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctstl05a.shp + SNOW: castl05a.shp + URBAN: custl05a.shp Offset: 0, -60, 60 castl05b: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctstl05b.shp + SNOW: castl05b.shp + URBAN: custl05b.shp Offset: 0, -60, 60 castl05c: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctstl05c.shp + SNOW: castl05c.shp + URBAN: custl05c.shp Offset: 0, -60, 60 castl05d: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctstl05d.shp + SNOW: castl05d.shp + URBAN: custl05d.shp Offset: 0, -60, 60 castl05e: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctstl05e.shp + SNOW: castl05e.shp + URBAN: custl05e.shp Offset: 0, -60, 60 castl05f: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctstl05f.shp + SNOW: castl05f.shp + URBAN: custl05f.shp Offset: 0, -60, 60 castl05g: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctstl05g.shp + SNOW: castl05g.shp + URBAN: custl05g.shp Offset: 0, -60, 60 castl05h: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctstl05h.shp + SNOW: castl05h.shp + URBAN: custl05h.shp Offset: 0, -60, 60 cacolo01: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctcolo01.shp + SNOW: cacolo01.shp + URBAN: cucolo01.shp Offset: -30, -60, 60 caind01: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctind01.shp + SNOW: caind01.shp + URBAN: cuind01.shp Offset: 0, -60, 60 calab: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctlab.shp + SNOW: calab.shp + URBAN: culab.shp Offset: 15, -52, 52 cagas01: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctgas01.shp + SNOW: cagas01.shp + URBAN: cugas01.shp Offset: 0, -45, 45 cahse01: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cthse01.shp + SNOW: cahse01.shp + URBAN: cuhse01.shp Offset: -15, -37, 37 cahse02: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cthse02.shp + SNOW: cahse02.shp + URBAN: cuhse02.shp Offset: -15, -37, 37 cahse03: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cthse03.shp + SNOW: cahse03.shp + URBAN: cuhse03.shp Offset: 15, -52, 52 cahse04: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cthse04.shp + SNOW: cahse04.shp + URBAN: cuhse04.shp Offset: -15, -37, 37 cahse05: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cthse05.shp + SNOW: cahse05.shp + URBAN: cuhse05.shp Offset: 15, -22, 22 cahse06: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cthse06.shp + SNOW: cahse06.shp + URBAN: cuhse06.shp Offset: -15, -22, 22 cahse07: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cthse07.shp + SNOW: cahse07.shp + URBAN: cuhse07.shp Offset: 15, -37, 37 cawt01: Defaults: + Filename: cgwt01.shp + TilesetFilenames: + SNOW: cawt01.shp Offset: 0, -15, 15 - UseTilesetCode: true - TilesetOverrides: - TEMPERATE: GENERIC - URBAN: GENERIC idle: ShadowStart: 2 damaged-idle: @@ -623,58 +1104,86 @@ cawt01: cabunk01: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctbunk01.shp + SNOW: cabunk01.shp + URBAN: cubunk01.shp Offset: 0, -30, 30 cabunk02: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctbunk02.shp + SNOW: cabunk02.shp + URBAN: cubunk02.shp Offset: 0, -30, 30 carus01: Inherits: ^CivStructure - Defaults: cgrus01 + Defaults: + Filename: cgrus01.shp Offset: 0, -60, 60 - UseTilesetCode: false carus02a: Inherits: ^CivStructure Defaults: + Filename: carus02a.shp Offset: 0, -15, 15 - UseTilesetCode: false carus02b: Inherits: ^CivStructure Defaults: + Filename: carus02b.shp Offset: 0, -15, 15 - UseTilesetCode: false carus02c: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctrus02c.shp + SNOW: carus02c.shp + URBAN: curus02c.shp Offset: 0, -15, 15 -rubble: carus02d: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctrus02d.shp + SNOW: carus02d.shp + URBAN: curus02d.shp Offset: 0, -15, 15 -rubble: carus02e: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctrus02e.shp + SNOW: carus02e.shp + URBAN: curus02e.shp Offset: 0, -15, 15 -rubble: carus02f: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctrus02f.shp + SNOW: carus02f.shp + URBAN: curus02f.shp Offset: 0, -15, 15 -rubble: carus02g: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctrus02g.shp + SNOW: carus02g.shp + URBAN: curus02g.shp Offset: 0, -15, 15 rubble: ShadowStart: -1 @@ -682,168 +1191,296 @@ carus02g: carus03: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctrus03.shp + SNOW: carus03.shp + URBAN: curus03.shp Offset: 45, -52, 52 carus04: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctrus04.shp + SNOW: carus04.shp + URBAN: curus04.shp Offset: 0, -60, 60 carus05: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctrus05.shp + SNOW: carus05.shp + URBAN: curus05.shp Offset: 0, -60, 60 carus06: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctrus06.shp + SNOW: carus06.shp + URBAN: curus06.shp Offset: 0, -60, 60 carus07: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctrus07.shp + SNOW: carus07.shp + URBAN: curus07.shp Offset: 0, -15, 15 carus08: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctrus08.shp + SNOW: carus08.shp + URBAN: curus08.shp Offset: 0, -15, 15 carus09: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctrus09.shp + SNOW: carus09.shp + URBAN: curus09.shp Offset: -15, -22, 22 carus10: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctrus10.shp + SNOW: carus10.shp + URBAN: curus10.shp Offset: -15, -22, 22 carus11: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctrus11.shp + SNOW: carus11.shp + URBAN: curus11.shp Offset: -15, -22, 22 cachig01: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctchig01.shp + SNOW: cachig01.shp + URBAN: cuchig01.shp Offset: -15, -37, 37 cachig02: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctchig02.shp + SNOW: cachig02.shp + URBAN: cuchig02.shp Offset: 15, -37, 37 cachig03: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctchig03.shp + SNOW: cachig03.shp + URBAN: cuchig03.shp Offset: -15, -37, 37 cachig04: Inherits: ^CivStructure - Defaults: cgchig04 + Defaults: + Filename: cgchig04.shp Offset: 0, -30, 30 - UseTilesetCode: false cachig05: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctchig05.shp + SNOW: cachig05.shp + URBAN: cuchig05.shp Offset: 0, -60, 60 cachig06: Inherits: ^CivStructure - Defaults: cgchig06 + Defaults: + Filename: cgchig06.shp Offset: 0, -30, 30 - UseTilesetCode: false catech01: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cttech01.shp + SNOW: catech01.shp + URBAN: cutech01.shp Offset: 0, -45, 45 catexs01: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cttexs01.shp + SNOW: catexs01.shp + URBAN: cutexs01.shp Offset: 0, -30, 30 catexs02: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cttexs02.shp + SNOW: catexs02.shp + URBAN: cutexs02.shp Offset: 0, -60, 60 catexs03: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cttexs03.shp + SNOW: catexs03.shp + URBAN: cutexs03.shp Offset: 0, -45, 45 catexs04: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cttexs04.shp + SNOW: catexs04.shp + URBAN: cutexs04.shp Offset: 0, -45, 45 catexs05: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cttexs05.shp + SNOW: catexs05.shp + URBAN: cutexs05.shp Offset: 0, -45, 45 catexs06: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cttexs06.shp + SNOW: catexs06.shp + URBAN: cutexs06.shp Offset: 0, -45, 45 catexs07: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cttexs07.shp + SNOW: catexs07.shp + URBAN: cutexs07.shp Offset: 0, -45, 45 catexs08: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cttexs08.shp + SNOW: catexs08.shp + URBAN: cutexs08.shp Offset: 15, -37, 37 canwy05: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnwy05.shp + SNOW: canwy05.shp + URBAN: cunwy05.shp Offset: 0, -60, 60 canwy09: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnwy09.shp + SNOW: canwy09.shp + URBAN: cunwy09.shp Offset: 15, -37, 37 canwy22: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnwy22.shp + SNOW: canwy22.shp + URBAN: cunwy22.shp Offset: 0, -45, 45 canwy23: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnwy23.shp + SNOW: canwy23.shp + URBAN: cunwy23.shp Offset: -15, -37, 37 canwy24: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnwy24.shp + SNOW: canwy24.shp + URBAN: cunwy24.shp Offset: 0, -45, 45 canwy25: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnwy25.shp + SNOW: canwy25.shp + URBAN: cunwy25.shp Offset: 0, -45, 45 canwy26: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctnwy26.shp + SNOW: canwy26.shp + URBAN: cunwy26.shp Offset: -30, -60, 60 camov01: Inherits: ^CivStructureNoRubble Defaults: + TilesetFilenames: + TEMPERATE: ctmov01.shp + SNOW: camov01.shp + URBAN: cumov01.shp Offset: 45, -37, 37 - idle-overlay: camov01_a + idle-overlay: + TilesetFilenames: + TEMPERATE: ctmov01_a.shp + SNOW: camov01_a.shp + URBAN: cumov01_a.shp Length: 30 Tick: 200 - damaged-idle-overlay: camov01_a + damaged-idle-overlay: + TilesetFilenames: + TEMPERATE: ctmov01_a.shp + SNOW: camov01_a.shp + URBAN: cumov01_a.shp Start: 30 Length: 30 Tick: 200 @@ -851,92 +1488,160 @@ camov01: camov02: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctmov02.shp + SNOW: camov02.shp + URBAN: cumov02.shp Offset: 0, -30, 30 - idle-overlay: camov02_a + idle-overlay: + TilesetFilenames: + TEMPERATE: ctmov02_a.shp + SNOW: camov02_a.shp + URBAN: cumov02_a.shp Length: 2 Tick: 200 - damaged-idle-overlay: camov02_a + damaged-idle-overlay: + TilesetFilenames: + TEMPERATE: ctmov02_a.shp + SNOW: camov02_a.shp + URBAN: cumov02_a.shp Start: 2 Length: 2 Tick: 200 capars01: Inherits: ^CivStructure - Defaults: cgpars01 + Defaults: + Filename: cgpars01.shp Offset: 0, -60, 60 - UseTilesetCode: false capars02: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctpars02.shp + SNOW: capars02.shp + URBAN: cupars02.shp Offset: -30, -75, 75 capars04: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctpars04.shp + SNOW: capars04.shp + URBAN: cupars04.shp Offset: 0, -45, 45 capars05: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctpars05.shp + SNOW: capars05.shp + URBAN: cupars05.shp Offset: 0, -45, 45 capars06: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctpars06.shp + SNOW: capars06.shp + URBAN: cupars06.shp Offset: 0, -45, 45 capars07: Inherits: ^CivStructureNoRubble Defaults: + TilesetFilenames: + TEMPERATE: ctpars07.shp + SNOW: capars07.shp + URBAN: cupars07.shp Offset: 0, -15, 15 capars08: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctpars08.shp + SNOW: capars08.shp + URBAN: cupars08.shp Offset: -30, -75, 75 capars09: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctpars09.shp + SNOW: capars09.shp + URBAN: cupars09.shp Offset: -30, -75, 75 capars10: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctpars10.shp + SNOW: capars10.shp + URBAN: cupars10.shp Offset: -15, -52, 75 capars11: Inherits: ^CivStructure - Defaults: cgpars11 + Defaults: + Filename: cgpars11.shp Offset: 15, -52, 75 - UseTilesetCode: false capars12: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctpars12.shp + SNOW: capars12.shp + URBAN: cupars12.shp Offset: 30, -60, 75 capars13: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctpars13.shp + SNOW: capars13.shp + URBAN: cupars13.shp Offset: 15, -52, 52 capars14: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctpars14.shp + SNOW: capars14.shp + URBAN: cupars14.shp Offset: -15, -52, 52 cats01: Inherits: ^CivStructureNoRubble Defaults: + TilesetFilenames: + TEMPERATE: ctts01.shp + SNOW: cats01.shp + URBAN: cuts01.shp Offset: 0, -30, 30 cagard01: Inherits: ^CivStructureNoRubble Defaults: + TilesetFilenames: + TEMPERATE: ctgard01.shp + SNOW: cagard01.shp + URBAN: cugard01.shp Offset: 0, -15, 15 - idle-flag: cagrd1_a + idle-flag: + TilesetFilenames: + TEMPERATE: ctgrd1_a.shp + SNOW: cagrd1_a.shp + URBAN: cugrd1_a.shp Length: 9 ShadowStart: 9 Tick: 80 @@ -944,30 +1649,51 @@ cagard01: caeur1: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cteur1.shp + SNOW: caeur1.shp + URBAN: cueur1.shp Offset: 0, -30, 30 caeur2: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cteur2.shp + SNOW: caeur2.shp + URBAN: cueur2.shp Offset: 0, -30, 30 caeur04: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: cteur04.shp + SNOW: caeur04.shp + URBAN: cueur04.shp Offset: -15, -52, 52 caprs03: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctprs03.shp + SNOW: caprs03.shp + URBAN: cuprs03.shp Offset: -30, -75, 75 caswst01: Inherits: ^CivStructure Defaults: + TilesetFilenames: + TEMPERATE: ctswst01.shp + SNOW: caswst01.shp + URBAN: cuswst01.shp Offset: 15, -37, 37 galite: Defaults: + Filename: galite.shp DepthSprite: isodepth.shp Offset: 0, -12, 12 idle: @@ -975,58 +1701,68 @@ galite: damaged-idle: Start: 1 ShadowStart: 3 - icon: liteicon + icon: + Filename: liteicon.shp cacity01: Defaults: + Filename: cacity01.shp Offset: 0, -60, 60 idle: ShadowStart: 3 cacity02: Defaults: + Filename: cacity02.shp Offset: -15, -67, 67 idle: ShadowStart: 3 cacity03: Defaults: + Filename: cacity03.shp Offset: 0, -45, 45 idle: ShadowStart: 3 cacity04: Defaults: + Filename: cacity04.shp Offset: 0, -60, 60 idle: ShadowStart: 3 city01: Defaults: + Filename: city01.shp Offset: 0, -45, 45 idle: ShadowStart: 2 city02: Defaults: + Filename: city02.shp Offset: -15, -52, 52 idle: ShadowStart: 2 city03: Defaults: + Filename: city03.shp Offset: 0, -45, 45 idle: ShadowStart: 2 city04: Defaults: + Filename: city04.shp Offset: 0, -60, 60 idle: ShadowStart: 2 city05: Defaults: + Filename: city05.shp Offset: 0, -60, 60 idle: ShadowStart: 2 diff --git a/mods/ra2/sequences/civilians.yaml b/mods/ra2/sequences/civilians.yaml index 68f91dbf1..8e9621fb2 100644 --- a/mods/ra2/sequences/civilians.yaml +++ b/mods/ra2/sequences/civilians.yaml @@ -1,11 +1,17 @@ civ1: Inherits: ^CivInfantry + Defaults: + Filename: civ1.shp civ2: Inherits: ^CivInfantry + Defaults: + Filename: civ2.shp civ3: Inherits: ^CivInfantry + Defaults: + Filename: civ3.shp die1: Length: 13 die2: @@ -23,6 +29,8 @@ civ3: vladimir: Inherits: ^CivInfantry + Defaults: + Filename: vladimir.shp prone-stand: Frames: 86, 92, 98, 104, 110, 116, 122, 128 prone-run: @@ -54,6 +62,8 @@ vladimir: pentgen: Inherits: ^CivInfantry + Defaults: + Filename: pentgen.shp prone-stand: Frames: 134, 140, 146, 152, 158, 164, 170, 176 prone-run: @@ -76,6 +86,8 @@ pentgen: pres: Inherits: ^CivInfantry + Defaults: + Filename: pres.shp prone-stand: Frames: 134, 140, 146, 152, 158, 164, 170, 176 prone-run: @@ -87,6 +99,8 @@ pres: ssrv: Inherits: ^CivInfantry + Defaults: + Filename: ssrv.shp prone-stand: Frames: 134, 140, 146, 152, 158, 164, 170, 176 prone-run: @@ -101,18 +115,28 @@ ssrv: civa: Inherits: ^CivInfantry + Defaults: + Filename: civa.shp civb: Inherits: ^CivInfantry + Defaults: + Filename: civb.shp civc: Inherits: ^CivInfantry + Defaults: + Filename: civc.shp civbbp: Inherits: ^CivInfantry + Defaults: + Filename: civbbp.shp civbfm: Inherits: ^CivInfantry + Defaults: + Filename: civbfm.shp -shoot: prone-stand: Frames: 134, 140, 146, 152, 158, 164, 170, 176 @@ -125,6 +149,8 @@ civbfm: civbf: Inherits: ^CivInfantry + Defaults: + Filename: civbf.shp -shoot: prone-stand: Frames: 134, 140, 146, 152, 158, 164, 170, 176 @@ -137,6 +163,8 @@ civbf: civbtm: Inherits: ^CivInfantry + Defaults: + Filename: civbtm.shp -shoot: prone-stand: Frames: 134, 140, 146, 152, 158, 164, 170, 176 @@ -149,14 +177,20 @@ civbtm: civsfm: Inherits: ^CivInfantry + Defaults: + Filename: civsfm.shp cheer: Start: 231 civsf: Inherits: ^CivInfantry + Defaults: + Filename: civsf.shp civstm: Inherits: ^CivInfantry + Defaults: + Filename: civstm.shp die1: Length: 13 die2: diff --git a/mods/ra2/sequences/defaults.yaml b/mods/ra2/sequences/defaults.yaml index 68f30bcac..ed946f838 100644 --- a/mods/ra2/sequences/defaults.yaml +++ b/mods/ra2/sequences/defaults.yaml @@ -21,7 +21,8 @@ Start: 101 Length: 15 paradrop: - icon: xxicon + icon: + Filename: xxicon.shp ^BasicInfantry: Inherits: ^Animal @@ -37,13 +38,16 @@ Start: 134 die2: Start: 149 - die4: nukedie + die4: + Filename: nukedie.shp Length: * Tick: 50 - die5: yuridie + die5: + Filename: yuridie.shp Length: * Tick: 80 - die6: electro + die6: + Filename: electro.shp Length: * Tick: 80 @@ -117,43 +121,34 @@ Start: 293 ^MindControllable: - mindcontrol: yuricntl + mindcontrol: + Filename: yuricntl.shp Length: * Offset: 0, -24, 24 ^bridge: Defaults: ZOffset: -1c511 - UseTilesetExtension: true Start: 1 ZRamp: 1 Offset: 0, 0, 0.5 ^Structure: Defaults: - UseTilesetCode: true - TilesetOverrides: - TEMPERATE: GENERIC - URBAN: GENERIC DepthSprite: isodepth.shp idle: ShadowStart: 3 make: Length: 25 ShadowStart: 25 - TilesetOverrides: - TEMPERATE: TEMPERATE - URBAN: URBAN damaged-idle: Start: 1 ShadowStart: 4 icon: Offset: 0,0 - UseTilesetCode: false ^TechStructure: Defaults: - UseTilesetCode: true DepthSprite: isodepth.shp idle: ShadowStart: 4 @@ -169,7 +164,6 @@ ^CivStructure: Defaults: - UseTilesetCode: true DepthSprite: isodepth.shp idle: ShadowStart: 4 @@ -200,7 +194,6 @@ ^Fence: Defaults: Offset: 0, -15, 15 - UseTilesetCode: true DepthSprite: isodepth.shp idle: Length: 16 @@ -211,7 +204,6 @@ ShadowStart: 48 icon: Offset: 0,0 - UseTilesetCode: false ^Wall: Inherits: ^Fence @@ -228,18 +220,15 @@ ShadowStart: 80 icon: Offset: 0,0 - UseTilesetCode: false ^Pole: Defaults: - UseTilesetExtension: true idle: ShadowStart: 1 ^Prop: Defaults: Offset: 0, -15, 15 - UseTilesetCode: true idle: ShadowStart: 3 @@ -247,11 +236,9 @@ idle: ShadowStart: 1 Offset: 0, -15, 15 - UseTilesetExtension: true ^Drill: Defaults: - UseTilesetExtension: true Offset: -1, -16, 16 idle: ShadowStart: 11 @@ -264,7 +251,6 @@ ^Tree: idle: ShadowStart: 1 - UseTilesetExtension: true Offset: -1, -16, 16 ^WithMachineGunMuzzle: @@ -272,47 +258,49 @@ Facings: 8 Length: 6 Combine: - mgun-n: + 0: + Filename: mgun-n.shp Length: 6 Offset: 0, 0 - UseTilesetCode: false - mgun-nw: + 1: + Filename: mgun-nw.shp Length: 6 Offset: 0, 0 - UseTilesetCode: false - mgun-w: + 2: + Filename: mgun-w.shp Length: 6 Offset: 0, 0 - UseTilesetCode: false - mgun-sw: + 3: + Filename: mgun-sw.shp Length: 6 Offset: 0, 0 - UseTilesetCode: false - mgun-s: + 4: + Filename: mgun-s.shp Length: 6 Offset: 0, 0 - UseTilesetCode: false - mgun-se: + 5: + Filename: mgun-se.shp Length: 6 Offset: 0, 0 - UseTilesetCode: false - mgun-e: + 6: + Filename: mgun-e.shp Length: 6 Offset: 0, 0 - UseTilesetCode: false - mgun-ne: + 7: + Filename: mgun-ne.shp Length: 6 Offset: 0, 0 - UseTilesetCode: false ^WithCannonMuzzle: - muzzle: gunfire + muzzle: + Filename: gunfire.shp Length: * - muzzle-2: vtmuzzle + muzzle-2: + Filename: vtmuzzle.shp Length: * ^WithFlakMuzzle: - muzzle: gunfire + muzzle: + Filename: gunfire.shp Length: * Offset: 0,0 - UseTilesetCode: false diff --git a/mods/ra2/sequences/misc.yaml b/mods/ra2/sequences/misc.yaml index 21da10a39..e2942e0a3 100644 --- a/mods/ra2/sequences/misc.yaml +++ b/mods/ra2/sequences/misc.yaml @@ -1,5 +1,6 @@ overlay: - Defaults: place + Defaults: + Filename: place.shp Offset: 0, -15, 1 ZRamp: 1 build-valid-temperate: @@ -18,7 +19,8 @@ overlay: Start: 2 editor-overlay: - Defaults: place + Defaults: + Filename: place.shp ZRamp: 1 Offset: 0, -15, 1 copy: @@ -26,82 +28,111 @@ editor-overlay: Start: 1 poweroff: - offline: poweroff + offline: + Filename: poweroff.shp Length: * Tick: 160 Offset: 0,-50 ZOffset: 2047 allyrepair: - repair: wrench + repair: + Filename: wrench.shp Length: 7 Tick: 160 ZOffset: 2047 rallypoint: - flag: mouse + flag: + Filename: mouse.shp Start: 269 Length: 10 Offset: 2,-12 ZOffset: -1023 - circles: mouse + circles: + Filename: mouse.shp Start: 249 Length: 10 ZOffset: -2047 beacon: - idle: pbeacon + idle: + Filename: pbeacon.shp Length: 20 Tick: 200 ZOffset: 2047 - arrow: pbeacon + arrow: + Filename: pbeacon.shp Length: 1 ZOffset: 2047 crate-effects: - Defaults: null + Defaults: Length: * - dollar: money - reveal-map: reveal - hide-map: shroudx - fpower: firepowr - armor: armor - heal: healall - nuke: mltimisl - levelup: veteran - speed: speed + dollar: + Filename: money.shp + reveal-map: + Filename: reveal.shp + hide-map: + Filename: shroudx.shp + fpower: + Filename: firepowr.shp + armor: + Filename: armor.shp + heal: + Filename: healall.shp + nuke: + Filename: mltimisl.shp + levelup: + Filename: veteran.shp + speed: + Filename: speed.shp crate: Defaults: + TilesetFilenames: + TEMPERATE: crate.tem + SNOW: crate.sno + URBAN: crate.urb Offset: 0, -12, 12 ShadowStart: 1 - UseTilesetExtension: true idle: land: - water: wcrate + water: + TilesetFilenames: + TEMPERATE: wcrate.tem + SNOW: wcrate.sno + URBAN: wcrate.urb rank: - veteran: pips + veteran: + Filename: pips.shp Start: 13 - elite: pips + elite: + Filename: pips.shp Start: 14 mpspawn: idle: + Filename: mpspawn.shp Length: * ZRamp: 1 waypoint: idle: + Filename: waypoint.shp Length: * ZRamp: 1 clock: idle: + Filename: clock.shp Length: * BlendMode: Multiply parach: + Defaults: + Filename: parach.shp open: Length: 19 idle: @@ -112,28 +143,39 @@ parach: Length: 29 cameo-chevron: - idle: cameo-chevron.png - AddExtension: false + idle: + Filename: cameo-chevron.png pips: + Defaults: + Filename: pips.shp medic: Start: 6 - groups: pipsra #TODO: backfall to RA asset + groups: #TODO: backfall to RA asset + Filename: pipsra.shp Start: 8 Length: 10 - pip-empty: pips2 - pip-green: pips2 + pip-empty: + Filename: pips2.shp + pip-green: + Filename: pips2.shp Start: 1 - pip-yellow: pips2 + pip-yellow: + Filename: pips2.shp Start: 2 - pip-gray: pips2 + pip-gray: + Filename: pips2.shp Start: 3 - pip-red: pips2 + pip-red: + Filename: pips2.shp Start: 4 - pip-blue: pips2 + pip-blue: + Filename: pips2.shp Start: 5 - pip-ammo: ammopips - pip-ammoempty: ammopips + pip-ammo: + Filename: ammopips.shp + pip-ammoempty: + Filename: ammopips.shp Start: 1 # TODO: pip-empty-building: @@ -147,7 +189,8 @@ pips: Start: 4 pip-blue-building: Start: 5 - pip-disguise: pip-disguise + pip-disguise: + Filename: pip-disguise.shp Length: * Tick: 300 Offset: 6, -2 @@ -156,152 +199,229 @@ explosion: Defaults: Length: * Offset: 0, 0, 30 - building: twlt070 + building: + Filename: twlt070.shp Offset: 0, 0, 40 - ionring: ring1 + ionring: + Filename: ring1.shp Tick: 160 ZRamp: 1 - huge_watersplash: h2o_exp1 + huge_watersplash: + Filename: h2o_exp1.shp Offset: 0, 0, 39 - large_watersplash: h2o_exp2 - small_watersplash: h2o_exp3 - piff: piff - piffpiff: piffpiff - small_explosion: explosml - medium_explosion: explomed + large_watersplash: + Filename: h2o_exp2.shp + small_watersplash: + Filename: h2o_exp3.shp + piff: + Filename: piff.shp + piffpiff: + Filename: piffpiff.shp + small_explosion: + Filename: explosml.shp + medium_explosion: + Filename: explomed.shp Offset: 0, 0, 27 - large_explosion: explolrg + large_explosion: + Filename: explolrg.shp Offset: 0, 0, 31 - tiny_bang: s_bang16 - small_bang: s_bang24 - medium_bang: s_bang34 - large_bang: s_bang48 - tiny_brnl: s_brnl20 - small_brnl: s_brnl30 - medium_brnl: s_brnl40 - large_brnl: s_brnl58 + tiny_bang: + Filename: s_bang16.shp + small_bang: + Filename: s_bang24.shp + medium_bang: + Filename: s_bang34.shp + large_bang: + Filename: s_bang48.shp + tiny_brnl: + Filename: s_brnl20.shp + small_brnl: + Filename: s_brnl30.shp + medium_brnl: + Filename: s_brnl40.shp + large_brnl: + Filename: s_brnl58.shp Offset: 0, 0, 30 - tiny_tumu: s_tumu22 - small_tumu: s_tumu30 - medium_tumu: s_tumu42 - large_tumu: s_tumu60 + tiny_tumu: + Filename: s_tumu22.shp + small_tumu: + Filename: s_tumu30.shp + medium_tumu: + Filename: s_tumu42.shp + large_tumu: + Filename: s_tumu60.shp Offset: 0, 0, 31 - tiny_clsn: s_clsn16 - small_clsn: s_clsn22 - medium_clsn: s_clsn30 - large_clsn: s_clsn42 - verylarge_clsn: s_clsn58 + tiny_clsn: + Filename: s_clsn16.shp + small_clsn: + Filename: s_clsn22.shp + medium_clsn: + Filename: s_clsn30.shp + large_clsn: + Filename: s_clsn42.shp + verylarge_clsn: + Filename: s_clsn58.shp Offset: 0, 0, 30 - tiny_twlt: twlt026 - small_twlt: twlt036 - medium_twlt: twlt050 + tiny_twlt: + Filename: twlt026.shp + small_twlt: + Filename: twlt036.shp + medium_twlt: + Filename: twlt050.shp Offset: 0, 0, 26 - large_twlt: twlt070 + large_twlt: + Filename: twlt070.shp Offset: 0, 0, 36 - verylarge_twlt: twlt100 + verylarge_twlt: + Filename: twlt100.shp Offset: 0, 0, 51 - tiny_grey_explosion: xgrysml1 - small_grey_explosion: xgrysml2 - medium_grey_explosion: xgrymed1 - large_grey_explosion: xgrymed2 - small_barrel_explosion: brrlexp1 - large_barrel_explosion: brrlexp2 - nuke_explosion: nukeanim - nuke_ball: nukeball - demotruck_explosion: demtexp - elite_explosion: vtexplod - terrorist_explosion: mininuke - apoc_explosion: apocexp - kirovtesla: ktstlexp - flak_puff: htrkpuff - flak_puff_AA: smkpuff - bombcurs: bombcurs + tiny_grey_explosion: + Filename: xgrysml1.shp + small_grey_explosion: + Filename: xgrysml2.shp + medium_grey_explosion: + Filename: xgrymed1.shp + large_grey_explosion: + Filename: xgrymed2.shp + small_barrel_explosion: + Filename: brrlexp1.shp + large_barrel_explosion: + Filename: brrlexp2.shp + nuke_explosion: + Filename: nukeanim.shp + nuke_ball: + Filename: nukeball.shp + demotruck_explosion: + Filename: demtexp.shp + elite_explosion: + Filename: vtexplod.shp + terrorist_explosion: + Filename: mininuke.shp + apoc_explosion: + Filename: apocexp.shp + kirovtesla: + Filename: ktstlexp.shp + flak_puff: + Filename: htrkpuff.shp + flak_puff_AA: + Filename: smkpuff.shp + bombcurs: + Filename: bombcurs.shp Tick: 300 - ivan_explosion: crivexp - ivan_explosionE: crivexp2 - tesla_impact: tstimpct - iron_fx: ironfx - chronosk: chronosk - psi_wave: ring1 - weathercloud1: wccloud1 + ivan_explosion: + Filename: crivexp.shp + ivan_explosionE: + Filename: crivexp2.shp + tesla_impact: + Filename: tstimpct.shp + iron_fx: + Filename: ironfx.shp + chronosk: + Filename: chronosk.shp + psi_wave: + Filename: ring1.shp + weathercloud1: + Filename: wccloud1.shp Offset: 0, -175 Tick: 80 - weatherbolt1: wclbolt1 + weatherbolt1: + Filename: wclbolt1.shp Tick: 80 - weathercloud2: wccloud2 + weathercloud2: + Filename: wccloud2.shp Offset: 0, -175 Tick: 80 - weatherbolt2: wclbolt2 + weatherbolt2: + Filename: wclbolt2.shp Tick: 80 - weathercloud3: wccloud3 + weathercloud3: + Filename: wccloud3.shp Offset: 0, -175 Tick: 80 - weatherbolt3: wclbolt3 + weatherbolt3: + Filename: wclbolt3.shp Tick: 80 - weatherboltexplosion: explolb + weatherboltexplosion: + Filename: explolb.shp chrono: - warpin: warpin + warpin: + Filename: warpin.shp Length: * ZOffset: -2047 - warpout: warpout + warpout: + Filename: warpout.shp Length: * ZOffset: -2047 discus: idle: + Filename: discus.shp Length: * dragon: idle: + Filename: dragon.shp Facings: 32 smokey2: idle: + Filename: smokey2.shp Length: * 120mm: idle: + Filename: 120mm.shp bbblelrg: idle: + Filename: bbblelrg.shp Length: * missile: idle: + Filename: missile.shp Facings: 32 zbomb: idle: + Filename: zbomb.shp Facings: 32 largesmoke: - idle: lgrysmk1 + idle: + Filename: lgrysmk1.shp Length: * smallsmoke: - idle: sgrysmk1 + idle: + Filename: sgrysmk1.shp Length: * nukesmoke: - idle: nukepuff + idle: + Filename: nukepuff.shp Length: * BlendMode: Additive largefire: - idle: fire01 + idle: + Filename: fire01.shp Length: * mediumfire: - idle: fire02 + idle: + Filename: fire02.shp Length: * smallfire: - idle: fire03 + idle: + Filename: fire03.shp Length: * moveflsh: - idle: ring + idle: + Filename: ring.shp Length: * Tick: 30 ZOffset: 2047 @@ -309,7 +429,8 @@ moveflsh: ZRamp: 1 wake: - idle: conquer|wake1 + idle: + Filename: conquer|wake1.shp Length: * Tick: 180 ZOffset: -512 @@ -318,168 +439,449 @@ wake: resources: Defaults: - UseTilesetExtension: true Length: 12 ShadowStart: 12 Offset: 0, -15, 2 ZRamp: 1 - tib01: tib01 - tib02: tib02 - Frames: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0 - tib03: tib03 - tib04: tib04 - tib05: tib05 - tib06: tib06 - tib07: tib07 - tib08: tib08 - tib09: tib09 - tib10: tib10 - tib11: tib11 - tib12: tib12 - tib13: tib13 - tib14: tib14 - Frames: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0 - tib15: tib15 - tib16: tib16 - tib17: tib17 - tib18: tib18 - tib19: tib19 - tib20: tib20 - gem01: gem01 - gem02: gem02 - gem03: gem03 - gem04: gem04 - gem05: gem05 - gem06: gem06 - gem07: gem07 - gem08: gem08 - gem09: gem09 - gem10: gem10 - gem11: gem11 - gem12: gem12 + tib01: + TilesetFilenames: + TEMPERATE: tib01.tem + SNOW: tib01.sno + URBAN: tib01.urb + tib02: + TilesetFilenames: + TEMPERATE: tib02.tem + SNOW: tib02.sno + URBAN: tib02.urb + #Frames: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0 + tib03: + TilesetFilenames: + TEMPERATE: tib03.tem + SNOW: tib03.sno + URBAN: tib03.urb + tib04: + TilesetFilenames: + TEMPERATE: tib04.tem + SNOW: tib04.sno + URBAN: tib04.urb + tib05: + TilesetFilenames: + TEMPERATE: tib05.tem + SNOW: tib05.sno + URBAN: tib05.urb + tib06: + TilesetFilenames: + TEMPERATE: tib06.tem + SNOW: tib06.sno + URBAN: tib06.urb + tib07: + TilesetFilenames: + TEMPERATE: tib07.tem + SNOW: tib07.sno + URBAN: tib07.urb + tib08: + TilesetFilenames: + TEMPERATE: tib08.tem + SNOW: tib08.sno + URBAN: tib08.urb + tib09: + TilesetFilenames: + TEMPERATE: tib09.tem + SNOW: tib09.sno + URBAN: tib09.urb + tib10: + TilesetFilenames: + TEMPERATE: tib10.tem + SNOW: tib10.sno + URBAN: tib10.urb + tib11: + TilesetFilenames: + TEMPERATE: tib11.tem + SNOW: tib11.sno + URBAN: tib11.urb + tib12: + TilesetFilenames: + TEMPERATE: tib12.tem + SNOW: tib12.sno + URBAN: tib12.urb + tib13: + TilesetFilenames: + TEMPERATE: tib13.tem + SNOW: tib13.sno + URBAN: tib13.urb + tib14: + TilesetFilenames: + TEMPERATE: tib14.tem + SNOW: tib14.sno + URBAN: tib14.urb + #Frames: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0 + tib15: + TilesetFilenames: + TEMPERATE: tib15.tem + SNOW: tib15.sno + URBAN: tib15.urb + tib16: + TilesetFilenames: + TEMPERATE: tib16.tem + SNOW: tib16.sno + URBAN: tib16.urb + tib17: + TilesetFilenames: + TEMPERATE: tib17.tem + SNOW: tib17.sno + URBAN: tib17.urb + tib18: + TilesetFilenames: + TEMPERATE: tib18.tem + SNOW: tib18.sno + URBAN: tib18.urb + tib19: + TilesetFilenames: + TEMPERATE: tib19.tem + SNOW: tib19.sno + URBAN: tib19.urb + tib20: + TilesetFilenames: + TEMPERATE: tib20.tem + SNOW: tib20.sno + URBAN: tib20.urb + gem01: + TilesetFilenames: + TEMPERATE: gem01.tem + SNOW: gem01.sno + URBAN: gem01.urb + gem02: + TilesetFilenames: + TEMPERATE: gem02.tem + SNOW: gem02.sno + URBAN: gem02.urb + gem03: + TilesetFilenames: + TEMPERATE: gem03.tem + SNOW: gem03.sno + URBAN: gem03.urb + gem04: + TilesetFilenames: + TEMPERATE: gem04.tem + SNOW: gem04.sno + URBAN: gem04.urb + gem05: + TilesetFilenames: + TEMPERATE: gem05.tem + SNOW: gem05.sno + URBAN: gem05.urb + gem06: + TilesetFilenames: + TEMPERATE: gem06.tem + SNOW: gem06.sno + URBAN: gem06.urb + gem07: + TilesetFilenames: + TEMPERATE: gem07.tem + SNOW: gem07.sno + URBAN: gem07.urb + gem08: + TilesetFilenames: + TEMPERATE: gem08.tem + SNOW: gem08.sno + URBAN: gem08.urb + gem09: + TilesetFilenames: + TEMPERATE: gem09.tem + SNOW: gem09.sno + URBAN: gem09.urb + gem10: + TilesetFilenames: + TEMPERATE: gem10.tem + SNOW: gem10.sno + URBAN: gem10.urb + gem11: + TilesetFilenames: + TEMPERATE: gem11.tem + SNOW: gem11.sno + URBAN: gem11.urb + gem12: + TilesetFilenames: + TEMPERATE: gem12.tem + SNOW: gem12.sno + URBAN: gem12.urb shroud: Defaults: + Filename: shroud.shp ZRamp: 1 Length: * shroud: - fog: fog + fog: + Filename: fog.shp smallscorches: Defaults: - UseTilesetExtension: true Offset: 0, -15, 1 ZRamp: 1 - sc1: burnt01 - sc2: burnt02 - sc3: burnt03 - sc4: burnt04 - sc5: burnt05 - sc6: burnt06 + sc1: + TilesetFilenames: + TEMPERATE: burnt01.tem + SNOW: burnt01.sno + URBAN: burnt01.urb + sc2: + TilesetFilenames: + TEMPERATE: burnt02.tem + SNOW: burnt02.sno + URBAN: burnt02.urb + sc3: + TilesetFilenames: + TEMPERATE: burnt03.tem + SNOW: burnt03.sno + URBAN: burnt03.urb + sc4: + TilesetFilenames: + TEMPERATE: burnt04.tem + SNOW: burnt04.sno + URBAN: burnt04.urb + sc5: + TilesetFilenames: + TEMPERATE: burnt05.tem + SNOW: burnt05.sno + URBAN: burnt05.urb + sc6: + TilesetFilenames: + TEMPERATE: burnt06.tem + SNOW: burnt06.sno + URBAN: burnt06.urb mediumscorches: Defaults: - UseTilesetExtension: true Offset: 0, -20, 1 ZRamp: 1 - sc7: burnt07 - sc8: burnt08 - sc9: burnt09 - sc10: burnt10 + sc7: + TilesetFilenames: + TEMPERATE: burnt07.tem + SNOW: burnt07.sno + URBAN: burnt07.urb + sc8: + TilesetFilenames: + TEMPERATE: burnt08.tem + SNOW: burnt08.sno + URBAN: burnt08.urb + sc9: + TilesetFilenames: + TEMPERATE: burnt09.tem + SNOW: burnt09.sno + URBAN: burnt09.urb + sc10: + TilesetFilenames: + TEMPERATE: burnt10.tem + SNOW: burnt10.sno + URBAN: burnt10.urb largescorches: Defaults: - UseTilesetExtension: true Offset: 0, -30, 1 ZRamp: 1 - sc11: burnt11 - sc12: burnt12 + sc11: + TilesetFilenames: + TEMPERATE: burnt11.tem + SNOW: burnt11.sno + URBAN: burnt11.urb + sc12: + TilesetFilenames: + TEMPERATE: burnt12.tem + SNOW: burnt12.sno + URBAN: burnt12.urb smallcraters: Defaults: - UseTilesetExtension: true Offset: 0, -15, 1 ZRamp: 1 - cr1: crater01 - cr2: crater02 - cr3: crater03 - cr4: crater04 - cr5: crater05 - cr6: crater06 + cr1: + TilesetFilenames: + TEMPERATE: crater01.tem + SNOW: crater01.sno + URBAN: crater01.urb + cr2: + TilesetFilenames: + TEMPERATE: crater02.tem + SNOW: crater02.sno + URBAN: crater02.urb + cr3: + TilesetFilenames: + TEMPERATE: crater03.tem + SNOW: crater03.sno + URBAN: crater03.urb + cr4: + TilesetFilenames: + TEMPERATE: crater04.tem + SNOW: crater04.sno + URBAN: crater04.urb + cr5: + TilesetFilenames: + TEMPERATE: crater05.tem + SNOW: crater05.sno + URBAN: crater05.urb + cr6: + TilesetFilenames: + TEMPERATE: crater06.tem + SNOW: crater06.sno + URBAN: crater06.urb mediumcraters: Defaults: - UseTilesetExtension: true Offset: 0, -15, 1 ZRamp: 1 - cr7: crater07 - cr8: crater08 - cr9: crater09 - cr10: crater10 + cr7: + TilesetFilenames: + TEMPERATE: crater07.tem + SNOW: crater07.sno + URBAN: crater07.urb + cr8: + TilesetFilenames: + TEMPERATE: crater08.tem + SNOW: crater08.sno + URBAN: crater08.urb + cr9: + TilesetFilenames: + TEMPERATE: crater09.tem + SNOW: crater09.sno + URBAN: crater09.urb + cr10: + TilesetFilenames: + TEMPERATE: crater10.tem + SNOW: crater10.sno + URBAN: crater10.urb largecraters: Defaults: - UseTilesetExtension: true Offset: 0, -30, 1 ZRamp: 1 - cr11: crater11 - cr12: crater12 + cr11: + TilesetFilenames: + TEMPERATE: crater11.tem + SNOW: crater11.sno + URBAN: crater11.urb + cr12: + TilesetFilenames: + TEMPERATE: crater12.tem + SNOW: crater12.sno + URBAN: crater12.urb icon: - gps: asaticon - invuln: ircricon - chrono: chroicon - abomb: nukeicon - paradrop: paraicon - airborne: aparicon - lightningstorm: bolticon + gps: + Filename: asaticon.shp + invuln: + Filename: ircricon.shp + chrono: + Filename: chroicon.shp + abomb: + Filename: nukeicon.shp + paradrop: + Filename: paraicon.shp + airborne: + Filename: aparicon.shp + lightningstorm: + Filename: bolticon.shp atomic: - up: nkmslup - down: nkmsldn + up: + Filename: nkmslup.shp + down: + Filename: nkmsldn.shp Offset: 0, 144 bombcurs: idle: + Filename: bombcurs.shp Length: * Tick: 300 trock01: Inherits: ^Rock + idle: + TilesetFilenames: + TEMPERATE: trock01.tem + SNOW: trock01.sno + URBAN: trock01.urb trock02: Inherits: ^Rock + idle: + TilesetFilenames: + TEMPERATE: trock02.tem + SNOW: trock02.sno + URBAN: trock02.urb trock03: Inherits: ^Rock + idle: + TilesetFilenames: + TEMPERATE: trock03.tem + SNOW: trock03.sno + URBAN: trock03.urb trock04: Inherits: ^Rock + idle: + TilesetFilenames: + TEMPERATE: trock04.tem + SNOW: trock04.sno + URBAN: trock04.urb trock05: Inherits: ^Rock + idle: + TilesetFilenames: + TEMPERATE: trock05.tem + SNOW: trock05.sno + URBAN: trock05.urb srock01: Inherits: ^Rock + idle: + TilesetFilenames: + TEMPERATE: srock01.tem + SNOW: srock01.sno + URBAN: srock01.urb srock02: Inherits: ^Rock + idle: + TilesetFilenames: + TEMPERATE: srock02.tem + SNOW: srock02.sno + URBAN: srock02.urb srock03: Inherits: ^Rock + idle: + TilesetFilenames: + TEMPERATE: srock03.tem + SNOW: srock03.sno + URBAN: srock03.urb srock04: Inherits: ^Rock + idle: + TilesetFilenames: + TEMPERATE: srock04.tem + SNOW: srock04.sno + URBAN: srock04.urb srock05: Inherits: ^Rock + idle: + TilesetFilenames: + TEMPERATE: srock05.tem + SNOW: srock05.sno + URBAN: srock05.urb camera: idle: + Filename: camera.shp Length: * flameguy: Defaults: + Filename: flameguy.shp Facings: 8 Tick: 80 idle: diff --git a/mods/ra2/sequences/soviet-infantry.yaml b/mods/ra2/sequences/soviet-infantry.yaml index 667bd13f1..8c8eab401 100644 --- a/mods/ra2/sequences/soviet-infantry.yaml +++ b/mods/ra2/sequences/soviet-infantry.yaml @@ -1,11 +1,17 @@ dog: Inherits: adog - jump: dogp + Defaults: + Filename: dog.shp + jump: + Filename: dogp.shp Length: 1 Facings: 64 - icon: dogicon + icon: + Filename: dogicon.shp sqd: + Defaults: + Filename: sqd.shp stand: Start: 160 Facings: -8 @@ -24,22 +30,27 @@ sqd: Length: 14 Facings: -8 Tick: 120 - icon: sqdicon + icon: + Filename: sqdicon.shp e2: Inherits: ^ArmedInfantry Inherits@MC: ^MindControllable - Defaults: cons + Defaults: + Filename: cons.shp run: Tick: 120 paradrop: Start: 292 - icon: e2icon + icon: + Filename: e2icon.shp flakt: Inherits: ^ArmedInfantry Inherits@MC: ^MindControllable Inherits@Muzzle: ^WithFlakMuzzle + Defaults: + Filename: flakt.shp run: Tick: 120 die1: @@ -58,21 +69,26 @@ flakt: Start: 165 prone-shoot: Start: 245 - icon: flkticon + icon: + Filename: flkticon.shp shk: Inherits: ^ArmedInfantry Inherits@MC: ^MindControllable + Defaults: + Filename: shk.shp run: Tick: 120 paradrop: Start: 292 - icon: shkicon + icon: + Filename: shkicon.shp terror: Inherits: ^BasicInfantry Inherits@MC: ^MindControllable - Defaults: trst + Defaults: + Filename: trst.shp run: Tick: 120 die1: @@ -92,11 +108,14 @@ terror: Start: 179 cheer: Start: 180 - icon: trsticon + icon: + Filename: trsticon.shp deso: Inherits: ^ArmedInfantry Inherits@MC: ^MindControllable + Defaults: + Filename: deso.shp run: Tick: 120 deploy: @@ -111,11 +130,14 @@ deso: Tick: 80 cheer: Start: 314 - icon: desoicon + icon: + Filename: desoicon.shp ivan: Inherits: ^ArmedInfantry Inherits@MC: ^MindControllable + Defaults: + Filename: ivan.shp run: Tick: 120 liedown: @@ -129,14 +151,20 @@ ivan: Length: 15 cheer: Start: 259 - icon: ivanicon + icon: + Filename: ivanicon.shp civan: Inherits: ivan - icon: ivncicon + Defaults: + Filename: civan.shp + icon: + Filename: ivncicon.shp yuri: Inherits: ^ArmedInfantry + Defaults: + Filename: yuri.shp deploy: Start: 292 Length: 7 @@ -148,10 +176,15 @@ yuri: Length: 6 cheer: Start: 308 - muzzle: yuricntl + muzzle: + Filename: yuricntl.shp Length: * - icon: yuriicon + icon: + Filename: yuriicon.shp yuripr: Inherits: yuri - icon: yurpicon + Defaults: + Filename: yuripr.shp + icon: + Filename: yurpicon.shp diff --git a/mods/ra2/sequences/soviet-structures.yaml b/mods/ra2/sequences/soviet-structures.yaml index ac961291e..b0c97233d 100644 --- a/mods/ra2/sequences/soviet-structures.yaml +++ b/mods/ra2/sequences/soviet-structures.yaml @@ -1,457 +1,858 @@ nacnst: Inherits: ^Structure Defaults: + Filename: ngcnst.shp Offset: 4, -58, 58 - idle: ngcnst_c + idle: + Filename: ngcnst_c.shp + TilesetFilenames: + SNOW: nacnst_c.shp Length: 1 ShadowStart: 4 Tick: 150 - damaged-idle: ngcnst_c + damaged-idle: + Filename: ngcnst_c.shp + TilesetFilenames: + SNOW: nacnst_c.shp Length: 1 ShadowStart: 5 Tick: 150 - make: ntcnstmk + make: + TilesetFilenames: + TEMPERATE: ntcnstmk.shp + SNOW: nacnstmk.shp + URBAN: nucnstmk.shp Length: 31 ShadowStart: 31 - idle-top: ngcnst_a + idle-top: + Filename: ngcnst_a.shp + TilesetFilenames: + SNOW: nacnst_a.shp Length: 11 Tick: 200 - damaged-idle-top: ngcnst_a + damaged-idle-top: + Filename: ngcnst_a.shp + TilesetFilenames: + SNOW: nacnst_a.shp Start: 11 Length: 11 Tick: 150 - idle-normal: ngcnst + idle-normal: + Filename: ngcnst.shp + TilesetFilenames: + SNOW: nacnst.shp ShadowStart: 3 ZOffset: -1024 - damaged-idle-normal: ngcnst + damaged-idle-normal: + Filename: ngcnst.shp + TilesetFilenames: + SNOW: nacnst.shp ZOffset: -1024 - build: ngcnst_b + build: + Filename: ngcnst_b.shp + TilesetFilenames: + SNOW: nacnst_b.shp Length: 21 Tick: 150 - damaged-build: ngcnst_b + damaged-build: + Filename: ngcnst_b.shp + TilesetFilenames: + SNOW: nacnst_b.shp Start: 21 Length: 21 Tick: 150 - dead: ngcnstdm # SHP broken & unused + dead: # SHP broken & unused + Filename: ngcnstdm.shp + TilesetFilenames: + SNOW: nacnstdm.shp Length: 25 ShadowStart: 25 Tick: 100 - icon: scnsicon + icon: + Filename: scnsicon.shp napowr: Inherits: ^Structure Defaults: + Filename: ngpowr.shp Offset: -15, -37, 37 - idle: ngpowr - damaged-idle: ngpowr - critical-idle: ngpowr + idle: + Filename: ngpowr.shp + TilesetFilenames: + SNOW: napowr.shp + damaged-idle: + Filename: ngpowr.shp + TilesetFilenames: + SNOW: napowr.shp + critical-idle: + Filename: ngpowr.shp + TilesetFilenames: + SNOW: napowr.shp Start: 2 ShadowStart: 5 - idle-lights: ngpowr_a + idle-lights: + Filename: ngpowr_a.shp + TilesetFilenames: + SNOW: napowr_a.shp Length: 19 Tick: 150 - damaged-idle-lights: ngpowr_a + damaged-idle-lights: + Filename: ngpowr_a.shp + TilesetFilenames: + SNOW: napowr_a.shp Start: 19 Length: 19 Tick: 150 - critical-idle-lights: ngpowr_a + critical-idle-lights: + Filename: ngpowr_a.shp + TilesetFilenames: + SNOW: napowr_a.shp Start: 19 Length: 19 Tick: 150 - make: ntpowrmk + make: + TilesetFilenames: + TEMPERATE: ntpowrmk.shp + SNOW: napowrmk.shp + URBAN: nupowrmk.shp Length: 26 ShadowStart: 26 - icon: npwricon + icon: + Filename: npwricon.shp nahand: Inherits: ^Structure Defaults: + Filename: nghand.shp Offset: 1, -31, 31 - idle: nghand - damaged-idle: nghand - critical-idle: nghand + idle: + Filename: nghand.shp + TilesetFilenames: + SNOW: nahand.shp + damaged-idle: + Filename: nghand.shp + TilesetFilenames: + SNOW: nahand.shp + critical-idle: + Filename: nghand.shp + TilesetFilenames: + SNOW: nahand.shp Start: 2 ShadowStart: 5 - make: nthandmk - icon: handicon + make: + TilesetFilenames: + TEMPERATE: nthandmk.shp + SNOW: nahandmk.shp + URBAN: nuhandmk.shp + icon: + Filename: handicon.shp narefn: Inherits: ^Structure Defaults: + Filename: ngrefn.shp Offset: -13, -53, 53 - idle: ngrefn - damaged-idle: ngrefn - make: ntrefnmk + idle: + Filename: ngrefn.shp + TilesetFilenames: + SNOW: narefn.shp + damaged-idle: + Filename: ngrefn.shp + TilesetFilenames: + SNOW: narefn.shp + make: + TilesetFilenames: + TEMPERATE: ntrefnmk.shp + SNOW: narefnmk.shp + URBAN: nurefnmk.shp Length: 26 ShadowStart: 26 - idle-drill: ngrefnl1 + idle-drill: + Filename: ngrefnl1.shp + TilesetFilenames: + SNOW: narefnl1.shp Length: 3 Tick: 200 - idle-bib: ngrefnbb + idle-bib: + Filename: ngrefnbb.shp + TilesetFilenames: + SNOW: narefnbb.shp ShadowStart: 3 ZOffset: -512 - damaged-idle-bib: ngrefnbb + damaged-idle-bib: + Filename: ngrefnbb.shp + TilesetFilenames: + SNOW: narefnbb.shp Start: 1 ShadowStart: 4 ZOffset: -512 - docking-overlay: ngrefnor + docking-overlay: + Filename: ngrefnor.shp + TilesetFilenames: + SNOW: narefnor.shp Length: 20 ShadowStart: 20 - icon: nreficon + icon: + Filename: nreficon.shp naradr: Inherits: ^Structure Defaults: + Filename: ngradr.shp Offset: 2, -31, 31 - idle: ngradr - damaged-idle: ngradr - critical-idle: ngradr + idle: + Filename: ngradr.shp + TilesetFilenames: + SNOW: naradr.shp + damaged-idle: + Filename: ngradr.shp + TilesetFilenames: + SNOW: naradr.shp + critical-idle: + Filename: ngradr.shp + TilesetFilenames: + SNOW: naradr.shp Start: 2 ShadowStart: 5 - idle-dish: ngradr_a + idle-dish: + Filename: ngradr_a.shp + TilesetFilenames: + SNOW: naradr_a.shp ShadowStart: 92 Length: 45 Tick: 150 - damaged-idle-dish: ngradr_a + damaged-idle-dish: + Filename: ngradr_a.shp + TilesetFilenames: + SNOW: naradr_a.shp Start: 46 ShadowStart: 138 Length: 45 Tick: 150 - make: ntradrmk + make: + TilesetFilenames: + TEMPERATE: ntradrmk.shp + SNOW: naradrmk.shp + URBAN: nuradrmk.shp Length: 30 ShadowStart: 30 - icon: nradicon + icon: + Filename: nradicon.shp naweap: Inherits: ^Structure Defaults: + Filename: ngweap.shp Offset: -30, -60, 60 - idle: ngweap + idle: + Filename: ngweap.shp + TilesetFilenames: + SNOW: naweap.shp ZOffset: -1536 - damaged-idle: ngweap + damaged-idle: + Filename: ngweap.shp + TilesetFilenames: + SNOW: naweap.shp ZOffset: -1536 - build-door: ngweap_1 + build-door: + Filename: ngweap_1.shp + TilesetFilenames: + SNOW: naweap_1.shp ShadowStart: 2 ZOffset: -1024 - damaged-build-door: ngweap_1 + damaged-build-door: + Filename: ngweap_1.shp + TilesetFilenames: + SNOW: naweap_1.shp Start: 1 ShadowStart: 3 ZOffset: -1024 - build-top: ngweap_2 + build-top: + Filename: ngweap_2.shp + TilesetFilenames: + SNOW: naweap_2.shp ShadowStart: 2 ZOffset: 1024 - damaged-build-top: ngweap_2 + damaged-build-top: + Filename: ngweap_2.shp + TilesetFilenames: + SNOW: naweap_2.shp Start: 1 ShadowStart: 3 ZOffset: 1024 - build-air-open: ngweap_3 + build-air-open: + Filename: ngweap_3.shp + TilesetFilenames: + SNOW: naweap_3.shp ShadowStart: 2 - damaged-air-open: ngweap_3 + damaged-air-open: + Filename: ngweap_3.shp + TilesetFilenames: + SNOW: naweap_3.shp Start: 1 ShadowStart: 3 - build-air-inside: ngweap_4 + build-air-inside: + Filename: ngweap_4.shp + TilesetFilenames: + SNOW: naweap_4.shp ShadowStart: 2 - damaged-air-inside: ngweap_4 + damaged-air-inside: + Filename: ngweap_4.shp + TilesetFilenames: + SNOW: naweap_4.shp Start: 1 ShadowStart: 3 - bib: ngweapbb + bib: + Filename: ngweapbb.shp + TilesetFilenames: + SNOW: naweapbb.shp ShadowStart: 3 ZOffset: -1024 - damaged-bib: ngweapbb + damaged-bib: + Filename: ngweapbb.shp + TilesetFilenames: + SNOW: naweapbb.shp Start: 1 ShadowStart: 3 ZOffset: -1024 - idle-lights: ngweap_a + idle-lights: + Filename: ngweap_a.shp + TilesetFilenames: + SNOW: naweap_a.shp Length: 13 ShadowStart: 13 Tick: 150 - damaged-idle-lights: ngweap_a # doesn't have damage frames + damaged-idle-lights: # doesn't have damage frames + Filename: ngweap_a.shp + TilesetFilenames: + SNOW: naweap_a.shp Length: 13 ShadowStart: 13 Tick: 150 - make: ntweapmk - icon: nwepicon + make: + TilesetFilenames: + TEMPERATE: ntweapmk.shp + SNOW: naweapmk.shp + URBAN: nuweapmk.shp + icon: + Filename: nwepicon.shp nayard: Inherits: ^Structure Defaults: + Filename: ngyard.shp Offset: 0, -45, 45 - idle: ngyard + idle: + Filename: ngyard.shp + TilesetFilenames: + SNOW: nayard.shp ShadowStart: 4 - damaged-idle: ngyard + damaged-idle: + Filename: ngyard.shp + TilesetFilenames: + SNOW: nayard.shp Start: 2 ShadowStart: 5 - idle-crane: ngyard_a + idle-crane: + Filename: ngyard_a.shp + TilesetFilenames: + SNOW: nayard_a.shp Length: 15 ShadowStart: 30 Tick: 200 - damaged-idle-crane: ngyard_a + damaged-idle-crane: + Filename: ngyard_a.shp + TilesetFilenames: + SNOW: nayard_a.shp Start: 15 Length: 15 ShadowStart: 45 Tick: 200 - idle-waves: ngyard_c + idle-waves: + Filename: ngyard_c.shp + TilesetFilenames: + SNOW: nayard_c.shp Length: 15 ShadowStart: 30 Tick: 200 - damaged-idle-waves: ngyard_c + damaged-idle-waves: + Filename: ngyard_c.shp + TilesetFilenames: + SNOW: nayard_c.shp Start: 30 Length: 15 ShadowStart: 30 Tick: 200 - production-lights: ngyard_b + production-lights: + Filename: ngyard_b.shp + TilesetFilenames: + SNOW: nayard_b.shp Length: 15 ZOffset: 256 - damaged-production-lights: ngyard_b + damaged-production-lights: + Filename: ngyard_b.shp + TilesetFilenames: + SNOW: nayard_b.shp Start: 15 Length: 15 ZOffset: 256 - make: ntyardmk - repair: ngyard_s + make: + TilesetFilenames: + TEMPERATE: ntyardmk.shp + SNOW: nayardmk.shp + URBAN: nuyardmk.shp + repair: + Filename: ngyard_s.shp + TilesetFilenames: + SNOW: nayard_s.shp Length: 18 ShadowStart: 36 - damaged-repair: ngyard_s + damaged-repair: + Filename: ngyard_s.shp + TilesetFilenames: + SNOW: nayard_s.shp Start: 18 Length: 18 ShadowStart: 54 - icon: yardicon + icon: + Filename: yardicon.shp nadept: Inherits: ^Structure Defaults: + Filename: ngdept.shp Offset: -15, -53, 53 - idle: ngdept_b + idle: + Filename: ngdept_b.shp + TilesetFilenames: + SNOW: nadept_b.shp Length: 10 ShadowStart: 20 Tick: 180 - damaged-idle: ngdept_b + damaged-idle: + Filename: ngdept_b.shp + TilesetFilenames: + SNOW: nadept_b.shp Start: 10 Length: 10 ShadowStart: 29 - idle-normal: ngdept + idle-normal: + Filename: ngdept.shp + TilesetFilenames: + SNOW: nadept.shp ShadowStart: 3 - damaged-idle-normal: ngdept + damaged-idle-normal: + Filename: ngdept.shp + TilesetFilenames: + SNOW: nadept.shp Start: 2 ShadowStart: 4 - bib: ngdeptbb + bib: + Filename: ngdeptbb.shp + TilesetFilenames: + SNOW: nadeptbb.shp ShadowStart: 2 ZOffset: -1c511 Offset: -15, -53, 12 ZRamp: 1 - -DepthSprite: - damaged-bib: ngdeptbb + DepthSprite: + damaged-bib: + Filename: ngdeptbb.shp + TilesetFilenames: + SNOW: nadeptbb.shp Start: 1 ShadowStart: 3 ZOffset: -1c511 Offset: -15, -53, 12 ZRamp: 1 - -DepthSprite: - make: ntdeptmk - repair: ngdept_c + DepthSprite: + make: + TilesetFilenames: + TEMPERATE: ntdeptmk.shp + SNOW: nadeptmk.shp + URBAN: nudeptmk.shp + repair: + Filename: ngdept_c.shp + TilesetFilenames: + SNOW: nadept_c.shp Length: 50 ShadowStart: 100 Tick: 120 - damaged-repair: ngdept_c + damaged-repair: + Filename: ngdept_c.shp + TilesetFilenames: + SNOW: nadept_c.shp Start: 50 Length: 50 ShadowStart: 150 Tick: 120 - icon: rfixicon + icon: + Filename: rfixicon.shp nanrct: Inherits: ^Structure Defaults: + Filename: ngnrct.shp Offset: -12, -56, 56 - idle: ngnrct - damaged-idle: ngnrct - critical-idle: ngnrct + idle: + Filename: ngnrct.shp + TilesetFilenames: + SNOW: nanrct.shp + damaged-idle: + Filename: ngnrct.shp + TilesetFilenames: + SNOW: nanrct.shp + critical-idle: + Filename: ngnrct.shp + TilesetFilenames: + SNOW: nanrct.shp Start: 2 ShadowStart: 5 - idle-lights: ngnrct_a + idle-lights: + Filename: ngnrct_a.shp + TilesetFilenames: + SNOW: nanrct_a.shp Length: 11 Tick: 150 - damaged-idle-lights: ngnrct_a + damaged-idle-lights: + Filename: ngnrct_a.shp + TilesetFilenames: + SNOW: nanrct_a.shp Start: 11 Length: 11 Tick: 150 - critical-idle-lights: ngnrct_a + critical-idle-lights: + Filename: ngnrct_a.shp + TilesetFilenames: + SNOW: nanrct_a.shp Start: 11 Length: 11 Tick: 150 - make: ntnrctmk - icon: nrcticon + make: + TilesetFilenames: + TEMPERATE: ntnrctmk.shp + SNOW: nanrctmk.shp + URBAN: nunrctmk.shp + icon: + Filename: nrcticon.shp natech: Inherits: ^Structure Defaults: + Filename: ngtech.shp Offset: 0, -45, 45 - idle: ngtech - damaged-idle: ngtech - critical-idle: ngtech + idle: + Filename: ngtech.shp + TilesetFilenames: + SNOW: natech.shp + damaged-idle: + Filename: ngtech.shp + TilesetFilenames: + SNOW: natech.shp + critical-idle: + Filename: ngtech.shp + TilesetFilenames: + SNOW: natech.shp Start: 2 ShadowStart: 5 - make: nttechmk - icon: ntchicon + make: + TilesetFilenames: + TEMPERATE: nttechmk.shp + SNOW: natechmk.shp + URBAN: nutechmk.shp + icon: + Filename: ntchicon.shp naclon: Inherits: ^Structure Defaults: + Filename: ngclon.shp Offset: 0, -30, 30 - idle: ngclon_a + idle: + Filename: ngclon_a.shp + TilesetFilenames: + SNOW: naclon_a.shp Length: 11 ShadowStart: 22 Tick: 180 - damaged-idle: ngclon_a + damaged-idle: + Filename: ngclon_a.shp + TilesetFilenames: + SNOW: naclon_a.shp Start: 11 Length: 11 ShadowStart: 33 - critical-idle: ngclon_a + critical-idle: + Filename: ngclon_a.shp + TilesetFilenames: + SNOW: naclon_a.shp Start: 11 Length: 11 ShadowStart: 33 - make: ntclonmk - icon: clonicon + make: + TilesetFilenames: + TEMPERATE: ntclonmk.shp + SNOW: naclonmk.shp + URBAN: nuclonmk.shp + icon: + Filename: clonicon.shp napsis: Inherits: ^Structure Defaults: + Filename: ngpsis.shp Offset: 1, -30, 30 - idle: ngpsis - damaged-idle: ngpsis - critical-idle: ngpsis + idle: + Filename: ngpsis.shp + TilesetFilenames: + SNOW: napsis.shp + damaged-idle: + Filename: ngpsis.shp + TilesetFilenames: + SNOW: napsis.shp + critical-idle: + Filename: ngpsis.shp + TilesetFilenames: + SNOW: napsis.shp Start: 2 ShadowStart: 5 - idle-spin: ngpsis_a + idle-spin: + Filename: ngpsis_a.shp + TilesetFilenames: + SNOW: napsis_a.shp Length: 40 Tick: 150 ShadowStart: 80 - damaged-idle-spin: ngpsis_a + damaged-idle-spin: + Filename: ngpsis_a.shp + TilesetFilenames: + SNOW: napsis_a.shp Start: 39 Length: 40 Tick: 150 ShadowStart: 120 - make: ntpsismk + make: + TilesetFilenames: + TEMPERATE: ntpsismk.shp + SNOW: napsismk.shp + URBAN: nupsismk.shp Length: 24 ShadowStart: 24 - icon: psisicon + icon: + Filename: psisicon.shp namisl: Inherits: ^Structure Defaults: + Filename: namisl.shp Offset: 0, -42, 42 - UseTilesetCode: false - -TilesetOverrides: - idle: ngmisl_e + idle: + Filename: ngmisl_e.shp ShadowStart: 2 - damaged-idle: ngmisl_e + damaged-idle: + Filename: ngmisl_e.shp ShadowStart: 3 - critical-idle: ngmisl_e + critical-idle: + Filename: ngmisl_e.shp Start: 1 ShadowStart: 3 # TODO: ngmisl_f is actually the open sequence - active: ngmisl_f + active: + Filename: ngmisl_f.shp Length: 16 ShadowStart: 32 Tick: 120 - damaged-active: ngmisl_f + damaged-active: + Filename: ngmisl_f.shp Start: 17 Length: 16 ShadowStart: 48 Tick: 120 - make: ntmislmk - UseTilesetCode: true + make: + TilesetFilenames: + TEMPERATE: ntmislmk.shp + SNOW: namislmk.shp + URBAN: numislmk.shp Length: 26 ShadowStart: 26 - icon: msslicon + icon: + Filename: msslicon.shp nairon: Inherits: ^Structure Defaults: + Filename: ngiron.shp Offset: 0, -45, 45 - idle: ngiron_a + idle: + Filename: ngiron_a.shp + TilesetFilenames: + SNOW: nairon_a.shp Length: 11 ShadowStart: 22 - damaged-idle: ngiron_a + damaged-idle: + Filename: ngiron_a.shp + TilesetFilenames: + SNOW: nairon_a.shp Start: 11 Length: 11 ShadowStart: 33 - active: ngiron_h + active: + Filename: ngiron_h.shp + TilesetFilenames: + SNOW: nairon_h.shp Length: 12 ShadowStart: 24 - damaged-active: ngiron_h + damaged-active: + Filename: ngiron_h.shp + TilesetFilenames: + SNOW: nairon_h.shp Start: 12 Length: 12 ShadowStart: 36 - make: ntironmk - icon: ironicon + make: + TilesetFilenames: + TEMPERATE: ntironmk.shp + SNOW: naironmk.shp + URBAN: nuironmk.shp + icon: + Filename: ironicon.shp nawall: Inherits: ^Wall - Defaults: ntwall - icon: nwalicon + Defaults: + TilesetFilenames: + TEMPERATE: ntwall.shp + SNOW: nawall.shp + URBAN: nuwall.shp + icon: + Filename: nwalicon.shp + TilesetFilenames: nalasr: Inherits: ^Structure Inherits@Muzzle: ^WithMachineGunMuzzle Defaults: + Filename: nglasr.shp + TilesetFilenames: + SNOW: nalasr.shp Offset: 0, -20, 20 - idle: nalasr - damaged-idle: nalasr - critical-idle: nalasr + idle: + Filename: nglasr.shp + TilesetFilenames: + SNOW: nalasr.shp + damaged-idle: + Filename: nglasr.shp + TilesetFilenames: + SNOW: nalasr.shp + critical-idle: + Filename: nglasr.shp + TilesetFilenames: + SNOW: nalasr.shp Start: 2 ShadowStart: 5 - make: nalasrmk + make: + TilesetFilenames: + TEMPERATE: ntlasrmk.shp + SNOW: nalasrmk.shp + URBAN: nulasrmk.shp Length: 12 ShadowStart: 12 ZOffset: 0 - icon: plticon + icon: + Filename: plticon.shp + TilesetFilenames: tesla: Inherits: ^Structure Defaults: + Filename: tgsla.shp Offset: 0, -15, 15 - idle: ngtsla + idle: + Filename: ngtsla.shp + TilesetFilenames: + SNOW: natsla.shp Length: 1 - damaged-idle: ngtsla + damaged-idle: + Filename: ngtsla.shp + TilesetFilenames: + SNOW: natsla.shp Length: 1 - idle-powered: ngtsla_a + idle-powered: + Filename: ngtsla_a.shp + TilesetFilenames: + SNOW: natsla_a.shp Length: 10 ShadowStart: 20 - damaged-idle-powered: ngtsla_a + damaged-idle-powered: + Filename: ngtsla_a.shp + TilesetFilenames: + SNOW: natsla_a.shp Start: 10 Length: 10 ShadowStart: 30 - active: ngtsla_b + active: + Filename: ngtsla_b.shp + TilesetFilenames: + SNOW: natsla_b.shp Length: 10 ShadowStart: 20 Tick: 100 ZOffset: 10 - damaged-active: ngtsla_b + damaged-active: + Filename: ngtsla_b.shp + TilesetFilenames: + SNOW: natsla_b.shp Start: 10 ShadowStart: 20 Length: 10 Tick: 100 ZOffset: 10 - dead: ngtsladm # SHP broken & unused + dead: # SHP broken & unused + Filename: ngtsladm.shp + TilesetFilenames: + SNOW: natsladm.shp Length: 20 ShadowStart: 20 Tick: 100 - make: nttslamk - icon: tslaicon + make: + TilesetFilenames: + TEMPERATE: nttslamk.shp + SNOW: natslamk.shp + URBAN: nutslamk.shp + icon: + Filename: tslaicon.shp naflak: Inherits: ^Structure Inherits@Muzzle: ^WithFlakMuzzle Defaults: + Filename: ngflak.shp + TilesetFilenames: + SNOW: naflak.shp Offset: 0, -15, 15 ZOffset: -512 - idle: ngflak - damaged-idle: ngflak - critical-idle: ngflak + idle: + Filename: ngflak.shp + TilesetFilenames: + SNOW: naflak.shp + damaged-idle: + Filename: ngflak.shp + TilesetFilenames: + SNOW: naflak.shp + critical-idle: + Filename: ngflak.shp + TilesetFilenames: + SNOW: naflak.shp Start: 2 ShadowStart: 5 - make: ntflakmk + make: + TilesetFilenames: + TEMPERATE: ntflakmk.shp + SNOW: naflakmk.shp + URBAN: nuflakmk.shp Length: 9 ShadowStart: 9 ZOffset: 0 - icon: flakicon + icon: + Filename: flakicon.shp + TilesetFilenames: diff --git a/mods/ra2/sequences/tech-structures.yaml b/mods/ra2/sequences/tech-structures.yaml index fa5667005..07fd9b0df 100644 --- a/mods/ra2/sequences/tech-structures.yaml +++ b/mods/ra2/sequences/tech-structures.yaml @@ -1,49 +1,102 @@ caoild: Inherits: ^TechStructure Defaults: + TilesetFilenames: + TEMPERATE: ctoild.shp + SNOW: caoild.shp + URBAN: cuoild.shp Offset: 0, -30, 30 - idle-pump: caoild_a + idle-pump: + TilesetFilenames: + TEMPERATE: ctoild_a.shp + SNOW: caoild_a.shp + URBAN: cuoild_a.shp Length: 32 ShadowStart: 64 - damaged-idle-pump: caoild_a + damaged-idle-pump: + TilesetFilenames: + TEMPERATE: ctoild_a.shp + SNOW: caoild_a.shp + URBAN: cuoild_a.shp Start: 32 Length: 32 ShadowStart: 96 - flag: caoild_f + flag: + TilesetFilenames: + TEMPERATE: ctoild_f.shp + SNOW: caoild_f.shp + URBAN: cuoild_f.shp Offset: 0, -9 caairp: Inherits: ^TechStructure Defaults: + TilesetFilenames: + TEMPERATE: ctairp.shp + SNOW: caairp.shp + URBAN: cuairp.shp Offset: 7, -40, 50 - idle-overlay: caairp_a + idle-overlay: + TilesetFilenames: + TEMPERATE: ctairp_a.shp + SNOW: caairp_a.shp + URBAN: cuairp_a.shp Length: 10 Tick: 400 - damaged-idle-overlay: caairp_a + damaged-idle-overlay: + TilesetFilenames: + TEMPERATE: ctairp_a.shp + SNOW: caairp_a.shp + URBAN: cuairp_a.shp Start: 10 Length: 10 Tick: 400 - flag: caairp_f + flag: + TilesetFilenames: + TEMPERATE: ctairp_f.shp + SNOW: caairp_f.shp + URBAN: cuairp_f.shp ZOffset: 128 cahosp: Inherits: ^TechStructure Defaults: + TilesetFilenames: + TEMPERATE: cthosp.shp + SNOW: cahosp.shp + URBAN: cuhosp.shp Offset: -30, -75, 100 - idle-overlay: cahosp_a + idle-overlay: + TilesetFilenames: + TEMPERATE: cthosp_a.shp + SNOW: cahosp_a.shp + URBAN: cuhosp_a.shp Length: 2 Tick: 400 - damaged-idle-overlay: cahosp_a + damaged-idle-overlay: + TilesetFilenames: + TEMPERATE: cthosp_a.shp + SNOW: cahosp_a.shp + URBAN: cuhosp_a.shp Start: 2 Length: 2 Tick: 400 - flag: cahosp_f + flag: + TilesetFilenames: + TEMPERATE: cthosp_f.shp + SNOW: cahosp_f.shp + URBAN: cuhosp_f.shp ZOffset: 128 Offset: -9,-23 caoutp: Inherits: ^TechStructure Defaults: + Filename: caoutp.shp + TilesetFilenames: + TEMPERATE: ctoutp.shp + SNOW: caoutp.shp + URBAN: cuoutp.shp Offset: -15, -50, 65 idle-tower: ShadowStart: -1 @@ -51,35 +104,63 @@ caoutp: Start: 1 ShadowStart: -1 idle-tower-shadow: - UseTilesetCode: false + TilesetFilenames: Start: 4 damaged-idle-tower-shadow: - UseTilesetCode: false + TilesetFilenames: Start: 5 - idle: caoutp_d + idle: + TilesetFilenames: + TEMPERATE: ctoutp_d.shp + SNOW: caoutp_d.shp + URBAN: cuoutp_d.shp ShadowStart: 2 - damaged-idle: caoutp_d + damaged-idle: + TilesetFilenames: + TEMPERATE: ctoutp_d.shp + SNOW: caoutp_d.shp + URBAN: cuoutp_d.shp ShadowStart: 3 - active-crane: caoutp_a + active-crane: + TilesetFilenames: + TEMPERATE: ctoutp_a.shp + SNOW: caoutp_a.shp + URBAN: cuoutp_a.shp Length: 10 Tick: 200 ShadowStart: 20 - damaged-active-crane: caoutp_a + damaged-active-crane: + TilesetFilenames: + TEMPERATE: ctoutp_a.shp + SNOW: caoutp_a.shp + URBAN: cuoutp_a.shp Start: 20 Length: 10 Tick: 200 ShadowStart: 30 - bib: caoutpbb + bib: + TilesetFilenames: + TEMPERATE: ctoutpbb.shp + SNOW: caoutpbb.shp + URBAN: cuoutpbb.shp ZOffset: -1c511 Offset: -15, -50, 15 ZRamp: 1 - -DepthSprite: - damaged-bib: caoutpbb + DepthSprite: + damaged-bib: + TilesetFilenames: + TEMPERATE: ctoutpbb.shp + SNOW: caoutpbb.shp + URBAN: cuoutpbb.shp Start: 1 ZOffset: -1c511 Offset: -15, -50, 15 ZRamp: 1 - -DepthSprite: - flag: caoutp_f + DepthSprite: + flag: + TilesetFilenames: + TEMPERATE: ctoutp_f.shp + SNOW: caoutp_f.shp + URBAN: cuoutp_f.shp rubble: - UseTilesetCode: false + TilesetFilenames: diff --git a/mods/ra2/sequences/trees.yaml b/mods/ra2/sequences/trees.yaml index 0b38ea7d7..631448ceb 100644 --- a/mods/ra2/sequences/trees.yaml +++ b/mods/ra2/sequences/trees.yaml @@ -1,92 +1,247 @@ tibtre01: Inherits: ^Drill + Defaults: + TilesetFilenames: + TEMPERATE: tibtre01.tem + SNOW: tibtre01.sno + URBAN: tibtre01.urb tibtre02: Inherits: ^Drill + Defaults: + TilesetFilenames: + TEMPERATE: tibtre02.tem + SNOW: tibtre02.sno + URBAN: tibtre02.urb tibtre03: Inherits: ^Drill + Defaults: + TilesetFilenames: + TEMPERATE: tibtre03.tem + SNOW: tibtre03.sno + URBAN: tibtre03.urb tree01: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree01.tem + SNOW: tree01.sno + URBAN: tree01.urb tree02: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree02.tem + SNOW: tree02.sno + URBAN: tree02.urb tree03: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree03.tem + SNOW: tree03.sno + URBAN: tree03.urb tree04: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree04.tem + SNOW: tree04.sno + URBAN: tree04.urb tree05: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree05.tem + SNOW: tree05.sno + URBAN: tree05.urb tree06: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree06.tem + SNOW: tree06.sno + URBAN: tree06.urb tree07: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree07.tem + SNOW: tree07.sno + URBAN: tree07.urb tree08: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree08.tem + SNOW: tree08.sno + URBAN: tree08.urb tree09: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree09.tem + SNOW: tree09.sno + URBAN: tree09.urb tree10: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree10.tem + SNOW: tree10.sno + URBAN: tree10.urb tree11: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree11.tem + SNOW: tree11.sno + URBAN: tree11.urb tree12: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree12.tem + SNOW: tree12.sno + URBAN: tree12.urb tree13: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree13.tem + SNOW: tree13.sno + URBAN: tree13.urb tree14: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree14.tem + SNOW: tree14.sno + URBAN: tree14.urb tree15: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree15.tem + SNOW: tree15.sno + URBAN: tree15.urb tree16: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree16.tem + SNOW: tree16.sno + URBAN: tree16.urb tree17: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree17.tem + SNOW: tree17.sno + URBAN: tree17.urb tree18: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree18.tem + SNOW: tree18.sno + URBAN: tree18.urb tree19: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree19.tem + SNOW: tree19.sno + URBAN: tree19.urb tree20: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree20.tem + SNOW: tree20.sno + URBAN: tree20.urb tree21: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree21.tem + SNOW: tree21.sno + URBAN: tree21.urb tree22: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree22.tem + SNOW: tree22.sno + URBAN: tree22.urb tree23: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree23.tem + SNOW: tree23.sno + URBAN: tree23.urb tree24: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree24.tem + SNOW: tree24.sno + URBAN: tree24.urb tree25: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree25.tem + SNOW: tree25.sno + URBAN: tree25.urb tree26: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree26.tem + SNOW: tree26.sno + URBAN: tree26.urb tree27: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree27.tem + SNOW: tree27.sno + URBAN: tree27.urb tree28: Inherits: ^Tree + idle: + TilesetFilenames: + TEMPERATE: tree28.tem + SNOW: tree28.sno + URBAN: tree28.urb diff --git a/mods/ra2/sequences/vehicles.yaml b/mods/ra2/sequences/vehicles.yaml index ec005de1c..9903759d4 100644 --- a/mods/ra2/sequences/vehicles.yaml +++ b/mods/ra2/sequences/vehicles.yaml @@ -1,60 +1,76 @@ amcv: Inherits@MC: ^MindControllable - icon: mcvicon + icon: + Filename: mcvicon.shp aegis: Inherits@MC: ^MindControllable - icon: agisicon + icon: + Filename: agisicon.shp bus: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp car: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp carrier: Inherits@MC: ^MindControllable - icon: carricon + icon: + Filename: carricon.shp cdest: Inherits@MC: ^MindControllable Inherits@Muzzle: ^WithCannonMuzzle - icon: xxicon + icon: + Filename: xxicon.shp cona: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp cop: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp cmin: - harvest: oregath + harvest: + Filename: oregath.shp Length: 15 Facings: 8 - warpin: warpin - warpout: warpout + warpin: + Filename: warpin.shp + warpout: + Filename: warpout.shp Length: 20 - icon: ahrvicon + icon: + Filename: ahrvicon.shp cruise: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp dest: Inherits@MC: ^MindControllable Inherits@Muzzle: ^WithCannonMuzzle - icon: desticon + icon: + Filename: desticon.shp dred: Inherits@MC: ^MindControllable - icon: dredicon + icon: + Filename: dredicon.shp dron: Defaults: + Filename: dron.shp Offset: 0, 0, 15 stand: Start: 48 @@ -71,168 +87,211 @@ dron: ShadowStart: 144 Length: 4 Facings: -8 - shoot: dronp + shoot: + Filename: dronp.shp Length: 1 Facings: 32 - icon: dronicon + icon: + Filename: dronicon.shp euroc: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp flata: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp fv: Inherits@MC: ^MindControllable - icon: fvicon + icon: + Filename: fvicon.shp mgtk: Inherits@MC: ^MindControllable - muzzle: vtmuzzle + muzzle: + Filename: vtmuzzle.shp Length: * - icon: rtnkicon - idle: null # this is required because the WithSpriteBody constructor initializes before the Mirage trait is activated + icon: + Filename: rtnkicon.shp + idle: # this is required because the WithSpriteBody constructor initializes before the Mirage trait is activated + Filename: null.shp gtgcan: - icon: gcanicon + icon: + Filename: gcanicon.shp mtnk: Inherits@MC: ^MindControllable Inherits@Muzzle: ^WithCannonMuzzle - icon: gtnkicon + icon: + Filename: gtnkicon.shp harv: Inherits@Muzzle: ^WithFlakMuzzle - harvest: oregath + harvest: + Filename: oregath.shp Length: 15 Facings: 8 - icon: harvicon + icon: + Filename: harvicon.shp htk: Inherits@MC: ^MindControllable Inherits@Muzzle: ^WithFlakMuzzle - icon: htkicon + icon: + Filename: htkicon.shp htnk: Inherits@MC: ^MindControllable Inherits@Muzzle: ^WithCannonMuzzle - icon: htnkicon + icon: + Filename: htnkicon.shp howi: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp hyd: Inherits@MC: ^MindControllable Inherits@Muzzle: ^WithFlakMuzzle - icon: hovricon + icon: + Filename: hovricon.shp lcrf: Inherits@MC: ^MindControllable - icon: landicon + icon: + Filename: landicon.shp limo: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp ltnk: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp apoc: Inherits@MC: ^MindControllable Inherits@Muzzle: ^WithCannonMuzzle - muzzle: apmuzzle + muzzle: + Filename: apmuzzle.shp Length: * - icon: mtnkicon + icon: + Filename: mtnkicon.shp pick: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp propa: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp ptruck: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp rtnk: Inherits@MC: ^MindControllable - icon: rtnkicon + icon: + Filename: rtnkicon.shp smcv: Inherits@MC: ^MindControllable - icon: smcvicon + icon: + Filename: smcvicon.shp sref: Inherits@MC: ^MindControllable - icon: sreficon + icon: + Filename: sreficon.shp stang: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp sub: Inherits@MC: ^MindControllable - icon: subicon + icon: + Filename: subicon.shp suvb: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp suvw: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp taxi: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp tnkd: Inherits@MC: ^MindControllable Inherits@Muzzle: ^WithCannonMuzzle - icon: tnkdicon + icon: + Filename: tnkdicon.shp tractor: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp sapc: Inherits@MC: ^MindControllable - icon: sapcicon + icon: + Filename: sapcicon.shp dtruck: Inherits@MC: ^MindControllable - icon: trkaicon + icon: + Filename: trkaicon.shp trucka: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp truckb: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp ttnk: Inherits@MC: ^MindControllable - icon: ttnkicon + icon: + Filename: ttnkicon.shp tug: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp v3: Inherits@MC: ^MindControllable - icon: v3icon + icon: + Filename: v3icon.shp vlad: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp wini: Inherits@MC: ^MindControllable - icon: xxicon + icon: + Filename: xxicon.shp diff --git a/mods/ra2/weapons/defaults.yaml b/mods/ra2/weapons/defaults.yaml index 670b512c3..e7800ea17 100644 --- a/mods/ra2/weapons/defaults.yaml +++ b/mods/ra2/weapons/defaults.yaml @@ -79,7 +79,7 @@ Image: DRAGON Palette: ra ContrailLength: 8 - ContrailWidth: 24 + ContrailStartWidth: 24 CruiseAltitude: 4352 VerticalRateOfTurn: 220 HorizontalRateOfTurn: 220 diff --git a/packaging/windows/buildpackage.nsi b/packaging/windows/buildpackage.nsi index e337a22a1..c25489684 100644 --- a/packaging/windows/buildpackage.nsi +++ b/packaging/windows/buildpackage.nsi @@ -111,9 +111,6 @@ Section "Game" GAME "$OUTDIR\${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" "" "" "" "" !insertmacro MUI_STARTMENU_WRITE_END - SetOutPath "$INSTDIR\lua" - File "${SRCDIR}\lua\*.lua" - SetOutPath "$INSTDIR\glsl" File "${SRCDIR}\glsl\*.frag" File "${SRCDIR}\glsl\*.vert" @@ -162,7 +159,6 @@ Function ${UN}Clean RMDir /r $INSTDIR\mods RMDir /r $INSTDIR\maps RMDir /r $INSTDIR\glsl - RMDir /r $INSTDIR\lua Delete $INSTDIR\*.exe Delete $INSTDIR\*.dll Delete $INSTDIR\*.ico diff --git a/packaging/windows/buildpackage.sh b/packaging/windows/buildpackage.sh index a5fbceee0..499e72816 100755 --- a/packaging/windows/buildpackage.sh +++ b/packaging/windows/buildpackage.sh @@ -108,12 +108,23 @@ function build_platform() echo "Mod version ${MOD_VERSION} will remain unchanged."; fi + TAG_TYPE="${TAG%%-*}" + TAG_VERSION="${TAG#*-}" + BACKWARDS_TAG="${TAG_VERSION}-${TAG_TYPE}" + # Create multi-resolution icon convert "${ARTWORK_DIR}/icon_16x16.png" "${ARTWORK_DIR}/icon_24x24.png" "${ARTWORK_DIR}/icon_32x32.png" "${ARTWORK_DIR}/icon_48x48.png" "${ARTWORK_DIR}/icon_256x256.png" "${BUILTDIR}/${MOD_ID}.ico" echo "Compiling Windows launcher (${PLATFORM})" - install_windows_launcher "${TEMPLATE_ROOT}/${ENGINE_DIRECTORY}" "${BUILTDIR}" "win-${PLATFORM}" "${MOD_ID}" "${PACKAGING_WINDOWS_LAUNCHER_NAME}" "${PACKAGING_DISPLAY_NAME}" "${PACKAGING_FAQ_URL}" - + install_windows_launcher "${TEMPLATE_ROOT}/${ENGINE_DIRECTORY}" "${BUILTDIR}" "win-${PLATFORM}" "${MOD_ID}" "${PACKAGING_WINDOWS_LAUNCHER_NAME}" "${PACKAGING_DISPLAY_NAME}" "${PACKAGING_FAQ_URL}" "${TAG}" + + # Use rcedit to patch the generated EXE with missing assembly/PortableExecutable information because .NET 6 ignores that when building on Linux. + # Using a backwards version tag because rcedit is unable to set versions starting with a letter. + wine64 rcedit-x64.exe "${BUILTDIR}/${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" --set-product-version "${BACKWARDS_TAG}" + wine64 rcedit-x64.exe "${BUILTDIR}/${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" --set-version-string "ProductName" "OpenRA" + wine64 rcedit-x64.exe "${BUILTDIR}/${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" --set-version-string "CompanyName" "The OpenRA team" + wine64 rcedit-x64.exe "${BUILTDIR}/${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" --set-version-string "FileDescription" "${PACKAGING_WINDOWS_LAUNCHER_NAME} mod for OpenRA" + wine64 rcedit-x64.exe "${BUILTDIR}/${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" --set-version-string "LegalCopyright" "Copyright (c) The OpenRA Developers and Contributors" wine64 rcedit-x64.exe "${BUILTDIR}/${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" --set-icon "${BUILTDIR}/${MOD_ID}.ico" echo "Building Windows setup.exe (${PLATFORM})"