Add compendiums
All checks were successful
Release Creation / build (release) Successful in 1m40s

This commit is contained in:
2025-06-26 22:20:24 +02:00
parent b7dfc71335
commit 57eb9e76a4
44 changed files with 2284 additions and 99 deletions

View File

@@ -0,0 +1,38 @@
[
{
"name": "Antirad",
"tech_age": "Early Space",
"cost": 1000,
"description": "Administering this drug before exposure to radiation will prevent the accumulation of rads for 1d6 hours. After being exposed to radiation, it removes 2d6 rads [1]."
},
{
"name": "Fast Forward",
"tech_age": "Early Space",
"cost": 200,
"description": "This emergency life support drug dramatically slows the subjects metabolism; this drastically reduces life support costs and can keep a subject alive for 1d6 days without the use of any cryogenic medical technology [2]."
},
{
"name": "Hyper",
"tech_age": "Early Space",
"cost": 50,
"description": "A dangerous drug that allows a person to go 72 hours without sleep at full alertness and functionality. The subject ignores Fatigue for the full duration. Afterwards, the subject must sleep for 24 hours. Another dose of Hyperspace before the 24 hours is up forces a roll on the Wound Triage Table [2]."
},
{
"name": "Ice",
"tech_age": "Early Space",
"cost": 20,
"description": "A combat drug used by many professional mercenaries; Ice gives a +2D bonus to all morale checks. It is rumored that prolonged use of Ice will result in lack of empathy and sociopathic behavior. Ice manufacturers vehemently deny such calumnies [3]."
},
{
"name": "Panacea",
"tech_age": "Late Space",
"cost": 50,
"description": "When using this drug, roll Knowledge 8+ to cure most diseases or poisons. This drug does not work on tailored viruses or biological weapons [3]."
},
{
"name": "SlowMo",
"tech_age": "Late Space",
"cost": 300,
"description": "This drug will heal one Wound in 10 minutes. This metabolic accelerator can only be used safely once per week. It gets its name because those who take it spend ten minutes watching the world go by very, very slowly. If it is used more than once per week, roll on the Wound Triage Table with a -2D penalty [3]."
}
]

View File

@@ -0,0 +1,320 @@
[
{
"name": "Artificial Gill",
"tech_age": "Early Space",
"cost": 4000,
"description": "This device allows unlimited underwater activity on worlds with otherwise breathable atmospheres."
},
{
"name": "Auto Doc",
"tech_age": "Early Interstellar",
"cost": 10000,
"description": "A large device normally carried in a vehicle or space craft, the Auto Doc uses advanced AI and sensors to heal almost any disease, poison, or injury. The Auto Doc provides a +1D advantage on any Triage rolls or any roll to resist poisons or diseases. It can serve as a qualified nurse or doctor for the purposes of supervising healing from Wounds."
},
{
"name": "Autokitchen",
"tech_age": "Early Interstellar",
"cost": 10000,
"description": "An automated kitchen which can store and prepare meals. The standard kitchen can prepare 25 meals from internal supplies. The mass of the kitchen is 100 kg. Resupply costs depend on the quality of ingredients desired and can be determined using the Cost-of-Living table above."
},
{
"name": "Autokitchen, Emergency",
"tech_age": "Early Interstellar",
"cost": 5000,
"description": "A smaller and much more restrictive version of an autokitchen, this emergency kitchen provides no-frills survival food for 10 meals. This unit weighs 5kg, or two items of Encumbrance."
},
{
"name": "Backpack",
"tech_age": "Early Primitive",
"cost": 10,
"description": "A backpack does not count as an item for encumbrance when worn. The items in the backpack still count towards encumbrance. It takes one Action to remove an item from a backpack while in combat."
},
{
"name": "Binoculars",
"tech_age": "Early Mechanical",
"cost": 50,
"description": "A standard piece of survival and exploration equipment. At the Early Mechanical Age, they are ruggedized for extended wilderness use, and come equipped with a compass and scaled optics. Beyond the Late Atomic Age, hand-held binoculars become integrated into high-tech optical sensors like the Night Visor."
},
{
"name": "Bioscanner",
"tech_age": "Early Interstellar",
"cost": 5000,
"description": "This handheld device provides data on an organic bodys composition, chemistry, physiology, and life signs. A Knowledge roll is required to properly interpret the data."
},
{
"name": "Breather Mask",
"tech_age": "Late Mechanical",
"cost": 100,
"description": "A dual-purpose gas/filter mask apparatus that condenses thin atmospheres for comfortable breathing. It also filters out tainted atmospheres and provides protection against airborne toxins. Attachments for oxygen bottles make the Breather useful for operating in oxygen-poor or poisonous atmospheres."
},
{
"name": "Chameleon Suit",
"tech_age": "Late Interstellar",
"cost": 2500,
"description": "This full body suit can shift its color patterns to blend in with the surroundings. It does not make a wearer invisible, but at medium and long ranges the wearer will be almost impossible to see and gains +2D to Stealth tests. It includes infra-red cloaking. The same technology can be applied to an Encased Armor Suit for an additional cost of 10000 Credits."
},
{
"name": "Cold Weather Clothing",
"tech_age": "Early Primitive",
"cost": 50,
"description": "These protect against inclement weather. When wearing Cold Weather Clothing, characters can survive in Arctic environments without taking any damage. The Early Interstellar Age version costs 800 Credits and does not count as an item for encumbrance. Note that surviving in a harsher environment, like one that is far colder than a typical arctic climate, may require additional protection, like a space suit."
},
{
"name": "Compass",
"tech_age": "Early Mechanical",
"cost": 10,
"description": "This is a standard piece of equipment in all wilderness survival kits. By the Early Space Age, they incorporate gyroscopic and electronic features that make them usable on any world, given a few minutes of calibration."
},
{
"name": "Desert Suit",
"tech_age": "Later Space",
"cost": 1000,
"description": "An all-in-one suit that traps the bodies moisture and recycles it as drinking water. It includes a hood, breather mask, and goggles."
},
{
"name": "Disguise Kit",
"tech_age": "Early Mechanical",
"cost": 500,
"description": "This kit consists of highly personalized collections of makeup, clothing, wigs, and other accouterments that allow a skilled user to not be recognized, or even pass as someone else. At more advanced Tech Ages, Disguise Kits may include 3-D printed latex masks (Late Atomic Age), retina scanner spoofers (Early Space Age), or even holographic enhancements designed to spoof facial recognition algorithms (Early Interstellar Age). Increase the kits price by 100% for each of these listed features."
},
{
"name": "Emergency Beacon",
"tech_age": "Early Space",
"cost": 1000,
"description": "A portable device that can be activated and will transmit an emergency signal up to a 1000 km. The device has an internal battery that will last for 48 hours. Most vehicles at Late Space Age and above include one automatically, but this portable version can be easily carried along with other survival supplies."
},
{
"name": "Exoskeleton",
"tech_age": "Early Space",
"cost": 20000,
"description": "This marvel of robotics grants wearers +2D to athletics-related Physical checks. It also allows the wearer to jump up to 2m vertically or 5m horizontally. Soldiers wearing exoskeletons may march their normal cross-country speed while tiring at half the rate. The exoskeletons batteries are good for 48 hours of activity before requiring replacement. At higher tech levels, exoskeletons are often replaced by cybernetics."
},
{
"name": "Field Radio",
"tech_age": "Late Mechanical",
"cost": 100,
"description": "A radio transmitter and receiver with a 100 km range. At the Late Mechanical Age is counts as 2 items of Encumbrance, reduced to 1 item at Early Atomic, and 0 encumbrance at the Late Atomic Age."
},
{
"name": "Field Rations",
"tech_age": "Late Primitive",
"cost": 5,
"description": "These are foodstuffs specially prepared to stay edible for 6 months. Each ration counts as a single item for encumbrance. Early Space Age field rations are much lighter: 25 field rations count as one item, and they last for 6 decades."
},
{
"name": "Glidesuit",
"tech_age": "Early Space",
"cost": 500,
"description": "A form-fitting suit that includes adjustable wings that allow the wearer to glide. Flapping provides limited flight. The Glidesuit reduces a persons falling rate in half. Roll Physical to avoid injury when landing. Wearers use their Physical skill to make complex maneuvers."
},
{
"name": "Handcuffs",
"tech_age": "Early Mechanical",
"cost": 50,
"description": "An item commonly used by bounty hunters and law enforcement officers. Escaping properly applied handcuffs requires a Physical roll at -3D. Palming the key and keeping it hidden until the right time is a standard Stealth roll."
},
{
"name": "Hotsuit",
"tech_age": "Early Space",
"cost": 200,
"description": "A reflective suit designed to protect the wearer from temperatures up to 100 degrees centigrade. The suit is clumsy and imposes a -1D disadvantage on all physical activity while wearing it. At Early Interstellar Age, the suit is form-fitting and is not clumsy to wear and does not count as an item of encumbrance."
},
{
"name": "Intelligent Rooms",
"tech_age": "Late Space",
"cost": "Double Cost",
"description": "Fully integrated rooms, houses, or apartments with voice activated commands controlling lighting, heating, and general appearance controlled by an Independent robotic brain. Smartwalls provide 3-D entertainment. At Early Interstellar Age, Low Simulated AI rooms are expected even at the subsistence quality of living and are included in the listed prices."
},
{
"name": "LED Flashlight",
"tech_age": "Late Atomic",
"cost": 5,
"description": "A hand-held, rubberized, sturdy light source with a variable light aperture. The 2m cone of light has a range of 50m, but it can be adjusted to illuminate a 5m radius. Smaller, more expensive (20 Credits) versions can be mounted on weapons or clipped to armor. A Late Atomic Age LED Flashlights battery will last for 24 hours. By Early Interstellar Age, the battery will last for a decade of continual use."
},
{
"name": "Lockpicks",
"tech_age": "Late Primitive",
"cost": 50,
"description": "A collection of specialized tools for opening locks, in a handy carrying pouch. Attempting to pick a lock without lockpicks penalizes the attempt by -2D."
},
{
"name": "Map Box",
"tech_age": "Late Space",
"cost": 3000,
"description": "Designed for wilderness exploration, this self-contained nav-computer system provides scalable maps of a worlds surface based on known data and any additional data obtained by the exploration team. Most inhabited worlds have detailed map drives which can be inserted and provide up to street-level details of any explored area and high-level maps of the entire surface. Map boxes count as 2 items of Encumbrance. At Early Interstellar, it is 1 item."
},
{
"name": "Medkit",
"tech_age": "Early Mechanical",
"cost": 100,
"description": "This is standard issue in all survival kits and can be found in ships lockers across known space. Medkits contain all the necessary equipment and compounds to deal with minor trauma and easily treatable emergencies."
},
{
"name": "Medkit, Advanced",
"tech_age": "Early Space",
"cost": 1000,
"description": "Containing advanced scanners and additional medications, the advanced version of the medical kit provides a +1D advantage when rolling on the Triage table."
},
{
"name": "Multiscanner",
"tech_age": "Late Space",
"cost": 2500,
"description": "This hand-held sensor suite is a combination of several functions: it can detect radiation, electromagnetic emissions, metals, and a limited set of chemicals and biological compounds. It can also perform standard blood tests. A Knowledge roll is required to make real use of the data, but basic analysis is possible with the use of on-board software."
},
{
"name": "Night Visor",
"tech_age": "Late Atomic",
"cost": 300,
"description": "This stylish set of eye wear combines low-light and infra-red vision goggles into one handy device. Safety features prevent blindness if the light level suddenly changes. Wearing a Night Visor eliminates the disadvantages of working in dim light and reduces the penalty for total darkness to -1D."
},
{
"name": "OmniComm",
"tech_age": "Early Space",
"cost": 50,
"description": "Todays smartphones will eventually evolve into the OmniComm, which handles all your telecom needs in one device, with holographic augmented reality capability. The OmniComm can automatically integrate with whatever telecommunication networks are present on a given world. Batteries last for a few days in the Early Space Age. By Early Interstellar, batteries will last for months, if not years."
},
{
"name": "OmniComp",
"tech_age": "Early Space",
"cost": 250,
"description": "A hand-held, light-weight computer which evolved from both the laptop and the tablet computer. It functions much like an OmniComm but is intended for more advanced content production and computing tasks. Early Space Age batteries for these devices last for a few days; Early Interstellar Age batteries last for months between recharging."
},
{
"name": "Omnitool",
"tech_age": "Late Space",
"cost": 500,
"description": "An auto-adjusting, auto-fitting repair tool. The Omnitool will fit exactly to any kind of bolt, screw or fastening device, it doubles as wire-cutters, small hacksaw, flashlight, and a myriad of other tools. All this is packed into one items worth of encumbrance!"
},
{
"name": "Oxygen Tank",
"tech_age": "Late Mechanical",
"cost": 100,
"description": "An oxygen tank that can be attached to a space suit or breather mask to provide 90 minutes of breathable air. Each tank is 2 items of encumbrance. At the Late Space Age, the tanks are only 1 item of encumbrance."
},
{
"name": "Personal Reentry Capsule",
"tech_age": "Late Space",
"cost": 15000,
"description": "Used as a last-ditch survival tool, the personal capsule allows for reentry into an atmosphere and a relatively safe landing on a worlds surface. The capsule includes a primitive autopilot and a small reentry thruster to make a soft landing. The occupant has no control over the capsule. The autopilot will attempt to land on flat, dry land if possible. All uses must make a Physical check at +1D to avoid 2d6 damage upon landing."
},
{
"name": "Personal HUD",
"tech_age": "Early Interstellar",
"cost": 1500,
"description": "A personal Heads-Up-Display (HUD) can be fitted to any pair of goggles or a helmet visor. At the Late Interstellar Age, it can be fitted as a contact lens. The HUD interfaces with an OmniComp displaying information and messages. The HUD can also be synched to any Smart Gun system (see the Weapons Accessories section)."
},
{
"name": "Portable Fusion Generator",
"tech_age": "Early Interstellar",
"cost": 20000,
"description": "A marvel of interstellar technology, and a crucial piece of equipment for colonies across the galaxy. Fusion generators are also very useful for mercenary outfits that rely on energy weapons. These generators are small (20kg, roughly 2 Encumbrance), rugged, and designed to last for decades."
},
{
"name": "Portable Generators",
"tech_age": "Late Mechanical",
"cost": 1000,
"description": "A ubiquitous device still used across the galaxy to generate electricity far away from central power grids. Most runoff refined hydrocarbons that can be sourced locally. This one is 15kg and consumes 4 liters of fuel per hour. Higher tech level versions are smaller and more fuel efficient."
},
{
"name": "Prefab Space Base",
"tech_age": "Early Space",
"cost": 50000,
"description": "This is a pressurized, modular, temporary structure that is capable of housing 6 persons. It has a single airlock and requires 12 person-hours to assemble. Life support lasts for 24 hours without a portable generator to power atmoscrubbers."
},
{
"name": "Pressure Tent",
"tech_age": "Early Space",
"cost": 5000,
"description": "This basic survival shelter lacks an airlock and must be depressurized to enter or leave; it can house up to 2 people and requires an external oxygen tank."
},
{
"name": "Radiation Detector",
"tech_age": "Early Atomic",
"cost": 150,
"description": "A matchbox sized device that displays radiation levels in a 10m radius. It also indicates the type of radiation if that is important. The detector can also serve as an alarm, chiming loudly when radiation levels are dangerous to humans. This feature can be shut off."
},
{
"name": "Responsive Clothes",
"tech_age": "Late Space",
"cost": 200,
"description": "Clothing that can adapt to a wearer, fitting them perfectly. The clothing is self-cleaning and can change color and pattern within limits. Not quite one-size-fits-all, but almost."
},
{
"name": "Rope",
"tech_age": "Early Primitive",
"cost": 5,
"description": "At the Early Primitive Age, rope can hold 50kg. By the Late Atomic Age, the rope is fully synthetic, and can support 500kg of mass before breaking. Roughly 100m of rope is the equivalent of one encumbrance item."
},
{
"name": "Rope, Advanced",
"tech_age": "Early Interstellar",
"cost": 10,
"description": "This synthetic rope is incredibly light and strong. 10m of this rope can support 1000 kg before breaking."
},
{
"name": "Sensor Gloves",
"tech_age": "Late Interstellar",
"cost": 4000,
"description": "Thin gloves that incorporate sensitive tactile, pressure, chemical, and bioscanner sensors. They can interface with an OmniComp and provide detailed information about weight, mass, composition, even recent users. They can sense residual heat and chemical signatures for up to an hour after the object was used. The gloves provide a +1D advantage on checks for information where they would apply."
},
{
"name": "Sentry Gun",
"tech_age": "Late Space",
"cost": 750,
"description": "This security system consists of a weapons tripod mounted with a processor and sensor array. It can be fitted with a support weapon. The operator sets the sentrys guns parameters for when and who it opens fire on. It has a Combat skill of 1."
},
{
"name": "Sleeping Bag",
"tech_age": "Late Primitive",
"cost": 30,
"description": "A cloth or synthetic padded bag for one person. It provides insulation while sleeping. In the Early Atomic Age, cold weather bags are available. Regular sleeping bags are effective to zero degrees centigrade, while cold weather bags, costing 50 Credits, are insulated to negative 30 degrees centigrade."
},
{
"name": "Smart Clothes",
"tech_age": "Early Interstellar",
"cost": 500,
"description": "Responsive clothes that incorporate microelectronics providing the equivalent of an Omnicomp and allowing images and messages to be displayed on the clothing if desired."
},
{
"name": "Super Adhesive",
"tech_age": "Late Atomic",
"cost": 20,
"description": "A powerful adhesive that bonds two materials together and dries in one combat round (6 seconds). The adhesive bond is limited by the strength of the weaker of the two objects. 20 Credits buys a small tube that can cover 1 square meter of surface."
},
{
"name": "Survival Kit",
"tech_age": "Early Atomic",
"cost": 50,
"description": "A standard-issue item in most aircraft, explorer vehicles, and spacecraft across known space. The survival kits contents vary over Tech Age but consist mainly of the basic supplies to keep a small group of humans alive, fed, and healthy for a few weeks. A kit usually contains thermal tarps, LED flashlights, fire starters, water filter and decontamination pills, magnesium flares, and a radio/flash rescue beacon. They count as one item for Encumbrance."
},
{
"name": "Technical Toolkit",
"tech_age": "Early Atomic",
"cost": 300,
"description": "This toolkit is fully equipped to handle almost any technical job that doesnt require a full workshop. As the Tech Ages increase, many of the tools become self-modifying smart omnitools that can reconfigure depending on what the tech needs. This greatly reduces the bulk of the toolkit: Space Age Tool Kits are 2 Encumbrance points, while all but the largest Interstellar kits are 1 Encumbrance point."
},
{
"name": "Thruster Pack",
"tech_age": "Early Space",
"cost": 5000,
"description": "This wearable harness allows maneuvering in zero-G conditions at normal movement rates. Characters and objects moving by thruster pack are still subject to the laws of motion."
},
{
"name": "Trauma Tab",
"tech_age": "Late Space",
"cost": 500,
"description": "A single-use medical application that automatically allows a character who has suffered a Wound to continue to fight. However, the strain adds a -1D penalty to the Wound Triage table roll after the fight. At Late Interstellar age, this penalty is dropped."
},
{
"name": "Water Purification Tablets",
"tech_age": "Late Atomic",
"cost": 10,
"description": "A pack of 50 tablets that are standard issue in survival kits. Each tablet can sterilize up to 1L of water and make it fit for drinking."
},
{
"name": "Welder, Laser",
"tech_age": "Early Space",
"cost": 3000,
"description": "This portable workshop tool uses a focused laser beam to perform cutting and welding operations. It can cut through a reinforced bulkhead in 1d6 starship combat rounds (6-36 minutes). Roll Technology to reduce the time to one starship combat round (6 minutes). As a weapon, the laser welder is inaccurate and clumsy, but extremely dangerous: it does 4D (or AV 3D) damage with a range of Close and has energy for 5 attacks. When used as a weapon, the laser welder gains the Fire Weapon Aspect."
}
]

View File

@@ -0,0 +1,82 @@
[
{
"name": "Anti-Armor Grenade",
"tech_age": "Late Mechanical",
"cost": 50,
"damage": "2d6+1",
"aspects": ["Blast", "AV 3d6"],
"description": "Anti-tank grenades use a focused blast to penetrate armor. This grenade can only be fired from a grenade launcher [1]."
},
{
"name": "Dynamite",
"tech_age": "Early Mechanical",
"cost": 75,
"damage": "2d6",
"aspects": ["Blast"],
"description": "A low-tech explosive made of nitroglycerin, sorbents (such as powdered shells or clay) and stabilizers. Dynamite is typically used for demolition but can also be thrown with a lit fuse as a \"grenade\" [2]."
},
{
"name": "EMP Grenade",
"tech_age": "Early Space",
"cost": 50,
"damage": "4d6",
"aspects": ["Blast", "Stun (Machines)", "AV 3d6"],
"description": "This Electro-Magnetic Pulse grenade emits a powerful magnetic pulse capable of disrupting electronics. It causes full damage to robots but is otherwise harmless to humans. Characters with implanted cybernetics are vulnerable to EMP but reduce the damage from an EMP grenade by -2d6. Non-cybered organic beings are immune to this stun damage. This grenades AV dice are effective against Late Atomic Age or later vehicles [3]."
},
{
"name": "Flashbang Grenade",
"tech_age": "Late Mechanical",
"cost": 30,
"damage": "3d6+1",
"aspects": ["Blast", "Stun"],
"description": "A non-lethal stun grenade emitting a powerful flash and deafening noise upon detonation [3]."
},
{
"name": "Fragmentation Grenade",
"tech_age": "Early Mechanical",
"cost": 30,
"damage": "3d6+3",
"aspects": ["Blast"],
"description": "The basic anti-personnel hand grenade that explodes into a hail of shrapnel [4]."
},
{
"name": "Incendiary Grenade",
"tech_age": "Late Mechanical",
"cost": 30,
"damage": "3d6",
"aspects": ["Blast", "Fire"],
"description": "A military-grade fire-bomb grenade [4]."
},
{
"name": "Molotov Cocktail",
"tech_age": "Early Mechanical",
"cost": 5,
"damage": "2d6+1",
"aspects": ["Blast", "Fire"],
"description": "These are home-made incendiary bombs, commonly made with a glass container filled with highly flammable liquid and lit with a rag [4]."
},
{
"name": "Plasma Grenade",
"tech_age": "Late Interstellar",
"cost": 250,
"damage": "4d6",
"aspects": ["Blast", "Fire", "AV 4d6"],
"description": "A plasma explosive device in a grenade-sized package [4]."
},
{
"name": "Plastique",
"tech_age": "Late Mechanical",
"cost": 200,
"damage": "2d6+2",
"aspects": ["Greater Blast"],
"description": "This generic, multi-purpose plastic explosive is a favorite of military units, terrorists, demolition teams, and adventurers across known space [4]."
},
{
"name": "Smoke Grenade",
"tech_age": "Early Mechanical",
"cost": 15,
"damage": null,
"aspects": ["Greater Blast (Smoke)"],
"description": "This grenade dispenses a cloud of thick smoke upon impact. Apply -1D to all attacks passing within Near range of its detonation point. Smoke also penalizes attacks by laser weapons by an additional -1D. The smoke stays in the air for 1d6+1 combat rounds [5]."
}
]

View File

@@ -0,0 +1,219 @@
[
{
"name": "Advanced Cyberarms",
"cost": 20000,
"loss": 2,
"tech_age": "Late Space",
"description": "The arms are replaced by obvious cybernetic appendages. This implant grants +2D for brute strength tasks involving the arms. Unarmed attacks do 3d6 damage. Both real arms have to be replaced to provide proper structural support."
},
{
"name": "Advanced Cyberlegs",
"cost": 50000,
"loss": 2,
"tech_age": "Late Space",
"description": "The subjects legs are replaced by obvious cybernetic versions. The hips and spine are reinforced to deal with the additional strain. The subject gains the Runner Talent, with a 15+2d6m base rate. As an action, the character may throw Physical to jump 10m horizontally in any direction or 3m upwards. The subject also ignores fall damage for any falls less than 10m."
},
{
"name": "Artificial Gill",
"cost": 2500,
"loss": 1,
"tech_age": "Early Space",
"description": "This implant permits the subject to breathe underwater with no difficulty. Diving too deep will still be lethal. The artificial gill runs off the characters own energy and does not need recharging."
},
{
"name": "Bastet Frame Upgrade",
"cost": 1000000,
"loss": 3,
"tech_age": "Late Space",
"description": "This series of implants represents a radical reconstruction of the entire organic body to grant superhuman agility and speed. The Bastet upgrade grants +1D to all Physical and Stealth skill rolls related to speed and agility. The Bastet Frame Upgrade is incompatible with the Hercules Frame Upgrade."
},
{
"name": "Chem Injector",
"cost": 10000,
"loss": 1,
"tech_age": "Early Space",
"description": "An assassins implant par excellence, this cybernetic is mounted in the users fingertips or canines. Different chemicals are available, but typically they amount to lethal or non-lethal poisons. Attacks against unsuspecting targets are automatically successful. In combat, or against a wary target, roll Combat normally to hit. Targets must roll Physical to avoid the effects of the poison."
},
{
"name": "Control Rig Implant",
"cost": 1000000,
"loss": 1,
"tech_age": "Late Space",
"description": "This is a highly specialized implant designed to give elite vehicle pilots even more of an edge. The control rig allows the operator to fully interface their minds with vehicles. The control rig gives the character +1D on Vehicles skill throws with suitably modified vehicles. Position rolls remain unaffected. The Control Rig requires that the operator to be in the vehicle, and “plugged in.” Modifying a vehicle to work with a control rig increases its cost by 10%. When the vehicle takes any damage, the plugged in pilot must roll Physical to avoid taking 1D damage from electrical feedback—this damage ignores any armor the pilot may be wearing."
},
{
"name": "Cosmetic Modification",
"cost": "varies",
"loss": 0.25,
"tech_age": "Early Space",
"description": "It is a simple matter to effect changes to a persons appearance with cybernetics. Small modifications cost 500 Credits; a general makeover costs 1000 Credits; and exotic options—for example, changing your body to resemble that of your favorite animal—cost 5000 Credits and upwards."
},
{
"name": "Cybernetic Eyes",
"cost": 7500,
"loss": 0.5,
"tech_age": "Early Space",
"description": "Both eyes are replaced with artificial versions. Cybereyes are considered to have internal Night Visor upgrades (low light and infrared optics). They also come with x4 image intensification, and anti-flare protection which provides a +1D bonus against flash-bang grenades and other similar effects."
},
{
"name": "Cyber-Blades",
"cost": 5000,
"loss": 0.5,
"tech_age": "Early Space",
"description": "The characters arm carries a blade that can be extended or retracted at will. The blade does 2d6+1 damage. Internal blades are made with ceramic composites to avoid detection and cannot be detected by any means short of exploratory surgery."
},
{
"name": "Data safe",
"cost": 5000,
"loss": 0.5,
"tech_age": "Early Space",
"description": "This secured electronic storage device secures encrypted files in a small data chip implanted in the characters skull. The data safe cannot be detected by a cursory sensor scan, but a medical scan will reveal its presence. The safes capacity is very large and can store (not run!) even advanced AI software. Data must be uploaded and downloaded from the data safe by means of a Neural Interface. The safe can be set so that failed attempts to break the encryption cause it to shut down and be safely dissolved by the subjects body."
},
{
"name": "Filtration System",
"cost": 3000,
"loss": 0.5,
"tech_age": "Early Space",
"description": "This lung filtration implant protects from airborne and pathogens. It requires a few minutes of maintenance after every month of use, but otherwise draws its power from the subjects own electrical impulses. Certain extremely high-tech artificially designed chemical agents might degrade the filtration system very quickly."
},
{
"name": "Gekko Implants",
"cost": 25000,
"loss": 0.5,
"tech_age": "Late Interstellar",
"description": "Miniature gravitic generators are implanted in the characters hands and feet. This allows them to climb sheer surfaces and run along walls or ceilings. Earlier versions (same price, Late Space Age) deploy biomimickry micro-hairs that provide the same performance but require bare hands and feet to use."
},
{
"name": "Glow Tattoos",
"cost": 100,
"loss": 0,
"tech_age": "Early Space",
"description": "These advanced tattoos consist of smart bioluminescent skin grafts implanted in complex patterns across the subjects skin. Patterns and designs are up to the subject. The subject may activate or deactivate the tattoos at will."
},
{
"name": "Head bomb",
"cost": 3000,
"loss": 0.25,
"tech_age": "Early Space",
"description": "A tiny remote-controlled explosive device implanted in the brain. They are designed so that the bombs detonation will kill the subject without breaking the skull: no collateral damage! These devices are rarely implanted voluntarily."
},
{
"name": "Hercules Frame Replacement",
"cost": 1000000,
"loss": 3,
"tech_age": "Late Space",
"description": "A radical reconstruction and replacement of the entire organic body grants superhuman endurance and might. The Hercules Frame grants the character +1D to all Physical rolls related to brute strength and doubles their Encumbrance capacity. All melee damage rolls gain +1d6 as well. The Hercules Frame also provides +10 Stamina. The Hercules frame upgrade is incompatible with the Bastet Frame Upgrade."
},
{
"name": "Hibernation Suite",
"cost": 100000,
"loss": 1,
"tech_age": "Early Interstellar",
"description": "This emergency cybernetic implant puts the character into a medical coma upon command. The user appears dead and has no need of any air, food, or water while in suspended animation. The Hybernation Suite also pauses any healing and prevents the spread of poisons or disease. The length of hybernation is determined by the user before it begins, and the maximum duration is four weeks. The Hybernation Suite cannot be used for a week after the user is woken from their coma."
},
{
"name": "Hypercosmetic Surgery",
"cost": 1000000,
"loss": 2,
"tech_age": "Late Space",
"description": "Perfect body sculpting and implanted synthetic pheromone glands radically reconstructs the subjects body to be perfectly attractive to other members of their species. Grants +1D to all Social skill rolls in situations where physical attractiveness matters."
},
{
"name": "Neural Booster",
"cost": 1000000,
"loss": 3,
"tech_age": "Late Space",
"description": "This invasive augmentation to the characters nervous system and adrenal glands grants the character super speed and reaction times for very short periods of time. Once per combat, the character may go twice, for a total of four actions per combat round rather than the usual two. As well, they may use this ability as an interrupt action, going before anyone else in the round."
},
{
"name": "Neural Interface, Military Grade",
"cost": 10000,
"loss": 0.5,
"tech_age": "Late Space",
"description": "A basic way to jack into a computer, allowing rapid upload of code directly from a hackers mind and both combat actions per round to be used as hacking actions."
},
{
"name": "Neural Interface, Military Grade (Ultimate Jack)",
"cost": 1000000,
"loss": 0.5,
"tech_age": "Late Space",
"description": "The ultimate interface between the human brain and a machine. In addition to all the benefits of the regular Neural Interface, this implant grants +1D to all throws made to hack computers and tamper with electronics."
},
{
"name": "Omnicomm Implant",
"cost": 5000,
"loss": 0.25,
"tech_age": "Early Space",
"description": "This implant functions as an Omnicomm but with a neural interface, allowing communication without audible speech. This implant allows the subject to send and receive images and videos as well. Nearly every operator in the starfaring future has such an implant."
},
{
"name": "Omnicomp Implant",
"cost": 10000,
"loss": 0.25,
"tech_age": "Early Space",
"description": "This implant provides full Omnicomp capabilities to any operator, but with a neural interface. Dedicated hackers tend to eschew this implant, as it is difficult to constantly upgrade with custom modifications."
},
{
"name": "Oxygen Supply",
"cost": 4000,
"loss": 0.25,
"tech_age": "Early Space",
"description": "This implant provides 3 hours of oxygen. This means that the subject can avoid breathing tainted air without any other implants. It is also an excellent emergency oxygen backup supply for spacers operating in dire circumstances."
},
{
"name": "Prehensile Tail",
"cost": 15000,
"loss": 1,
"tech_age": "Early Space",
"description": "This implant provides the subject with an additional grasping and manipulating appendage. The tail is not easily concealed but can be made to look like anything the character desires. The character still only has two actions per combat round. The tail is strong enough to support the weight of the owner."
},
{
"name": "Prosthetic Limb/Organ",
"cost": 5000,
"loss": 0.25,
"tech_age": "Early Space",
"description": "This entry covers a variety of medical cybernetics intended to replace missing or damaged hands, eyes, fingers, arms, legs, feet, or internal organs. These prosthetics are cosmetically indistinguishable from the real thing, but close inspection will reveal the truth."
},
{
"name": "Smart Gun, Internal",
"cost": 15000,
"loss": 1,
"tech_age": "Late Space",
"description": "Some gun-bunnies need to project their aiming reticule all the time. This cybernetic implant grants the standard Smart Gun advantages to all weapons the user fires, as long as the weapon itself has the Smart Gun sensors. The character must have Cybernetic Eyes or an Omnicomp implanted to benefit from the Internal Smart Gun. Modifying a weapon to work with an Internal Smart Gun costs 100 Credits."
},
{
"name": "Storage Pouch",
"cost": 2000,
"loss": 0.5,
"tech_age": "Early Space",
"description": "This is a discreet abdominal pouch accessible via a well-concealed sphincter. Stows items up to 0.5 kg in weight and 0.5 liters in volume: one Encumbrance points worth of items."
},
{
"name": "Subdermal armor",
"cost": 30000,
"loss": 0.5,
"tech_age": "Early Space",
"description": "This implant consists of subtle bone reinforcement and flexible mesh implants that provide 4 points of Protection. Subdermal armor is detectable upon visual inspection, but only if the subject removes their clothing. Subdermal armor is added to the Protection of any worn armor."
},
{
"name": "Vacuum Adaptation",
"cost": 1000000,
"loss": 2,
"tech_age": "Late Interstellar",
"description": "This implant turns the user into a natural spacer. Internal oxygen reserves, micro-seals, and metal weave skin permit the character an hour of operation in vacuum without a spacesuit. An integral grav unit allows short-range maneuvering in low and microgravity. The grav unit is too weak to maneuver in any gravity beyond 0.05g. This augment also provides 4 points of integral armor Protection and reduces radiation by 10 rads. The Vacuum Adaptation implant is visible upon medical inspection or sensor scan but is otherwise quite discreet. The Vacuum Adaptation requires 1d6+1 hours to recharge after use."
},
{
"name": "Weapon, Internal",
"cost": 5000,
"loss": 1,
"tech_age": "Early Space",
"description": "The character carries a concealed weapon in an internal arm mounting. This can be any pistol-sized weapon, according to the tech age of the society installing the cybernetic: stealth pistol, gyrojet pistol, gauss pistol, laser pistol, blaster pistol, or stunner. The weapons magazine is half normal capacity, but it can be reloaded normally via a retractable magazine holder. The cybernetics price is 5000 Credits, plus twice the weapons cost. Internal weapons can be detected with medical scans or detailed physical inspections. Internal weapons are made to be automatically compatible with a Smart Gun system (internal or external)."
},
{
"name": "Wound Triage Booster",
"cost": 15000,
"loss": 1,
"tech_age": "Early Space",
"description": "An implanted autodispenser of emergency combat drugs that stabilize wounds and minimize pain. Characters with this implant gain a +1D to Wound Triage rolls after combat. As well, they do not die until they suffer 4 Wounds in combat."
}
]

View File

@@ -0,0 +1,142 @@
[
{
"name": "Augmented Speed",
"description": "The character may move to Far distance in half the number of Move Actions normally required. This power lasts for 3 combat rounds [1]."
},
{
"name": "Augmented Strength",
"description": "Gain +1D to Physical throws, as well as all melee and unarmed damage rolls for the rest of the battle [1]."
},
{
"name": "Blink",
"description": "The character may teleport once to any point within Far distance, as long as they have line of sight to it, or they have been there previously [2]."
},
{
"name": "Choke",
"description": "Telekinetically grab one humanoid creature by its throat (or analogous body part) and strangle them for 1D Damage every round, for a maximum of 5 rounds. The victim may throw Physical each round to break out of the chokehold [2]."
},
{
"name": "Clairvoyance",
"description": "This power allows characters to psionically watch and listen at a spot they choose within Far distance. This power ignores solid objects, and the character does not have to be familiar with the location in question. Whether or not a psion can use Clairvoyance to familiarize themselves sufficiently for the Blink power (above) is up to the Referee [2]."
},
{
"name": "Cryokinesis",
"description": "Characters with this power may freeze up to 5 cubic meters of material for 10 minutes. Cryokinesis can also be used offensively. Throw Combat to attack a target within Near range, causing 2D+2 damage, with AV 2D. This affects targets internally; survival clothes do not protect from this power [3]."
},
{
"name": "Electrokinesis",
"description": "This character is able to manipulate electrical energy in their vicinity. They may use this power to recharge batteries, short-circuit electrical devices, or generate spectacular lightshows. They may also attack a target within Near range with lightning! This causes 3D damage, with AV 2D. The target may throw Physical to take half damage. Robots suffer -2D on that roll [3]."
},
{
"name": "Emotion",
"description": "This power allows the psion to evoke a powerful emotion in a target at Near range; fear, joy, or friendliness are typical emotions. It is obvious to everyone, affected or not, that something has happened. This power can be used to force a Morale check among enemy (or friendly) forces. This effect lasts until the end of the battle, or for 1d6x10 minutes [4]."
},
{
"name": "Empathy",
"description": "Psions may read a targets emotions and subtly affect them. This includes changing a Near targets NPC Reaction Roll result by one category up or down, players choice [4]."
},
{
"name": "False Perception",
"description": "The psion causes a single target within Near range to hallucinate. This effect lasts as long as the psion concentrates to maintain it. The details of the False Perception are left to the psion but can range from a normal illusion or distraction to something that closely resembles a drug-fueled fugue state. The target is permitted a Knowledge throw to shake off the effect after one round [5]."
},
{
"name": "Hibernation",
"description": "The character may enter into a trance-like state and meditate for up to 7 days. While meditating, the psychic does not require food, water, or air. They remain aware of their surroundings and may end the hibernation at will [5]."
},
{
"name": "Inspiration",
"description": "When the psion uses this power, they gain +1D to their next roll, regardless of what the roll is for. This power may only be used once per day [6]."
},
{
"name": "Invisibility",
"description": "The psion is able to conceal themselves from nearby onlookers. While invisible, organic targets within Near range will not see the psion. This power works on electronic sensors and video cameras within Near range. The psion must concentrate for this power to be effective. Attacking any target immediately terminates this effect [6]."
},
{
"name": "Kinetic Blast",
"description": "The psion generates a powerful if clumsy blast of telekinetic force! This invisible telekinetic bolt of force does 4D damage with AV 3D. The target may throw Physical (or Vehicles if in a vehicle) to completely avoid the attack [7]."
},
{
"name": "Kinetic Shield",
"description": "This power grants the psion 8 points of armor Protection for the duration of the battle. The kinetic shield is not cumulative with worn armor [7]."
},
{
"name": "Levitation",
"description": "The Psion may fly at a speed of one Move Action per round, for 5 rounds, in any direction desired [7]."
},
{
"name": "Life Detection",
"description": "This power allows the psion to instinctively detect all living beings within a Far radius. This power cannot be used to pinpoint the exact whereabouts of a target but will give a general sense of the location of a hidden interlocutor or sniper [8]."
},
{
"name": "Memory Block",
"description": "To use this power, the psion must be within Near range of a target. The target is allowed a Knowledge throw to avoid the effect. If the target fails the throw, the psion may block out up to 15 minutes of the targets memories. The targeted memories must be targeted as a block for each use of this power. The memories can only be unblocked by another psion using Memory Block on the target [8, 9]."
},
{
"name": "Microkinesis",
"description": "The psion gains telekinetic control of small or microscopic objects. Gain +2D on any one Technology throw involving components or systems containing small or microscopic objects [9]."
},
{
"name": "Mind Blast",
"description": "This powerful telepathic blast renders a Near target unconscious for 10 minutes. The target is allowed a Knowledge throw to reduce this to being stunned (no actions) for one combat round [9]."
},
{
"name": "Mind Control",
"description": "The psion gains control of a Near target, who becomes the psions ally for 15 minutes. The target may make a successful Knowledge throw to reduce the duration to 1D rounds. The target of Mind Control will only perform tasks a typical ally would do and will not perform any action that would harm themselves [10]."
},
{
"name": "Mind Lock",
"description": "A Near target is paralyzed for 2d6 combat rounds and may not move. They may still speak. The target is allowed a Physical throw to resist this power [10]."
},
{
"name": "Mind Shield",
"description": "The psion may erect an invisible mental shield that protects themselves and all allies within Near range any mind-affecting power or psionic ability. The Mind Shield will last for ten minutes [10]."
},
{
"name": "Precognition",
"description": "This power allows the player to ask the Referee one question about what may happen to their character in the next 24 hours. The Referee must respond truthfully with either “yes” or “no.” Precognition may only be used once per day [11]."
},
{
"name": "Psychic Healing",
"description": "This handy power allows the psion to heal 1 Wound on an injured target [11]."
},
{
"name": "Pyrokinesis",
"description": "The psion may ignite a flammable object within a Near range. When used to directly attack a target, throw Combat to hit the target. A successful attack does 3D damage and has the Fire weapon Aspect. See the Environmental Hazard chapter for details on fire damage [11]."
},
{
"name": "Regeneration",
"description": "This power allows a psychic to automatically treat a single Wound Triage Table result as though it were a result of 11: the wound will heal after 10 minutes of rest. Regeneration cannot be used on other targets but may be used after the results of the Triage Table roll are known. The psychic must be able to rest for ten minutes, and Regeneration only works on one wound at a time [12]."
},
{
"name": "Second Wind",
"description": "This power allows the psion to ignore the effects of Fatigue for 1 hour [12]."
},
{
"name": "Suggestion",
"description": "Psions may use this power to plant a simple hypnotic suggestion in one target. This effect will last until the target has performed their suggested task, or ten minutes have passed. Victims will not obey suggestions to harm themselves directly or indirectly [12, 13]."
},
{
"name": "Telekinesis",
"description": "The psion may move objects up to 100kg by the power of their brain. Telekinetics may throw a heavy object at a target at Near range; such an attack requires a Combat roll and causes 4D damage, with AV 3D [13]."
},
{
"name": "Telepathy",
"description": "This power allows the psion to read a Near targets surface thoughts for one minute [13]."
},
{
"name": "Thousand Faces",
"description": "The psion may change their appearance and biometric data to those of any target of the same or similar species for 10 minutes. To mimic the specific biometric data of another person, the psion must have a sample of the targets DNA [13]."
},
{
"name": "Truth",
"description": "This telepathic ability forces one Near target to answer questions truthfully. They must be able to speak or communicate to the psion, and the questions can be about anything: the target will fully answer to the best of their ability [14]."
},
{
"name": "Vampire",
"description": "The psion must make a normal unarmed attack at Close range. The Vampire power inflicts a Wound on the target, and instantly heals a Wound the psion has suffered [14]."
},
{
"name": "Zombie",
"description": "This gruesome power allows the psion to control one body of a creature killed in the past 24 hours. The target creature must be within Near range, and the power lasts for 5 combat rounds. The corpse may act, speak, and attack as the psion desires. The creatures abilities might be limited depending on the amount and kinds of damage it suffered when it died [14]."
}
]

View File

@@ -0,0 +1,270 @@
[
{
"name": "Armor Training",
"description": "This talent allows the character to use armor more effectively. The encumbrance values of all armors are reduced by 1 to a minimum of 0."
},
{
"name": "Artillery",
"description": "This character received advanced training in using heavy artillery. Usually, this means acting as a forward observer, but the character is also an expert in artillery gunnery, fuse setting, and demolishing fortifications with artillery. Gain +1D when firing artillery, or acting as a forward observer, or when conducting counter-battery fire."
},
{
"name": "Assault",
"description": "Assault specialists receive training in the use of heavy weapons. Gain +1D when using assault weapons, hunting tanks or other large vehicles, or when attacking prepared enemy fortifications."
},
{
"name": "Berserker",
"description": "When injured in combat but still conscious, the character may enter a Rage. This grants them +1D to hit and +1D to damage in melee combat, but also grants the character's enemies +1D to hit them. This lasts until the end of that combat encounter."
},
{
"name": "Blind Fighter",
"description": "The character can ignore the Penalty Die for fighting in darkness."
},
{
"name": "Bodyguard",
"description": "This talent allows the character to quickly move into harms way and take a hit meant for a comrade. This works as an interrupting action, and uses the bodyguards next Action in combat, if they survive."
},
{
"name": "Evasive Action",
"description": "This talent reflects innate luck, unconscious skill, or lightning fast reflexes. Once per battle, the character may avoid an otherwise successful attack and take no damage. They may elect to use this ability after damage is rolled. This talent can apply in vehicle combat as well as in personal combat."
},
{
"name": "Hardy",
"description": "The damage roll of the first (and only the first) successful attack on the character in a given battle incurs a -2D penalty."
},
{
"name": "Heavy Hitter",
"description": "Once per battle, you may opt to inflict maximum damage with an attack. You may use this ability after you have rolled damage."
},
{
"name": "Hunter",
"description": "The character is practiced at setting ambushes. Gain +1D on Surprise throws when attacking from ambush."
},
{
"name": "Leader",
"description": "Whether a natural, or an experienced, trained leader, this character knows how to motivate people into doing things they might not normally do. They gain +1D when attempting to rally troops and convince others to carry out their orders. As an action in Combat, they may roll Social 8+. If the roll is successful, the Leader generates Hero Points equal to the result of the roll, minus 7 (a result of 8 provides 1 Hero Point). These Hero Points can be distributed as a free action to comrades during the battle, but disappear when the fight is over."
},
{
"name": "Marksman",
"description": "The character is particularly adept at hitting where it counts most with ranged weapons. After spending one Hero Point, add +2D to damage rolls with ranged weapons."
},
{
"name": "Martial Artist",
"description": "Your character is a highly trained martial artist. Their feet and fists are lethal weapons. Add +1d6 to the damage rolls of all unarmed attacks."
},
{
"name": "Maverick",
"description": "A brash, risk-taking combatant, the Maverick has raw talent and little time for rules and personal safety. They may spend a Hero Point to perform an additional action in a combat round. They may use this ability as an interrupting action, and act out of initiative sequence. But beware: whenever they use this ability, enemies may target the character with +1D to hit in the next round."
},
{
"name": "Quick Draw",
"description": "If the character has a weapon at the ready—in a quick-draw holster or sheath, or just at hand—then they may make a rapid attack at the start of the first round of combat, before the initiative order. They incur one Penalty Die on the attack."
},
{
"name": "Relentless",
"description": "This talent allows the character to temporarily ignore the effects of one hit in combat. They may use this talent after they have learned what the damage might be. After the combat, roll on the Triage table."
},
{
"name": "Sneak Attack",
"description": "This character is well practiced at sneak attacks. When attacking a completely unaware target in melee, gain +1D to hit, and +1D to the attack's damage."
},
{
"name": "Tactics",
"description": "At the start of a fight, roll Knowledge 8+. The characters training and drills provide a number of Advantage Dice equal to the result of the roll, minus 7 (with 8 providing +1D). These Advantage Dice can be spent by the character and their comrades at any time during the combat."
},
{
"name": "Two-Fisted",
"description": "The character may wield a one-handed weapon in each hand. They may attack with each of the two weapon once per round. Their second action in the round cannot be used to make another two attacks. The attack from the off-hand weapon is made with a -1D penalty. If the character is also Ambidextrous (see below), then the Penalty Die is removed."
},
{
"name": "Weak Point",
"description": "With training and experience, this character can spot an opening in an opponents armor or defensive posture. Throw Knowledge 12+ to grant you and your allies +1D to hit against a single enemy during the next round."
},
{
"name": "Whirlwind",
"description": "On the characters turn, they may spend a Hero Point to make another melee attack that round."
},
{
"name": "Ambidextrous",
"description": "This character has an innate or learned ability to use their off-hand equally as well as their dominant hand. This is useful in case of injury, among other things. However, without the Two-Fisted Talent they cant use a second weapon to attack with their off-hand."
},
{
"name": "Awareness",
"description": "Gain +1D on throws to avoid Surprise in combat. This does not refer to setting up ambushes, where the Hunter Talent applies."
},
{
"name": "Beast Friendship",
"description": "Gain +1D when identifying flora or fauna, as well as in Reaction throws with (non-magical) animals."
},
{
"name": "Big Mouth",
"description": "This character has a witty retort, insult, or inspiring word at the ready for all occasions. The character gains +1D whenever they are involved in an argument, debate, or they just want to aggravate or antagonize someone."
},
{
"name": "Charming",
"description": "This characters natural habitat is a room full of people. Gain +1D when carousing, networking, or making a good impression in social settings."
},
{
"name": "Deduction",
"description": "Spend a Hero Point to ask the GM three yes-or-no questions about any person, place, or object you are investigating or observing."
},
{
"name": "Determined",
"description": "Gain one extra Hero Point at the start of each game session."
},
{
"name": "Eidetic Memory",
"description": "This character remembers everything their senses receive in raw excruciating detail. They gain +1D whenever they try to remember details of past events."
},
{
"name": "Empath",
"description": "This talent represents an innate ability to relate to other sentient beings. The character gains +1D on Reaction throws when interacting with humans and sentient aliens."
},
{
"name": "Endurance",
"description": "Your character is used to physical hardship. Ignore the first Penalty Die from fatigue, pain, Wounds (including the Physical roll to keep fighting), or other physical difficulties."
},
{
"name": "Pet",
"description": "The character has a special animal companion that is extremely loyal, surprisingly intelligent, but not particularly obedient. Distribute 4 points among Combat, Physical, Social, and Stealth skills, determine Stamina and Lifeblood normally, and select two innate Talents for it. The Referee has final say on what Talents are appropriate."
},
{
"name": "Immunity",
"description": "The character has a very strong immune system. They gain +1D on throws to resist the effects of poisons and disease."
},
{
"name": "Infuriating",
"description": "The character is a notorious troll. The character may taunt a target as an action: roll Social 8+. If successful, one target creature gains a Penalty Die on their actions for the next round."
},
{
"name": "Ingenious",
"description": "The character is talented at improvising with technology and their environmental surroundings in delightfully different ways. Gain +1D when the character uses tools or found objects in an interesting or creative manner."
},
{
"name": "Insightful",
"description": "Due to training or intuition, the character gains +1D when attempting to determine if someone is lying to them."
},
{
"name": "Inspiring",
"description": "As an Action in combat, they may offer a word of inspiration to a comrade, and grant +1D to whatever action the comrade is attempting."
},
{
"name": "Intimidating",
"description": "Gain +1D to rolls made to intimidate and terrify opponents."
},
{
"name": "Mighty",
"description": "The character is a physically powerful specimen. Gain +1D to all Physical skill rolls when attempting feats of strength and athleticism."
},
{
"name": "Runner",
"description": "The character gains +1D when engaging in foot races, sprints over obstacles, or other feats of athletic speed. This Talent does not apply to changing range bands in combat, unless the Referee allows it in specific situations. In cases where exact distances are required, the Runner talent adds 1d6 to the 10m of distance covered with each Move action. The d6 roll is an abstraction to take into account rougher terrain and unforeseen obstacles. If both Move actions are used to run, then the total distance is 20 + 2d6m that round."
},
{
"name": "Status",
"description": "This character has some sort of innate social status or rank that provides privileges. This may include special treatment, or higher level security access. The player and Referee should determine what the source of this status is."
},
{
"name": "Ace Pilot",
"description": "When piloting ships or other vehicles, this character gains +1D to Position rolls."
},
{
"name": "Acrobat",
"description": "The character is a highly trained gymnast and acrobat, and is comfortable operating at great heights. Gain +1D on Physical throws for tumbling, athletics, jumps, and landings."
},
{
"name": "Animal Handling",
"description": "Through training or natural affinity, the character is good with animals, and knows how to care for them. This also extends to riding animals. Gain +1D when dealing with animals, or when making throws to ride animals. This is cumulative with Beast Friendship."
},
{
"name": "Broker",
"description": "You have an expert eye for merchandise and deal making. Gain +1D when rolling to negotiate trade deals and haggle on prices."
},
{
"name": "Commando",
"description": "Commando training covers stealth and sabotage. The character gains +1D when infiltrating enemy positions and when setting explosives to destroy military targets like radar dishes and ammunition depots."
},
{
"name": "Con Artist",
"description": "The character is an accomplished liar, and has developed false identities. Gain +1D when acting as an imposter, or when running a confidence scheme."
},
{
"name": "Contortionism",
"description": "This character is trained in moving their body in very tight confines. The character may throw Physical 10+ to escape from bonds or manacles, or to slip through bars."
},
{
"name": "Demolitions Expert",
"description": "This talent grants the character +1D when setting explosives, carrying out controlled demolition operations of buildings, bridges, and other large structures, and disarming explosives."
},
{
"name": "Detective",
"description": "The character has a trained eye for details and is very familiar with investigative and forensic protocols. Gain +1D when looking for clues or conducting interrogations."
},
{
"name": "Drone Operator",
"description": "Whether a hard-working asteroid miner, a canny salvager, or a combat photographer, this character is a gifted drone operator. They gain +1D whenever they need to perform difficult tasks remotely with drones or other remotely controlled robots."
},
{
"name": "Gambler",
"description": "You know how to play games of chance very well. You also know how to cheat, and how to spot a cheater. Gain +1D for Knowledge throws to win a game. Gain +1D when using the Social skill to cheat, or to spot a cheater."
},
{
"name": "Ghost",
"description": "Whenever the character is attempting to sneak under cover of darkness, smoke, or other obscuring cover, they gain +1D."
},
{
"name": "Hacker",
"description": "Hackers are not just expert programmers. They are gifted improvisers who understand how to build workarounds on the fly, and make computers do their bidding. Gain +1D when attempting to hack a computer system, break encryption, jam sensors, or counter sensor jamming."
},
{
"name": "Intelligence Analyst",
"description": "This character has received specialized training in intelligence gathering and analysis. Whenever they are attempting to make sense of large amounts of data and determining what is actually going on, they gain +1D."
},
{
"name": "Logistics Expert",
"description": "This character has gained expertise in making plans and getting resources to where they have to be, on time. Gain +1D when drawing up plans, negotiating with suppliers, and ensuring that things run smoothly."
},
{
"name": "Medic",
"description": "This character has received enough life-saving medical training to act as a combat medic. They grant characters under their treatment with +1D on rolls on the Triage Table."
},
{
"name": "Professional",
"description": "This character had a well-developed career before becoming a Nomad. They have a non-combat professional background of some kind that might come in useful: administration, law, accounting, or the like. They gain +1D when practicing their profession."
},
{
"name": "Rigger",
"description": "You are an expert at quick battlefield repairs. Gain +1D when attempting to make a spot repair on a vehicle. The repair fail after the battle is over; more extensive repairs will have to be made later on."
},
{
"name": "Scholar",
"description": "Gain +1D when dealing in a specific field of knowledge, such as biology, physics, history, or mathematics. This includes research, experimentation, and drawing conclusions. This Talent can be taken multiple times, each applying to a different field of study."
},
{
"name": "Spacer",
"description": "Some individuals are born in outer space, while others become so acclimated that they could have been born there anyways. This character gains +1D when attempting physical skills in zero-gravity, or whenever they are operating in the vacuum of space."
},
{
"name": "Streetwise",
"description": "The character is wise to the criminal element wherever they find themselves. They gain +1D when attempting to fence stolen goods, find illegal work, or make connections with criminals."
},
{
"name": "Street Thief",
"description": "This character is a practiced petty criminal. Gain +1D whenever attempting to pick pockets, open locks, hotwire vehicles, or when fencing stolen goods."
},
{
"name": "Survivalist",
"description": "Gain +1D when making skill rolls involving wilderness survival, hunting, and overland navigation."
},
{
"name": "Tech Specialist",
"description": "Gain +1D when dealing with a specific technological field of knowledge: electronics, computers, vehicle mechanics, power systems, or weapons systems. This includes repairing devices and designing them."
},
{
"name": "Tinker",
"description": "This character spends all their free time tinkering with everyones gear. Once per game session, each player character gains +1D when using their personal equipment."
},
{
"name": "Untraceable",
"description": "You are especially well-practiced at passing through an area and covering your tracks. Anyone attempting to track you is penalized by -1D to the roll."
}
]

View File

@@ -0,0 +1,114 @@
[
{
"name": "Autocannon, Light",
"tech_age": "Late Mechanical",
"cost": 10000,
"range": "HeavyWeapon",
"damage": "5d6",
"mag": 100,
"ammo_cost": 1000,
"aspects": ["Auto", "AV 3d6+1"],
"description": "This weapon can fire bursts of shells at high rates of fire. It is common to find this mounted on aircraft as a dogfighting weapon, as well as on light armored vehicles as a support weapon for infantry [1]."
},
{
"name": "Autocannon, Heavy",
"tech_age": "Late Mechanical",
"cost": 20000,
"range": "HeavyWeapon",
"damage": "5d6",
"mag": 50,
"ammo_cost": 2000,
"aspects": ["Auto", "AV 3d6+2"],
"description": "A larger version of the light autocannon, often found on light armored vehicles, naval vessels, and ground attack aircraft [1]."
},
{
"name": "Cannon, Light",
"tech_age": "Early Mechanical",
"cost": 15000,
"range": "HeavyWeapon",
"damage": "5d6",
"mag": 40,
"ammo_cost": 2000,
"aspects": ["AV 4d6+1"],
"description": "A multipurpose support weapon usually mounted on a vehicle or gun carriage [1]."
},
{
"name": "Cannon, Heavy",
"tech_age": "Early Mechanical",
"cost": 30000,
"range": "HeavyWeapon",
"damage": "6d6",
"mag": 20,
"ammo_cost": 3000,
"aspects": ["AV 5d6"],
"description": "This cannon is a main battle tanks primary weapon. It is often used as field artillery as well [1]."
},
{
"name": "Heavy Flamer",
"tech_age": "Late Mechanical",
"cost": 1000,
"range": "Rifle",
"damage": "3d6",
"mag": 5,
"ammo_cost": 25,
"aspects": ["AV 2d6", "Fire"],
"description": "A brutal close-in anti-infantry weapon used to flush out fortifications and defend against infantry attack in built-up areas. Vehicles that carry flamethrowers are usually the first to be targeted by enemy infantry [1, 2]."
},
{
"name": "Grenade Launcher",
"tech_age": "Late Mechanical",
"cost": 400,
"range": "Rifle",
"damage": "By gren.",
"mag": 50,
"ammo_cost": null,
"aspects": [],
"description": "A light support weapon mounted on many vehicles. This version has a 50 round belt magazine. Many vehicles mount smoke grenade launchers as defensive weapons [1, 2]."
},
{
"name": "Guided Anti-Tank Missile",
"tech_age": "Early Atomic",
"cost": 4000,
"range": "HeavyWeapon",
"damage": "5d6",
"mag": 4,
"ammo_cost": 200,
"aspects": ["Blast", "AV 5d6"],
"description": "This vehicle mounted version of the portable anti-tank missile launcher has a magazine of four missiles. A system like this is often mounted on a light vehicle to give it significant anti-armor punch [1, 3]."
},
{
"name": "Laser Cannon",
"tech_age": "Early Space",
"cost": 10000,
"range": "HeavyWeapon",
"damage": "5d6",
"mag": 100,
"ammo_cost": 100,
"aspects": ["AV 4d6+2", "Laser"],
"description": "The Early Space Ages replacement for all but the heaviest cannons, this vehicle weapon is highly efficient, and can be recharged from any power grid. This makes it the darling of logistics officers in any military where it is found [1, 3]."
},
{
"name": "Laser, Support",
"tech_age": "Early Space",
"cost": 5000,
"range": "HeavyWeapon",
"damage": "5d6",
"mag": 100,
"ammo_cost": 100,
"aspects": ["AV 3d6+1", "Laser"],
"description": "This vehicle mounted version of the portable support laser lacks auto fire capabilities but has a nearly inexhaustible ammunition supply [3, 4]."
},
{
"name": "Rocket Launcher",
"tech_age": "Early Atomic",
"cost": 2000,
"range": "HeavyWeapon",
"damage": "4d6",
"mag": 1,
"ammo_cost": 150,
"aspects": ["Greater Blast", "AV 3d6"],
"description": "A portable rocket launcher utilizing unguided munitions. Rocket launchers are unsafe to fire in enclosed spaces. Rocket payloads are considered high explosive and are not particularly effective against armored vehicles. Armor piercing rockets cost 500 Credits per rocket: trade the Greater Blast for AV 4d6, Blast. Rocket launchers can also be mounted on vehicles, where they usually have 12 or even 24 shots before requiring reloading [4, 5]."
}
]

View File

@@ -0,0 +1,255 @@
[
{
"name": "Anti-Materiel Rifle",
"tech_age": "Late Mechanical",
"range": "Rifle",
"cost": 1200,
"mag": 5,
"ammo_cost": 100,
"damage": "5d6",
"aspects": ["Scope", "AV 2d6"],
"description": "A rifle that fires re-purposed Heavy Machinegun or light cannon ammunition. Some are used as sniper rifles among elite soldiers."
},
{
"name": "Assault Rifle",
"tech_age": "Early Atomic",
"range": "Assault",
"cost": 300,
"mag": 30,
"ammo_cost": 15,
"damage": "3d6",
"aspects": ["Auto"],
"description": "The standard military weapon on mid-tech worlds. An automatic rifle that fires an intermediate caliber. At the Referee's discretion, its ammunition, or even magazines, may be interchangeable with those of a Carbine."
},
{
"name": "Bow",
"tech_age": "Early Primitive",
"range": "Rifle",
"cost": 60,
"mag": 1,
"ammo_cost": 10,
"damage": "2d6",
"aspects": [],
"description": "These are muscle-powered ranged weapons. Arrows for a bow or bolts for a crossbow are stored in a quiver of 20, which counts as one encumbrance item. A Bow may fire once per Action."
},
{
"name": "Crossbow",
"tech_age": "Late Primitive",
"range": "Rifle",
"cost": 75,
"mag": 1,
"ammo_cost": 10,
"damage": "3d6",
"aspects": [],
"description": "These are muscle-powered ranged weapons. Arrows for a bow or bolts for a crossbow are stored in a quiver of 20, which counts as one encumbrance item. A Crossbow requires 2 actions to reload."
},
{
"name": "Carbine",
"tech_age": "Early Atomic",
"range": "Assault",
"cost": 400,
"mag": 20,
"ammo_cost": 15,
"damage": "3d6",
"aspects": ["Auto"],
"description": "This weapon is popular among vehicle crews and light infantry due to its handiness and light weight. Carbines often fire regular assault rifle ammunition, but some fire pistol ammunition. Carbines count as one encumbrance item."
},
{
"name": "Gyrojet Rifle",
"tech_age": "Early Space",
"range": "Assault",
"cost": 900,
"mag": 20,
"ammo_cost": 15,
"damage": "3d6+2",
"aspects": ["Auto", "Zero-G"],
"description": "Designed for use in zero-G environment, gyrojet weapons fire small, self-propelled rocket rounds. They have minimal recoil and work in vacuum as well."
},
{
"name": "Gyrojet Pistol",
"tech_age": "Early Space",
"range": "Handgun",
"cost": 400,
"mag": 8,
"ammo_cost": 10,
"damage": "2d6+2",
"aspects": ["Zero-G"],
"description": "Designed for use in zero-G environment, gyrojet weapons fire small, self-propelled rocket rounds. They have minimal recoil and work in vacuum as well."
},
{
"name": "Light Machinegun",
"tech_age": "Late Mechanical",
"range": "Rifle",
"cost": 1200,
"mag": 100,
"ammo_cost": 125,
"damage": "3d6",
"aspects": ["Auto", "Bulky"],
"description": "This is the standard mid-tech squad-level support automatic weapon and is typically belt-fed. Light machine guns count as two items for encumbrance purposes."
},
{
"name": "Pulse Rifle",
"tech_age": "Late Space",
"range": "Assault",
"cost": 1000,
"mag": 40,
"ammo_cost": 30,
"damage": "3d6+3",
"aspects": ["Auto"],
"description": "An advanced automatic rifle that fires electrically ignited, caseless, high explosive, armor-piercing rounds. The ultimate in projectile weaponry. The pulse rifle provides a high rate of fire and a large magazine capacity."
},
{
"name": "Revolver",
"tech_age": "Early Mechanical",
"range": "Handgun",
"cost": 150,
"mag": 6,
"ammo_cost": 5,
"damage": "2d6+1",
"aspects": [],
"description": "A simple handgun that uses a manually loaded rotating drum to feed the action. Revolvers are reliable weapons."
},
{
"name": "Rifle",
"tech_age": "Early Mechanical",
"range": "Rifle",
"cost": 500,
"mag": 8,
"ammo_cost": 15,
"damage": "3d6+3",
"aspects": [],
"description": "The standard military firearm on low-tech worlds. Rifles use larger caliber projectiles and are common hunting weapons on the interstellar frontier."
},
{
"name": "Semi-Auto Pistol",
"tech_age": "Late Mechanical",
"range": "Handgun",
"cost": 150,
"mag": 16,
"ammo_cost": 7,
"damage": "2d6",
"aspects": [],
"description": "This is a handgun fed from a magazine. One pull of the trigger fires one bullet. At the Referee's discretion, its ammunition, or even magazines, may be interchangeable with those of a Submachine Gun."
},
{
"name": "Shotgun",
"tech_age": "Early Mechanical",
"range": "Assault",
"cost": 200,
"mag": 6,
"ammo_cost": 10,
"damage": "4d6",
"aspects": ["Scatter."],
"description": "A smoothbore weapon that fires shot pellets capable of hitting multiple targets at once. Shotguns are effective short-ranged weapons, but are not useful beyond Near Range, or against armored targets. These particulate stats represent a pump-action weapon with an internal magazine."
},
{
"name": "Sniper Rifle",
"tech_age": "Late Mechanical",
"range": "Rifle",
"cost": 800,
"mag": 5,
"ammo_cost": 30,
"damage": "3d6+3",
"aspects": ["Scope"],
"description": "This rifle is a higher quality version of the standard rifle, with better optics. It fires higher quality ammunition as well."
},
{
"name": "Stealth Pistol",
"tech_age": "Early Space",
"range": "Handgun",
"cost": 500,
"mag": 6,
"ammo_cost": 20,
"damage": "2d6",
"aspects": [],
"description": "This is an especially light, discreet, and concealable weapon made from advanced polymers. A stealth pistol can also be disguised as more innocuous items, like comms, digital recorders, and so on."
},
{
"name": "Submachine Gun",
"tech_age": "Late Mechanical",
"range": "Assault",
"cost": 500,
"mag": 30,
"ammo_cost": 20,
"damage": "2d6",
"aspects": ["Auto"],
"description": "This is a light automatic weapon that fires pistol rounds. It is intended for close quarters combat and counts as one item for encumbrance purposes."
},
{
"name": "Blaster Pistol",
"tech_age": "Late Interstellar",
"range": "Handgun",
"cost": 5000,
"mag": 20,
"ammo_cost": 100,
"damage": "3d6+2",
"aspects": ["Laser", "AV 1d6"],
"description": "Blasters are advanced laser weapons with greater power and penetration. Their power packs are rechargeable from any major power source, such as a ships power plant [1]."
},
{
"name": "Blaster Rifle",
"tech_age": "Late Interstellar",
"range": "Rifle",
"cost": 10000,
"mag": 50,
"ammo_cost": 500,
"damage": "4d6+3",
"aspects": ["Auto", "Laser", "AV 2d6"],
"description": "Blasters are advanced laser weapons with greater power and penetration. Their power packs are rechargeable from any major power source, such as a ships power plant [1]."
},
{
"name": "Laser Pistol",
"tech_age": "Late Space",
"range": "Handgun",
"cost": 1500,
"mag": 10,
"ammo_cost": 50,
"damage": "3d6",
"aspects": ["Laser"],
"description": "A handgun-sized directed energy weapon. Its power pack is rechargeable from any major power source, such as a ships power plant [1]."
},
{
"name": "Laser Rifle",
"tech_age": "Early Space",
"range": "Rifle",
"cost": 3500,
"mag": 20,
"ammo_cost": 100,
"damage": "4d6",
"aspects": ["Laser", "AV 1d6"],
"description": "A long-range version of the laser pistol, with better armor penetration, range, and even light anti-vehicular capabilities [1]."
},
{
"name": "Plasma Rifle",
"tech_age": "Early Galactic",
"range": "Rifle",
"cost": 15000,
"mag": 10,
"ammo_cost": 500,
"damage": "6d6",
"aspects": ["Fire", "AV 3d6"],
"description": "The ultimate small arms, using miniaturized plasma gun technology to propel magnetically shaped pockets of super-hot ionized plasma at its targets [1]."
},
{
"name": "Plasma Pistol",
"tech_age": "Late Galactic",
"range": "Handgun",
"cost": 10000,
"mag": 6,
"ammo_cost": 200,
"damage": "5d6",
"aspects": ["Fire", "AV 3d6"],
"description": "The ultimate small arms, using miniaturized plasma gun technology to propel magnetically shaped pockets of super-hot ionized plasma at its targets [1]."
},
{
"name": "Stunner",
"tech_age": "Early Interstellar",
"range": "Assault",
"cost": 600,
"mag": 10,
"ammo_cost": 10,
"damage": "3d6+1",
"aspects": ["Stun", "Zero-G"],
"description": "Firing a precise electromagnetic pulse, this non-lethal weapon disrupts the target's neural processes, leading to incapacitation and potentially unconsciousness. The stunner counts as one item for encumbrance purposes [2]."
}
]

View File

@@ -0,0 +1,123 @@
[
{
"name": "Anti-Aircraft Rocket Launcher",
"tech_age": "Early Atomic",
"range": "HeavyWeapon",
"cost": 10000,
"mag": 1,
"ammo_cost": 500,
"damage": "4d6",
"aspects": ["AV 3d6"],
"description": "This is a portable anti-air defense system designed to shoot down enemy aircraft with a self-guided rocket. It is not particularly effective against armored vehicles: reduce AV dice to 2d6."
},
{
"name": "Disposable Anti-Vehicle Rocket",
"tech_age": "Late Mechanical",
"range": "Assault",
"cost": 200,
"mag": 1,
"ammo_cost": null,
"damage": "4d6",
"aspects": ["Blast", "Bulky", "AV 4d6"],
"description": "A cheap, single-use, portable rocket launcher. These are often the only anti-tank weapons available to infantry. Note that this weapon cannot make attacks at Close range, despite using the Assault weapon range modifiers."
},
{
"name": "Flamer",
"tech_age": "Late Mech.",
"range": "Assault",
"cost": 1000,
"mag": 5,
"ammo_cost": 25,
"damage": "3d6",
"aspects": ["Bulky", "Fire"],
"description": "These terrifying weapons spew a stream of fire 3m wide at its far end. All targets within this cone suffer damage and catch fire (see the Environmental Hazards rules). The tank for the flamethrower itself holds enough fuel for five full attacks and counts as two items for encumbrance."
},
{
"name": "General Purpose Machinegun",
"tech_age": "Late Mechanical",
"range": "Rifle",
"cost": 1500,
"mag": 100,
"ammo_cost": 150,
"damage": "3d6+3",
"aspects": ["Auto", "Bulky", "AV 2d6"],
"description": "A belt-fed medium machine gun. These are often mounted on vehicles but are also portable, although they are 3 items of encumbrance. Usually they are crew-served."
},
{
"name": "Grav Launcher",
"tech_age": "Late Interstellar",
"range": "HeavyWeapon",
"cost": 20000,
"mag": 1,
"ammo_cost": 100,
"damage": "6d6",
"aspects": ["Greater Blast", "Bulky", "Fire", "AV 5d6"],
"description": "Advanced micro-gravitic technology allows this weapon to guide a floating plasma bomb to its target without having to account for ballistic trajectories or inertia. Once launched, the bomb travels 50m per combat round. Its operator can move it in any direction and can also stop it and have it hover in mid-air. Detonation is on command. The bomb's internal battery allows for 10 rounds of gravitic flight."
},
{
"name": "Guided Anti-Tank Missile",
"tech_age": "Early Atomic",
"range": "HeavyWeapon",
"cost": 4000,
"mag": 1,
"ammo_cost": 200,
"damage": "5d6",
"aspects": ["Blast", "AV 5d6"],
"description": "This is a portable guided missile system, like the older AT-3 Sagger, or present-day Javelin and Eryx systems. These weapons must be fired from a fixed stationary position. However, the gunner need not be adjacent to the missiles firing position."
},
{
"name": "Heavy Machinegun",
"tech_age": "Early Mechanical",
"range": "HeavyWeapon",
"cost": 2000,
"mag": 100,
"ammo_cost": 200,
"damage": "5d6",
"aspects": [],
"description": "This is the largest portable support weapon in the Mechanical and Atomic ages. These weapons are usually mounted on vehicles but can be mounted on fixed tripods. If they are carried, they count as four items of encumbrance and each ammo pack is two items of encumbrance."
},
{
"name": "Plasma Gun",
"tech_age": "Late Interstellar",
"range": "Rifle",
"cost": 20000,
"mag": 40,
"ammo_cost": 2500,
"damage": "6d6",
"aspects": ["Bulky", "Fire", "AV 5d6"],
"description": "A high-energy, anti-vehicular, portable weapon firing magnetically contained plasma bolts. It requires a backpack-mounted, rechargeable power pack that counts as two Items for encumbrance purposes."
},
{
"name": "Rocket Launcher",
"tech_age": "Early Atomic",
"range": "HeavyWeapon",
"cost": 2000,
"mag": 1,
"ammo_cost": 150,
"damage": "4d6",
"aspects": ["Greater Blast", "Bulky", "AV 3d6"],
"description": "A portable rocket launcher utilizing unguided munitions. Rocket launchers are unsafe to fire in enclosed spaces. Rocket payloads are considered high explosive and are not particularly effective against armored vehicles. Armor piercing rockets cost 500 Credits per rocket: trade the Greater Blast for AV 4d6, Blast. Rocket launchers can also be mounted on vehicles, where they usually have 12 or even 24 shots before requiring reloading."
},
{
"name": "Support Laser",
"tech_age": "Early Space",
"range": "HeavyWeapon",
"cost": 5000,
"mag": 20,
"ammo_cost": 200,
"damage": "5d6",
"aspects": ["Bulky", "AV 3d6+1"],
"description": "This is a heavy directed-energy portable weapon for fire support and light anti-vehicular duties. Its backpack mounted power pack counts as two Items for encumbrance purposes."
},
{
"name": "Under-barrel Grenade Launcher",
"tech_age": "Early Atomic",
"range": "Rifle",
"cost": 1000,
"mag": 1,
"ammo_cost": null,
"damage": "By gren.",
"aspects": [],
"description": "This weapon greatly increases the firepower of an infantry team. The under-barrel grenade launcher can be mounted under most two-handed firearms in the Early Atomic Age or later. It is not Bulky and can fire a single grenade before reloading. In the Late Space Age, the weapon has a 3-shot magazine."
}
]

View File

@@ -0,0 +1,105 @@
[
{
"cost": 25,
"damage": "2d6+1",
"description": "A one-handed ax made from metal or stone, anything from a stone-age tool through a medieval war ax to a modern fire ax [1].",
"name": "Axe",
"tech_age": "Early Primitive",
"aspects": [
"Throwable"
]
},
{
"cost": 300,
"damage": "3d6+1",
"description": "A large two-handed sword that counts as 2 items for encumbrance purposes. A two-handed Great-Axe uses the same stats [1].",
"name": "Greatsword or Great-Axe",
"tech_age": "Late Primitive",
"aspects": [
"Bulky",
"Two-Handed"
]
},
{
"cost": 10,
"damage": "2d6",
"description": "A straight, short knife [1].",
"name": "Dagger",
"tech_age": "Early Primitive",
"aspects": [
"Throwable"
]
},
{
"cost": 50,
"damage": "2d6+1",
"description": "A simple yet sturdy broad blade used for cutting foliage and foes alike [1].",
"name": "Machete",
"tech_age": "Late Primitive",
"aspects": []
},
{
"cost": 500,
"damage": "1d6",
"description": "This slavers weapon consists of a stocky handle connected to a flexible strap. Each attack causes stun damage. Additionally, any target hit must roll Physical or fall to the ground, incapacitated for 2d6 combat rounds due to nightmarish pain. It also causes 1d6 physical damage per hit. The neural whip is ineffective against anyone in armor [1, 2].",
"name": "Neural Whip",
"tech_age": "Late Interstellar",
"aspects": [
"Stun"
]
},
{
"cost": 20,
"damage": "1d6+1",
"description": "A personal shield, primarily used to protect its wielder by providing a -1D penalty against melee attacks. Anyone carrying a shield can penalize a number of enemy attacks per round equal to their Combat skill -1, with a minimum of 1 [2].",
"name": "Shield",
"tech_age": "Early Primitive",
"aspects": []
},
{
"cost": 15,
"damage": "3d6",
"description": "This weapon comes in all types of construction, from a sharpened shaft to a metal-tipped spear. Regardless of how it was made, a spear is a basic, effective, melee weapon [3].",
"name": "Spear",
"tech_age": "Early Primitive",
"aspects": [
"Throwable"
]
},
{
"cost": 10,
"damage": "1d6+2",
"description": "A long wooden shaft used as a bludgeon, sometimes with metal fittings. It must be used with two hands [3].",
"name": "Staff",
"tech_age": "Early Primitive",
"aspects": [
"Two-Handed"
]
},
{
"cost": 300,
"damage": "2d6",
"description": "A high-tech anti-riot weapon. The stun prod augments the basic batons blunt force with an electric charge capable of stunning opponents [3].",
"name": "Stun Prod",
"tech_age": "Early Space",
"aspects": [
"Stun"
]
},
{
"cost": 150,
"damage": "3d6",
"description": "One of any variety of medium-sized one-handed blades, including the gladius, cutlass, longsword, and katana [3].",
"name": "Sword",
"tech_age": "Late Primitive",
"aspects": []
},
{
"cost": 1000,
"damage": "3d6+2",
"description": "An intermediate-sized, one-handed, bladed weapon that uses hypersonic micro-vibrations in the blade to create a deadly cutting edge [4].",
"name": "Vibroblade",
"tech_age": "Early Interstellar",
"aspects": []
}
]

View File

@@ -21,6 +21,10 @@
--color-critical-failure: #8d20e7;
/*--img-icon-color-filter: invert(60%) sepia(12%) saturate(6853%) hue-rotate(81deg) brightness(113%) contrast(104%);*/
}
body {
--color-text-secondary: #160303;
--color-text-emphatic: #09610e;
}
.d100 {
width: 18px;
height: 18px;
@@ -93,6 +97,18 @@ i.fvtt-ftl-nomad {
.fvtt-ftl-nomad .item-sheet-common .form-fields {
padding-top: 4px;
}
.fvtt-ftl-nomad .item-sheet-common .form-group {
display: flex;
flex-direction: row;
align-items: center;
margin-bottom: 4px;
}
.fvtt-ftl-nomad .item-sheet-common .form-group label {
font-weight: bold;
margin-right: 8px;
min-width: 12rem;
max-width: 12rem;
}
.fvtt-ftl-nomad .item-sheet-common label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@@ -2087,6 +2103,18 @@ i.fvtt-ftl-nomad {
.fvtt-ftl-nomad .weapon-content .form-fields {
padding-top: 4px;
}
.fvtt-ftl-nomad .weapon-content .form-group {
display: flex;
flex-direction: row;
align-items: center;
margin-bottom: 4px;
}
.fvtt-ftl-nomad .weapon-content .form-group label {
font-weight: bold;
margin-right: 8px;
min-width: 12rem;
max-width: 12rem;
}
.fvtt-ftl-nomad .weapon-content label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@@ -2170,6 +2198,18 @@ i.fvtt-ftl-nomad {
.fvtt-ftl-nomad .armor-content .form-fields {
padding-top: 4px;
}
.fvtt-ftl-nomad .armor-content .form-group {
display: flex;
flex-direction: row;
align-items: center;
margin-bottom: 4px;
}
.fvtt-ftl-nomad .armor-content .form-group label {
font-weight: bold;
margin-right: 8px;
min-width: 12rem;
max-width: 12rem;
}
.fvtt-ftl-nomad .armor-content label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@@ -2253,6 +2293,18 @@ i.fvtt-ftl-nomad {
.fvtt-ftl-nomad .equipment-content .form-fields {
padding-top: 4px;
}
.fvtt-ftl-nomad .equipment-content .form-group {
display: flex;
flex-direction: row;
align-items: center;
margin-bottom: 4px;
}
.fvtt-ftl-nomad .equipment-content .form-group label {
font-weight: bold;
margin-right: 8px;
min-width: 12rem;
max-width: 12rem;
}
.fvtt-ftl-nomad .equipment-content label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@@ -2336,6 +2388,18 @@ i.fvtt-ftl-nomad {
.fvtt-ftl-nomad .implant-content .form-fields {
padding-top: 4px;
}
.fvtt-ftl-nomad .implant-content .form-group {
display: flex;
flex-direction: row;
align-items: center;
margin-bottom: 4px;
}
.fvtt-ftl-nomad .implant-content .form-group label {
font-weight: bold;
margin-right: 8px;
min-width: 12rem;
max-width: 12rem;
}
.fvtt-ftl-nomad .implant-content label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@@ -2419,6 +2483,18 @@ i.fvtt-ftl-nomad {
.fvtt-ftl-nomad .language-content .form-fields {
padding-top: 4px;
}
.fvtt-ftl-nomad .language-content .form-group {
display: flex;
flex-direction: row;
align-items: center;
margin-bottom: 4px;
}
.fvtt-ftl-nomad .language-content .form-group label {
font-weight: bold;
margin-right: 8px;
min-width: 12rem;
max-width: 12rem;
}
.fvtt-ftl-nomad .language-content label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@@ -2502,6 +2578,18 @@ i.fvtt-ftl-nomad {
.fvtt-ftl-nomad .psionic-content .form-fields {
padding-top: 4px;
}
.fvtt-ftl-nomad .psionic-content .form-group {
display: flex;
flex-direction: row;
align-items: center;
margin-bottom: 4px;
}
.fvtt-ftl-nomad .psionic-content .form-group label {
font-weight: bold;
margin-right: 8px;
min-width: 12rem;
max-width: 12rem;
}
.fvtt-ftl-nomad .psionic-content label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@@ -2585,6 +2673,18 @@ i.fvtt-ftl-nomad {
.fvtt-ftl-nomad .talent-content .form-fields {
padding-top: 4px;
}
.fvtt-ftl-nomad .talent-content .form-group {
display: flex;
flex-direction: row;
align-items: center;
margin-bottom: 4px;
}
.fvtt-ftl-nomad .talent-content .form-group label {
font-weight: bold;
margin-right: 8px;
min-width: 12rem;
max-width: 12rem;
}
.fvtt-ftl-nomad .talent-content label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@@ -2668,6 +2768,18 @@ i.fvtt-ftl-nomad {
.fvtt-ftl-nomad .creature-trait-content .form-fields {
padding-top: 4px;
}
.fvtt-ftl-nomad .creature-trait-content .form-group {
display: flex;
flex-direction: row;
align-items: center;
margin-bottom: 4px;
}
.fvtt-ftl-nomad .creature-trait-content .form-group label {
font-weight: bold;
margin-right: 8px;
min-width: 12rem;
max-width: 12rem;
}
.fvtt-ftl-nomad .creature-trait-content label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@@ -2751,6 +2863,18 @@ i.fvtt-ftl-nomad {
.fvtt-ftl-nomad .creature-ability-content .form-fields {
padding-top: 4px;
}
.fvtt-ftl-nomad .creature-ability-content .form-group {
display: flex;
flex-direction: row;
align-items: center;
margin-bottom: 4px;
}
.fvtt-ftl-nomad .creature-ability-content .form-group label {
font-weight: bold;
margin-right: 8px;
min-width: 12rem;
max-width: 12rem;
}
.fvtt-ftl-nomad .creature-ability-content label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1);
@@ -2791,17 +2915,17 @@ i.fvtt-ftl-nomad {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1.1);
}
.application.dialog.fvtt-cthulhu-eternal {
.application.dialog.fvtt-ftl-nomad {
color: var(--color-dark-1);
background-color: var(--color-light-1);
}
.application.dialog.fvtt-cthulhu-eternal button {
.application.dialog.fvtt-ftl-nomad button {
background-image: none;
background-color: var(--color-dark-6);
color: var(--color-light-1);
}
.application.dialog.fvtt-cthulhu-eternal input,
.application.dialog.fvtt-cthulhu-eternal select {
.application.dialog.fvtt-ftl-nomad input,
.application.dialog.fvtt-ftl-nomad select {
background-color: rgba(0, 0, 0, 0.1);
border-color: var(--color-dark-6);
color: var(--color-dark-2);

View File

@@ -28,6 +28,7 @@ Hooks.once("init", function () {
applications,
models,
documents,
utils: FTLNomadUtils,
}
CONFIG.Actor.documentClass = documents.FTLNomadActor
@@ -52,22 +53,22 @@ Hooks.once("init", function () {
}
// Register sheet application classes
Actors.unregisterSheet("core", ActorSheet)
Actors.registerSheet("fvtt-ftl-nomad", applications.FTLNomadCharacterSheet , { types: ["character"], makeDefault: true })
Actors.registerSheet("fvtt-ftl-nomad", applications.FTLNomadVehicleSheet, { types: ["vehicle"], makeDefault: true })
Actors.registerSheet("fvtt-ftl-nomad", applications.FTLNomadCreatureSheet, { types: ["creature"], makeDefault: true })
Actors.registerSheet("fvtt-ftl-nomad", applications.FTLNomadStarshipSheet, { types: ["starship"], makeDefault: true })
foundry.documents.collections.Actors.unregisterSheet("core", foundry.appv1.sheets.ActorSheet)
foundry.documents.collections.Actors.registerSheet("fvtt-ftl-nomad", applications.FTLNomadCharacterSheet , { types: ["character"], makeDefault: true })
foundry.documents.collections.Actors.registerSheet("fvtt-ftl-nomad", applications.FTLNomadVehicleSheet, { types: ["vehicle"], makeDefault: true })
foundry.documents.collections.Actors.registerSheet("fvtt-ftl-nomad", applications.FTLNomadCreatureSheet, { types: ["creature"], makeDefault: true })
foundry.documents.collections.Actors.registerSheet("fvtt-ftl-nomad", applications.FTLNomadStarshipSheet, { types: ["starship"], makeDefault: true })
Items.unregisterSheet("core", ItemSheet)
Items.registerSheet("fvtt-ftl-nomad", applications.FTLNomadPsionicSheet, { types: ["psionic"], makeDefault: true })
Items.registerSheet("fvtt-ftl-nomad", applications.FTLNomadTalentSheet, { types: ["talent"], makeDefault: true })
Items.registerSheet("fvtt-ftl-nomad", applications.FTLNomadLanguageSheet, { types: ["language"], makeDefault: true })
Items.registerSheet("fvtt-ftl-nomad", applications.FTLNomadWeaponSheet, { types: ["weapon"], makeDefault: true })
Items.registerSheet("fvtt-ftl-nomad", applications.FTLNomadArmorSheet, { types: ["armor"], makeDefault: true })
Items.registerSheet("fvtt-ftl-nomad", applications.FTLNomadEquipmentSheet, { types: ["equipment"], makeDefault: true })
Items.registerSheet("fvtt-ftl-nomad", applications.FTLNomadImplantSheet, { types: ["implant"], makeDefault: true })
Items.registerSheet("fvtt-ftl-nomad", applications.FTLNomadCreatureTraitSheet, { types: ["creature-trait"], makeDefault: true })
Items.registerSheet("fvtt-ftl-nomad", applications.FTLNomadCreatureAbilitySheet, { types: ["creature-ability"], makeDefault: true })
foundry.documents.collections.Items.unregisterSheet("core", foundry.appv1.sheets.ItemSheet)
foundry.documents.collections.Items.registerSheet("fvtt-ftl-nomad", applications.FTLNomadPsionicSheet, { types: ["psionic"], makeDefault: true })
foundry.documents.collections.Items.registerSheet("fvtt-ftl-nomad", applications.FTLNomadTalentSheet, { types: ["talent"], makeDefault: true })
foundry.documents.collections.Items.registerSheet("fvtt-ftl-nomad", applications.FTLNomadLanguageSheet, { types: ["language"], makeDefault: true })
foundry.documents.collections.Items.registerSheet("fvtt-ftl-nomad", applications.FTLNomadWeaponSheet, { types: ["weapon"], makeDefault: true })
foundry.documents.collections.Items.registerSheet("fvtt-ftl-nomad", applications.FTLNomadArmorSheet, { types: ["armor"], makeDefault: true })
foundry.documents.collections.Items.registerSheet("fvtt-ftl-nomad", applications.FTLNomadEquipmentSheet, { types: ["equipment"], makeDefault: true })
foundry.documents.collections.Items.registerSheet("fvtt-ftl-nomad", applications.FTLNomadImplantSheet, { types: ["implant"], makeDefault: true })
foundry.documents.collections.Items.registerSheet("fvtt-ftl-nomad", applications.FTLNomadCreatureTraitSheet, { types: ["creature-trait"], makeDefault: true })
foundry.documents.collections.Items.registerSheet("fvtt-ftl-nomad", applications.FTLNomadCreatureAbilitySheet, { types: ["creature-ability"], makeDefault: true })
// Other Document Configuration
CONFIG.ChatMessage.documentClass = documents.FTLNomadChatMessage
@@ -88,7 +89,7 @@ Hooks.once("init", function () {
FTLNomadUtils.registerSettings()
FTLNomadUtils.registerHandlebarsHelpers()
console.info("FTL Nomad | System Initialized")
})
@@ -115,7 +116,7 @@ Hooks.once("ready", function () {
})
Hooks.on("renderChatMessage", (message, html, data) => {
Hooks.on("renderChatMessageHTML", (message, html, data) => {
})

View File

@@ -100,7 +100,7 @@
},
"rank": {
"label": "Rank",
"experienced": {
"experienced": {
"label": "Experienced"
},
"expert": {
@@ -330,6 +330,9 @@
"enc": {
"label": "Enc"
},
"loss": {
"label": "Loss"
},
"techAge": {
"label": "Tech Age"
}
@@ -339,7 +342,7 @@
"damages": "Damages",
"modifications": "Modifications",
"abilities": "Abilities",
"Details": "Details",
"Details": "Details",
"traits": "Traits",
"capacity" : "Capacity",
"Agility" : "Agility",
@@ -398,7 +401,7 @@
"newLanguage": "New Language",
"newPsionic": "New Psionic",
"newCreatureAbility": "New Creature Ability",
"newCreatureTrait": "New Creature Trait",
"newCreatureTrait": "New Creature Trait",
"notes": "Notes",
"psionics": "Psionics",
"rollView": "Roll View",
@@ -408,7 +411,7 @@
"status": "Status",
"success": "Success",
"talents": "Talents",
"implants": "Implants",
"implants": "Implants",
"targetScore": "Target Score",
"titleSkill": "Skill Roll",
"titleWeapon": "Weapon Roll",
@@ -485,7 +488,7 @@
"Scout": "Scout",
"Picket": "Picket",
"Destroyer": "Destroyer",
"Cruiser": "Cruiser",
"Cruiser": "Cruiser",
"Battleship": "Battleship",
"Carrier": "Carrier"
},
@@ -614,6 +617,9 @@
"damage": {
"label": "Damage"
},
"aspect": {
"label": "Aspect"
},
"description": {
"label": "Description"
},

View File

@@ -22,7 +22,7 @@ export default class FTLNomadArmorSheet extends FTLNomadItemSheet {
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context
}

View File

@@ -66,8 +66,8 @@ export default class FTLNomadActorSheet extends HandlebarsApplicationMixin(found
actor: this.document,
system: this.document.system,
source: this.document.toObject(),
isEncumbered: this.document.system.isEncumbered(),
enrichedDescription: await TextEditor.enrichHTML(this.document.system.description, { async: true }),
isEncumbered: this.document.system.isEncumbered(),
enrichedDescription: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true }),
isEditMode: this.isEditMode,
isPlayMode: this.isPlayMode,
isEditable: this.isEditable,
@@ -99,7 +99,7 @@ export default class FTLNomadActorSheet extends HandlebarsApplicationMixin(found
dragover: this._onDragOver.bind(this),
drop: this._onDrop.bind(this),
}
return new DragDrop(d)
return new foundry.applications.ux.DragDrop.implementation(d)
})
}
@@ -140,7 +140,7 @@ export default class FTLNomadActorSheet extends HandlebarsApplicationMixin(found
_onDragOver(event) {}
async _onDropItem(item) {
console.log("Dropped item", item)
console.log("Dropped item", item)
let itemData = item.toObject()
await this.document.createEmbeddedDocuments("Item", [itemData], { renderSheet: false })
}

View File

@@ -64,7 +64,7 @@ export default class FTLNomadItemSheet extends HandlebarsApplicationMixin(foundr
item: this.document,
system: this.document.system,
source: this.document.toObject(),
enrichedDescription: await TextEditor.enrichHTML(this.document.system.description, { async: true }),
enrichedDescription: await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true }),
isEditMode: this.isEditMode,
isPlayMode: this.isPlayMode,
isEditable: this.isEditable,
@@ -94,7 +94,7 @@ export default class FTLNomadItemSheet extends HandlebarsApplicationMixin(foundr
dragover: this._onDragOver.bind(this),
drop: this._onDrop.bind(this),
}
return new DragDrop(d)
return new foundry.applications.ux.DragDrop.implementation(d)
})
}

View File

@@ -69,8 +69,8 @@ export default class FTLNomadCharacterSheet extends FTLNomadActorSheet {
const context = await super._prepareContext()
context.tabs = this.#getTabs()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedNotes = await TextEditor.enrichHTML(this.document.system.notes, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
context.enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.notes, { async: true })
return context
}
@@ -103,8 +103,8 @@ export default class FTLNomadCharacterSheet extends FTLNomadActorSheet {
break
case "biography":
context.tab = context.tabs.biography
context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true })
context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(doc.system.description, { async: true })
context.enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(doc.system.notes, { async: true })
break
}
return context
@@ -138,7 +138,7 @@ export default class FTLNomadCharacterSheet extends FTLNomadActorSheet {
static #onCreateLanguage(event, target) {
this.document.createEmbeddedDocuments("Item", [{ name: game.i18n.localize("FTLNOMAD.Label.newLanguage"), type: "language" }])
}
/**
* Handles the roll action triggered by user interaction.

View File

@@ -22,7 +22,7 @@ export default class FTLNomadCreatureAbilitySheet extends FTLNomadItemSheet {
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context
}
}

View File

@@ -59,8 +59,8 @@ export default class FTLNomadCreatureSheet extends FTLNomadActorSheet {
const context = await super._prepareContext()
context.tabs = this.#getTabs()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedNotes = await TextEditor.enrichHTML(this.document.system.notes, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
context.enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.notes, { async: true })
return context
}
@@ -80,8 +80,8 @@ export default class FTLNomadCreatureSheet extends FTLNomadActorSheet {
break
case "biography":
context.tab = context.tabs.biography
context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true })
context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(doc.system.description, { async: true })
context.enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(doc.system.notes, { async: true })
break
}
return context

View File

@@ -22,7 +22,7 @@ export default class FTLNomadCreatureTraitSheet extends FTLNomadItemSheet {
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context
}
}

View File

@@ -22,7 +22,7 @@ export default class FTLNomadEquipmentSheet extends FTLNomadItemSheet {
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context
}
}

View File

@@ -22,7 +22,7 @@ export default class FTLNomadLanguageSheet extends FTLNomadItemSheet {
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context
}
}

View File

@@ -22,7 +22,7 @@ export default class FTLNomadPsionicSheet extends FTLNomadItemSheet {
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context
}
}

View File

@@ -32,7 +32,7 @@ export default class FTLNomadStarshipSheet extends FTLNomadActorSheet {
tabGroups = {
sheet: "description",
}
/**
* Prepare an array of form header tabs.
* @returns {Record<string, Partial<ApplicationTab>>}
@@ -53,10 +53,10 @@ export default class FTLNomadStarshipSheet extends FTLNomadActorSheet {
const context = await super._prepareContext()
context.tabs = this.#getTabs()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedNotes = await TextEditor.enrichHTML(this.document.system.notes, { async: true })
context.enrichedModifications = await TextEditor.enrichHTML(this.document.system.modifications, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
context.enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.notes, { async: true })
context.enrichedModifications = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.modifications, { async: true })
return context
}
@@ -71,8 +71,8 @@ export default class FTLNomadStarshipSheet extends FTLNomadActorSheet {
break
case "description":
context.tab = context.tabs.description
context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true })
context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(doc.system.description, { async: true })
context.enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(doc.system.notes, { async: true })
break
}
return context

View File

@@ -22,7 +22,7 @@ export default class FTLNomadTalentSheet extends FTLNomadItemSheet {
/** @override */
async _prepareContext() {
const context = await super._prepareContext()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
return context
}
}

View File

@@ -37,7 +37,7 @@ export default class FTLNomadVehicleSheet extends FTLNomadActorSheet {
tabGroups = {
sheet: "equipment",
}
/**
* Prepare an array of form header tabs.
* @returns {Record<string, Partial<ApplicationTab>>}
@@ -59,9 +59,9 @@ export default class FTLNomadVehicleSheet extends FTLNomadActorSheet {
const context = await super._prepareContext()
context.tabs = this.#getTabs()
context.enrichedDescription = await TextEditor.enrichHTML(this.document.system.description, { async: true })
context.enrichedNotes = await TextEditor.enrichHTML(this.document.system.notes, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.description, { async: true })
context.enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(this.document.system.notes, { async: true })
return context
}
@@ -80,11 +80,11 @@ export default class FTLNomadVehicleSheet extends FTLNomadActorSheet {
context.weapons.sort((a, b) => a.name.localeCompare(b.name))
context.equipments = doc.itemTypes.equipment
context.equipments.sort((a, b) => a.name.localeCompare(b.name))
break
break
case "description":
context.tab = context.tabs.description
context.enrichedDescription = await TextEditor.enrichHTML(doc.system.description, { async: true })
context.enrichedNotes = await TextEditor.enrichHTML(doc.system.notes, { async: true })
context.enrichedDescription = await foundry.applications.ux.TextEditor.implementation.enrichHTML(doc.system.description, { async: true })
context.enrichedNotes = await foundry.applications.ux.TextEditor.implementation.enrichHTML(doc.system.notes, { async: true })
break
}
return context

View File

@@ -63,7 +63,7 @@ export default class FTLNomadRoll extends Roll {
static updateFullFormula(options) {
let fullFormula
if ( options.numericModifier >= 0) {
fullFormula = `${options.formula} + ${options.rollItem.value} + ${options.numericModifier}D`
fullFormula = `${options.formula} + ${options.rollItem.value} + ${options.numericModifier}D`
} else {
fullFormula = `${options.formula} + ${options.rollItem.value} - ${Math.abs(options.numericModifier)}D`
}
@@ -100,7 +100,7 @@ export default class FTLNomadRoll extends Roll {
});
return
case "weapon":
let actor = game.actors.get(options.actorId)
let actor = game.actors.get(options.actorId)
options.weapon = foundry.utils.duplicate(options.rollItem)
options.rollItem = actor.system.skills.combat
break
@@ -108,7 +108,7 @@ export default class FTLNomadRoll extends Roll {
break
}
const rollModes = Object.fromEntries(Object.entries(CONFIG.Dice.rollModes).map(([key, value]) => [key, game.i18n.localize(value)]))
const rollModes = foundry.utils.duplicate(CONFIG.Dice.rollModes)
const fieldRollMode = new foundry.data.fields.StringField({
choices: rollModes,
blank: false,
@@ -125,7 +125,7 @@ export default class FTLNomadRoll extends Roll {
choiceRangeModifier[key] = { label: `${key} (${value}D)`, value: value }
if (!rangeModifier && value) {
rangeModifier = value
}
}
}
}
@@ -160,7 +160,7 @@ export default class FTLNomadRoll extends Roll {
hasTarget: options.hasTarget,
modifier,
}
const content = await renderTemplate("systems/fvtt-ftl-nomad/templates/roll-dialog.hbs", dialogContext)
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-ftl-nomad/templates/roll-dialog.hbs", dialogContext)
const title = FTLNomadRoll.createTitle(options.rollType, options.rollTarget)
const label = game.i18n.localize("FTLNOMAD.Roll.roll")
@@ -215,7 +215,7 @@ export default class FTLNomadRoll extends Roll {
rollData.targetScore = 8
if (Hooks.call("fvtt-ftl-nomad.preRoll", options, rollData) === false) return
let diceFormula = `${2+Math.abs(options.numericModifier)}D6`
if ( options.numericModifier > 0 ) {
diceFormula += `kh2 + ${options.rollItem.value}`
@@ -239,12 +239,12 @@ export default class FTLNomadRoll extends Roll {
let resultType = "failure"
if (this.total >= 8) {
resultType = "success"
// Detect if decimal == unit in the dire total result
// Detect if decimal == unit in the dire total result
}
this.options.resultType = resultType
this.options.isSuccess = resultType === "success"
this.options.isFailure = resultType === "failure"
this.options.isSuccess = resultType === "success"
this.options.isFailure = resultType === "failure"
this.options.isEncumbered = rollData.isEncumbered
this.options.rollData = foundry.utils.duplicate(rollData)
}
@@ -270,7 +270,7 @@ export default class FTLNomadRoll extends Roll {
/** @override */
async render(chatOptions = {}) {
let chatData = await this._getChatCardData(chatOptions.isPrivate)
return await renderTemplate(this.constructor.CHAT_TEMPLATE, chatData)
return await foundry.applications.handlebars.renderTemplate(this.constructor.CHAT_TEMPLATE, chatData)
}
/**

View File

@@ -7,11 +7,12 @@ export default class FTLNomadImplant extends foundry.abstract.TypeDataModel {
const requiredInteger = { required: true, nullable: false, integer: true }
schema.description = new fields.HTMLField({ required: true, textSearch: true })
schema.techAge = new fields.StringField({ required: true, choices: SYSTEM.TECH_AGES, initial : "lateatomic" })
schema.enc = new fields.NumberField({ ...requiredInteger, required: true, initial: 0, min: 0 })
schema.cost = new fields.NumberField({ required: true, initial: 0, min: 0 })
schema.loss = new fields.NumberField({ required: true, initial: 0, min: 0 })
return schema
}

View File

@@ -195,4 +195,352 @@ export default class FTLNomadUtils {
document.documentElement.style.setProperty('--background-image-base', `linear-gradient(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)), url("../assets/ui/${era}_background_main.webp")`);
}
static getTechAgeKeyFromLabel(label) {
return Object.keys(SYSTEM.TECH_AGES).find(key => game.i18n.localize(SYSTEM.TECH_AGES[key].label) === label);
}
static async importPsionics() {
// Create a psionics folder if it doesn't exist
const psionicsFolder = game.folders.getName("Psionics") || await Folder.create({
name: "Psionics", type: "Item"
})
if (!psionicsFolder) {
console.error("Failed to create Psionics folder");
return;
}
// Load the psionics JSON file
const psionicsData = await fetch("systems/fvtt-ftl-nomad/assets/json_data/psionics.json")
.then(response => response.json())
.catch(error => {
console.error("Failed to load psionics data:", error);
return [];
});
// Import each psionic ability
for (const psionic of psionicsData) {
// Check if the psionic already exists
const existingPsionic = game.items.find(i => i.name === psionic.name && i.type === "psionic");
if (existingPsionic) {
console.warn(`Psionic ${psionic.name} already exists, skipping import.`);
continue;
}
// Create the psionic item
await Item.create({
name: psionic.name,
type: "psionic",
img: "systems/fvtt-ftl-nomad/assets/icons/icon_psionic.svg",
system: {
description: psionic.description,
},
folder: psionicsFolder.id
});
}
}
static async importTalents() {
// Create a talents folder if it doesn't exist
const talentsFolder = game.folders.getName("Talents") || await Folder.create({
name: "Talents", type: "Item"
})
if (!talentsFolder) {
console.error("Failed to create Talents folder");
return;
}
// Load the talents JSON file
const talentsData = await fetch("systems/fvtt-ftl-nomad/assets/json_data/talents.json")
.then(response => response.json())
.catch(error => {
console.error("Failed to load talents data:", error);
return [];
});
// Import each talent
for (const talent of talentsData) {
// Check if the talent already exists
const existingTalent = game.items.find(i => i.name === talent.name && i.type === "talent");
if (existingTalent) {
console.warn(`Talent ${talent.name} already exists, skipping import.`);
continue;
}
talent.advantage = false;
if (talent.description.includes(" +1D")) {
talent.advantage = true
}
// Create the talent item
await Item.create({
name: talent.name,
type: "talent",
img: "systems/fvtt-ftl-nomad/assets/icons/icon_talent.svg",
system: {
description: talent.description,
isAdvantage: talent.advantage,
},
folder: talentsFolder.id
});
}
}
static async importImplants() {
// Create a implants folder if it doesn't exist
const implantsFolder = game.folders.getName("Implants") || await Folder.create({
name: "Implants", type: "Item"
})
if (!implantsFolder) {
console.error("Failed to create Implants folder");
return;
}
// Load the implants JSON file
const implantsData = await fetch("systems/fvtt-ftl-nomad/assets/json_data/implants.json")
.then(response => response.json())
.catch(error => {
console.error("Failed to load implants data:", error);
return [];
});
// Import each implant
for (const implant of implantsData) {
// Check if the implant already exists
const existingImplant = game.items.find(i => i.name === implant.name && i.type === "implant");
if (existingImplant) {
console.warn(`Implant ${implant.name} already exists, skipping import.`);
continue;
}
if (!Number(implant.cost)) {
implant.cost = 1000000;
}
// Create the implant item
await Item.create({
name: implant.name,
type: "implant",
img: "systems/fvtt-ftl-nomad/assets/icons/icon_implant.svg",
system: {
cost: implant.cost,
loss: implant.loss,
techAge: this.getTechAgeKeyFromLabel(implant.tech_age),
description: implant.description,
},
folder: implantsFolder.id
});
}
}
static async importDrugs() {
// Create a drugs folder if it doesn't exist
const drugsFolder = game.folders.getName("Drugs") || await Folder.create({
name: "Drugs", type: "Item"
})
if (!drugsFolder) {
console.error("Failed to create Drugs folder");
return;
}
// Load the drugs JSON file
const drugsData = await fetch("systems/fvtt-ftl-nomad/assets/json_data/drugs.json")
.then(response => response.json())
.catch(error => {
console.error("Failed to load drugs data:", error);
return [];
});
// Import each drug
for (const drug of drugsData) {
// Check if the drug already exists
const existingDrug = game.items.find(i => i.name === drug.name && i.type === "drug");
if (existingDrug) {
console.warn(`Drug ${drug.name} already exists, skipping import.`);
continue;
}
// Create the drug item
await Item.create({
name: drug.name,
type: "equipment",
img: "systems/fvtt-ftl-nomad/assets/icons/icon_equipment.svg",
system: {
description: drug.description,
cost: drug.cost,
techAge: this.getTechAgeKeyFromLabel(drug.tech_age),
},
folder: drugsFolder.id
});
}
}
static async importEquipments() {
// Create a equipments folder if it doesn't exist
const equipmentsFolder = game.folders.getName("Equipments") || await Folder.create({
name: "Equipments", type: "Item"
})
if (!equipmentsFolder) {
console.error("Failed to create Equipments folder");
return;
}
// Load the equipments JSON file
const equipmentsData = await fetch("systems/fvtt-ftl-nomad/assets/json_data/exploration_equipment.json")
.then(response => response.json())
.catch(error => {
console.error("Failed to load equipments data:", error);
return [];
});
// Import each equipment
for (const equipment of equipmentsData) {
// Check if the equipment already exists
const existingEquipment = game.items.find(i => i.name === equipment.name && i.type === "equipment");
if (existingEquipment) {
console.warn(`Equipment ${equipment.name} already exists, skipping import.`);
continue;
}
if (!Number(equipment.cost)) {
equipment.cost = 1000000;
}
// Create the equipment item
await Item.create({
name: equipment.name,
type: "equipment",
img: "systems/fvtt-ftl-nomad/assets/icons/icon_equipment.svg",
system: {
description: equipment.description,
cost: equipment.cost,
techAge: this.getTechAgeKeyFromLabel(equipment.tech_age),
},
folder: equipmentsFolder.id
});
}
}
static async importDistanceWeapons() {
// Create a distance weapons folder if it doesn't exist
const distanceWeaponsFolder = game.folders.getName("Vehicle Weapons") || await Folder.create({
name: "Vehicle Weapons", type: "Item"
})
if (!distanceWeaponsFolder) {
console.error("Failed to create Distance Weapons folder");
return;
}
// Load the distance weapons JSON file
const distanceWeaponsData = await fetch("systems/fvtt-ftl-nomad/assets/json_data/vehicle_weapons.json")
.then(response => response.json())
.catch(error => {
console.error("Failed to load distance weapons data:", error);
return [];
});
// Import each distance weapon
for (const weapon of distanceWeaponsData) {
// Check if the weapon already exists
const existingWeapon = game.items.find(i => i.name === weapon.name && i.type === "weapon");
if (existingWeapon) {
console.warn(`Weapon ${weapon.name} already exists, skipping import.`);
continue;
}
// Create the weapon item
await Item.create({
name: weapon.name,
type: "weapon",
img: "systems/fvtt-ftl-nomad/assets/icons/icon_weapon.svg",
system: {
description: weapon.description,
damage: weapon.damage,
techAge: this.getTechAgeKeyFromLabel(weapon.tech_age),
weaponType: SYSTEM.WEAPON_TYPES.vehicle.id,
rangeType: weapon.range.toLowerCase(),
enc: 0,
aspect: weapon.aspects.join(", "),
cost: weapon.cost || 0,
ammoCost: weapon.ammo_cost || 0,
magazine: weapon.mag || 1,
},
folder: distanceWeaponsFolder.id
});
}
}
static async importGrenadeWeapons() {
// Create a grenade weapons folder if it doesn't exist
const grenadeWeaponsFolder = game.folders.getName("Grenade") || await Folder.create({
name: "Grenade", type: "Item"
})
if (!grenadeWeaponsFolder) {
console.error("Failed to create Grenade Weapons folder");
return;
}
// Load the grenade weapons JSON file
const grenadeWeaponsData = await fetch("systems/fvtt-ftl-nomad/assets/json_data/grenades.json")
.then(response => response.json())
.catch(error => {
console.error("Failed to load grenade weapons data:", error);
return [];
});
// Import each grenade weapon
for (const weapon of grenadeWeaponsData) {
// Check if the weapon already exists
const existingWeapon = game.items.find(i => i.name === weapon.name && i.type === "weapon");
if (existingWeapon) {
console.warn(`Weapon ${weapon.name} already exists, skipping import.`);
continue;
}
// Create the weapon item
await Item.create({
name: weapon.name,
type: "weapon",
img: "systems/fvtt-ftl-nomad/assets/icons/icon_weapon.svg",
system: {
description: weapon.description,
damage: weapon.damage,
techAge: this.getTechAgeKeyFromLabel(weapon.tech_age),
weaponType: SYSTEM.WEAPON_TYPES.grenade.id,
rangeType: SYSTEM.WEAPON_RANGE.thrownweapon.id,
enc: 0,
aspect: weapon.aspects.join(", "),
cost: weapon.cost || 0,
ammoCost: 0,
},
folder: grenadeWeaponsFolder.id
});
}
}
static async importMeleeWeapons() {
// Create a melee weapons folder if it doesn't exist
const meleeWeaponsFolder = game.folders.getName("Melee Weapons") || await Folder.create({
name: "Melee Weapons", type: "Item"
})
if (!meleeWeaponsFolder) {
console.error("Failed to create Melee Weapons folder");
return;
}
// Load the melee weapons JSON file
const meleeWeaponsData = await fetch("systems/fvtt-ftl-nomad/assets/json_data/weapon_melee.json")
.then(response => response.json())
.catch(error => {
console.error("Failed to load melee weapons data:", error);
return [];
});
console.log("Melee Weapons Data", meleeWeaponsData);
// Import each melee weapon
for (const weapon of meleeWeaponsData) {
// Check if the weapon already exists
const existingWeapon = game.items.find(i => i.name === weapon.name && i.type === "weapon");
if (existingWeapon) {
console.warn(`Weapon ${weapon.name} already exists, skipping import.`);
continue;
}
// Create the weapon item
await Item.create({
name: weapon.name,
type: "weapon",
img: "systems/fvtt-ftl-nomad/assets/icons/icon_weapon.svg",
system: {
description: weapon.description,
damage: weapon.damage,
techAge: this.getTechAgeKeyFromLabel(weapon.tech_age),
weaponType: SYSTEM.WEAPON_TYPES.melee.id,
rangeType: SYSTEM.WEAPON_RANGE.melee.id,
enc: 0,
aspect: weapon.aspects.join(", "),
cost: weapon.cost || 0,
ammoCost: 0,
},
folder: meleeWeaponsFolder.id
});
}
}
}

View File

Binary file not shown.

View File

@@ -0,0 +1 @@
MANIFEST-000002

View File

View File

@@ -0,0 +1,5 @@
2025/06/26-21:12:26.487732 7f9f357fa6c0 Delete type=3 #1
2025/06/26-22:19:51.043093 7f9c97bff6c0 Level-0 table #5: started
2025/06/26-22:19:51.049108 7f9c97bff6c0 Level-0 table #5: 99957 bytes OK
2025/06/26-22:19:51.055551 7f9c97bff6c0 Delete type=0 #3
2025/06/26-22:19:51.070209 7f9c97bff6c0 Manual compaction at level-0 from '!folders!AuBtSOj1mJmh88qx' @ 72057594037927935 : 1 .. '!items!zv9dwgL3p7ThQn7j' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@@ -1,7 +1,7 @@
:root {
--font-size-standard: 0.9rem;
--font-size-result: 1.4rem;
--background-image-base: linear-gradient(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)),
--background-image-base: linear-gradient(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)),
url("../assets/ui/ftl_nomad_background_01.webp");
--font-primary: "Atkinson";
--font-secondary: "Atkinson";
@@ -15,6 +15,11 @@
/*--img-icon-color-filter: invert(60%) sepia(12%) saturate(6853%) hue-rotate(81deg) brightness(113%) contrast(104%);*/
}
body {
--color-text-secondary: rgb(22, 3, 3);
--color-text-emphatic: rgb(9, 97, 14);
}
.d100 {
width: 18px;
height: 18px;

View File

@@ -39,11 +39,11 @@
input,
select {
text-align: center;
font-size: calc(var(--font-size-standard) * 1.0);
font-size: calc(var(--font-size-standard) * 1);
}
select {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1.0);
font-size: calc(var(--font-size-standard) * 1);
}
}
@@ -58,21 +58,21 @@
.character-sheet-common {
label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1.0);
font-size: calc(var(--font-size-standard) * 1);
}
}
.vehicle-sheet-common {
label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1.0);
font-size: calc(var(--font-size-standard) * 1);
}
}
.creature-sheet-common {
label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1.0);
font-size: calc(var(--font-size-standard) * 1);
}
}
@@ -80,13 +80,26 @@
.form-fields {
padding-top: 4px;
}
.form-group {
display: flex;
flex-direction: row;
align-items: center;
margin-bottom: 4px;
label {
font-weight: bold;
margin-right: 8px;
min-width: 12rem;
max-width: 12rem;
}
}
label {
font-family: var(--font-secondary);
font-size: calc(var(--font-size-standard) * 1.0);
font-size: calc(var(--font-size-standard) * 1);
flex: 50%;
}
.align-top {
align-self: flex-start;
padding: 0.1rem;
@@ -99,5 +112,5 @@
.shift-right {
margin-left: 2rem;
}
}
}

View File

@@ -1,4 +1,4 @@
.application.dialog.fvtt-cthulhu-eternal {
.application.dialog.fvtt-ftl-nomad {
color: var(--color-dark-1);
background-color: var(--color-light-1);

View File

@@ -68,7 +68,7 @@
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
}
label {
margin-left: 0.2rem;
max-width: 10rem;
@@ -115,7 +115,7 @@
margin-left: 4px;
font-size: calc(var(--font-size-standard) * 1.4);
}
}
}
.starship-hp-max {
clear: both;
display: flex;
@@ -160,8 +160,8 @@
.field-label {
margin-left: 8px;
}
.biodata {
display: grid;
grid-template-columns: repeat(2, 1fr);
@@ -174,7 +174,7 @@
align-items: center;
gap: 4px;
min-width: 18rem;
max-width: 18rem;
max-width: 18rem;
}
}

View File

@@ -20,8 +20,8 @@
}
},
"compatibility": {
"minimum": "12",
"verified": "12"
"minimum": "13",
"verified": "13"
},
"esmodules": ["fvtt-ftl-nomad.mjs"],
"styles": ["css/fvtt-ftl-nomad.css"],
@@ -52,6 +52,18 @@
}
},
"packs": [
{
"label": "FTL Nomad",
"type": "Item",
"name": "ftl-nomad-items",
"path": "packs/ftl-nomad-items",
"system": "fvtt-ftl-nomad",
"flags": {},
"ownership": {
"PLAYER": "NONE",
"ASSISTANT": "OWNER"
}
}
],
"grid": {
"distance": 10,

View File

@@ -12,7 +12,7 @@
<fieldset>
<legend>{{localize "FTLNOMAD.Label.description"}}</legend>
{{formInput systemFields.description enriched=description value=system.description name="system.description"
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description"
toggled=true}}
</fieldset>

View File

@@ -2,17 +2,17 @@
<div class="header">
<img class="item-img" src="{{item.img}}" data-edit="img" data-action="editImage" data-tooltip="{{item.name}}" />
{{formInput fields.name value=source.name}}
</div>
</div>
<fieldset>
{{formField systemFields.techAge value=system.techAge localize=true}}
{{formField systemFields.enc value=system.enc}}
{{formField systemFields.loss value=system.loss}}
{{formField systemFields.cost value=system.cost}}
</fieldset>
<fieldset>
<legend>{{localize "FTLNOMAD.Label.description"}}</legend>
{{formInput systemFields.description enriched=description value=system.description name="system.description"
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description"
toggled=true}}
</fieldset>

View File

@@ -2,11 +2,11 @@
<div class="header">
<img class="item-img era-icon-color" src="{{item.img}}" data-edit="img" data-action="editImage" data-tooltip="{{item.name}}" />
{{formInput fields.name value=source.name}}
</div>
</div>
<fieldset>
<legend>{{localize "FTLNOMAD.Label.description"}}</legend>
{{formInput systemFields.description enriched=description value=system.description name="system.description" toggled=true}}
{{formInput systemFields.description enriched=enrichedDescription value=system.description name="system.description" toggled=true}}
</fieldset>
</section>

View File

@@ -8,18 +8,19 @@
{{formField systemFields.techAge value=system.techAge localize=true}}
{{formField systemFields.weaponType value=system.weaponType localize=true}}
{{formField systemFields.rangeType value=system.rangeType localize=true}}
{{formField systemFields.aspect value=system.aspect localize=true}}
{{formField systemFields.damage value=system.damage}}
{{formField systemFields.enc value=system.enc}}
{{formField systemFields.cost value=system.cost}}
</fieldset>
<fieldset>
<legend>{{localize "FTLNOMAD.Label.description"}}</legend>
{{formInput
systemFields.description
enriched=description
enriched=enrichedDescription
value=system.description
name="system.description"
toggled=true