Post tutorial Report RSS A:CTS Troop String Reference Guide

The Airships: Conquer The Skies Troop String Reference Guide.

Posted by on - Intermediate Mapping/Technical

AIRSHIPS: CONQUER THE SKIES TROOP STRING REFERENCE GUIDE
by Psyringe


Updated 11/19/2017 - Inception. | Scheduled mass-detail [incomplete]'s via new TMK mod including spellcheck. | Micro patched "aimTime".


CONTENTS
#01 INTRODUCTION
#02 LEGEND
#03 CORE
#04 APPEARANCE
#05 RESOURCE
#06 WEAPON & WEAPON APPEARANCE
#07 FLYING
#08 MACHINE
#09 SHOUTS/value.json
#10 BODYPLAN/value.json
#11 ANIMATIONAPPEARANCE/value.json
#12 ANIMATIONBUNDLE/value.json
#13 MODDING TUTORIAL BY DOCTOR PSYRINGE


#01 INTRODUCTION
This document will cover strings in Airships: Conquer The Skies .JSON scripts associated with Troops. Please note that this document is a "work in progress", and the extent of some of the scripts are not fully explored yet; some will have [incomplete] markers. Unless specified this document references the CrewType/value.json array.


#02 LEGEND
| value = User Input
| /value.json implies "Array Filename" for all practical purposes, and can posses any value.
| 1 Tile = 16x16 Pixels
| True/False = Default
| spritesheet Grid = 63x63 Tiles (X & Y start at Tile 0, making a total of 64) = 1024x1024 Pixels
| X is Horizontal tiles, Y is Vertical tiles.
| X begins Left, Y begins Top.
| You can use negative numbers while referencing the spritesheet.
| Machine Logic is isolated, and cannot be mixed with "Normal" Troops.
| Flying Machine Logic CANNOT walk on normal terrain, it will crash the title.
| The last string in a .JSON Array doesn't need a comma "," and could generate a Java Error on import if present - although not in all cases.


#03 CORE


| Troop Name referenced by the en.properties file. In-Game displays this name in red when no language value is applied.

    "name": "value",

| Indicates the Troop is a Machine, enabling additional AI Flying/Plane Properties. These properties are nearly all exclusive to Flying/Plane. (See #08 MACHINE)

    "isMachine": true,

| Indicates the Troop does Work, such as collecting Coal, Piloting Craft or Weapon, Repairing, etc.

    "doesWork": true,

| Indicates the Troop can act as a Guard, if "fixedGuards" or "recommendedGuards" are present on the craft.

    "doesGuard": true,

| Indicates the Troop will Board The Enemy if the Command is issued.
If the Troop cannot Work, they cannot Capture the opposing vehicle.

    "canBoard": true,

#04 APPEARANCE


| Troops Shouts, referencing the SHOUTS/value.json array filename without extension (.JSON).

    "shouts": "value",

| Troops appearance in-game, "animLooks" referencing the ANIMATIONBUNDLE/value.json array.
Can posses multiple sub containers; ex. [ "content, "content" ],

    "animLooks": [ "value" ],

| [incomplete - investigate] Assumed Troops generalized appearance in caching scenarios, such as graphics in the Main Menu, where "x" & "y" are position on the spritesheet in Tiles.
Unknown "simpleLook" definition, appears outdated.
The Troop is manually offset on the Tile how they would appear in-game.

    "simpleLook": { "src": "spritesheet", "x": 0, "y": 14 },

| [incomplete - investigate] Replaces color on the Troop with colors indicated by in-game custom COA, where"recolorOriginalA" & "recolorOriginalB" are the original colors on the spritesheet, "r" "g" & "b" are Red Green & Blue numerical color values, "recolorReplacementA" & "recolorReplacementB" indicate type of custom COA, and "COA_METAL" & "COA_COLOUR" representing multiple types of COA color changes color changes.
Unknown Naming Rules.

    "recolorOriginalA": { "r": value, "g": value, "b": value},
    "recolorReplacementA": "COA_METAL",
    "recolorOriginalB": { "r": value, "g": value, "b": value },
    "recolorReplacementB": "COA_COLOUR",

| [incomplete] Most often associated with Plane Deaths, "explosionSize" is the Explosion graphic the Troop generates on death.
Unknown if functional for Non-Flying Indoor (See #07 FLYING).

    "explosionSize": value,

#05 RESOURCE


| Total Hit Points of the Troop.

      "maxHP": value,

| Number of Hit Points necessary to continue performing tasks enabled by "doesWork" (See #03 CORE).

    "minWorkingHP": value,

| [incomplete - investigate] The Hit Points necessary for the Troop to return to the Module that Spawned them, where "returnToRepairHP" is the number of Hit Points necessary for the Troop to follow the function and "msPerHPRepaired" Millisseconds per 1 Hit Point Repaired.
Unknown if functional for Non-Machines (See #08 MACHINE).

    "returnToRepairHP": value,
    "msPerHPRepaired": value,

| The Maintenance Cost of the Troop, adding to overall upkeep cost of the craft in singleplayer.
Stacks with Modules.

    "supplyCost": value,

| [incomplete - investigate] At a base number of 1.0 (100%), indicates how effective/quickly the Troop performs all Work.
Does NOT apply to Movement or Offensive abilities.

    "crewEffectiveness": value,

| At a base number of 1.0 (100%), indicates how quickly a Troop moves on Foot while inside a craft.
Unknown if this applies to "isExternal" Modules.
In decimal; ex. #.##

    "insideSpeed": value,

| At a base number of 1.0 (100%), indicates how quickly a Troop moves on Foot while outside a craft.
Unknown if this applies to "isExternal" Modules.
In decimal; ex. #.##

    "outsideSpeed": value,

| At a base number of 1.0 (100%), indicates how quickly a Troop will traverse a Ladder/Climb/Rope.

In decimal; ex. #.##

    "goingUpSpeedMult": value,

| [incomplete - investigate] Seen on Spiders, "jumpStrength" is the actual distance the Troop can jump in *, the jump distance measured/assumed/expected by the AI in *.
Unaware the specific numerical values.
Seen with with "hasHook" (See Below).
In decimal; ex. #.##

    "jumpStrength": value,
    "assumedJumpDist": value,

| [incomplete - investigate] Indicates the Troop has a Hook/Tether where; "hasHook" is Default True, "winchSpeed" the *speed at which the Hook/Rope travels in *Tiles per Second, "hookRopeWidth" the width of the Rope/Tether in Pixels generated in-game.
Unknown "winchSpeed" values/definition, seen on Spiders, assumed definition.

"hookImg"; where "src", "x" & "y" location on the spritesheet in Pixels, "w" & "h" width & height of the module in Pixels,

    "hasHook": true,
    "winchSpeed": value,
    "hookRopeWidth": value,
    "hookImg": {"src": "value", "x": value, "y": value, "w": value, "h": value},

| [incomplete - pitch & volume measurements] "hookLaunchSnd" where; "layers" is the number of varying Sound Tracks that exist in the Sound Mix, "variations" are different Audio/Sounds nested within a specific "layer" without extension (.OGG), "volume" the Minimum and Maximum Volume modifier the "variations" could play at, "pitch" the Minimum and Maximum Pitch modifier the "variations" could be altered to.
Uses the same script layout as "hookHitSnd", "deathSnd", "coughSnd".
Can use shorthand constants: ex. "volume": value,
Can posses multiple sub containers; ex. [ "content, "content" ],

    "hookLaunchSnd": {
        "layers": [ {
            "variations": [ "value" ],
            "volume": {
            "min": value,
            "max": value },
            "pitch": {
            "min": value,
            "max": value } } ]
    },

#06 WEAPON & WEAPON APPEARANCE


| [incomplete - investigate] Seen on Spiders, indicates the Troop can perform a short range Melee Attack.
Unknown definition, assumed effect, no custom animation.

    "meleeAttack": true,

| [incomplete] Indicates a Troop can shoot indoors; assumed minimum amount of damage a Shot can inflict.
Unknown overall definition. Assumed effect.

    "shotDamageMin": value,

| How far a Troop can shoot indoors; where "shotDamageRange is *.
Unknown "shotDamageRange" measurement. Assumed effect.

    "shotDamageRange": value,

| Penetration Damage the Troop inflicts per Shot.

    "penDmg": value,

| Direct Damage the Troop inflicts per Shot, ignoring the effects of Armour.

    "directDmg": value,

| [incomplete - investigate] Blast Damage the Troop inflicts per Shot, where "blastSplashRadius" is Radius of the widened area of damage after a Shot hits the Target in Pixels.
Unknown if functional on Non-Flying Machine or Indoors.

    "blastDmg": value,
    "blastSplashRadius": value,

| [incomplete - investigate] Indicates the Troop has bombs, where "hitExplosionSize" & "missExplosionSize" are the size of the in-game explosion graphic, in Tiles.
Unknown if functional on Non-Flying Machine or Indoors.
In decimal; ex. #.##

    "bombs": true,
    "hitExplosionSize": value,
    "missExplosionSize": value,

| [incomplete - investigate] How grouped Shots are, the bonus stacking in succession as the weapon remains firing. In percentage, 0.0 being extremely inaccurate and 1.0 always firing the same direction.
Unknown if stacking with Module-Based Accuracy Effects.
In decimal, ex. #.#

Zarkonnen - 'Deviation from the intended target coordinate is calculated independently for the x-axis and y-axis, so it does all of this twice. It calculates the deviation magnitude and then multiplies this with a random gaussian value that has an average of 0 and a standard deviation of 1.

x = targetX + gaussian() * deviationMagnitude
y = targetY + gaussian() * deviationMagnitude

The basic deviation magnitude is calculated as follows:
weapon inaccuracy * distance to target in pixels * 16
This is then modified by:

  • The "precise gunnery" bonus, if present and applicable, halves the deviation magnitude.
  • The accuracy bonus from crow's nests, telescopes and targeting computers. Each of them is only applied once, so if you have two telescopes it counts as if it were one. The bonuses are added together, so if you have all three, you have 10% (Crow's Nest) + 30% (Telescope) + 30% (Targeting Computer) = 70% bonus, which means the deviation magnitude is reduced by 70%.
  • Shooting at ships in fog triples the deviation magnitude.
  • Various WeatherEffects can increase the deviation magnitude. For example, dawn doubles the deviation magnitude when shooting from left to right, and night doubles it under all conditions.'
    "inaccuracy": value,

| Time in Milliseconds between Troop Shots.

    "weaponReload": value,

| [incomplete - investigate] Assumed a delay-over-time adding to the Milliseconds it takes to reload a weapon, balancing Troops like Mech Spiders.

    "reloadSlowdown": value,

| How fast a Troops Shot travels its trajectory in Tiles per Millisecond.
In decimal; ex. #.#

    "shotSpeed": value,

| Horizontal point where a Shot fires from the Troops graphic; where "barrelX" is position horizontally from the top left the barrel of the Module in Pixels.
Rotation position desired in pixels on the spritesheet X - ("w" aka Barrel Width Pixels / 2) = "barrelX"
In decimal; ex. #.##

    "barrelX": value,

| Vertical point where a Shot fires from the Troops graphic; "barrelY" is position vertically from the top left of the barrel in the Module in Pixels.
Rotation position desired in pixels on the spritesheet Y - ("h" aka Barrel Height Pixels / 2) = "barrelY"
In decimal; ex. #.##

    "barrelY": value,

| Appearance of the Troops Shot; where "src" is a spritesheet reference by filename without extension (.PNG), "x" & "y" location on the spritesheet in pixels, and "w" & "h" pixel dimensions of the graphic In-Game - where center is rotation.

    "shot": { "src": "value", "x": value, "y": value, "w": value, "h": value },

| "aimTime" is * in Milliseconds.
Unknown "aimTime" definition.

"aimTime": value,


| [incomplete - investigate] Assumed Particle spawned with a Troops Shot.
Unknown definition depth.

    "attackParticle": "value",

| [incomplete - pitch & volume measurements] "attackSnd" where; "layers" is the number of varying Sound Tracks that exist in the Sound Mix, "variations" are different Audio/Sounds nested within a specific "layer" without extension (.OGG), "volume" the Minimum and Maximum Volume modifier the "variations" could play at, "pitch" the Minimum and Maximum Pitch modifier the "variations" could be altered to.
Can use shorthand constants: ex. "volume": value,
Can posses multiple sub containers; ex. [ "content, "content" ],

    "attackSnd": {
        "layers": [ {
            "variations": [ "value" ],
            "volume": {
            "min": value,
            "max": value },
            "pitch": {
            "min": value,
            "max": value } } ]
    },

#07 FLYING


| Indicates a Troop can Fly, demanding the "FLY_LEFT" and "FLY_RIGHT" animations (See #11 ANIMATIONBUNDLE/value.json).

    "canFly": true,

| [incomplete - investigate] Indicates a Flying Troop will use an in-game death crash animation.
Unknown if functional on Non-Machine or Indoors.
Unknown full effect, ie. collision with other craft.

    "crashesOnDeath": true,

| The flight speed of a Troop; where "airXMinSpeed" & "airXTopSpeed" are the Troops Minimum and Maximum speed while moving horizontally in Tiles per Millisecond, and "airUpTopSpeed" & "airDownTopspeed" are the Troops Minimum and Maximum speeds while moving vertically in Tiles per Millisecond.
In decimal; ex. #.##

    "airXMinSpeed": value,
    "airXTopSpeed": value,
    "airUpTopSpeed": value,
    "airDownTopSpeed": value,

| The flight acceleration of a Troop where; "airXAcceleration" is generated acceleration over time horizonally in Tiles per Millisecond, "airUpAcceleration" & "airDownAcceleration" are generated acceleration over time vertically in Tiles per Millisecond.
In decimal; ex. #.##

    "airXAcceleration": value,
    "airDownAcceleration": value,
    "airUpAcceleration": value,

| [incomplete - investigate] Random flight factor where; "airOvershoot" is the Troops additional flight path calculation in Tiles.
Unknown effect depth.
In decimal; ex. #.##

"airOvershoot": value,


| Troops speed modifier while leaving the module; where "launchLength" is duration of the effect, "launchMinXSpeed" & "launchMaxXSpeed" generate a variable speed the Troop can exit the Module horizontally in Tiles per Millisecond, and "launchMinYSpeed" & "launchMaxYSpeed" generate a variable speed the Troop can exit the Module vertically in Tiles per Millisecond.
In decimal; ex. #.##

    "launchLength": value,
    "launchMinXSpeed": value,
    "launchMaxXSpeed": value,
    "launchMinYSpeed": value,
    "launchMaxYSpeed": value,

| [incomplete - investigate] Assumed Troop transition delay between Interior and Exterior Module in Milliseconds.
Unknown definition.

"popOutDelayMin": value,
"popOutDelayRange": value,

| [incomplete - pitch & volume measurements] "launchSnd"; where "layers" is the number of varying Sound Tracks that exist in the Sound Mix, "variations" are different Audio/Sounds nested within a specific "layer" without extension (.OGG), "volume" the Minimum and Maximum Volume modifier the "variations" could play at, "pitch" the Minimum and Maximum Pitch modifier the "variations" could be altered to.
Can use shorthand constants: ex. "volume": value,
Can posses multiple sub containers; ex. [ "content, "content" ],

    "launchSnd": {
        "layers": [ {
            "variations": [ "value" ],
            "volume": {
            "min": value,
            "max": value },
            "pitch": {
            "min": value,
            "max": value } } ]
    },

#08 MACHINE


| [incomplete - investigate] Indicates a Flying Machine can travel a module Interior.
It's assumed this is only usable for Flying Machines.
Unknown if there's a relation to Takeoff/Land Command.

    "canWalk": false,

| [incomplete - investigate] Indicates the Troop fires at Modules, where "maxRange" is the distance Troops engage opponents in *Pixels.
Unknown "maxRange" numeric value/conversion.
It's assumed this is only usable for Flying Machines.
In decimal; ex. #.##

    "shootsShips": true,
    "maxRange": value,

| [incomplete - investigate] Indicates the Troop fires at Troops, where "shootTroopsRange" is the distance at which Troops engage opponents in *Pixels.
Unknown "shootTroopsRange" numeric value/conversion.
It's assumed this is only usable for Flying Machines.
In decimal; ex. #.##

    "interceptTroops": true,
    "shootTroopsRange": value,

| [incomplete - investigate] Only seen on Troops with "isMachine" & "canFly", assumed this is an AI attribute for an in-game animation.
It's assumed this is only usable for Flying Machines.

    "strafeOvershoot": value,

#09 SHOUTS/value.json


| Troops Shouts referenced by the CrewType/value.json file (See #04 APPEARANCE); where "value1" is the Type of Shout limited to engine availability, and "value2" limitless creates a reference for the en.properties file, specifying shout text that appear in-game.

Limited Values: suspOffline needCoal needAmmo hit injured aboutToExplode falling damageReport hullBreach fire holdFire aimedFire rapidFire directHit victory defeat outOfAMMO veryLowAMMO lowAMMO outOfCOAL veryLowCOAL lowCOAL outOfWATER veryLowWATER lowWATER outOfREPAIR veryLowREPAIR lowREPAIR outOfINJURED veryLowINJURED lowINJURED repaired boarderReachedBridge boarder boarders braking ramming abandonShip troopMove

{
    "value1": [
        "value2" ]
}

#10 BODYPLAN/value.json


| Referenced by the AnimationBundle/value.json array (See Below), the BodyPlan/value.json array file contains references for graphics coordinates in the AnimationAppearance/value.json array for the AnimationBundle/value.json array (See Below), where "name" is the name of the BodyPlan, "value1" indicates the direction the Troop graphic faces limited to engine availability, and "value2" is the named graphic reference.
This array is read out by the AnimationBundle/value.json, and AnimationAppearance/value.json graphic references are used from the engines cache.

Side Values: FRONT, BACK, RIGHT, LEFT

Graphic Values: backpack, head, hat, torso, abdomen, left_leg, right_leg, weapon, left_arm, left_arm_bent, right_arm, right_arm_bent, right_arm_hammer, body, wing, damagedBody, left_palp, right_palp, left_leg_1, left_leg_2, left_leg_3, left_leg_4, right_leg_1, right_leg_2, right_leg_3, right_leg_4, eyes, thorax, abdomen

Can posses multiple sub containers; ex. [ "content, "content" ],

[ { 
    "name": "value",
        "value1": [
            "value2" ]
} ]

#11 ANIMATIONAPPEARANCE/value.json

| Referencing the AnimationBundle/value.json "name" (See Below), the AnimationAppearance/value.json specifies locations of Troop bodyparts/elements on the spritesheet for the AnimationAppearance/value.json, where "name" is the name/identifier for the AnimationAppearance array, "bundle" is the "name" of the AnimationBundle array, and "spritesheet" the spritesheet filename without extension (.PNG).

"images"; where "flipped" if True indicates the graphic referenced is flipped, "part" the Named Graphic reference as seen in the BodyPlan/value.json array, "side" indicates the side the Troop is facing in-game as seen in the BodyPlan/value.json array, "x" & "y" are the location of the Named Graphic on the spritesheet in Pixels, and "w" & "h" are the width and height of the Named Graphic on the spritesheet in Pixels.

References in the AnimationAppearance/value.json & BodyPlan/value.json arrays must match for the AnimationBundle/value.json array to function correctly.
The AnimationAppearance/value.json array is not referenced by the BodyPlan/value.json array and caches on launch, everything is handled by the AndimationBundle/value.json array.

Can occupy multiple containers; ex. [ { content }, { content } ],

[ {
    "name": "sailor",
    "bundle": "value",
    "spritesheet": "spritesheet"
    "images": [ {
            "flipped": false,
            "part": "value",
            "side": "value",
            "x": value,
            "y": value,
            "w": value,
            "h": value } ]
} ]

#12 ANIMATIONBUNDLE/value.json


| [incomplete - investigate] The Animation Bundle for the Troop providing motion for the Named Graphics referenced by the BodyPlan/value.json array and the AnimationAppearance/value.json array (See Above), where "name" is the AnimationBundle/value.json array name referenced by the CrewType/value.json array, "bodyPlan" the BodyPlan/value.json array "name" reference, "side" the side the Troop is facing limited to engine availability, "type" the kind of animation limited to engine availability, and *"width" & "height" of the Troop animation container in Pixels,
Unknown "width" & "height", assumed definition.
All of the elements in the AnimationBundle/value.json array are clipped to the container.
Assumed Center has a 0,0 animation reference point.

"animations"; where "parts" are identifies the animation process, "name" the Named Graphic in prior references, "x" & "y" the offset of the Name Graphic within the "width &"height" ie. container from the Center in *Pixels, "cH" & "cOff" & "cPeriod" & "cW" animation values in *.
Unknown if "x" & "y" are in Pixels or Tiles.
Unknown Numeric Definition, "cH" & "cOff" & "cPeriod" & "cW" need experimentation and confirmation.

Limited Type Values: CLIMB, CLIMB_SIDEWAYS, COLLAPSE, FALL, GIVE_LEFT, GIVE_RIGHT, HANG_IN_THERE, HAPPY, INJURED, DEAD, JUMP_LEFT, JUMP_RIGHT, REPAIR, SAD, SHOOT_LEFT, SHOOT_RIGHT, SHOT_FROM_LEFT, SHOT_FROM_RIGHT, STANDING, STANDING_ARMED, STANDING_LEFT, STANDING_RIGHT, WALK_LEFT, WALK_LEFT_ARMED, WALK_RIGHT, WALK_RIGHT_ARMED, WORK, FLY_LEFT, FLY_RIGHT

Can occupy multiple containers; ex. [ { content }, { content } ],

[ {
    "name": "value",
    "bodyPlan": "value",
    "width": value,
    "height": value,
    "side": "value",
    "type": "value",
    "animations": [ {
        "parts": [ {
            "name": "value",
            "x": value,
            "y": value,
            "cH": value,
            "cOff": value,
            "cPeriod": value,
            "cW": value } ]
    } ]
} ]

#13 MODDING TUTORIAL BY DOCTOR PSYRINGE


Post a comment

Your comment will be anonymous unless you join the community. Or sign in with your social account: