Difference between revisions of "Modding"
(added all weaponappearance attributes) |
(additional weaponappearance attributes added (from guided missile)) |
||
Line 1,978: | Line 1,978: | ||
:"randomOffset" is the offset in pixels any direction | :"randomOffset" is the offset in pixels any direction | ||
:"speedMin" & "speedMax" are the speed at which the exhaust moves in pixels per millisecond. | :"speedMin" & "speedMax" are the speed at which the exhaust moves in pixels per millisecond. | ||
:<u>"barrelLoadStages":</u> * | |||
:"src" * | |||
:"x", "y" * | |||
:"w", "h" * | |||
:"fireVibrate" * | |||
:"fireVibrateDecay" * | |||
:<u>"shells":</u> * | |||
:"img": | |||
::"src" * | |||
::"x", "y" * | |||
::"w", "h" * | |||
:"internalImg": | |||
::"src" * | |||
::"x", "y" * | |||
::"w", "h" * | |||
:"pivotX" * | |||
:"pivotY" * | |||
:"x", "y" * | |||
:"openAngle" * | |||
:"startOpenTimeBeforeFiring" * | |||
:"endOpenTimeBeforeFiring" * | |||
:"startCloseTimeAfterFiring" * | |||
:"endCloseTimeAfterFiring" * | |||
:"openSound": | |||
::"variations" * | |||
::"volume" * | |||
::"pitch" * | |||
: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" | :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" | ||
Line 2,018: | Line 2,048: | ||
"speedMax": value | "speedMax": value | ||
} | } | ||
"barrelLoadStages": [ | |||
{ "src": "value", "x": value, "y": value, "w": value, "h": value }, | |||
{ "src": "value", "x": value, "y": value, "w": value, "h": value } | |||
], | |||
"fireVibrate": value, | |||
"fireVibrateDecay": value, | |||
"shells": [ | |||
{ | |||
"img": { "src": "value", "x": value, "y": value, "w": value, "h": value }, | |||
"internalImg": { "src": "value", "x": value, "y": value, "w": value, "h": value }, | |||
"pivotX": value, | |||
"pivotY": value, | |||
"x": value, | |||
"y": value, | |||
"openAngle": value, | |||
"startOpenTimeBeforeFiring": value, | |||
"endOpenTimeBeforeFiring": value, | |||
"startCloseTimeAfterFiring": value, | |||
"endCloseTimeAfterFiring": value, | |||
"openSound": { | |||
"layers": [ | |||
{ | |||
"variations": [ "value" ], | |||
"volume": { "min": value, "max": value }, | |||
"pitch": { "min": value, "max": value } | |||
} | |||
] | |||
} | |||
}, | |||
], | |||
}, | }, | ||
} | } |
Revision as of 04:14, 13 February 2023
The game can be modded using JSON files.
Watch this video on modding to get started: Airships Modding Tutorial Video
Modding Resources
Official Resources
- Modding Introduction
- Mod Graphic Drawing Tutorial
- Monster Nest Mod Example
- Bonusable Values Guide
- Special Eras Modding Guide
- Crew Animation Guide
Other Resources
(Contains useful information about specific attributes, but is otherwise outdated)
(To poke around the game's loadables)
JSON Information
The basic structure of an attribute is:
"Attribute": "value",
Where "Attribute"
will be the attribute you want to add and "Value"
is the value you want to set the attribute to.
There are three types of attributes used in ACTS modding:
"value"
= string valuevalue
= numerical valuet/f
= true or false value
Some attributes can be given a list of values as well:
"AttributeValueList": { "value1", "value2", "value3" },
Appearance Attributes will require a spritesheet to get their graphics from.
1 Tile = 16 pixels, spritesheets are 63 x 63 tiles, or 1024 x 1024 pixels (Note that spritesheets are 63 x 63 because they start from 0. Meaning that x & y go from 0-63.)
When attributes require a coordinate on the spritesheet, the format is ( x , y ) or horizontal then vertical.
Both horizontal and vertical start from ( 0 , 0 ) on the top left and go to ( 63 , 63 ) on the bottom right.
Attribute List
Core Attributes
- name
- Module name referenced by the en.properties file and "flippedFrom" & "verticallyFlippedVersion" attributes.
- In-Game displays this name in red when no language value is given.
{ "name": "value", }
- patch
- Applies any code in the module file to an existing module with the same name.
- Primarily used by mods that need to overwrite or add code to existing modules.
{ "patch": t/f, }
- flippedFrom
- Creates horizontally flipped variation of referenced "name".
{ "name": "value", "flippedFrom": "nameValue", }
- verticallyFlippedVersion
- Creates vertically flipped variation of referenced "name".
{ "name": "value", "verticallyFlippedVersion": "nameValue", }
- deriveFrom
- Copies all the code used by the input module to the current module.
- Used when the current module is the same as the input module and you only need to change one thing like appearance.
- Don't repeat yourself if you don't need to!
{ "deriveFrom": "value", }
- variants
- Defines what modules are variants of the current module.
{ "variants": [ "value" ], }
- variantType
- Defines how the variants differ from the current module.
- Current types: SIZES, ROTATED
{ "variantType": "value", }
- remove
- Removes the specified "name" from the game.
- Example use is removing modules from a conflicting mod.
{ "name": "value", "remove": t/f, }
- categories
- In-Game Editor Module Category. Setting this value blank will make the module valid without appearing in-game.
- Vanilla categories: BASIC, COMMAND_AND_CREW, LIFT, PROPULSION, RESOURCES, WEAPONS, TROOPS, AIRCRAFT, STRUCTURAL, SOLID_SHAPES, STRUTS, DECORATIONS
- Custom categories can be added by creating a ModuleCategory folder and creating a json file inside. See data/ModuleCategory/categories.json for reference.
{ "categories": [ "value" ], }
- sort
- Determines the numerical position the module appears in on the editor list.
- The lower the number, the higher up in the list and vice versa.
{ "sort": value, }
- availableFor
- Types of craft the Module is enabled for In-Game Editor. Engine defaults to all.
- Default types: AIRSHIP, LANDSHIP, BUILDING
{ "availableFor": [ "value" ], }
- required
- Required Technology, City, or Charge bonus to build the Module in Single Player.
- See data/Tech/ folder for Technology bonus files.
- See data/Charge/ folder for Charge bonus files.
- Miscellaneous bonus files: strategicEras.json, eraModifiers.json, specials.json, upgrades.json
{ "required": "value", }
- w
- Width of the Module in Tiles.
{ "w": value, }
- h
- Height of the Module in Tiles.
{ "h": value, }
- Module Definition Attributes
- Specifies the Modules property for AI Logic.
{ "isExplosive": t/f, //Rockets, Bomb Bays, Grenades, etc. "isSail": t/f, //Sails. "isWeapon": t/f, //Required for all weapon modules. "isGun": t/f, //All guns (Rifles, Cannons, Turrets, Sponsons, etc.) "isCannon": t/f, //Turrets, Cannons, Suspendium Cannons, Flak Cannons, etc. "isRam": t/f, //Rams. }
- aiMaxY
- Sets the maximum height this module can go. Used to limit monster AI.
{ "aiMaxY": value, }
- createsExceptionalCombatEventAfterMs
- 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, }
- countsAsActiveCrew
- 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": t/f, }
- instantlyDestroyed
- 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": t/f, }
- nonCombat
- Determines whether or not the ship the module is attached to appears in combat or not.
- If the attached ship is intercepted it is instantly destroyed.
- Used by the Supply Ships.
{ "nonCombat": t/f, }
Appearance Attributes
- drawDoors
- Specifies the Game Engine should not draw 1 Pixel vertical lines on the left and right edges of the Module.
{ "drawDoors": t/f, }
- framesAreVariants
- Uses given "frames" to randomize the "appearance" of a module.
{ "framesAreVariants": t/f, }
- appearance
- In-game graphic of the Module.
- "src" is a spritesheet reference by filename without extension (.PNG).
- "x" & "y" are the location on the spritesheet in Tiles.
- "w" & "h" are the width and height of the module in Tiles.
- "interval" is the time in milliseconds one "frames" cycles to the next "frames".
- "frames" start on the first frame, increment down the list, and loop back to the first "frames".
{ "appearance": { //One frame. "src": "value", "x": value, "y": value, "w": value, "h": value }, }, OR { "appearance": { //More than one frame. "src": "value", "interval": value, "frames": [ { "x": value, "y": value, "w": value, "h": value }, { "x": value, "y": value, "w": value, "h": value } ] }, }
- mask
- Defines the armor placement and hitbox of a module by using a sprite.
- "x" and "y" are the top-left coordinates of the sprite.
- From there it will use the already-defined width and height.
{ "mask": { "x": value, "y": value }, }
- externalAppearances
- Exterior graphic of the Module.
- "src" is the spritesheet filename without extension (.PNG).
- "x" & "y" are the location on the module in Tiles.
- Refer to appearance for more information.
{ "externalAppearances": [ //One frame. { "x": value, "y": value, "appearance": { "src": "value", "x": value, "y": value, "w": value, "h": value } }, ], } OR { "externalAppearances": [ //More than one frame. { "x": value, "y": value, "appearance": { "src": "value", "interval": value, "frames": [ { "x": value, "y": value, "w": value, "h": value }, { "x": value, "y": value, "w": value, "h": value } ] } }, ], }
- damagedExternalAppearances, destroyedExternalAppearances
- Damaged and destroyed graphics of a Module.
- Identical to externalAppearances in implementation, but define different frames for when a module is damaged or destroyed.
- Refer to externalAppearances for more information.
- depletedResourceAppearances
- Resource-dependant graphics of a module.
- Used alongside "appearance" to change the graphic of a module depending on how much of a resource is left. Used in the Coal Store, Small Coal Store, Fire Extinguisher, and Fire Point.
- "src" is a spritesheet reference by filename without extension (.PNG).
- "x" & "y" are the location on the spritesheet in Tiles.
- "w" & "h" are the width and height of the module in Tiles.
{ "appearance" ... "depletedResourceAppearances": [ { "src": "value", "x": value, "y": value, "w": value, "h": value }, ] }
- externalDrawPriority
- Forces the Game Engine to draw "externalAppearances" over the Armor and other Modules. (ex. Legs, Tracks, & Sails)
{ "externalDrawPriority": t/f, }
- lights
- 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": [ { //Normal lights. "x": value, "y": value, "r": value, "g": value, "b": value, "radius": value } ], } { "damagedLights": [ { //Damaged module lights. "x": value, "y": value, "r": value, "g": value, "b": value, "radius": value } ], }
- canParticlesStick
- This string is often used for monsters. Used to prevent particles from sticking to the module.
{ "canParticlesStick": t/f, }
- emitters
- 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.
- See data\ParticleType folder for vanilla Particle types.
{ "emitters": [ { //Normal emitters. "x": value, "y": value, "type": "value", "emitProbability": value, "inside": t/f } ], } { "damagedEmitters": [ { //Damaged module emitters. "x": value, "y": value, "type": "value", "emitProbability": value, "inside": t/f } ], } { "destroyedEmitters": [ { //Destroyed module emitters. "x": value, "y": value, "type": "value", "emitProbability": value, "inside": t/f } ], }
- windows
- Windows on the Module; where "x" & "y" are coordinate in Tile.
{ "windows": [ { "x": value, "y": value }, { "x": value, "y": value }, ], }
- hitParticle
- The Particle the Module creates when hit.
{ "hitParticle": "value", }
- destructionLength
- Duration of a modules destruction, in Milliseconds, before being removed from battle. Often used with animated "destroyedExternalAppearance" with exception of the Kraken.
{ "destructionLength": value, }
- destructionParticle
- Particle(s) created when the Module is destroyed.
{ "destructionParticle": "value", }
- destructionParticleDensity
- Particle Density of "destructionParticle" value. (Only seen accompanying "destructionParticle".)
{ "destructionParticleDensity": value, }
- hasGenericDestructionFragments
- Removes generics explosive fragments that appear when a module is damaged/destroyed. Often used with with "damagedExternalAppearances" & "destroyedExternalAppearance".
{ "hasGenericDestructionFragments": t/f, }
- fragmentsSpeedMult
- Speed multiplier of Fragments that are spawned when the Module is destroyed. Only seen accompanying "destructionParticle".
{ "destructionParticle" ... "fragmentsSpeedMult": value, }
- fragmentsDensity
- Fragment Density of the Module when destroyed, creating multiple Fragments. Only seen accompanying "destructionParticle".
{ "destructionParticle" ... "fragmentsDensity": value, }
- fragmentsFireMult
- Speed multiplier of fire-spread speed through a module. Lower value equals slower fire spread and vice versa.
{ "fragmentsFireMult": value, }
- drawAppearanceInside
- Determines whether or not the game renders the internal sprite of the module.
- Used on module w/o an internal sprite like the rams or external weapons.
{ "drawAppearanceInside": t/f, }
- drawExternalsWhenInside
- Determines whether or not the external appearance of a module is rendered when viewing the internal sprite.
- Used by external weapons.
{ "drawExternalsWhenInside": t/f, }
- drawExternalsBelowDecals
- Determines whether or not the external appearance is rendered below decals.
{ "drawExternalsBelowDecals": t/f, }
- externalSubColor
- Specifies an RGB color on the sprite that can be changed to another color in the editor.
{ "externalSubColor": { "r": value, "g": value, "b": value }, }
- externalSubBaseColor
- Defines the base color of the externalSubColor.
- The color of the material beneath the paint.
{ "externalSubBaseColor": { "r": value, "g": value, "b": value }, }
Structure Attributes
- Placement Restrictors
- The Module cannot have another Module intersect with any Tile in the specified direction.
{ //Entire side is restricted: "topOnly": t/f, "bottomOnly": t/f, "frontOnly": t/f, "backOnly": t/f, //Specific tile of a side is restricted: "topOnlyList": [ value ], "bottomOnlyList": [ value ], "frontOnlyList": [ value ], "backOnlyList": [ value ], }
- Module Doors
- Defines which tiles connect to adjacent modules.
{ "upDoors": [ value ], //Defaults to no upDoors "leftDoors": [ value ], //Defaults to all tiles. "rightDoors": [ value ], //Defaults to all tiles. }
- canOccupy
- Tiles in the Module personnel can occupy by coordinate in Tile.
{ "canOccupy": [ { "x": value, "y": value }, ] }
- gunPortsCreateDrag
- Defines whether or not the module creates drag.
{ "gunPortsCreateDrag": t/f, }
- producesHorizontalDrag
- Determines whether a module produces horizontal drag or not.
{ "producesHorizontalDrag": t/f, }
- extraVerticalAirFriction
- incomplete *
- Only used by the Shellwalker.
{ "extraVerticalAirFriction": value, }
- targetAttractivenessMult
- Determines how likely the AI is to prioritize this module over another one.
{ "targetAttractivenessMult": value, }
Resource Attributes
- external
- Specifies if the Module cannot be protected by armor.
- Removes all armor effects including graphics.
- External modules do not produce drag.
{ "external": t/f, }
- armourType
- Forced/Built-In Amour Type for the Module. String is often used with Monsters & Hatches where the Armor is invisible or subjective.
- See data\ArmourType for armour type files.
{ "armourType": "value", }
- hp
- Modules Total Hit-Points; before adjacency, bonuses and armor.
{ "hp": value, }
- explodeHP
- HP required before the Module chances explosion; before adjacency, bonuses and armor.
{ "explodeHP": value, }
- explodeDmg
- 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:
- distSq = (explodingModuleCenterX - targetModuleCenterX)^2 + (explodingModuleCenterY - targetModuleCenterY)^2
- damage = baseExplosionDamage / distSq^0.8
{ "explodeDmg": value, }
- fireHP
- HP required to chance engulfing the Module in fire.
{ "fireHP": value, }
- destroyedHP
- HP required before a Module is destroyed. Often used for monsters, where this value indicates a specific HP.
{ "destroyedHP": value, }
- runsWhenDestroyed
- The ship the Module was attached to will run away if the Module is destroyed.
{ "runsWhenDestroyed": t/f, }
- collisionDamageReceivedMult
- Damage multiplier against the Module on Collision with another In-Game object.
{ "collisionDamageReceivedMult": value, }
- destroyEntireShipOnDestruction
- Destroys the entire craft on destruction of the Module.
{ "destroyEntireShipOnDestruction": true, }
- moveDelay
- Time it takes for crew to travel through the module.
{ "moveDelay": value, }
- weight
- Weight of the Module.
{ "weight": value, }
- firedWeightDecrease
- How much the module's weight decreases after it's weapon is fired.
- Utilized by single-use weapons like Kinetic Bombs.
{ "firedWeightDecrease": value, }
- cost
- Cost of the Module.
{ "cost": value, }
- coal
- How much Coal the Module holds.
{ "coal": value, }
- coalReload
- Time in milliseconds the Module needs to be re-supplied with Coal.
{ "coalReload": value, }
- command
- How much Command the Module generates.
- 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, }
- extraCommandPointsRequired
- incomplete *
{ "extraCommandPointsRequired": value, }
- fleetCommandBonus
- Applies a fleet-wide command resource bonus during combat.
{ "fleetCommandBonus": value, }
- lift
- How much lift the Module generates.
{ "lift": value, }
- usesSuspendium
- Defines whether or not the module uses Suspendium.
- Used by the Suspendium Disruptor to target Suspendium modules.
{ "usesSuspendium": t/f, }
- propulsion
- How much propulsion the Module generates.
{ "propulsion": value, }
- supplyProvided
- How much supply the Module generates.
{ "supplyProvided": value, }
- supplyRequired
- How much supply is required by the Module.
{ "supplyRequired": value, }
- extraSupplyCapacity
- Additional supply storage capacity for the Module.
{ "extraSupplyCapacity": value, }
- ammo
- How much ammo the Module generates.
{ "ammo": value, }
- water
- How much water the Module generates.
{ "water": value, }
- repair
- How much repair tools the Module generates.
{ "repair": value, }
- structuralStressAmount
- Structural Integrity the Module adds or removes; can be a negative number, lessening the Structural Integrity penalty.
{ "structuralStressAmount": value, }
- sickbay
- How many personnel may simultaneously heal in the Module.
{ "sickbay": value, }
- necromancy
- Allows the module to revive dead crewmates, paired with "sickbay".
{ "necromancy": t/f, }
- shipHPBonus
- How much bonus HP the Module provides to attached Modules.
{ "shipHPBonus": value, }
- adjacencyBonusStrength
- Additional HP provided through adjacency with another module.
{ "adjacencyBonusStrength": value, }
- accuracyBonus
- Accuracy bonus the Module provides, against deviation.
- Deviation = Final Shot Calculation
- Example; Crow's Nest + Telescope + Computer = shot_deviation*(0.8)^3
{ "accuracyBonus": value, }
- preventsBoarding
- Prevents Boarding of the Craft until the Module is destroyed.
{ "preventsBoarding": t/f, }
- preventsSurrender
- Prevents Surrender of the Craft until the Module is destroyed.
{ "preventsSurrender": t/f, }
- crew
- Number of "sailor" required for the Module to function. Takes priority over "recommendedCrew".
{ "crew": value, }
- hangarPositions
- Positions Troops take within the Module, in Tiles. Most often seen on Aircraft Modules.
{ "hangarPositions": [ {"x": value, "y": value }, ] }
- recommendedCrew
- 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, }
- optionalCrew
- Number of "sailor" populating the Module if no other higher priority Module exists.
{ "optionalCrew": value, }
- fixedGuards
- Number of "guard" required to protect the Module, takes priority over "recommendedGuards".
{ "fixedGuards": value, }
- recommendedGuards
- Number of "guard" recommended to protect the Module, taking priority over any module without the string.
{ "recommendedGuards": value, }
- maintenanceCost
- Maintenance Cost of the Module, applies against Income in Single Player.
{ "maintenanceCost": value, }
- quarters
- Number of personnel the "quartersType" generates.
{ "quarters": value, }
- quartersType
- Troops the Module houses.
- See data\CrewType for crew type files.
{ "quartersType": "value", }
- planeLaunchSpeedBonus
- Modifies plane launch speed by the given value.
{ "planeLaunchSpeedBonus": value, }
- canGivePlaneCommands
- Allows the ship to which the module is attached to give orders to friendly aircraft.
{ "canGivePlaneCommands": t/f, }
- planeRearmBonus
- Modifies plane re-arming speed by the given value.
{ "planeRearmBonus": value, }
- planeRepairBonus
- Modifies plane repair speed by the given value.
{ "planeRepairBonus": value, }
Weapon Attributes
- hardness
- The damage of the physical Module in a collision scenario; intended for ramming.
{ "hardness": value, }
- maxXRange
- Maximum Range in pixels horizontally that the module can fire at a target.
{ "maxXRange": value, }
- minXRange
- Minimum Range in pixels horizontally that the module must be from the target to fire the weapon.
{ "minXRange": value, }
- maxUpRange
- Max Range in pixels that the Shot can reach vertically upwards.
{ "maxUpRange": value, }
- minUpRange
- Minimum Range in pixels vertically upwards that the module must be from the target to fire the weapon.
{ "minUpRange": value, }
- maxDownRange
- Max Range in pixels that the Shot can reach vertically downwards.
{ "maxDownRange": value, }
- minDownRange
- Minimum Range in pixels vertically downwards that the module must be from the target to fire the weapon.
{ "minDownRange": value, }
- shotSpeed
- How fast the Shot travels its trajectory in Tiles per millisecond.
{ "shotSpeed": value, }
- shotSpeedVariation
- Variation of shotSpeed for each Shot fired in Tiles per millisecond.
{ "shotSpeedVariation": value, }
- reload
- Time in milliseconds between shots.
{ "reload": value, }
- clip
- Number of Shots the Module can fire before needing a reload.
{ "clip": value, }
- ammoPerClip
- The ammo cost per clip reload. Not the amount of shots in a clip.
{ "ammoPerClip": value, }
- clipReloadTime
- Time it takes to reload the weapon, in milliseconds.
{ "clipReloadTime": value, }
- canResupplyInCombat
- Determines whether the weapon can be reloaded during combat.
{ "canResupplyInCombat": t/f, }
- inaccuracy
- How inaccurate the Module is, before compensating "jitterMerge".
{ "inaccuracy": value, }
- inaccuracyFromWeather
- Determines if a weapon's accuracy is affected by weather conditions.
{ "inaccuracyFromWeather": t/f, }
- jitterMerge
- 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.
{ "jitterMerge": value, }
- numShots
- Number of projectiles in a single Shot. Example: the Grapeshot cannon.
{ "numShots": value, }
- multiShotJitter
- 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.
{ "multiShotJitter": value, }
- blastDmg
- Blast Damage caused by the Modules Shots.
{ "blastDmg": value, }
- blastSplashRadius
- Radius of the widened area of damage after a Shot hits the Target, in Pixels. Only seen accompanying "blastDmg".
{ "blastDmg" ... "blastSplashRadius": value, }
- splashFriendlyFire
- Determines whether the blastDmg's splash deals friendly damage (Friendly ships and the Current ship).
{ "splashFriendlyFire": t/f, }
- penDmg
- Penetration Damage caused by the Modules Shots.
{ "penDmg": value, }
- directDmg
- Direct Damage dealt to the Target Module, without Armour penalties.
{ "directDmg": value, }
- destroySuspendiumInRadius
- The radius around the shot hit where Suspendium is instantly destroyed.
{ "destroySuspendiumInRadius": value, }
- shootTroopsRange
- Specifies the Module can Target Troops and at what range.
{ "shootTroopsRange": value, }
- fixedInaccuracyVsTroops
- Fixed Inaccuracy against Troops.
{ "fixedInaccuracyVsTroops": value, }
- recoilForce
- Reverse Propulsion caused by firing the Shot, in negative Tile value.
{ "recoilForce": value, }
- impactForce
- Reverse Propulsion generated on an enemy ship when the shot hits them.
{ "impactForce": value, }
- fireArc
- Direction and arc the Module fires.
- Values: forwards (right), backwards (left), up, down
{ "fireArc": { "direction": "value", "degrees": value }, }
- optimumRange
- Distance from the Module that is optimal for the weapon, indicating how the AI should react to the Module.
{ "optimumRange": value, }
- maxRange
- Maximum range the weapon can fire.
{ "maxRange": value, }
- obeysFireMode
- Determines whether the weapon obeys the ship's fire mode.
{ "obeysFireMode": t/f, }
- muzzleCenterX
- 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
{ "muzzleCenterX": value, }
- muzzleCenterY
- 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
{ "muzzleCenterY": value, }
- muzzleLength
- How far from the point indicated by "muzzleCenter" strings the shot should spawn, in Tiles.
{ "muzzleLength": value, }
- guidanceSystem
- An attribute for creating missile-type weapons.
- "launchAngle" *
- "launchSpeed" *
- "launchLength" *
- "acceleration" *
- "topSpeed" *
- "turnSpeed" *
- "proximityFuseDistance" *
- "missileLockTime" *
- "missileLockLossAngle" *
{ "guidanceSystem": { "launchAngle": value, "launchSpeed": value, "launchLength": value, "acceleration": value, "topSpeed": value, "turnSpeed": value, "proximityFuseDistance": value, "missileLockTime": value, "missileLockLossAngle": value } }
- tetherSpec
- The appearance and stats of the tether used by the module.
- "color":
- "r", "g", "b" define the rgb color value of the tether's rope.
- "maxRange" *
- "tearForce" *
- "minLength" *
- "shrinkSpeed" *
- "k" *
- "anchorX" *
- "anchorY" *
- "width" *
- "ripSound":
- "layers" *
- "variations" *
- "volume" *
- "pitch" *
- "ripParticle" *
{ "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": { "layers": [ { "variations": [ "value" ], "volume": { "min": value, "max": value }, "pitch": { "min": value, "max": value } } ] }, "ripParticle": "value" }, }
- beamSpec
- The appearance and stats of the beam used by the module.
- "fadeInTime" *
- "steadyTime" *
- "fadeOutTime" *
- "moveDistance" *
- "lightClr":
- "r", "g", "b" *
- "lightRadius" *
- "emitBloomClr":
- "r", "g", "b" *
- "emitBloomRadius" *
- "hitParticle" *
- "hitParticleProbability" *
- "subBeams":
- "clr":
- "r", "g", "b" *
- "a" *
- "width" *
- "flickerAmount" *
- "prevFlickerProportion" *
- "texture":
- "src" *
- "x", "y" *
- "w", "h" *
- "textureSpeed" *
{ "beamSpec": { "fadeInTime": value, "steadyTime": value, "fadeOutTime": value, "moveDistance": value, "lightClr": { "r": value "g": value, "b": value }, "lightRadius": value, "emitBloomClr": { "r": value, "g": value, "b": value }, "emitBloomRadius": value, "hitParticle": "value", "hitParticleProbability": value, "subBeams": [ { "clr": { "r": value, "g": value, "b": value, "a": value}, "width": value "flickerAmount": value, "prevFlickerProportion": value, "texture": { "src": "value", "x": value, "y": value, "w": value, "h": value }, "textureSpeed": value }, ] }, }
Weapon Appearance Attributes
- weaponAppearance
- In-Game graphic of the Shot & Barrel.
- "shot":
- "src" is a spritesheet reference by filename without extension (.PNG)
- "x" & "y" is the location on the spritesheet in pixels
- "w" & "h" are the pixel dimensions of the graphic In-Game - where center is rotation.
- "shotAnimationInterval" is Time in milliseconds one "frames" cycles to the next.
- "shotFrames":
- "src" is a spritesheet reference by filename without extension (.PNG)
- "x" & "y" is the location on the spritesheet in pixels
- "w" & "h" are the 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":
- "src" is a spritesheet reference by filename without extension (.PNG)
- "x" & "y" is the location on the spritesheet in pixels
- "w" & "h" are the 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"':
- "src" is a spritesheet reference by filename without extension (.PNG)
- "x" & "y" is the location on the spritesheet in pixels
- "w" & "h" are the pixel dimensions of the graphic In-Game.
- "hitExplosionSize" & "missExplosionSize" are the size of the In-Game explosion graphic, in Tiles.
- In decimal: ex. #.##
- "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. #.##
- "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. #.##
- "recoil" is pixels the "barrel" graphic moves when a Shot is fired.
- "shotEmitter" generates stationary particles from Shots; "type" the Particle Type, and "emitProbabality" spawns per millisecond.
- In decimal: ex. #.##
- "exhaust" is animated particles from the Shot:
- "type" is the Particle Type
- "p" is the probability per miliseconds
- "backOffset" is how far backward (left) they are spawned from the center in pixels
- "angleRange" is the radians it will animate from center (0 being perfect line, pie 180 degrees, 2pie any direction)
- "randomOffset" is the offset in pixels any direction
- "speedMin" & "speedMax" are the speed at which the exhaust moves in pixels per millisecond.
- "barrelLoadStages": *
- "src" *
- "x", "y" *
- "w", "h" *
- "fireVibrate" *
- "fireVibrateDecay" *
- "shells": *
- "img":
- "src" *
- "x", "y" *
- "w", "h" *
- "internalImg":
- "src" *
- "x", "y" *
- "w", "h" *
- "pivotX" *
- "pivotY" *
- "x", "y" *
- "openAngle" *
- "startOpenTimeBeforeFiring" *
- "endOpenTimeBeforeFiring" *
- "startCloseTimeAfterFiring" *
- "endCloseTimeAfterFiring" *
- "openSound":
- "variations" *
- "volume" *
- "pitch" *
- 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 } "barrelLoadStages": [ { "src": "value", "x": value, "y": value, "w": value, "h": value }, { "src": "value", "x": value, "y": value, "w": value, "h": value } ], "fireVibrate": value, "fireVibrateDecay": value, "shells": [ { "img": { "src": "value", "x": value, "y": value, "w": value, "h": value }, "internalImg": { "src": "value", "x": value, "y": value, "w": value, "h": value }, "pivotX": value, "pivotY": value, "x": value, "y": value, "openAngle": value, "startOpenTimeBeforeFiring": value, "endOpenTimeBeforeFiring": value, "startCloseTimeAfterFiring": value, "endCloseTimeAfterFiring": value, "openSound": { "layers": [ { "variations": [ "value" ], "volume": { "min": value, "max": value }, "pitch": { "min": value, "max": value } } ] } }, ], }, }
- muzzleFlash
- Removes In-Game graphic for the muzzle flash for the module.
{ "muzzleFlash": t/f, }
- impactParticle
- The particle that is emitted when the weapon's projectile hits a target.
{ "impactParticle": "value", }
- numImpactParticles
- The amount of impact particles generated when the weapon's projectile hits a target.
{ "numImpactParticles": value, }
- onlyShowBarrelIfLoaded
- Only shows the barrel of the weapon (see weaponAppearance) when the weapon is fully loaded.
{ "onlyShowBarrelIfLoaded": t/f, }
Audio Attributes
- doesCreak
- Defines whether the module can creak. Primarily used to prevent monsters from creaking.
{ "doesCreak": t/f, }
- soundEvery
- How often the Shot sound is looped while the Shot is continuously firing, in Milliseconds.
{ "soundEvery": value, }
- fireSound
- "fireSound":
- "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" is the Minimum and Maximum Volume modifier the "variations" could play at
- "pitch" is the Minimum and Maximum Pitch modifier the "variations" could be altered to.
- "distance" defines the volume with respect to the distance from the module, see distance attribute for more information.
{ "fireSound": "layers": [ { "variations": [ "value" ], "volume": { "min": value, "max": value }, OR { "value": value, "distance": [...] }, "pitch": { "min": value, "max": value }, OR { "min": value, "max": value, "distance": [...] }, } ], }
- distance
- Defines the volume with respect to the distance from the module
- "value1" is the distance (0 is closest to module)
- "value2" is the volume value (1 to 0)
- "distance" is attached to "volume" or "pitch" attributes:
{ "volume": { "value": value, "distance": [ value1, value2, value1, value2, value1, value2 ] } "pitch": { "min": value, "max": value, "distance": [ value1, value2, value1, value2, value1, value2 ] } }
- runningLoop
- "runningLoop":
- "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" defines the volume between the internal and external view of a module, where value1 = 1 (internal) or 0 (external), and value2 is the volume value
- "xSpeed" & "ySpeed" define the volume with respect to X and Y movement, where value1 is the movement in the X or Y axis, and value2 is the volume value
- "pitch" the Minimum and Maximum Pitch modifier the "variations" could be altered to
- "xSpeed" & "ySpeed" define the volume with respect to X and Y movement, where value1 is the movement in the X or Y axis, and value2 is the volume value
{ "runningLoop": { "layers": [ { "variations": [ "value" ], "volume": { "value": value, "onViewingSide": [ value1, value2, value1, value2 ], "xSpeed": [ value1, value2, value1, value2, value1, value2 ], "ySpeed": [ value1, value2, value1, value2, value1, value2 ], }, "pitch": { "value": value, "xSpeed": [ value1, value2, value1, value2, value1, value2 ], "ySpeed": [ value1, value2, value1, value2, value1, value2 ], } } ] }, }
Track, Wheel, & Leg Attributes
- springs
- Springs on the Module controlling how close the module can get to the ground through kinematic (bouncy) calculation
- "xOffset" is the location in Tiles on the X axis
- "length" is how far from the bottom of the Module the calculation exists in Pixels
- "minCompressedLength" is the length the calculation is allowed to reduce (a.k.a. spring) in Pixels
- "k" is the the kinematic strength (a.k.a. bounciness).
{ "springs": [ { "xOffset": value, "length": value, "minCompressedLength": value, "k": value } ], }
- wheels
- Wheels on the Module
- "xOffset" is the location in Tiles on the X Axis
- "maxYOffset" is the max amount the wheel can displace in Pixels on the Y Axis
- "radius" is the distance from the center of the Wheel in Pixels
- "segmentStride" is how much the element animates/rotates in Pixels while moving.
- "wheel":
- "src" is a spritesheet reference by filename without extension (.PNG)
- "x" & "y" are the location on the spritesheet in Pixels
- "w" & "h" are the width and the height of the Wheel in Pixels.
- "lowerLink":
- "src" is a spritesheet reference by filename without extension (.PNG)
- "x" & "y" are the location on the spritesheet in Pixels
- "w" & "h" are the width and the height of the Wheel in Pixels.
- "upperLink":
- "src" is a spritesheet reference by filename without extension (.PNG)
- "x" & "y" are the location on the spritesheet in Pixels
- "w" & "h" are the width and the height of the Wheel in Pixels.
{ "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 } } ], }
- legs
- "legs":
- "back" specifies the graphic that 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
- "minFootY" *
- See springs attribute for further information on springs.
- "upperLeg":
- "src" is a spritesheet reference by filename without extension (.PNG)
- "x" & "y" are the location on the spritesheet in Pixels
- "w" & "h" are the width and height of the Leg on the spritesheet in Pixels.
- "lowerLeg":
- "src" is a spritesheet reference by filename without extension (.PNG)
- "x" & "y" are the location on the spritesheet in Pixels
- "w" & "h" are the width and height of the Leg on the spritesheet in Pixels.
- "foot":
- "src" is a spritesheet reference by filename without extension (.PNG)
- "x" & "y" are the location on the spritesheet in Pixels
- "w" & "h" are the width and height of the Leg on the spritesheet in Pixels.
- "beginStepSound":
- "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
- "footDownSound" uses the same script layout as "beginStepSound".
{ "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 } ] } } ], }
Tentacle Attributes
- tentacles
- [incomplete]
- "tentacles":
- "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":
- "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":
- "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":
- "index" is a "numSegments" value.
- "img":
- "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":
- "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.
- "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
- "snatchSound" & "attackSound":
- "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
- See audio section for more details.
{ "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": { ... }, "pitch": { ... } } ] }, "attackSound": { "layers": [ { "variations": [ "value" ], "volume": { ... }, "pitch": { ... } } ] } }, }
- tentacleDeathSpasms
- Causes tentacles to spasm when the ship is destroyed.
{ "tentacleDeathSpasms": t/f, }
- tentacleFans
- [incomplete]
- "number" *
- "seed" *
- "startDegrees" *
- "endDegrees" *
- "centerX" *
- "centerY" *
- "jitterX" *
- "jitterY" *
- "tentacleAngleJitterDegrees" *
- "sizeMultMin" *
- "sizeMultMax" *
- "distMin" *
- "distMax" *
- See "tentacles" for more information on "tentacle"
{ "number": value, "seed": value, "startDegrees": value, "endDegrees": value, "centerX": value, "centerY": value, "jitterX": value, "jitterY": value, "tentacleAngleJitterDegrees": value, "sizeMultMin": value, "sizeMultMax": value, "distMin": value, "distMax": value, "tentacle": { ... } }