The Module Kit enables modders to create and test theoretical Modules for Airships: Conquer The Skies without the tedium of the full modding process.

Report RSS A:CTS Module String Reference Guide

The Airships: Conquer The Skies Module String Reference Guide.

Posted by on - Intermediate Mapping/Technical

AIRSHIPS: CONQUER THE SKIES MODULE STRING REFERENCE GUIDE
by Psyringe


Updated 11/17/2017 - Updated script definitions. | Added new script definitions. | Removed/Repaired Sound script definitions. | Added bonus details.


CONTENTS
#01 INTRODUCTION
#02 LEGEND
#03 CORE
#04 APPEARANCE
#05 STRUCTURE
#06 RESOURCE
#07 WEAPON
#08 WEAPON APPEARANCE
#09 AUDIO
#10 TRACKS
#11 LEGS
#12 TENTACLES [WIP]
#13 MODDING TUTORIAL BY DAVID STARK


#01 INTRODUCTION
This document will cover strings in Airships: Conquer The Skies .JSON scripts associated with Modules. 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.


#02 LEGEND
| value = User Input
| 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.
| [incomplete - verify] Fire travels routes Air Sailors "canOccupy".
| .JSON's can posses multiple "appearance" strings.
| 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


| Module Name referenced by the en.properties file and "flippedFrom" string. In-Game displays this name in red when no language value is applied.

        "name": "value",

| Creates horizontally flipped variation of referenced "name".

    {
        "name": "value",
        "flippedFrom": "value"
    },

| Removes the specified "name" from the game.
ex. Removing modules part of the core distribution or a conflicting mod.
Often found in its own .JSON Array.

    {
        "name": "value",
        "remove": true
    },

| In-Game Editor Module Category. Setting this value blank will make the module valid without appearing in-game.
Can Occupy Multiple: [ "value", "value" ],
Can Occupy None: [],
Values: BASIC STRUCTURAL LIFT PROPULSION RESOURCES COMMAND_AND_CREW WEAPONS TROOPS AIRCRAFT

        "categories": [ "value" ],

| Types of craft the Module is enabled for In-Game Editor. Engine defaults to all.
Can Occupy Multiple: [ "value", "value" ],
Values: AIRSHIP LANDSHIP BUILDING

        "availableFor": [ "value" ],

| Required Technology, City, or Charge bonus to build the Module in Single Player.
Technology/City/Module Bonus Values: NO_BONUS, EXTRA_INCOME, IMPROVED_WOOD_CONSTRUCTION, IMPROVED_STEEL_ARMOUR, IMPROVED_STONE_WALLS, RAMMING_PROWS, PRECISE_GUNNERY, WILL_TO_SURVIVE, RIGHTFUL_KING, FASTER_COMMANDS, DANGEROUS_FIGHTERS, SUSPENDIUM_SPECIALISTS, FIREFIGHTERS, MASTER_SPIES, EXPERT_REPAIRS, POWERFUL_EXPLOSIVES, CHEAP_WOOD, CHEAP_STEEL, CHEAP_STONE, CHEAP_GUNS, HEAVY_WOODEN_ARMOUR, HEAVY_STEEL_ARMOUR, MASSIVE_STONE_WALLS, SPIDER_LEGS, SUSPENDIUM_CANNON, GATLING_GUNS, FLAMETHROWERS, HEAVY_CANNON, FIRE_EXTINGUISHERS, TELESCOPES, MECH_SPIDERS, GREAT_FORESTS, RAMMING_PROWS, GRAPPLING_HOOKS, ROCKETS, COMPUTERS, DRAGONS, REVOLUTION, WOLFPACK, ARMOURED_TANKS, TORPEDOES, DRAGONHIDE, HARPOONS, FLESHCRACKERS, MONSTERS, BIPLANES, AIR_DRAGOONS, INDUSTRIOUS, ACID, SHELL_ARMOUR

Charge-Specific Bonus Values: RAMMING_PROWS (Ram), IMPROVED_STONE_WALLS (Tower), FASTER_COMMANDS (Wheel), EXTRA_INCOME (Scales), PRECISE_GUNNERY (Eagle), IMPROVED_WOOD_CONSTRUCTION (Tree), WILL_TO_SURVIVE (Rat), DANGEROUS_FIGHTERS (Lion), RIGHTFUL_KING (Crown), IMPROVED_STEEL_ARMOUR (Anvil), DRAGON_MASTERS (Dragon), SUSPENDIUM_SPECIALISTS (Mountain), FIREFIGHTERS (Waves), MASTER_SPIES (Eye), EXPERT_REPAIRS (Wrench), REVOLUTION (Guillotine), WOLFPACK (Wolf), ARMOURED_TANKS (Boar), TORPEDOES (Mullet), MECH_SPIDERS (Gear), BIPLANES (Vol), HARPOONS (Harpoon), AIR_DRAGOONS (Spearhead), INDUSTRIOUS (Bee)

Additional Unlisted Bonuses (untested): EXPLOSIVE_SHELLS, LIGHT_WOOD, FIREPROOF_WOOD, LIGHTNING_GUNS, WINGSUITS, REVIVING, DIESEL, BLOWPIPES

        "required": "value",

| Width of the Module in Tiles.

        "w": value,

| Height of the Module in Tiles.

        "h": value,

| Specifies the Modules property for AI Logic.
Value: isExplosive, isSail, isWeapon, isGun, isCannon, isRam

        "value": true,

| [incomplete] Maybe incomplete script found on Jelly? Nothing similar can be located on the current build (v9.5).

        "aiMaxY": value,

| This String is often used with Monsters. Triggers the AI for the Module after a specified number of Milliseconds.

ex. A Module with Capture Troops will Capture. A Module with a Weapon will Fire. A Module with Legs will begin to Walk. etc.

        "createsExceptionalCombatEventAfterMs": value,

| Specifies the Module acts as an Active Crew Member, capable of performing Module tasks without Troops occupying the Module, allowing Interior vision of the Module, and preventing Defeat of the craft under certain Conditions.

        "countsAsActiveCrew": true,

| Instantly removes the Module from the battle on destruction, allowing for animated or simplified death sequences from other connected Modules. Most often used on Monster Modules.

        "instantlyDestroyed": true,

#04 APPEARANCE


| Specifies the Game Engine should not draw 1 Pixel vertical lines on the left and right edges of the Module.

        "drawDoors": false,

| Randomizes the "frames" for "appearance".

        "framesAreVariants": true,

| In-Game graphic of the Module; where "src" is a spritesheet reference by filename without extension (.PNG), "x" & "y" location on the spritesheet in Tiles, "w" & "h" of the module in Tiles, "interval" time in milliseconds one "frames" cycles to the next, "frames"; where "x" & "y" referencing the spritesheet in Tiles and "w" & "h" of the module in Tiles, animating in descending order.

        "appearance": { "src": "value",  "x": value, "y": value, "w": value, "h": value },
        "interval": value,
        "frames": [
            { "x": value, "y": value, "w": value, "h": value },
            { "x": value, "y": value, "w": value, "h": value } ]
        },

| Lights on the interior of the Module, where "r" "g" & "b" are values on the color model, "radius" size of the light in pixels, and "x" & "y" location of the light on the module in Tiles.

        "lights": [ { "x": value, "y": value, "r": value, "g": value, "b": value, "radius": value } ],

| [incomplete] This string is often used for monsters.

        "canParticlesStick": false,

| In-Game emitter graphic, generates stationary particles; where "x" & "y" location the particles spawn in Tiles, "type" the Particle Type, "emitProbabality" spawns per Millisecond, and "inside" specifying the particles should spawn within the interior of the Module.
Uses the same script layout as "damagedEmitters" & "destroyedEmitters".
Can Posses Multiple: [ {content], {content] ],

Values: smoke big_smoke fire_smoke trailing_smoke muzzle_small muzzle muzzle_chunk impact fragment fire flame rocket_exhaust grenade_spark explode explode_backs explode_bits squid_ichor squid_ichor_death blood_spray blood_drip spider_blood_drip squid_blood_drip squid_blood_spurt dragon_blood_spray pus_drip pus_spray blood_spray_internal ichor ichor_internal healing dust rock_bit susp_spark magic water ember susp_chamber_spark small_susp_chamber_spark large_susp_chamber_spark susp_block_spark splinter leaf falling_leaf falling_snow lightning_spark damaged_spark exploding_spark lightning_flash ground_soil ground_mud ground_snow small_soot large_soot shockwave rope acid_droplet death_ray_shot death_ray_spark, gslit, gcrown, gu, gbull, gsprite1, gsprite2, gsprite3, gsprite4, gsprite5, stone_blocks

        "emitters": [ { "x": value, "y": value, "type": "value", "emitProbability": value, "inside": true } ],

| Forces the Game Engine to draw "externalAppearances" over the Armor and other Modules.
ex. Legs, Tracks, & Sails

        "externalDrawPriority": true,

| Exterior graphic of the Module; where "x" & "y" location on the module in Tiles, "src" the spritesheet filename without extension (.PNG), "x" & "y" location on the spritesheet in Tiles, "w" & "h" of the module in Tiles, "interval" time in milliseconds one "frames" cycles to the next, "frames"; where "w" & "h" Tiles referencing the spritesheet and "x" & "y" are pixels the graphic is offset, by default animating in descending order.
Observe the container difference to "appearance".
Uses the same script layout as "destroyedExternalAppearances" & "damagedExternalAppearances".

        "externalAppearances": [ {
            "x": value,
            "y": value,
        "appearance": {
            "src": "value",
            "x": value,
            "y": value,
            "w": value,
            "h": value 
            "interval": value,
        "frames": [
            { "x": value, "y": value, "w": value, "h": value },
            { "x": value, "y": value, "w": value, "h": value } ] }
        } ],

| Windows on the Module; where "x" & "y" are coordinate in Tile.

        "windows": [ { "x": value, "y": value }, { "x": value, "y": value } ],

| Removes generics explosive fragments that appear when a module is damaged/destroyed. Often used with with "damagedExternalAppearances" & "destroyedExternalAppearance".

       "hasGenericDestructionFragments": false,

| The Particle the Module creates when hit.

       "hitParticle": "value",

| Duration of a modules destruction, in Milliseconds, before being removed from battle. Often used with animated "destroyedExternalAppearance" with exception of the Kraken.

       "destructionLength": value,

| Particle(s) created when the Module is destroyed.

       "destructionParticle": "value",

| Particle Density of "destructionParticle" value.
Only seen accompanying "destructionParticle".

       "destructionParticleDensity": value,

| [incomplete] Assumed Speed multiplier of Fragments that are spawned when the Module is destroyed.
Only seen accompanying "destructionParticle".

       "fragmentsSpeedMult": value,

| [incomplete] Assumed multiplier of Fragments that are on fire when the Module is destroyed.
Only seen accompanying "destructionParticle".

       "fragmentsFireMult": 0,

| [incomplete] Assumed Fragment Density of the Module when destroyed, creating multiple Fragments.
Only seen accompanying "destructionParticle".

       "fragmentsDensity": 1.0,


#05 STRUCTURE


| The Module cannot have another Module intersect with any Tile in the specified direction.
Values: frontOnly backOnly topOnly bottomOnly

        "value": true,

| Upward facing doors in the Module specified by Tile horizontally.
Can Occupy Multiple: [ value, value ],

        "upDoors": [ value ],

| Left facing doors specified by Tile vertically. If no doors are specified, the default is all Y values.
Can Occupy Multiple: [ value, value ],

        "leftDoors": [ value ],

| Right facing doors in the Module specified by Game Tile vertically.
Can Occupy Multiple: [ value, value ],

        "rightDoors": [ value ],

| Tiles in the Module personnel can occupy by coordinate in Tile.

In this snippet, all 6 Tiles of a 3w x 2h Module are open to the sailor, invading personnel, & fire. Removing a coordinate value would make it unavailable. This snippet is the equivalent of having no "canOccupy" string at all, the Engine defaulting to all available Tiles.

        "canOccupy": [ 
            { "x": 0, "y": 0 }, 
            { "x": 1, "y": 0 }, 
            { "x": 2, "y": 0 }, 
            { "x": 0, "y": 1 }, 
            { "x": 1, "y": 1 }, 
            { "x": 2, "y": 1 }
        ],

#06 RESOURCE


| Specifies if the Module cannot be protected by armor. Removes all armor effects including graphics.

        "external": true,

| Forced/Built-In Amour Type for the Module. String is often used with Monsters & Hatches where the Armor is invisible or subjective.
Values: NONE, LT_WOOD_HIDDEN, MED_STEEL_HIDDEN, HV_STEEL_HIDDEN, DRAGON_SKIN, WHITE_DRAGON_SKIN, BLACK_DRAGON_SKIN, GREY_DRAGON_SKIN, GREEN_DRAGON_SKIN, SQUID_SKIN, CLOCKWORK_BRASS, LT_WOOD, MED_WOOD, HV_WOOD, LT_STEEL, MED_STEEL, HV_STEEL, BRICK_WALL, STONE_WALL, MASSIVE_STONE_WALL, DRAGONHIDE, SHELL_ARMOUR

        "armourType": "value",

| Modules Total Hit-Points; before adjacency, bonuses and armor.

        "hp": value,

| HP required before the Module chances explosion; before adjacency, bonuses and armor.

        "explodeHP": value,

| Explode Damage inflicted by the Module to surrounding Modules when destroyed. Does not affect other vehicles. Damage caused by the Module is calculated by the following:
Equation (provided by Zarkonnen);

distSq = (explodingModuleCenterX - targetModuleCenterX)^2 + (explodingModuleCenterY - targetModuleCenterY)^2

damage = baseExplosionDamage / distSq^0.8

        "explodeDmg": value,

| HP required to chance engulfing the Module in fire.

        "fireHP": value,

| HP required before a Module is destroyed. Often used for monsters, where this value indicates a specific HP.

        "destroyedHP": value,

| Damage multiplier against the Module on Collision with another In-Game object.

        "collisionDamageReceivedMult": value,

| Destroys the entire craft on destruction of the Module.

        "destroyEntireShipOnDestruction": true,

| Time it takes for personnel to travel through the module.

        "moveDelay": value,

| [incomplete - calculation] Weight of the Module.
(No calculations available.)

        "weight": value,

| Cost of the Module.

        "cost": value,

| How much Coal the Module holds.

        "coal": value,

| Time in milliseconds the Module needs to be re-supplied with Coal.

        "coalReload": value,

| How much Command the Module generates.
Equation (provided by Zarkonnen);
Command Points; 8000 + "Number of Crew" x 800 + "Number of Tiles" x 80
Command Points generated per millisecond; (total command points from modules x 1.5) x 4

        "command": value,

| [incomplete - calculation] How much lift the Module generates.

        "lift": value,

| [incomplete - calculation] How much propulsion the Module generates.

        "propulsion": value,

| How much supply the Module generates.

        "supplyProvided": value,

| How much ammo the Module generates.

        "ammo": value,

| How much water the Module generates.

        "water": value,

| Structural Integrity the Module adds or removes; can be a negative number, lessening the Structural Integrity penalty.

        "structuralStressAmount": value,

| How many personnel may simultaneously heal in the Module.

        "sickbay": value,

| How much bonus HP the Module provides to attached Modules.

        "shipHPBonus": value,

| Additional HP provided through adjacency with another module.

        "adjacencyBonusStrength": value,

| [incomplete] Accuracy bonus the Module provides, against deviation.
Deviation = Final Shot Calculation
Example; Crow's Nest + Telescope + Computer = shot_deviation*(0.8)^3
In decimal; ex. #.#

        "accuracyBonus": value,

| Prevents Boarding of the Craft until the Module is destroyed.

        "preventsBoarding": true,

| Number of "sailor" required for the Module to function. Takes priority over "recommendedCrew".

        "crew": value,

| Positions Troops take within the Module, in Tiles. Most often seen on Aircraft Modules.
Can Posses Multiple: [ {content], {content] ],

        "hangarPositions": [
            { "x": value, "y": value } ],

| Recommended number of "sailor" for the module to function properly. For example; an additional "sailor" to deliver Ammunition or Coal. Takes priority over "optionalcrew".

        "recommendedCrew": value,

| Number of "sailor" populating the Module if no other higher priority Module exists.

        "optionalCrew": value,

| Number of "guard" required to protect the Module, takes priority over "recommendedGuards".

        "fixedGuards": value

| Number of "guard" recommended to protect the Module, taking priority over any module without the string.

        "recommendedGuards": value,

| Maintenance Cost of the Module, applies against Income in Single Player.

        "maintenanceCost": value,

| Number of personnel the "quartersType" generates.

        "quarters": value,

| Troops the Module houses.
Values: sailor, soldier, marine, grenadier, guard, arachnid, , pirate, pirate_raider, air_hussar, triplane, bomber, biplane, air_dragoon, guardian_sprite, wolf_spider, black_widow_spider, mech_spider, susp_bee, clockwork_wasp

        "quartersType": "value",

#07 WEAPON


| The damage of the physical Module in a collision scenario; intended for ramming.

        "hardness": value,

| The damage of a module intended for ramming.

        "maxXRange": value,

| Minimum Range in pixels horizontally that the module must be from the target to fire the weapon.

        "minXRange": value,

| Max Range in pixels that the Shot can reach vertically upwards.

        "maxUpRange": value,

| Minimum Range in pixels vertically upwards that the module must be from the target to fire the weapon.

        "minUpRange": value,

| Max Range in pixels that the Shot can reach vertically downwards.

        "maxDownRange": value,

| Minimum Range in pixels vertically downwards that the module must be from the target to fire the weapon.

        "minDownRange": value,

| How fast the Shot travels its trajectory in Tiles per millisecond.
In decimal; ex. #.#

        "shotSpeed": value,

| Variation of shotSpeed for each Shot fired in Tiles per millisecond.
In decimal; ex. #.#

        "shotSpeedVariation": value,

| Time in milliseconds between shots.

        "reload": value,

| Number of Shots the Module can fire before needing a reload.

        "clip": value,

| Time it takes to reload the weapon, in milliseconds.

        "clipReloadTime": value,

| How inaccurate the Module is, before compensating "jitterMerge".
In decimal; ex. #.####

        "inaccuracy": value,

| 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.
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.

OptimumRange has no effect on these calculations and is only used by the AI to position its ships.

JitterMerge works by taking the previous deviation and mixing it with the new deviation. So if the jitterMerge is 0.5, the final deviation will be half the newly calculated one and half the previous one. This means that weapons like Gatling guns have their deviation drift around rather than being completely different each time, which would look odd.'

        "jitterMerge": value,

| Number of projectiles in a single Shot. Only seen in the Grapeshot module.

        "numShots": value,

| [incomplete - calculation] Jitter designed for "numShots". Only seen in the Grapeshot module. In percentage, 0.0 being extremely inaccurate and 1.0 always firing the same direction.
In decimal, ex. #.#

         "multiShotJitter": value,

| Blast Damage caused by the Modules Shots.

        "blastDmg": value,

| Radius of the widened area of damage after a Shot hits the Target, in Pixels.
Only seen accompanying "blastDmg".

        "blastSplashRadius": value,

| Penetration Damage caused by the Modules Shots.

        "penDmg": value,

| Direct Damage dealt to the Target Module, without Armour penalties.

        "directDmg": value,

| [incomplete - calculation] Specifies the Module can Target Troops and at what range. (Assumed in Pixels - measurement needed)

        "shootTroopsRange": value,        

| [incomplete - calculation] Fixed Inaccuracy against Troops. (Unknown if stacking with "innacuracy", unknown Value measurement)

        "fixedInaccuracyVsTroops": value,        

| [incomplete - calculation] Reverse Propulsion caused by firing the Shot, in negative Tile value.
In decimal; ex. #.#

        "recoilForce": value,

| Direction and arc the Module fires.
Values: forwards (right), backwards (left), up, down

        "fireArc": { "direction": "value", "degrees": value },

| Distance from the Module that is optimal for the weapon, indicating how the AI should react to the Module.
In pixels.

        "optimumRange": value,

| Origin relative to the top left of the module indicating where the Shot spawns, X axis in Tiles.
Position desired in pixels / Module width in pixels = "muzzleCenter" in Tiles
In decimal; ex #.#

        "muzzleCenterX": value,

| Origin relative to the top left of the module indicating where the Shot spawns, Y axis in Tiles.
Position desired in pixels / Module height in pixels = "muzzleCenter" in Tiles
In decimal; ex #.#

        "muzzleCenterY": value,

| How far from the point indicated by "muzzleCenter" strings the shot should spawn, in Tiles.

        "muzzleLength": value,

| [incomplete] When applied this string set will enable Tether properties for the Shot; where "color" applies "r" "g" & "b" values on the color model, "maxRange" is distance from the module the tether can reach in Pixels, "tearForce" the amount of force * required to break the Tether, "minLength" the minimum size the Tether can appear while active in Pixels, "shrinkSpeed" the speed at which the Tether retracts *, "k" the kinematic strength of the Tether (bounciness) *, "anchorX" & "anchorY" the position of the Tether on the module in Tiles, "width" the with of the Tether in Pixels, "ripSound" the sound the Tether makes when ripped, "ripParticle" the particle that appears then the Tether is ripped.

         "tetherSpec": {
             "color": {"r": value, "g": value, "b": value},
             "maxRange": value,
             "tearForce": value,
             "minLength": value,
             "shrinkSpeed": value,
             "k": value,
             "anchorX": value,
             "anchorY": value,
             "width": value,
             "ripSound": "value",
             "ripParticle": "value"
         },

#08 WEAPON APPEARANCE


| In-Game graphic of the Shot & Barrel, "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.

Where "shotAnimationInterval" is Time in milliseconds one "frames" cycles to the next.

"shotFrames"; 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.

"barrelAnimation"; Where "interval" is time in milliseconds one "frames" cycles to the next, "loop" indicates the weapon's animation should reset after having been fired, "finishLoopCycle" indicates whether the animation should always complete its loop after being started, "loopConstantly" indicates "frames" will cycle continuously, "msPerShot" is the amount of animation in milliseconds that one Shot causes, "frames"; 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.
"loop" set to true & by itself, without "finishLoopCycle" & "loopConstantly"; where firing the weapon will simply advance the animation by "msPerShot" frames. If set to false, the animation will reset to the first frame after every shot fired, resuming by playing msPerShot frames. Please keep in mind not all values are necessary and could have various results. ex. Removing "barrel" from the script.

"back"'; 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 "hitExplosionSize" & "missExplosionSize" are the size of the In-Game explosion graphic, in Tiles.
In decimal; ex. #.##

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. #.##

Where "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. #.##

Where "recoil" is pixels the "barrel" graphic moves when a Shot is fired.

Where "shotEmitter" generates stationary particles from Shots; "type" the Particle Type, and "emitProbabality" spawns per millisecond.
In decimal; ex. #.##

Where "exhaust" is animated particles from the Shot; "type" the Particle Type, "p" is probability per miliseconds, "backOffset" how far backward (left) they are spawned from the center in pixels, "angleRange" radians it will animate from center (0 being perfect line, pie 180 degrees, 2pie any direction), "randomOffset" offset in pixels any direction, and "speedMin" & "speedMax" the speed at which the exhaust moves in pixels per millisecond.

Note: While frames are present in the script; values are not necessary and may cause errors in achieving a desired animation result. ie "barrel" vs "barrelAnimation"

        "weaponAppearance": {
            "shot": {
                "src": "value",
                "x": value,
                "y": value,
                "w": value,
                "h": value},
            "shotAnimationInterval": 1000,
            "shotFrames": [
                { "src": "value", "x": value, "y": value, "w": value, "h": value },
                { "src": "value", "x": value, "y": value, "w": value, "h": value } ],
            "barrel": {
                "src": "value",
                "x": value,
                "y": value,
                "w": value,
                "h": value },
            "barrelAnimation": {
                "interval": 1000,
                "loop": true,
                "finishLoopCycle": false,
                "loopConstantly": true,
                "msPerShot": 1000,
                "frames": [
                    { "src": "value", "x": value, "y": value, "w": value, "h": value },
                    { "src": "value", "x": value, "y": value, "w": value, "h": value } ]
            },
            "back": { "src": "value", "x": value, "y": value, "w": value, "h": value },
            "hitExplosionSize": value,
            "missExplosionSize": value,
            "barrelX": value,
            "barrelY": value,
            "recoil": value,
            "shotEmitter": { "type": "value", "emitProbability": value },
            "exhaust": { "type": "value", "p": value, "backOffset": value, "angleRange": value, "randomOffset": value, "speedMin": value, "speedMax": value }
        },

| Removes In-Game graphic for the muzzle flash for the module.

        "muzzleFlash": false,

#09 AUDIO


[incomplete] This string is often used with monsters. Assumed to be Sound related.

        "doesCreak": false,

| How often the Shot sound is looped while the Shot is continuously firing, in Milliseconds.

        "soundEvery": value,

| [incomplete - pitch & volume measurements] "fireSound"; 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 "hitSound" & "destructionSound".
Can use shorthand: ex. "volume": value,
Can posses multiple sub containers; ex. { "content, "content" },
Can occupy multiple containers; ex. [ { content }, { content } ],

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

| [incomplete - pitch & volume measurements, "onViewingSide", "xSpeed", "ySpeed"] "runningLoop"; 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, "onViewingSide" *, "xSpeed" & "ySpeed" *, "pitch" the Minimum and Maximum Pitch modifier the "variations" could be altered to, "xSpeed" & "ySpeed" *.
Can use shorthand: ex. "volume": value,
Can posses multiple sub containers; ex. { "content, "content" },
Can occupy multiple containers; ex. [ { content }, { content } ],

        "runningLoop": { "layers": [ { "variations": [ "value" ], "volume": { "value": value, "onViewingSide": [ value, value, value, value ], "ySpeed": [ value, value, value, value, vaue, value ] },  "pitch": { "value": value, "ySpeed": [ value, value, value, value, value, value, value, value, value, value ] } } ] },

#10 TRACKS


| Springs on the Module controlling how close the module can get to the ground through kinematic (bouncy) calculation; where "xOffset" is the location in Tiles on the X axis, "length" how far from the bottom of the Module the calculation exists in Pixels, "minCompressedLength" length the calculation is allowed to reduce (a.k.a. spring) in Pixels, and "k" the kinematic strength (a.k.a. bounciness).
Can occupy multiple containers; ex. [ { content }, { content } ]
"k" in decimal form; ex #.##

        "springs": [
            {
                "xOffset": value,
                "length": value,
                "minCompressedLength": value,
                "k": value
            }
        ],

| Wheels on the Module; where "xOffset" is the location in Tiles on the X Axis, "maxYOffset" the max amount the wheel can displace in Pixels on the Y Axis, "radius" the distance from the center of the Wheel in Pixels, and [incomplete - verify] "segmentStride" how much the element animates/rotates in Pixels while moving.

"wheel"; where "src" is a spritesheet reference by filename without extension (.PNG), "x" & "y" location on the spritesheet in Pixels, and "w" & "h" of the Wheel in Pixels.

"lowerLink"; where "src" is a spritesheet reference by filename without extension (.PNG), "x" & "y" location on the spritesheet in Pixels, and "w" & "h" of the Link in Pixels on the spritesheet.

"upperLink"; where "src" is a spritesheet reference by filename without extension (.PNG), "x" & "y" location on the spritesheet in Pixels, and "w" & "h" of the Link in Pixels on the spritesheet.

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

        "wheels": [
            {
                "xOffset": value,
                "maxYOffset": value,
                "radius": value,
                "segmentStride": value,
                "wheel": {
                    "src": "value",
                    "x": value,
                    "y": value,
                    "w": value,
                    "h": value
                },
                "lowerLink": {
                    "src": "value",
                    "x": value,
                    "y": value,
                    "w": value,
                    "h": value
                },
                "upperLink": {
                    "src": "value",
                    "x": value,
                    "y": value,
                    "w": value,
                    "h": value
                }
            }
        ],

#11 LEGS


| [incomplete - minFootY definition] "legs"; where "back" specifies the graphic appears in front or behind the module, "xOffset" position on the Module in Tiles on the X Axis, "yOffset" position on the Module in Tiles on the Y Axis, "limbLength" the animation length of a single limb (of an equally length 2-limb Leg), "footWidth" animation Width of the Foot calculated for animation & collision, "footHeight" animation Height of the Foot calculated for animation & collision, "stepLength" distance covered in while animating in Pixels, "maxStepTime" the duration a movement animation cycles in milliseconds, "bendForwards" specifies whether the Leg is bending forwards or backwards in reference to the module, and "minFootY" *.
Note: Feet are are turned 90 degrees on the spritesheet.

"spring" controlling how close the module can get to the ground through kinematic (bouncy) calculation; where "xOffset" is the offset from the predefined "xOffset" in the string in Tiles, "length" how far from the bottom of the Module the calculation exists in Pixels, "minCompressedLength" length the calculation is allowed to reduce (a.k.a. spring) in Pixels, and "k" the kinematic strength (a.k.a. bounciness).
"k" in decimal form; ex #.##

"upperLeg"; where "src" is a spritesheet reference by filename without extension (.PNG), "x" & "y" location on the spritesheet in Pixels, and "w" & "h" of the Leg on the spritesheet in Pixels.

"lowerLeg"; where "src" is a spritesheet reference by filename without extension (.PNG), "x" & "y" location on the spritesheet in Pixels, and "w" & "h" of the Leg on the spritesheet in Pixels.

"foot"; where "src" is a spritesheet reference by filename without extension (.PNG), "x" & "y" location on the spritesheet in Pixels, and "w" & "h" of the Link on the spritesheet in Pixels.

[incomplete - pitch & volume measurements] "beginStepSound"; 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 "footDownSound".
Can use shorthand: "volume": value,

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

        "legs": [
            {
                "back": false,
                "xOffset": value,
                "yOffset": value,
                "limbLength": value,
                "footWidth": value,
                "footHeight": value,
                "stepLength": value,
                "maxStepTime": value,
                "bendForwards": false,
                "minFootY": value,
                "spring": {
                    "xOffset": value,
                    "length": value,
                    "minCompressedLength": value,
                    "k": value
                },
                "upperLeg": { "src": "value", "x": value, "y": value, "w": value, "h": value },
                "lowerLeg": { "src": "value", "x": value, "y": value, "w": value, "h": value },
                "foot": { "src": "value", "x": value, "y": value, "w": value, "h": value }
                "beginStepSound": { "layers": [ { "variations": [ "value" ], "volume": { "min": value, "max": value }, "pitch": { "min": value, "max": value} ] },
                "footDownSound": { "layers": [ { "variations": [ "value" ], "volume": { "min": value, "max": value }, "pitch": { "min": value, "max": value} ] }
            }
        ],

#12 TENTACLES [WIP]


| [incomplete] "tentacles"; where "numSegments" is the number of "index" elements that make up the tentacle, "baseAngle" *, "baseXOffset" & "baseYOffset" *, "baseStiffness" *, "tipSitffness" *, "baseLength" *, "tipLength" *, "baseWidth" *, "tipWidth" *, "speed" *, "snatchesCrew" specifies the Tentacle grabs crew, "mouthXOffset" & "mouthYOffset" *, "attacksHull" specifies the Tentacle attacks craft & structures, "attackPenDmg" is Penetration Damage inflicted by a Tentacle Attack, "attackBlastDmg" is Blast Damage inflicted by a Tentacle Attack, "wavesAround" *, "suckerDirection" *.

"segmentImg"; where "src" is a spritesheet reference by filename without extension (.PNG), "x" & "y" location on the spritesheet in Tiles, "w" & "h" of the module in Tiles.

"segmentImgVerticallyFlipped"; where "src" is a spritesheet reference by filename without extension (.PNG), "x" & "y" location on the spritesheet in Tiles, "w" & "h" of the Module in Tiles.

"segmentImgOverrides"; where "index" is a "numSegments" value.
"img"; where "src" is a spritesheet reference by filename without extension (.PNG), "x" & "y" location on the spritesheet in Tiles, "w" & "h" of the module in Tiles.
"imgVerticallyFlipped"; where "src" is a spritesheet reference by filename without extension (.PNG), "x" & "y" location on the spritesheet in Tiles, "w" & "h" of the module in Tiles.

Where "imgLength" *, "minNextTargetPause" & "maxNextTargetPause" the min and max time in Milliseconds *, "attackSprayParticle" Particle spawned *, "attackSprayP" *, "attackImpactParticle" Particle spawned then the Tentacle strikes an object, "numAttackImpactParticles" number of particles spawned when the Tentacle strikes an object.

[incomplete - pitch & volume measurements] "snatchSound"; 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 "attackSound".
Can use shorthand: "volume": value,

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

        "tentacles": [
            {
                "numSegments": value,
                "baseAngle": value,
                "baseXOffset": value,
                "baseYOffset": value,
                "baseStiffness": value,
                "tipStiffness": value,
                "baseLength": value,
                "tipLength": value,
                "baseWidth": value,
                "tipWidth": value,
                "speed": value,
                "snatchesCrew": false,
                "mouthXOffset": value,
                "mouthYOffset": value,
                "attacksHull": true,
                "attackPenDmg": value,
                "attackBlastDmg": value,
                "wavesAround": true,
                "suckerDirection": false,
                "segmentImg": { "src": "value", "x": value, "y": value, "w": value, "h": value },
                "segmentImgVerticallyFlipped": { "src": "value", "x": value, "y": value, "w": value, "h": value },
                "segmentImgOverrides": [
                    {
                        "index": 0,
                        "img": { "src": "value", "x": value, "y": value, "w": value, "h": value },
                        "imgVerticallyFlipped": { "src": "value", "x": value, "y": value, "w": value, "h": value }
                    },
                        "index": 0,
                        "img": { "src": "monsters2", "x": value, "y": value, "w": value, "h": value },
                        "imgVerticallyFlipped": { "src": "value", "x": value, "y": value, "w": value, "h": value }
                    }
                ],
                "imgLength": value,
                "minNextTargetPause": value,
                "maxNextTargetPause": value,
                "attackSprayParticle": "value",
                "attackSprayP": value,
                "attackImpactParticle": "value",
                "numAttackImpactParticles": value,
                "snatchSound": { "layers": [ { "variations": [ "value" ], "volume": { "min": value, "max": value}, "pitch": { "min": value, "max": value } ] },
                "attackSound": { "layers": [ { "variations": [ "value" ], "volume": { "min": value, "max": value}, "pitch": { "min": value, "max": value } ] }
        },
    ],

#13 MODDING TUTORIAL BY DAVID STARK


Airships Mod Tutorial | by David Stark | Youtube.com

Post a comment

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