diff --git a/src/module/system/action-macros/computers/access-infosphere.ts b/src/module/system/action-macros/computers/access-infosphere.ts new file mode 100644 index 00000000000..2a182d6ec27 --- /dev/null +++ b/src/module/system/action-macros/computers/access-infosphere.ts @@ -0,0 +1,20 @@ +import { SingleCheckAction } from "@actor/actions/index.ts"; + +const PREFIX = "SF2E.Actions.AccessInfosphere"; + +const accessInfosphere = new SingleCheckAction({ + description: `${PREFIX}.Description`, + name: `${PREFIX}.Title`, + notes: [ + { outcome: ["criticalSuccess"], text: `${PREFIX}.Notes.criticalSuccess` }, + { outcome: ["success"], text: `${PREFIX}.Notes.success` }, + { outcome: ["criticalFailure"], text: `${PREFIX}.Notes.criticalFailure` }, + ], + rollOptions: ["action:access-infosphere"], + section: "skill", + slug: "access-infosphere", + statistic: "computers", + traits: ["concentrate", "exploration", "secret"], +}); + +export { accessInfosphere }; diff --git a/src/module/system/action-macros/computers/hack.ts b/src/module/system/action-macros/computers/hack.ts new file mode 100644 index 00000000000..495ac4d988c --- /dev/null +++ b/src/module/system/action-macros/computers/hack.ts @@ -0,0 +1,21 @@ +import { SingleCheckAction } from "@actor/actions/index.ts"; + +const PREFIX = "SF2E.Actions.Hack"; + +const hack = new SingleCheckAction({ + description: `${PREFIX}.Description`, + name: `${PREFIX}.Title`, + notes: [ + { outcome: ["criticalSuccess"], text: `${PREFIX}.Notes.criticalSuccess` }, + { outcome: ["success"], text: `${PREFIX}.Notes.success` }, + { outcome: ["failure"], text: `${PREFIX}.Notes.failure` }, + { outcome: ["criticalFailure"], text: `${PREFIX}.Notes.criticalFailure` }, + ], + rollOptions: ["action:hack"], + section: "skill", + slug: "hack", + statistic: "computers", + traits: ["exploration"], +}); + +export { hack }; diff --git a/src/module/system/action-macros/computers/program.ts b/src/module/system/action-macros/computers/program.ts new file mode 100644 index 00000000000..3d8b5a3a7e0 --- /dev/null +++ b/src/module/system/action-macros/computers/program.ts @@ -0,0 +1,21 @@ +import { SingleCheckAction } from "@actor/actions/index.ts"; + +const PREFIX = "SF2E.Actions.Program"; + +const program = new SingleCheckAction({ + description: `${PREFIX}.Description`, + name: `${PREFIX}.Title`, + notes: [ + { outcome: ["criticalSuccess"], text: `${PREFIX}.Notes.criticalSuccess` }, + { outcome: ["success"], text: `${PREFIX}.Notes.success` }, + { outcome: ["failure"], text: `${PREFIX}.Notes.failure` }, + { outcome: ["criticalFailure"], text: `${PREFIX}.Notes.criticalFailure` }, + ], + rollOptions: ["action:program"], + section: "skill", + slug: "program", + statistic: "computers", + traits: ["downtime", "manipulate"], +}); + +export { program }; diff --git a/src/module/system/action-macros/piloting/drive.ts b/src/module/system/action-macros/piloting/drive.ts new file mode 100644 index 00000000000..676dea78a65 --- /dev/null +++ b/src/module/system/action-macros/piloting/drive.ts @@ -0,0 +1,54 @@ +import { SingleCheckAction } from "@actor/actions/index.ts"; + +const PREFIX = "SF2E.Actions.Drive"; + +const drive = new SingleCheckAction({ + description: `${PREFIX}.Description`, + name: `${PREFIX}.Title`, + rollOptions: ["action:drive"], + section: "skill", + slug: "drive", + statistic: "piloting", + traits: ["move"], + variants: [ + { + cost: 1, + description: `${PREFIX}.Drive1.Description`, + name: `${PREFIX}.Drive1.Title`, + notes: [ + { outcome: ["criticalSuccess", "success"], text: `${PREFIX}.Drive1.Notes.success` }, + { outcome: ["failure"], text: `${PREFIX}.Drive1.Notes.failure` }, + { outcome: ["criticalFailure"], text: `${PREFIX}.Drive1.Notes.criticalFailure` }, + ], + rollOptions: ["action:drive", "action:drive:drive1"], + slug: "drive1", + }, + { + cost: 2, + description: `${PREFIX}.Drive2.Description`, + name: `${PREFIX}.Drive2.Title`, + notes: [ + { outcome: ["criticalSuccess", "success"], text: `${PREFIX}.Drive2.Notes.success` }, + { outcome: ["criticalFailure", "failure"], text: `${PREFIX}.Drive2.Notes.failure` }, + ], + rollOptions: ["action:drive", "action:drive:drive2"], + slug: "drive2", + traits: ["move", "reckless"], + }, + { + cost: 3, + description: `${PREFIX}.Drive3.Description`, + modifiers: [{ label: `${PREFIX}.Drive3.Title`, modifier: -5 }], + name: `${PREFIX}.Drive3.Title`, + notes: [ + { outcome: ["criticalSuccess", "success"], text: `${PREFIX}.Drive3.Notes.success` }, + { outcome: ["criticalFailure", "failure"], text: `${PREFIX}.Drive3.Notes.failure` }, + ], + rollOptions: ["action:drive", "action:drive:drive3"], + slug: "drive3", + traits: ["move", "reckless"], + }, + ], +}); + +export { drive }; diff --git a/src/module/system/action-macros/piloting/navigate.ts b/src/module/system/action-macros/piloting/navigate.ts new file mode 100644 index 00000000000..220e653ef0d --- /dev/null +++ b/src/module/system/action-macros/piloting/navigate.ts @@ -0,0 +1,19 @@ +import { SingleCheckAction } from "@actor/actions/index.ts"; + +const PREFIX = "SF2E.Actions.Navigate"; + +const navigate = new SingleCheckAction({ + description: `${PREFIX}.Description`, + name: `${PREFIX}.Title`, + notes: [ + { outcome: ["criticalSuccess"], text: `${PREFIX}.Notes.criticalSuccess` }, + { outcome: ["success"], text: `${PREFIX}.Notes.success` }, + ], + rollOptions: ["action:navigate"], + section: "skill", + slug: "navigate", + statistic: "piloting", + traits: ["exploration", "secret"], +}); + +export { navigate }; diff --git a/src/module/system/action-macros/piloting/plot-course.ts b/src/module/system/action-macros/piloting/plot-course.ts new file mode 100644 index 00000000000..2e2476de1a4 --- /dev/null +++ b/src/module/system/action-macros/piloting/plot-course.ts @@ -0,0 +1,21 @@ +import { SingleCheckAction } from "@actor/actions/index.ts"; + +const PREFIX = "SF2E.Actions.PlotCourse"; + +const plotCourse = new SingleCheckAction({ + description: `${PREFIX}.Description`, + name: `${PREFIX}.Title`, + notes: [ + { outcome: ["criticalSuccess"], text: `${PREFIX}.Notes.criticalSuccess` }, + { outcome: ["success"], text: `${PREFIX}.Notes.success` }, + { outcome: ["failure"], text: `${PREFIX}.Notes.failure` }, + { outcome: ["criticalFailure"], text: `${PREFIX}.Notes.criticalFailure` }, + ], + rollOptions: ["action:plot-course"], + section: "skill", + slug: "plot-course", + statistic: "piloting", + traits: ["exploration", "secret"], +}); + +export { plotCourse }; diff --git a/src/module/system/action-macros/piloting/run-over.ts b/src/module/system/action-macros/piloting/run-over.ts new file mode 100644 index 00000000000..4dd0d4e5977 --- /dev/null +++ b/src/module/system/action-macros/piloting/run-over.ts @@ -0,0 +1,17 @@ +import { SingleCheckAction } from "@actor/actions/index.ts"; + +const PREFIX = "SF2E.Actions.RunOver"; + +const runOver = new SingleCheckAction({ + cost: 3, + description: `${PREFIX}.Description`, + name: `${PREFIX}.Title`, + notes: [{ outcome: ["criticalFailure", "failure"], text: `${PREFIX}.Notes.failure` }], + rollOptions: ["action:run-over"], + section: "skill", + slug: "run-over", + statistic: "piloting", + traits: ["move", "reckless"], +}); + +export { runOver }; diff --git a/src/module/system/action-macros/piloting/stop.ts b/src/module/system/action-macros/piloting/stop.ts new file mode 100644 index 00000000000..dc033f144e3 --- /dev/null +++ b/src/module/system/action-macros/piloting/stop.ts @@ -0,0 +1,14 @@ +import { SimpleAction } from "@actor/actions/index.ts"; + +const PREFIX = "SF2E.Actions.Stop"; + +const stop = new SimpleAction({ + cost: 1, + description: `${PREFIX}.Description`, + name: `${PREFIX}.Title`, + section: "skill", + slug: "stop", + traits: ["manipulate"], +}); + +export { stop }; diff --git a/src/module/system/action-macros/piloting/stunt.ts b/src/module/system/action-macros/piloting/stunt.ts new file mode 100644 index 00000000000..61e7572e02a --- /dev/null +++ b/src/module/system/action-macros/piloting/stunt.ts @@ -0,0 +1,110 @@ +import { SingleCheckAction } from "@actor/actions/index.ts"; + +const PREFIX = "SF2E.Actions.Stunt"; + +const stunt = new SingleCheckAction({ + cost: 1, + description: `${PREFIX}.Description`, + name: `${PREFIX}.Title`, + notes: [{ outcome: ["criticalFailure", "failure"], text: `${PREFIX}.Notes.failure` }], + rollOptions: ["action:stunt"], + section: "skill", + slug: "stunt", + statistic: "piloting", + traits: ["manipulate", "move", "reckless"], + variants: [ + { + modifiers: [ + { label: `${PREFIX}.BackOff.Title`, modifier: -1 }, + { label: `${PREFIX}.Modifiers.RecklessPiloting`, modifier: -5, predicate: ["reckless-piloting"] }, + ], + name: `${PREFIX}.BackOff.Title`, + notes: [ + { outcome: ["criticalSuccess", "success"], text: `${PREFIX}.BackOff.Notes.success` }, + { outcome: ["criticalFailure", "failure"], text: `${PREFIX}.Notes.failure` }, + ], + rollOptions: ["action:stunt", "action:stunt:back-off"], + slug: "back-off", + }, + { + modifiers: [ + { label: `${PREFIX}.Evade.Title`, modifier: -1 }, + { label: `${PREFIX}.Modifiers.RecklessPiloting`, modifier: -5, predicate: ["reckless-piloting"] }, + ], + name: `${PREFIX}.Evade.Title`, + notes: [ + { outcome: ["criticalSuccess", "success"], text: `${PREFIX}.Evade.Notes.success` }, + { outcome: ["criticalFailure", "failure"], text: `${PREFIX}.Notes.failure` }, + ], + rollOptions: ["action:stunt", "action:stunt:evade"], + slug: "evade", + }, + { + modifiers: [ + { label: `${PREFIX}.FlipAndBurn.Title`, modifier: -1 }, + { label: `${PREFIX}.Modifiers.RecklessPiloting`, modifier: -5, predicate: ["reckless-piloting"] }, + ], + name: `${PREFIX}.FlipAndBurn.Title`, + notes: [ + { outcome: ["criticalSuccess", "success"], text: `${PREFIX}.FlipAndBurn.Notes.success` }, + { outcome: ["criticalFailure", "failure"], text: `${PREFIX}.Notes.failure` }, + ], + rollOptions: ["action:stunt", "action:stunt:flip-and-burn"], + slug: "flip-and-burn", + }, + { + modifiers: [ + { label: `${PREFIX}.BarrelRoll.Title`, modifier: -2 }, + { label: `${PREFIX}.Modifiers.RecklessPiloting`, modifier: -5, predicate: ["reckless-piloting"] }, + ], + name: `${PREFIX}.BarrelRoll.Title`, + notes: [ + { outcome: ["criticalSuccess", "success"], text: `${PREFIX}.BarrelRoll.Notes.success` }, + { outcome: ["criticalFailure", "failure"], text: `${PREFIX}.Notes.failure` }, + ], + rollOptions: ["action:stunt", "action:stunt:barrel-roll"], + slug: "barrel-roll", + }, + { + modifiers: [ + { label: `${PREFIX}.Flyby.Title`, modifier: -2 }, + { label: `${PREFIX}.Modifiers.RecklessPiloting`, modifier: -5, predicate: ["reckless-piloting"] }, + ], + name: `${PREFIX}.Flyby.Title`, + notes: [ + { outcome: ["criticalSuccess", "success"], text: `${PREFIX}.Flyby.Notes.success` }, + { outcome: ["criticalFailure", "failure"], text: `${PREFIX}.Notes.failure` }, + ], + rollOptions: ["action:stunt", "action:stunt:flyby"], + slug: "flyby", + }, + { + modifiers: [ + { label: `${PREFIX}.Drift.Title`, modifier: -2 }, + { label: `${PREFIX}.Modifiers.RecklessPiloting`, modifier: -5, predicate: ["reckless-piloting"] }, + ], + name: `${PREFIX}.Drift.Title`, + notes: [ + { outcome: ["criticalSuccess", "success"], text: `${PREFIX}.Drift.Notes.success` }, + { outcome: ["criticalFailure", "failure"], text: `${PREFIX}.Notes.failure` }, + ], + rollOptions: ["action:stunt", "action:stunt:drift"], + slug: "drift", + }, + { + modifiers: [ + { label: `${PREFIX}.TurnInPlace.Title`, modifier: -2 }, + { label: `${PREFIX}.Modifiers.RecklessPiloting`, modifier: -5, predicate: ["reckless-piloting"] }, + ], + name: `${PREFIX}.TurnInPlace.Title`, + notes: [ + { outcome: ["criticalSuccess", "success"], text: `${PREFIX}.TurnInPlace.Notes.success` }, + { outcome: ["criticalFailure", "failure"], text: `${PREFIX}.Notes.failure` }, + ], + rollOptions: ["action:stunt", "action:stunt:turn-in-place"], + slug: "turn-in-place", + }, + ], +}); + +export { stunt }; diff --git a/src/module/system/action-macros/piloting/take-control.ts b/src/module/system/action-macros/piloting/take-control.ts new file mode 100644 index 00000000000..ea33aab8fff --- /dev/null +++ b/src/module/system/action-macros/piloting/take-control.ts @@ -0,0 +1,17 @@ +import { SingleCheckAction } from "@actor/actions/index.ts"; + +const PREFIX = "SF2E.Actions.TakeControl"; + +const takeControl = new SingleCheckAction({ + cost: 1, + description: `${PREFIX}.Description`, + name: `${PREFIX}.Title`, + notes: [{ outcome: ["criticalSuccess", "success"], text: `${PREFIX}.Notes.success` }], + rollOptions: ["action:take-control"], + section: "skill", + slug: "take-control", + statistic: "piloting", + traits: ["manipulate"], +}); + +export { takeControl }; diff --git a/src/scripts/hooks/init.ts b/src/scripts/hooks/init.ts index e15c9751525..e88b34e8e7c 100644 --- a/src/scripts/hooks/init.ts +++ b/src/scripts/hooks/init.ts @@ -18,6 +18,16 @@ import { SetGamePF2e } from "@scripts/set-game-pf2e.ts"; import { registerSettings } from "@system/settings/index.ts"; import { htmlQueryAll } from "@util"; import * as R from "remeda"; +import { accessInfosphere } from "@system/action-macros/computers/access-infosphere.ts"; +import { drive } from "@system/action-macros/piloting/drive.ts"; +import { hack } from "@system/action-macros/computers/hack.ts"; +import { navigate } from "@system/action-macros/piloting/navigate.ts"; +import { plotCourse } from "@system/action-macros/piloting/plot-course.ts"; +import { program } from "@system/action-macros/computers/program.ts"; +import { runOver } from "@system/action-macros/piloting/run-over.ts"; +import { stop } from "@system/action-macros/piloting/stop.ts"; +import { stunt } from "@system/action-macros/piloting/stunt.ts"; +import { takeControl } from "@system/action-macros/piloting/take-control.ts"; export const Init = { listen: (): void => { @@ -167,6 +177,21 @@ export const Init = { } game.pf2e.StatusEffects.initialize(); + + if (game.modules.get("starfinder-field-test-for-pf2e")?.active) { + [ + accessInfosphere, + drive, + hack, + navigate, + plotCourse, + program, + runOver, + stop, + stunt, + takeControl, + ].forEach((action) => game.pf2e.actions.set(action.slug, action)); + } }); }, }; diff --git a/static/lang/action-en.json b/static/lang/action-en.json index 9ee189676cc..d72e7f0dc2c 100644 --- a/static/lang/action-en.json +++ b/static/lang/action-en.json @@ -1031,5 +1031,155 @@ "Nonexistent": "Specified variant '{variant}' does not exist for action '{action}'" } } + }, + "SF2E": { + "Actions": { + "AccessInfosphere": { + "Description": "

You attempt to access a local network, known as an infosphere, to come up with information on a topic. This typically takes 10 minutes of research to find information, with results like Recalling Knowledge on a topic. Larger investigations or topics could require several hours, while single-word answers of information common to that settlement's infosphere may only take a minute, based on the GM's discretion. Significant and longer investigations should use the research subsystem. The GM determines the DC based on the topic you're researching. This can be further influenced by the quality of the local infosphere, what information it might possess on the topic, and how well organized it is.

Critical Success You find the information you were searching for. If this was used on a topic you could have used Recall Knowledge on, you instead find this information in 1 minute.
Success You find the information you were looking for.
Critical Failure You find misleading information thanks to incorrect data or online pranksters. The GM provides you false information on your topic of investigation (or decides to give you no information, as on a failure).

", + "Notes": { + "criticalFailure": "Critical Failure You find misleading information thanks to incorrect data or online pranksters. The GM provides you false information on your topic of investigation (or decides to give you no information, as on a failure).", + "criticalSuccess": "Critical Success You find the information you were searching for. If this was used on a topic you could have used Recall Knowledge on, you instead find this information in 1 minute.", + "success": "Success You find the information you were looking for." + }, + "Title": "Access Infosphere" + }, + "Drive": { + "Description": "

You pilot your vehicle to move. Decide how many actions you intend to spend before you begin Driving. The effects depend on the number of actions you spend. You can't Drive through spaces occupied by creatures, even if they are allies.

1 Attempt a Piloting check. On a success, the vehicle moves up to its Speed and can turn normally. On a failure, the vehicle moves its Speed in a straight line. On a critical failure, the vehicle moves its Speed in a straight line and becomes uncontrolled.
2 (reckless) The vehicle moves up to twice its Speed in a straight line at the vehicle's current heading.
3 (reckless) You take a -5 penalty on your piloting check to maintain control of the vehicle. The vehicle moves up to three times its Speed in a straight line at the vehicle's current heading.

", + "Drive1": { + "Description": "

Attempt a Piloting check. On a success, the vehicle moves up to its Speed and can turn normally. On a failure, the vehicle moves its Speed in a straight line. On a critical failure, the vehicle moves its Speed in a straight line and becomes uncontrolled.

", + "Notes": { + "criticalFailure": "Critical Failure The vehicle moves its Speed in a straight line and becomes uncontrolled.", + "failure": "Failure The vehicle moves its Speed in a straight line.", + "success": "Success The vehicle moves up to its Speed and can turn normally." + }, + "Title": "Drive1" + }, + "Drive2": { + "Description": "

(reckless) The vehicle moves up to twice its Speed in a straight line at the vehicle's current heading.

", + "Notes": { + "failure": "Failure The vehicle moves its Speed in a straight line along its most recent heading, drifting up to 45 degrees at the GM's discretion, and becomes uncontrolled.", + "success": "Success The vehicle moves up to twice its Speed in a straight line at the vehicle's current heading." + }, + "Title": "Drive2" + }, + "Drive3": { + "Description": "

(reckless) You take a -5 penalty on your piloting check to maintain control of the vehicle. The vehicle moves up to three times its Speed in a straight line at the vehicle's current heading.

", + "Notes": { + "failure": "Failure The vehicle moves its Speed in a straight line along its most recent heading, drifting up to 45 degrees at the GM's discretion, and becomes uncontrolled.", + "success": "Success The vehicle moves up to three times its Speed in a straight line at the vehicle's current heading." + }, + "Title": "Drive3" + }, + "Title": "Drive" + }, + "Hack": { + "Description": "

You try to access, control, or make changes to an active, secured system. In most cases, this is going to be an attempt made against a local computer system that you access directly or indirectly through the use of a hacking toolkit. Attempt a Computers check to determine if you can access the targeted system. Computers with improved systems might require multiple successes to access.

Critical Success You access the system, or you achieve two successes toward accessing a system requiring more than one success. You leave no trace of your tampering.
Success You access the system, or you achieve one success toward accessing a system that requires more than one success.
Failure You fail to access the system or achieve any success toward accessing a system that requires more than one success. Some computerized systems might have security measures that activate on a failure.
Critical Failure You activate specially ingrained security protocols or completely lock yourself out of the system. Being locked out of a system prevents you from attempting another check to access it for the next hour.

", + "Notes": { + "criticalFailure": "Critical Failure You activate specially ingrained security protocols or completely lock yourself out of the system. Being locked out of a system prevents you from attempting another check to access it for the next hour.", + "criticalSuccess": "Critical Success You access the system, or you achieve two successes toward accessing a system requiring more than one success. You leave no trace of your tampering.", + "failure": "Failure You fail to access the system or achieve any success toward accessing a system that requires more than one success. Some computerized systems might have security measures that activate on a failure.", + "success": "Success You access the system, or you achieve one success toward accessing a system that requires more than one success." + }, + "Title": "Hack" + }, + "Navigate": { + "Description": "

You plan a short journey. While this is most often used when traveling with a mech, vehicle, or starship, the same skill can be used to determine the optimal route to take while traveling on foot. This lets you plan a general heading on a planetoid or guide your starship on an in-system voyage. If you are navigating a short journey, you typically attempt a Piloting check only once per day, but some environments or changes might necessitate rolling more often. The GM determines the DC and how long this activity takes (usually just a minute or so). More unusual locales or those you're unfamiliar with might require you to have a minimum proficiency rank to Navigate.

Critical Success You get an excellent sense of where you are. If you are in an environment with cardinal directions, you know them exactly.
Success You gain enough orientation to avoid becoming hopelessly lost. If you are in an environment with cardinal directions, you have a sense of those directions.

", + "Notes": { + "criticalSuccess": "Critical Success You get an excellent sense of where you are. If you are in an environment with cardinal directions, you know them exactly.", + "success": "Success You gain enough orientation to avoid becoming hopelessly lost. If you are in an environment with cardinal directions, you have a sense of those directions." + }, + "Title": "Navigate" + }, + "PlotCourse": { + "Description": "

You prepare for a longer journey into the stars, likely making use of your starship's Drift Engine (or similar FTL device). Attempt a Piloting check to determine if you can chart a suitable path to your ultimate destination. The GM determines how long this activity takes and the DC.

Critical Success You manage to reach your destination in half the expected time (minimum 1 day).
Success You create a usable navigational plan that gets you to your intended destination on time.
Failure Your plan has several problems, and you end up reaching your destination late.
Critical Failure You arrive in an unfamiliar star system, requiring you to plot a new course to your destination (likely at an increased DC due to the unfamiliar starting point).

", + "Notes": { + "criticalFailure": "Critical Failure You arrive in an unfamiliar star system, requiring you to plot a new course to your destination (likely at an increased DC due to the unfamiliar starting point).", + "criticalSuccess": "Critical Success You manage to reach your destination in half the expected time (minimum 1 day).", + "failure": "Failure Your plan has several problems, and you end up reaching your destination late.", + "success": "Success You create a usable navigational plan that gets you to your intended destination on time." + }, + "Title": "Plot Course" + }, + "Program": { + "Description": "

You spend your time creating lines of computer code that can be integrated into various computerized systems. You need the Programmer skill feat to write computer code, Programming items that have the virtual trait. You must have the formulas to craft these items, but they can often be found sold by other programmers on an infosphere. You can buy lines of code from other programmers to help complete your virtual item. You can use the Program action to create formulas for tech items if you have the Inventor skill feat. You can use the Program action to create tech items without the virtual trait by using a creator capsule if you have the Fabricator skill feat.

Critical Success Your attempt is successful. Each additional day spent Programming reduces the code needed to complete the item by an amount based on your level + 1 and your proficiency rank in Computers.
Success Your attempt is successful. Each additional day spent Programming reduces the materials needed to complete the item by an amount based on your level and your proficiency rank.
Failure You fail to complete the item. You can salvage some of the code you've written for its full value. If you want to try again, you must start over.
Critical Failure You fail to complete the item. 10% of the code you've written or purchased is unusable, but you can salvage the rest. If you want to try again, you must start over.

", + "Notes": { + "criticalFailure": "Critical Failure You fail to complete the item. 10% of the code you've written or purchased is unusable, but you can salvage the rest. If you want to try again, you must start over.", + "criticalSuccess": "Critical Success Your attempt is successful. Each additional day spent Programming reduces the code needed to complete the item by an amount based on your level + 1 and your proficiency rank in Computers.", + "failure": "Failure You fail to complete the item. You can salvage some of the code you've written for its full value. If you want to try again, you must start over.", + "success": "Success Your attempt is successful. Each additional day spent Programming reduces the materials needed to complete the item by an amount based on your level and your proficiency rank." + }, + "Title": "Program" + }, + "RunOver": { + "Description": "

You try to run over creatures or ram another vehicle with your vehicle. If you maintain control of your vehicle, it moves up to twice its Speed in a straight line at the vehicle's current heading. You attempt to run over any creatures in your path two sizes smaller than the vehicle or smaller, and you can attempt to ram one target creature or object in your path one size smaller than the vehicle or larger.

Each creature in your path, including a rammed target, takes the vehicle's collision damage (basic Reflex save at vehicle's collision DC). If the rammed target is a vehicle, its pilot can attempt a piloting check in place of this Reflex save, with the same results. If the target of your ram takes damage, you and your vehicle each take collision damage (no save) and your movement ends.

", + "Notes": { + "failure": "Failure The vehicle moves its Speed in a straight line along its most recent heading, drifting up to 45 degrees at the GM's discretion, and becomes uncontrolled." + }, + "Title": "Run Over" + }, + "Stop": { + "Description": "

You bring the vehicle to a stop.

", + "Title": "Stop" + }, + "Stunt": { + "Description": "

You perform a stunt while Driving your vehicle, temporarily improving its effective capabilities at the risk of losing control. Drive your vehicle and choose a stunt. All piloting checks attempted as part of your Stunt receive the listed penalty, including piloting checks made to take a reckless action. If the Drive action and Stunt are both reckless, you must attempt the piloting check to keep control of the vehicle twice.

Stunts
StuntPenaltyBenefit
Back Off-1Move half Speed backwards.
Evade-1Move half Speed to gain a +1 status bonus to AC.
Flip and Burn-1Move half Speed, then turn and direction.
Barrel Roll-2Move half Speed to gain a +2 status bonus to AC.
Flyby-2Move half Speed through an enemy square.
Drift-2Move half Speed sideways without turning.
Turn in Place-2Turn, then move full Speed.
", + "BackOff": { + "Notes": { + "success": "Success Move half Speed backwards." + }, + "Title": "Back Off" + }, + "BarrelRoll": { + "Notes": { + "success": "Success Move half Speed to gain a +2 status bonus to AC." + }, + "Title": "Barrel Roll" + }, + "Drift": { + "Notes": { + "success": "Success Move half Speed sideways without turning." + }, + "Title": "Drift" + }, + "Evade": { + "Notes": { + "success": "Success Move half Speed to gain a +1 status bonus to AC." + }, + "Title": "Evade" + }, + "FlipAndBurn": { + "Notes": { + "success": "Success Move half Speed, then turn and direction." + }, + "Title": "Flip and Burn" + }, + "Flyby": { + "Notes": { + "success": "Success Move half Speed through an enemy square." + }, + "Title": "Flyby" + }, + "Modifiers": { + "RecklessPiloting": "Reckless Piloting" + }, + "Notes": { + "failure": "Failure The vehicle moves its Speed in a straight line along its most recent heading, drifting up to 45 degrees at the GM's discretion, and becomes uncontrolled." + }, + "Title": "Stunt", + "TurnInPlace": { + "Notes": { + "success": "Success Turn, then move full Speed." + }, + "Title": "Turn in Place" + } + }, + "TakeControl": { + "Description": "

You take control of a vehicle. Attempt a Piloting check; on a success, you become the vehicle's pilot, or regain control of the vehicle if it was uncontrolled. Some vehicles have complicated controls that cause this action to become a multi-action activity, and most vehicles take at least 3 actions if they aren't activated.

", + "Notes": { + "success": "Success You become the vehicle's pilot, or regain control of the vehicle if it was uncontrolled." + }, + "Title": "Take Control" + } + } } }