User Tools

Site Tools


ixe:json:start

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
ixe:json:start [2025/01/17 00:04] – created virgilwixe:json:start [2025/02/14 14:57] (current) – external edit 127.0.0.1
Line 1: Line 1:
-A unit is defined by a json file. The json file can contain the following fields+A unit is defined by a JSON file. Below is a list of all JSON tags that can be used.
  
-==== UNIT ONLY ====  +A guide for how to use these JSON tags to create a unit can be found [[ixe:mapmaking:custom|here]].
-  *displayname: (string) The name that will be shown to the player.  +
-  *permanentinventory: (bool) When true, the unit remains in the inventory at an amount of "0" even when all are built. +
-  *buildmenuhide: (bool) When true, this unit will not appear in the editor's table of units to build. +
-  *maxammo: (float) The max ammo for the unit. +
-  *ammo: (float) The starting ammo for the unit. +
-  *maxcammo: (float) The max AC ammo for the unit. +
-  *cammo: (float) The starting AC ammo for the unit [build 46 and later]. +
-  *isportal: (bool) When true, this unit acts as a portal for packets. +
-  *isapex: (bool) When true, this unit acts as an apex ship. +
-  *enemy: (bool) When true, this unit is treated as an enemy (non player) unit. +
-  *collectcost: (int) The cost, in green packets, to collect this unit. When greater than 0, this unit becomes collectable. +
-  *selectable: (bool) Whether or not a unit is selectable by the player. +
-  *movable: (bool) Whether or not a unit can be moved by the player. In this instance, it means dematerialization based movement. +
-  *movelayer: (int) Used for legality of placement for movable units. When units are in different move layers, they do not collide and can be stacked. +
-  *hasphysics: (bool) When true, the unit is controlled by the physics engine.  +
-  *moveconstraints: (int) When the unit has physics, this controls the rigid body contraints. The int is treated as a bit field with bit 0 meaning to freeze x-axis motion, bit 1 meaning to freeze y-axis motion, and bit 2 meaning to freeze rotation.  Multiple bits can be set at the same time. So "7" would freeze all motion and rotation. "4" would freeze just rotation, etc.  +
-  *gravityscale: (float) The scale at which gravity affects the unit when the unit has physics enabled. 1 is the default. +
-  *rotatemode: (int) How a unit rotates/flips when moving. 0 = NONE, 1 = FLIP, 2 = FOURWAY.  +
-  *destroysonhealth: (bool) When true, the unit will auto destroy when the pixel count is too low. The "DeadFraction" is the maximum allowed amount of dead pixels. +
-  *deadfraction: (float) A fraction (0 to 1 range) that specifies the maximum dead pixel amount allowed on a unit before it self destructs, when destroyonhealth is true. +
-  *internalhealth: (float) An optional health that can be used to track damage on a unit. Not related to the pixel count. When the internalHealth starts greater than 0 and is then damaged down to 0, the unit is destroyed.  +
-  *maxinternalhealth: (float) The max optional health. +
-  *internalhealthregen: (float) The regeneration rate of the optional health per game update. +
-  *internalhealthdamageovercreeper: (float) The damage that occurs to the optional health when over creeper. +
-  *internalhealthdamageoverac: (float) The damage that occurs to the optional health when over AC. +
-  *internalhealthdamageoverbot: (float) The damage that occurs to the optional health when over a bot. +
-  *enemyignore: (bool) When true, enemy units like phantoms and bots will ignore this unit.  +
-  *darkraydamages: (bool) When true, a dark ray will damage the unit.  +
-  *explosiondamages: (bool) When true, exploding sand will damage the unit.  +
-  *nullifiable: (bool) When true, the unit can be nullified.  +
-  *riftinhibitor: (bool) When true, the unit acts as a rift inhibitor objective.  +
-  *ixecore: (bool) When true, the unit acts as an IXE core objective.  +
-  *anchordistance: (int) The cell range to look for an anchor point. When non-zero, the unit will attempt to anchor itself to land in this range. If not fould, placement of the unit will be illegal.  +
-  *anchoroffset: (float) The distance an anchor will attempt to maintain between the anchor and the anchor cell.  +
-  *anchorlostmode: (int) What to do when an anchor cell is lost. 0 = destroy unit, 1 = remove anchor, 2 ignore and keep anchor.  +
-  *movepathenabled: (bool) When true, the unit can manage the mouse drawn move paths. Used by the spirit ship, for instance.  +
-  *playercandestroy: (bool) When true, the player can destroy the unit.  +
-  *playercontrolbuildsupply: (bool) When true, the player can toggle the build supply for the unit.  +
-  *playercontrolammosupply: (bool) When true, the player can toggle the ammo supply for the unit.  +
-  *disablecollisions: (bool)  When true, a physics controlled unit will not collide with other units.  +
-  *autoammo: (float) The amount of ammo to automatically add to the unit each game frame.  +
-  *autocammo: (float) The amount of AC ammo to automatically add to the unit each game frame.  +
-  *ammorequesttime: (int) The game frame ammo request rate. Default is 6.  +
-  *cammorequesttime: (int) The game frame AC ammo request rate. Default is 6.  +
-  *ammosupply: (bool) When false, the unit won't request ammo or AC ammo.  Defaults to true. +
-  *objectivetype: (int) The game objective type for the unit. The types are: 0 = NONE, 1 = IXE_CORE, 2 = INHIBITOR, 3 = ITEM, 4 = EMITTER, 5 = CREEPER, 6 = SPECIAL, 7 = MISSION +
-  *selfpowergeneration: (float) Similar to autoAmmo, except added in the late game update. +
-  *physicsmaterial: (int) The type of physics 'material] to use. The types are: 0 = NONE, 1 = LOW_FRICTION, 2 = NO_FRICTION. +
-  *destroyalso: (string) The name of another unit type to destroy when this unit is destroyed. +
-  *activateixecoresondestroy: (bool) When true, will activate any inactive ixe cores on the map when this unit is destroyed. +
-  *showinternalhealthbar(bool) When true, will show a bar for the internal health. +
-  *internalhealthbarpos[float,floatThe position of the internal health bar. +
-  *showundercreeper: (bool) When true, the unit will visually sort behind the creeper. +
-  *sortingorder: (int) The visual sorting order. +
-  *label: {"text":string, "size":float, "color":[r,g,b,a], "pos":[x,y]}: Creates a text label on the unit.+
  
-==== PARTS ====  +===== Unit Tags ===== 
-  *rotation: (float) The rotation of the part. +  ?displayname (string) 
-  *rotatewhenflipped(bool) Whether the part should rotate when the part is flipped. +  :The name that will be shown to the player.  
-  *isbuilt(bool) If the part should be built already+  ?permanentinventory (bool) 
-  *creeperdamages(bool) If creeper damages the part. +  :When true, the unit remains in the inventory at an amount of "0" even when all are built. 
-  *acdamages(bool) If AC damages the part.  +  ?buildmenuhide (bool) 
-  *botdamages(bool) If bots damages the part.  +  :When true, this unit will not appear under the map editor's unit tab. 
-  *powerdispatchstoremax(float) The maximum amount of energy the unit can store for energy dispatch. +  ?maxammo (float) 
-  *powergeneration[float:min, float:max, int:rampTime]An array of three values for energy production. Min production (starting production), max production, and ramp time in game updates. +  :The max energy ammo for the unit. 
-  *digitalissource(bool) If the part causes digitalis to grow. +  ?ammo (float) 
-  *damagerate(int) The rate at which creeper damages each pixel of a part. Default is 10000. +  :The starting energy ammo for the unit. 
-  *damageheal(int) The rate at whcih part pixels heal when damaged and not under creeper. Default is 10000. +  ?maxcammo (float) 
-  *regrowthtime(int) The game updates it takes to regrow a part pixel. Default is 500. +  :The max anticreeper ammo for the unit. 
-  *sanddamages(bool) Whether sand damages the pixels of this part. +  ?cammo (float) 
-  *sandparticlesdamage(bool) If Sand Particles can damage the part. +  :The starting anticreeper ammo for the unit [build 46 and later]. 
-  *alwaysshowrange(bool) When true, a unit with a show_range will always show the range with a range circle. +  ?isportal (bool) 
-  *fowrange(int) The range to reveal FOW (fog of war). +  :When true, this unit acts as a portal for packets. 
-  *constrainwhenoverblockingsand(bool) For physics controlled units, the unit will be frozen if this is true and the part is over blocking sand. +  ?isapex (bool) 
-  *applyupforcewhenoverliquid(bool) For physics controlled units will apply a force upwards when over a sand that is a liquid. +  :When true, this unit acts as an apex ship. 
-  *dragwhenoverliquid(float) The physics drag for the whole unit when this part is over a liquid sand. +  ?enemy (bool) 
-  *defaultdrag(float) The default drag on the whole unit. +  :When true, this unit is treated as an enemy (non player) unit. 
-  *shothitlayer(int) The layer that determins what shots hit the part. 0 = Default, 1 = Shot_Hits1, 2 = ShotHits2 +  ?collectcost (int) 
-  *upgradegems(int) The upgrade gems awarded when the part is destroyed with destroy actions enabled.  +  :The cost, in green packets, to collect this unit. When greater than 0, this unit becomes collectable. 
-  *collider{"type":string, other args}The physics collider for the part. The type can be "none", "circle", "box", "capsule". For "none" there are no additional args. For "circle" and additional arg of "radius":float is supported. For "box" two addional args are supported "width":floatand "height":float.  For "capsule" three addional args are supported "width":float, "height":float, and "direction":"horizontal"|"vertical".  +  ?selectable (bool) 
-  *image(string) The path name for the image to use for the parts pixels.  +  :Whether or not a unit is selectable by the player. 
-  *pivot[float,float] The pivot for the part.  0.5,0.5 is the center.  +  ?movable (bool) 
-  *sortingorder(int) The visual sorting order used for the parts pixels.  +  :Whether or not a unit can be moved by the player. In this instance, it means dematerialization-based movement (such as player-built ships use). 
-  *colliderexcludemask(int) The exclusion mask for the parts collider.  +  ?movelayer (int) 
-  *scale[float,float] The x,yscale of the part.  +  :Used for legality of placement for movable units. When units are in different move layers, they do not collide and can be stacked. 
-  *anim(string) The path to an image that contains frames of an animation.  +  ?hasphysics (bool) 
-  *scripts[ {script} ] A list of RPL scripts to attach to the part. Each {script} consists of a "name":"scriptname" field and then any name:value args to be passed into the script.  +  :When true, the unit is controlled by the physics engine. This means it will collide with sand and other physics-having units, and be affected by gravity. 
-  *controllers[ {controller}] A list of controllers to attach to the part. Each {controller} consists of a "name":"controllername" field and then any nam:value args to be passwed into the script.  +  ?moveconstraints (int) 
-  *parts[ {part}] A list of sub parts. Each {part} consists of a "name":"part_json", "position":[float,float], "rotation": float, "sortingorder":int, "active":bool. +  :When the unit has physics, this controls the rigid body constraints. The int is treated as a bit field with bit 0 meaning to freeze x-axis motion, bit 1 meaning to freeze y-axis motion, and bit 2 meaning to freeze rotation. As a result: 
 +   * 0 = no constraints 
 +   * 1 = can't move horizontally 
 +   * 2 = can't move vertically 
 +   * 3 = can't move in any direction 
 +   * 4 = can't rotate 
 +   * 5 = can't rotate or move horizontally 
 +   * 6 = can't rotate or move vertically 
 +   * 7 = can't rotate or move in any direction 
 +  ?gravityscale (float) 
 +  :The scale at which gravity affects the unit when the unit has physics enabled. 1 is the default. 
 +  ?rotatemode (int) 
 +  :How a unit rotates/flips when moving. 0 = NONE, 1 = FLIP, 2 = FOURWAY.  
 +  ?destroysonhealth (bool) 
 +  :When true, the unit will auto destroy when the pixel count is too low. The "deadfraction" is the maximum allowed amount of dead pixels. 
 +  ?deadfraction (float) 
 +  :A fraction (0 to 1 range) that specifies the maximum dead pixel amount allowed on a unit before it self destructs, when destroyonhealth is true. 
 +  ?internalhealth (float) 
 +  :An optional health that can be used to track damage on a unit. Not related to the pixel count. If internalhealth starts greater than 0 and is then damaged down to 0, the unit is destroyed.  
 +  ?maxinternalhealth (float) 
 +  :The max optional health. 
 +  ?internalhealthregen (float) 
 +  :The regeneration rate of internalhealth per game update (30 updates/sec in normal speed). 
 +  ?internalhealthdamageovercreeper (float) 
 +  :The damage that occurs to internalhealth per game update when touching creeper. 
 +  ?internalhealthdamageoverac (float) 
 +  :The damage that occurs to internalhealth per game update when touching anticreeper. 
 +  ?internalhealthdamageoverbot (float) 
 +  :The damage that occurs to internalhealth per game update when touching a bot. 
 +  ?enemyignore (bool) 
 +  :When true, enemy units like phantoms and bots will ignore this unit.  
 +  ?darkraydamages (bool) 
 +  :When true, dark rays will damage the unit.  
 +  ?explosiondamages (bool) 
 +  :When true, exploding sand will damage the unit.  
 +  ?nullifiable (bool) 
 +  :When true, the unit can be nullified.  
 +  ?riftinhibitor (bool) 
 +  :When true, the unit acts as a rift inhibitor objective.  
 +  ?ixecore (bool) 
 +  :When true, the unit acts as an IXE core objective.  
 +  ?anchordistance (int) 
 +  :The cell range to look for an anchor point. When non-zero, the unit will attempt to anchor itself to land in this range. If not found, placement of the unit will be illegal.  
 +  ?anchoroffset (float) 
 +  :The distance an anchor will attempt to maintain between the anchor and the anchor cell.  
 +  ?anchorlostmode (int) 
 +  :What to do when an anchor cell is lost. 0 = destroy unit, 1 = remove anchor, 2 ignore and keep anchor.  
 +  ?movepathenabled (bool) 
 +  :When true, the unit can manage the mouse drawn move paths. Used by the spirit ship, for instance.  
 +  ?playercandestroy (bool) 
 +  :When true, the player can order the unit to self-destruct.  
 +  ?playercontrolbuildsupply (bool) 
 +  :When true, the player can toggle the build supply for the unit.  
 +  ?playercontrolammosupply (bool) 
 +  :When true, the player can toggle the ammo supply for the unit.  
 +  ?disablecollisions (bool) 
 +  :When true, a physics controlled unit will not collide with other units.  
 +  ?autoammo (float) 
 +  :The amount of ammo the unit regenerates each game frame.  
 +  ?autocammo (float) 
 +  :The amount of anticreeper ammo the unit regenerates each game frame.  
 +  ?ammorequesttime (int) 
 +  :The time (in game updates) between ammo requests. Default is 6.  
 +  ?cammorequesttime (int) 
 +  :The time (in game updates) between ammo requests. Default is 6.  
 +  ?ammosupply (bool) 
 +  :When false, the unit won't request ammo or anticreeper ammo. Defaults to true. 
 +  ?objectivetype (int) 
 +  :The game objective type for the unit. The types are: 0 = NONE, 1 = IXE_CORE, 2 = INHIBITOR, 3 = ITEM, 4 = EMITTER, 5 = CREEPER, 6 = SPECIAL, 7 = MISSION 
 +  ?selfpowergeneration (float) 
 +  :Similar to autoammo, except added in the late game update. 
 +  ?physicsmaterial (int) 
 +  :The type of physics 'material' to use. The types are: 0 = NONE, 1 = LOW_FRICTION, 2 = NO_FRICTION. 
 +  ?destroyalso (string) 
 +  :The name of another unit type to destroy when this unit is destroyed. 
 +  ?activateixecoresondestroy (bool) 
 +  :When true, will activate any inactive ixe cores on the map when this unit is destroyed. 
 +  ?showinternalhealthbar (bool) 
 +  :When true, will show a bar for the internal health. 
 +  ?internalhealthbarpos [float,float] 
 +  :The position of the internal health bar. 
 +  ?showundercreeper (bool) 
 +  :When true, the unit will visually sort behind the creeper. 
 +  ?sortingorder (int) 
 +  :The visual sorting order. 
 +  ?label {"text":string, "size":float, "color":[r,g,b,a], "pos":[x,y]} 
 +  :Creates a text label on the unit. 
 + 
 +===== Part Tags ===== 
 +  ?rotation (float) 
 +  :The rotation of the part. 
 +  ?rotatewhenflipped (bool) 
 +  :Whether the part should rotate when the part is flipped. 
 +  ?isbuilt (bool) 
 +  :If the part should be fully built upon unit spawn
 +  ?creeperdamages (bool) 
 +  :If creeper damages the part. 
 +  ?acdamages (bool) 
 +  :If anticreeper damages the part.  
 +  ?botdamages (bool) 
 +  :If bots damage the part.  
 +  ?powerdispatchstoremax (float) 
 +  :The maximum amount of energy the unit can store for energy dispatch. 
 +  ?powergeneration [float:min, float:max, int:rampTime] 
 +  :An array of three values for energy production. Min is the minimum (starting) production, max is the maximum production, and rampTime is the time (in game updates) to reach maximum production
 +  ?digitalissource (bool) 
 +  :If the part causes digitalis to grow. 
 +  ?damagerate (int) 
 +  :The rate at which creeper damages each pixel of a part. Default is 10000. 
 +  ?damageheal (int) 
 +  :The rate at which part pixels heal when damaged and not under creeper. Default is 10000. 
 +  ?regrowthtime (int) 
 +  :The game updates it takes to regrow a part pixel. Default is 500. 
 +  ?sanddamages (bool) 
 +  :Whether sand damages the pixels of this part. 
 +  ?sandparticlesdamage (bool) 
 +  :If sand particles can damage the part. 
 +  ?alwaysshowrange (bool) 
 +  :When true, a unit with a show_range will always show the range with a range circle. 
 +  ?fowrange (int) 
 +  :The range to reveal FOW (fog of war). 
 +  ?constrainwhenoverblockingsand (bool) 
 +  :For physics controlled units, the unit will be frozen if this is true and the part is over any sand that blocks movement
 +  ?applyupforcewhenoverliquid (bool) 
 +  :For physics controlled units, this will apply a force upwards when over a sand that is a liquid. 
 +  ?dragwhenoverliquid (float) 
 +  :The physics drag for the whole unit when this part is over a liquid sand. 
 +  ?defaultdrag (float) 
 +  :The default drag on the whole unit. 
 +  ?shothitlayer (int) 
 +  :The layer that determines what shots hit the part. 0 = Default, 1 = Shot_Hits1, 2 = ShotHits2 
 +  ?upgradegems (int) 
 +  :The upgrade gems awarded when the part is destroyed with destroy actions enabled.  
 +  ?collider {"type":string, other args} 
 +  :The physics collider for the part. The type can be "none", "circle", "box", "capsule". For "none" there are no additional args. For "circle" an additional arg of "radius":float is supported. For "box" two additional args are supported"width":float and "height":float.  For "capsule" three additional args are supported"width":float, "height":float, and "direction":"horizontal"|"vertical".  
 +  ?image (string) 
 +  :The path name for the image to use for the part'pixels.  
 +  ?pivot [float,float] 
 +  :The pivot for the part. [0.5,0.5is the center.  
 +  ?sortingorder (int) 
 +  :The visual sorting order used for the part'pixels.  
 +  ?colliderexcludemask (int) 
 +  :The exclusion mask for the part'collider.  
 +  ?scale [float,float] 
 +  :The x,y scale of the part.  
 +  ?anim (string) 
 +  :The path to an image that contains frames of an animation.  
 +  ?scripts [{script},{script},...,{script}] 
 +  :A list of RPL scripts to attach to the part. Each {script} consists of a "name":"scriptname" field and then any name:value args to be passed into the script.  
 +  ?controllers [{controller},{controller},...,{controller}] 
 +  :A list of controllers to attach to the part. Each {controller} consists of a "name":"controllername" field and then any name:value args to be passed into the script.  
 +  ?parts [{part},{part},...,{part}] 
 +  :A list of sub parts. Each {part} consists of a "name":"part_json", "position":[float,float], "rotation": float, "sortingorder":int, "active":bool. 
  
ixe/json/start.1737072256.txt.gz · Last modified: 2025/02/14 14:56 (external edit)