narraleaf-studio 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_api.d.ts +931 -162
- package/dist/plugin.d.ts +4 -0
- package/dist/runtime.d.ts +2 -0
- package/package.json +1 -1
package/dist/_api.d.ts
CHANGED
|
@@ -665,32 +665,60 @@ type StoryActionPayload = {
|
|
|
665
665
|
} | {
|
|
666
666
|
/**
|
|
667
667
|
* A `Video` — an Actionable, not a Displayable, which is why it has its own verb set rather
|
|
668
|
-
* than sharing `displayable`'s.
|
|
668
|
+
* than sharing `displayable`'s.
|
|
669
669
|
*
|
|
670
|
-
* `
|
|
671
|
-
*
|
|
670
|
+
* **`play` is the only row that puts a clip on the stage** (v27). It carries the file
|
|
671
|
+
* ({@link assetId}) and defines the clip under {@link objectName}: it reveals the clip, runs
|
|
672
|
+
* it, and - unless {@link hideOnEnd} says otherwise - takes it off the stage when it ends. A
|
|
673
|
+
* second `play` of the same name and file runs that clip again.
|
|
672
674
|
*
|
|
673
|
-
*
|
|
674
|
-
*
|
|
675
|
-
*
|
|
676
|
-
*
|
|
677
|
-
*
|
|
678
|
-
* reveals it and runs it to the end. Without one, `play` runs a clip an earlier row put on
|
|
679
|
-
* stage and leaves its visibility alone. No document needs migrating for this: a `play` row
|
|
680
|
-
* could always hold an asset, and one that did now does what it says.
|
|
681
|
-
*
|
|
682
|
-
* Additive: the four transport operations and `timeMs` are new in A3, and no document
|
|
683
|
-
* written before them carries either, so no schema bump.
|
|
675
|
+
* Every other operation names a clip a `play` defined: `pause`, `resume`, `seek`, `stop`
|
|
676
|
+
* (end it now, as though it had reached its end - the defining play then hides it or holds
|
|
677
|
+
* its frame, as it says) and `hide`. A video is a cutscene the story plays, not an object it
|
|
678
|
+
* stages, so there is no row that declares or reveals a clip without running it; v27
|
|
679
|
+
* folded the `create` and `show` rows that used to into the plays that followed them.
|
|
684
680
|
*/
|
|
685
681
|
action: "video";
|
|
686
|
-
operation: "
|
|
682
|
+
operation: "hide" | "play" | "pause" | "resume" | "stop" | "seek";
|
|
687
683
|
objectName: string;
|
|
688
|
-
/**
|
|
684
|
+
/**
|
|
685
|
+
* Which clip a control operation addresses, bound to the `play` that defines it. Same rule
|
|
686
|
+
* as the `image` arm's `target`. A `play` carries none: it defines its clip itself.
|
|
687
|
+
*/
|
|
689
688
|
target?: StoryActionableTargetRef;
|
|
689
|
+
/** `play` — the clip it plays. Required: a play with no file plays nothing. */
|
|
690
690
|
assetId?: string;
|
|
691
|
+
/** `play` — whether the clip plays without sound. */
|
|
691
692
|
muted?: boolean;
|
|
692
693
|
/** `seek` — where to jump to, in milliseconds. The engine's `seek` takes seconds; the compiler converts. */
|
|
693
694
|
timeMs?: number;
|
|
695
|
+
/**
|
|
696
|
+
* `play` — whether the story waits for the clip to end before it moves on.
|
|
697
|
+
*
|
|
698
|
+
* Absent means it waits, which is what every `play` written before this field did. `false`
|
|
699
|
+
* lets the next row run at once while the clip plays on; the clip still leaves the stage
|
|
700
|
+
* when it ends, as {@link hideOnEnd} says. `videoPlayWaits` is the one reading of this field.
|
|
701
|
+
*
|
|
702
|
+
* Added with v27; a v26 document cannot carry it.
|
|
703
|
+
*/
|
|
704
|
+
waitForEnd?: boolean;
|
|
705
|
+
/**
|
|
706
|
+
* `play` — whether the clip leaves the stage once it has played to the end.
|
|
707
|
+
*
|
|
708
|
+
* Absent means it does: a clip that ends holds its last frame above every scene, across a
|
|
709
|
+
* jump too, so clearing itself away is what a cutscene is expected to do. `false` holds that
|
|
710
|
+
* last frame until a `hide` row takes it away. `videoPlayHidesOnEnd` is the one reading of
|
|
711
|
+
* this field.
|
|
712
|
+
*/
|
|
713
|
+
hideOnEnd?: boolean;
|
|
714
|
+
/**
|
|
715
|
+
* How long the clip takes to fade out, in milliseconds - on a `hide`, and on a `play` that
|
|
716
|
+
* hides its clip when it ends. `0` is a cut.
|
|
717
|
+
*
|
|
718
|
+
* Unset, a `hide` cuts, as it always did, and a hiding `play` fades over the default every
|
|
719
|
+
* other hide row is seeded with. `videoLeaveFadeMs` is the one reading of this field.
|
|
720
|
+
*/
|
|
721
|
+
durationMs?: number;
|
|
694
722
|
} | {
|
|
695
723
|
/**
|
|
696
724
|
* The story's stage camera (`story.camera`) — a Displayable like any other in the engine, but
|
|
@@ -1679,6 +1707,17 @@ type BlueprintDiagnostic = {
|
|
|
1679
1707
|
/** Source span or module location; M1 opaque */
|
|
1680
1708
|
location?: Record<string, unknown>;
|
|
1681
1709
|
};
|
|
1710
|
+
type LocaleCode = string;
|
|
1711
|
+
type LocalizationUnitStatus = "untranslated" | "machine" | "translated" | "reviewed";
|
|
1712
|
+
type LocalizationUnit = {
|
|
1713
|
+
/** Translated text; `{n}` placeholders map to the source segment's inline interpolations. */
|
|
1714
|
+
target: string;
|
|
1715
|
+
/** Hash of the source text at translation time (see shared/utils/localizationText). */
|
|
1716
|
+
sourceHash: string;
|
|
1717
|
+
status: LocalizationUnitStatus;
|
|
1718
|
+
/** Optional translator note. */
|
|
1719
|
+
note?: string;
|
|
1720
|
+
};
|
|
1682
1721
|
type BlueprintAssetPinKind = "image" | "audio" | "font";
|
|
1683
1722
|
type BlueprintAssetPinRef = {
|
|
1684
1723
|
kind: BlueprintAssetPinKind;
|
|
@@ -2085,7 +2124,7 @@ type PluginBuildConfigFieldContribution = {
|
|
|
2085
2124
|
/** A build that would ship without a value for this field is refused. */
|
|
2086
2125
|
required?: boolean;
|
|
2087
2126
|
};
|
|
2088
|
-
type PluginContributes = {
|
|
2127
|
+
export type PluginContributes = {
|
|
2089
2128
|
/** Blueprint node types this plugin provides (editor def + runtime execute). */
|
|
2090
2129
|
blueprintNodes?: string[];
|
|
2091
2130
|
/** Widget element types this plugin provides (editor module + runtime renderer). */
|
|
@@ -2191,6 +2230,40 @@ type PluginContributes = {
|
|
|
2191
2230
|
* install - and the list shows them attributed to this plugin rather than quietly making room.
|
|
2192
2231
|
*/
|
|
2193
2232
|
network?: string[];
|
|
2233
|
+
/**
|
|
2234
|
+
* The props of a contributed widget that hold words a player reads, by widget type.
|
|
2235
|
+
*
|
|
2236
|
+
* Each type named here must also be in {@link widgets}. A declared prop is treated as Studio's own
|
|
2237
|
+
* text and button labels are: the properties panel offers its words written directly or read
|
|
2238
|
+
* from a translation key, the canvas draws a key's words, the words go into the project's
|
|
2239
|
+
* translation table and exports, the project checks report a missing translation or key, and
|
|
2240
|
+
* the glyph check reads them. In the game the widget's renderer is handed the words already in
|
|
2241
|
+
* the player's language, in the prop it declared - it never resolves a key itself.
|
|
2242
|
+
*
|
|
2243
|
+
* Declared in the manifest rather than at registration because both entries need it - the
|
|
2244
|
+
* studio entry's widget is edited by it and the runtime entry's is drawn by it - and a
|
|
2245
|
+
* declaration only one of them made would be the half that drifts.
|
|
2246
|
+
*/
|
|
2247
|
+
widgetText?: Record<string, PluginWidgetTextContribution[]>;
|
|
2248
|
+
};
|
|
2249
|
+
/**
|
|
2250
|
+
* One prop of a contributed widget whose value is words a player reads.
|
|
2251
|
+
*
|
|
2252
|
+
* `keyProp` is the prop the widget's translation key is kept in when the author reads the words from
|
|
2253
|
+
* one. It defaults to `<prop>LocalizationKey`, and it is the host's to write: the widget never reads it
|
|
2254
|
+
* to draw, because the words in `prop` already come from the key when there is one.
|
|
2255
|
+
*/
|
|
2256
|
+
export type PluginWidgetTextContribution = {
|
|
2257
|
+
/** The prop holding the words. */
|
|
2258
|
+
prop: string;
|
|
2259
|
+
/** The prop the translation key is kept in; `<prop>LocalizationKey` when not declared. */
|
|
2260
|
+
keyProp?: string;
|
|
2261
|
+
/** What the properties panel calls the words. The prop name when not declared. */
|
|
2262
|
+
label?: string;
|
|
2263
|
+
/** `label` per editor locale, matched exactly as `localized` names are. */
|
|
2264
|
+
localized?: Record<string, string>;
|
|
2265
|
+
/** Whether the words may run over several lines; one line when not declared. */
|
|
2266
|
+
multiline?: boolean;
|
|
2194
2267
|
};
|
|
2195
2268
|
/**
|
|
2196
2269
|
* The plugin's name and description in one editor language. Either may be left out, and the plain
|
|
@@ -2308,6 +2381,7 @@ export type RuntimePluginDescriptor = {
|
|
|
2308
2381
|
type GameMenuLabel = {
|
|
2309
2382
|
readonly key?: string | null;
|
|
2310
2383
|
readonly text: string;
|
|
2384
|
+
readonly words?: string | null;
|
|
2311
2385
|
};
|
|
2312
2386
|
declare const GAME_MENU_DYNAMIC_SOURCES: readonly [
|
|
2313
2387
|
"textLanguage",
|
|
@@ -2710,10 +2784,15 @@ type UIComponentParam = {
|
|
|
2710
2784
|
id: string;
|
|
2711
2785
|
/** What the author called it, shown in the instance's inspector. */
|
|
2712
2786
|
name: string;
|
|
2713
|
-
type:
|
|
2714
|
-
/**
|
|
2787
|
+
type: UIComponentParamType;
|
|
2788
|
+
/**
|
|
2789
|
+
* Used by an instance that has not overridden it, and by the definition's own preview. For a
|
|
2790
|
+
* `text` parameter these are words written directly, translated through the definition's own unit
|
|
2791
|
+
* (`uiComponentParamUnitId(componentId, paramId)`).
|
|
2792
|
+
*/
|
|
2715
2793
|
defaultValue: string;
|
|
2716
2794
|
};
|
|
2795
|
+
type UIComponentParamType = "string" | "text";
|
|
2717
2796
|
type UIElement = {
|
|
2718
2797
|
id: UIElementId;
|
|
2719
2798
|
type: string;
|
|
@@ -2773,6 +2852,20 @@ type UIElementValueBinding = {
|
|
|
2773
2852
|
| {
|
|
2774
2853
|
kind: "listItemField";
|
|
2775
2854
|
fieldId: string;
|
|
2855
|
+
}
|
|
2856
|
+
/**
|
|
2857
|
+
* Show the value one placement gives a text parameter of the component this element is part of.
|
|
2858
|
+
*
|
|
2859
|
+
* The component's counterpart of `listItemField`, and the same kind of read: no graph, nothing
|
|
2860
|
+
* kept alive - the value is taken from the placement being drawn (`resolveUIComponentTextParams`),
|
|
2861
|
+
* so the editing canvas draws each placement with its own words, and the game translates each
|
|
2862
|
+
* through the placement's own unit or reads the key it names. Only a text parameter answers one,
|
|
2863
|
+
* and only a widget's words take one; outside a placement (the component's own editor) the
|
|
2864
|
+
* element's own words are drawn, as sample text.
|
|
2865
|
+
*/
|
|
2866
|
+
| {
|
|
2867
|
+
kind: "componentParam";
|
|
2868
|
+
paramId: string;
|
|
2776
2869
|
};
|
|
2777
2870
|
type UILayout = {
|
|
2778
2871
|
x: number;
|
|
@@ -3821,7 +3914,7 @@ declare const en: {
|
|
|
3821
3914
|
readonly table: {
|
|
3822
3915
|
readonly storyLabel: "Source";
|
|
3823
3916
|
readonly sourceUi: "Interface text";
|
|
3824
|
-
readonly sourceKeys: "
|
|
3917
|
+
readonly sourceKeys: "Translation keys";
|
|
3825
3918
|
readonly modeTranslate: "Translate";
|
|
3826
3919
|
readonly modeReview: "Review";
|
|
3827
3920
|
readonly filterAll: "All";
|
|
@@ -3842,6 +3935,12 @@ declare const en: {
|
|
|
3842
3935
|
readonly removeKey: "Remove key";
|
|
3843
3936
|
readonly removeKeyConfirm: "Remove {name}?";
|
|
3844
3937
|
readonly removeKeyConfirmDetail: "Existing translations of this key stay in the language files.";
|
|
3938
|
+
readonly removeKeyWidgets: "These widgets keep the key's words and translations as their own:";
|
|
3939
|
+
readonly removeKeyBlueprints: "Blueprints that use the key:";
|
|
3940
|
+
readonly removeKeyUsedByElement: "{owner} \u25B8 {element}";
|
|
3941
|
+
readonly removeKeyUsedByBlueprint: "Blueprint \u201C{name}\u201D";
|
|
3942
|
+
readonly removeKeyUsedByMore: "and {count} more";
|
|
3943
|
+
readonly removeKeyUsedByAfter: "Once the key is removed, the project check reports each of these blueprints.";
|
|
3845
3944
|
readonly sourceColumn: "Source";
|
|
3846
3945
|
readonly targetColumn: "Translation";
|
|
3847
3946
|
readonly targetPlaceholder: "Translate\u2026";
|
|
@@ -3963,6 +4062,18 @@ declare const en: {
|
|
|
3963
4062
|
readonly findPlaceholder: "Find in lines";
|
|
3964
4063
|
};
|
|
3965
4064
|
};
|
|
4065
|
+
readonly textSourceMigration: {
|
|
4066
|
+
readonly message: {
|
|
4067
|
+
readonly one: "Interface text was upgraded. The words of {count} widget now come from a different source.";
|
|
4068
|
+
readonly other: "Interface text was upgraded. The words of {count} widgets now come from a different source.";
|
|
4069
|
+
};
|
|
4070
|
+
readonly place: "{n}. {owner} \u25B8 {element}: {change}";
|
|
4071
|
+
readonly marksKept: "now Direct, keeping its marks, and no longer uses the key {key}";
|
|
4072
|
+
readonly bindingDropped: "a binding that never showed was removed, and the key {key} shows";
|
|
4073
|
+
readonly missingKey: "the key {key} does not exist, so it is now Direct, with the same words and translations";
|
|
4074
|
+
readonly keyDiffered: "now Direct, keeping the words it showed, and no longer uses the key {key}";
|
|
4075
|
+
readonly locate: "Locate {n}";
|
|
4076
|
+
};
|
|
3966
4077
|
readonly recovery: {
|
|
3967
4078
|
readonly enter: "Open in recovery mode";
|
|
3968
4079
|
readonly enterFailed: "Could not open recovery mode: {error}";
|
|
@@ -4172,7 +4283,7 @@ declare const en: {
|
|
|
4172
4283
|
readonly liveCheckpointNone: "There was nothing uncommitted to record.";
|
|
4173
4284
|
readonly livePendingOne: "1 change is waiting for the host.";
|
|
4174
4285
|
readonly livePendingMany: "{count} changes are waiting for the host.";
|
|
4175
|
-
readonly liveFrozenWhat: "The stories, the cast, the translations, the whole asset library - files included - and the project's own tables (the dictionary, the audio tracks, the asset sets, the variables, the
|
|
4286
|
+
readonly liveFrozenWhat: "The stories, the cast, the translations, the whole asset library - files included - and the project's own tables (the dictionary, the audio tracks, the asset sets, the variables, the translation keys, the build variants, the DLC and the palette) are saved. Everything else here is current and read-only until the session ends.";
|
|
4176
4287
|
readonly liveUnavailableHere: "Unavailable in a live session.";
|
|
4177
4288
|
readonly liveClaimsLabel: "Lines being written";
|
|
4178
4289
|
readonly liveClaimOne: "{name} is writing 1 line.";
|
|
@@ -4357,7 +4468,7 @@ declare const en: {
|
|
|
4357
4468
|
readonly saveFailed: "Save failed";
|
|
4358
4469
|
readonly retrySave: "Retry saving now";
|
|
4359
4470
|
readonly resetZoom: "Reset zoom to 100%";
|
|
4360
|
-
readonly shortcuts: "
|
|
4471
|
+
readonly shortcuts: "Shortcuts and mouse actions";
|
|
4361
4472
|
readonly words: {
|
|
4362
4473
|
readonly one: "{count} word";
|
|
4363
4474
|
readonly other: "{count} words";
|
|
@@ -4374,9 +4485,10 @@ declare const en: {
|
|
|
4374
4485
|
readonly runStatus: "Run status";
|
|
4375
4486
|
readonly projectTrust: "Project trust";
|
|
4376
4487
|
readonly studioTasks: "Background work";
|
|
4488
|
+
readonly problems: "Problems";
|
|
4377
4489
|
readonly unsavedChanges: "Unsaved changes";
|
|
4378
4490
|
readonly wordCount: "Story stats";
|
|
4379
|
-
readonly shortcuts: "
|
|
4491
|
+
readonly shortcuts: "Shortcuts and mouse actions";
|
|
4380
4492
|
readonly notifications: "Notifications";
|
|
4381
4493
|
readonly theme: "Theme switcher";
|
|
4382
4494
|
readonly zoom: "Zoom level";
|
|
@@ -4731,7 +4843,7 @@ declare const en: {
|
|
|
4731
4843
|
readonly conflict: "Also bound to {name}";
|
|
4732
4844
|
readonly empty: "No matching shortcuts";
|
|
4733
4845
|
readonly openSettings: "Customize Keyboard Shortcuts";
|
|
4734
|
-
readonly cheatSheetTitle: "
|
|
4846
|
+
readonly cheatSheetTitle: "Shortcuts and Mouse Actions";
|
|
4735
4847
|
readonly cheatSheetCustomize: "Customize\u2026";
|
|
4736
4848
|
readonly categories: {
|
|
4737
4849
|
readonly general: "General";
|
|
@@ -4750,7 +4862,7 @@ declare const en: {
|
|
|
4750
4862
|
readonly catalog: {
|
|
4751
4863
|
readonly commandPalette: "Show and Run Commands";
|
|
4752
4864
|
readonly quickOpen: "Quick Open";
|
|
4753
|
-
readonly cheatSheet: "Show
|
|
4865
|
+
readonly cheatSheet: "Show Shortcuts and Mouse Actions";
|
|
4754
4866
|
readonly contextHelp: "Help for What Is Focused";
|
|
4755
4867
|
readonly reopenClosedTab: "Reopen Closed Tab";
|
|
4756
4868
|
readonly localizationFind: "Find in Translations";
|
|
@@ -4805,12 +4917,110 @@ declare const en: {
|
|
|
4805
4917
|
readonly playheadEnd: "Move Playhead to End";
|
|
4806
4918
|
};
|
|
4807
4919
|
};
|
|
4920
|
+
readonly gestures: {
|
|
4921
|
+
readonly withModifiers: "{keys}+{gesture}";
|
|
4922
|
+
readonly middleClickTab: "Middle-click a tab";
|
|
4923
|
+
readonly doubleClickTab: "Double-click a tab";
|
|
4924
|
+
readonly clickTab: "Click a tab";
|
|
4925
|
+
readonly doubleClickDivider: "Double-click the divider";
|
|
4926
|
+
readonly doubleClickRow: "Double-click a row";
|
|
4927
|
+
readonly clickRow: "Click a row";
|
|
4928
|
+
readonly dragAcrossRows: "Drag across rows";
|
|
4929
|
+
readonly dragRowHandle: "Drag a row's handle";
|
|
4930
|
+
readonly clickName: "Click a name";
|
|
4931
|
+
readonly dragHandle: "Drag a handle";
|
|
4932
|
+
readonly arrowKeys: "Arrow keys";
|
|
4933
|
+
readonly middleDrag: "Middle-drag";
|
|
4934
|
+
readonly scroll: "Scroll";
|
|
4935
|
+
readonly drag: "Drag";
|
|
4936
|
+
readonly clickElement: "Click an element";
|
|
4937
|
+
readonly doubleClickContainer: "Double-click a container";
|
|
4938
|
+
readonly doubleClickText: "Double-click text or a button";
|
|
4939
|
+
readonly doubleClickImage: "Double-click an image";
|
|
4940
|
+
readonly dragImageAsset: "Drag an image asset onto the canvas";
|
|
4941
|
+
readonly doubleClickOutlineItem: "Double-click an outline item";
|
|
4942
|
+
readonly dragOutlineItem: "Drag an outline item";
|
|
4943
|
+
readonly clickNode: "Click a node";
|
|
4944
|
+
readonly rightClickCanvas: "Right-click the canvas";
|
|
4945
|
+
readonly dragPinToCanvas: "Drag from a pin onto empty canvas";
|
|
4946
|
+
readonly doubleClickWire: "Double-click a wire";
|
|
4947
|
+
readonly doubleClickGroupTitle: "Double-click a group's title";
|
|
4948
|
+
readonly middleClickTitle: "Middle-click the title row";
|
|
4949
|
+
readonly doubleClickTrack: "Double-click a track";
|
|
4950
|
+
readonly clickAsset: "Click an asset";
|
|
4951
|
+
readonly doubleClick: "Double-click";
|
|
4952
|
+
readonly dragToEditorArea: "Drag into the editor area";
|
|
4953
|
+
readonly dragOntoGroup: "Drag onto a group";
|
|
4954
|
+
readonly dragWaveform: "Drag on the waveform";
|
|
4955
|
+
readonly doubleClickWaveform: "Double-click the waveform";
|
|
4956
|
+
readonly doubleClickMarker: "Double-click a marker";
|
|
4957
|
+
readonly doubleClickPicture: "Double-click the picture";
|
|
4958
|
+
readonly doubleClickTimeline: "Double-click the timeline";
|
|
4959
|
+
};
|
|
4960
|
+
readonly fixed: {
|
|
4961
|
+
readonly toggleSelection: "Add to or Remove from Selection";
|
|
4962
|
+
readonly addToSelection: "Add to Selection";
|
|
4963
|
+
readonly panCanvas: "Pan the Canvas";
|
|
4964
|
+
readonly zoomAtPointer: "Zoom at the Pointer";
|
|
4965
|
+
readonly easingSnap: "Snap an Easing Handle to the Grid";
|
|
4966
|
+
readonly easingNudge: "Nudge a Focused Easing Handle";
|
|
4967
|
+
readonly general: {
|
|
4968
|
+
readonly keepTabOpen: "Keep a Preview Tab Open";
|
|
4969
|
+
readonly selectTabs: "Select Several Tabs";
|
|
4970
|
+
readonly resetSplit: "Split the Editor Area Evenly";
|
|
4971
|
+
};
|
|
4972
|
+
readonly story: {
|
|
4973
|
+
readonly selectRowRange: "Select a Range of Rows";
|
|
4974
|
+
readonly moveRows: "Move Rows";
|
|
4975
|
+
readonly followReference: "Go to What a Name Refers To";
|
|
4976
|
+
readonly continueRow: "Commit and Continue With the Same Kind of Row";
|
|
4977
|
+
readonly blankRow: "Commit and Start a Blank Row";
|
|
4978
|
+
readonly finishEditing: "Finish Editing a Row";
|
|
4979
|
+
readonly pastePlain: "Paste Without Paste as Rows";
|
|
4980
|
+
};
|
|
4981
|
+
readonly uiEditor: {
|
|
4982
|
+
readonly selectInside: "Select Inside a Container";
|
|
4983
|
+
readonly editText: "Edit Text in Place";
|
|
4984
|
+
readonly discardText: "Discard the Text Being Edited";
|
|
4985
|
+
readonly crop: "Crop an Image";
|
|
4986
|
+
readonly suspendSnap: "Suspend Smart Snap";
|
|
4987
|
+
readonly dropImage: "Add an Image Element";
|
|
4988
|
+
readonly reorder: "Reorder or Move Into Another Element";
|
|
4989
|
+
};
|
|
4990
|
+
readonly blueprint: {
|
|
4991
|
+
readonly addNode: "Add a Node";
|
|
4992
|
+
readonly addConnectedNode: "Add a Connected Node";
|
|
4993
|
+
readonly deleteWire: "Delete a Wire";
|
|
4994
|
+
readonly deleteSelection: "Delete Selection";
|
|
4995
|
+
readonly renameGroup: "Rename a Group";
|
|
4996
|
+
};
|
|
4997
|
+
readonly storyMotion: {
|
|
4998
|
+
readonly noFrameSnap: "Drag Without Frame Snapping";
|
|
4999
|
+
readonly addKeyframe: "Add a Keyframe";
|
|
5000
|
+
readonly panPreview: "Pan the Preview";
|
|
5001
|
+
readonly zoom: "Zoom the Preview or Timeline";
|
|
5002
|
+
readonly scrollTimeline: "Scroll the Timeline Sideways";
|
|
5003
|
+
};
|
|
5004
|
+
readonly assets: {
|
|
5005
|
+
readonly selectAssetRange: "Select a Range of Assets";
|
|
5006
|
+
readonly open: "Open";
|
|
5007
|
+
readonly moveToGroup: "Move to a Group";
|
|
5008
|
+
readonly tileSize: "Resize Thumbnails";
|
|
5009
|
+
readonly audioScroll: "Scroll the Waveform Sideways";
|
|
5010
|
+
readonly audioZoomTime: "Zoom the Waveform in Time";
|
|
5011
|
+
readonly audioZoomAmplitude: "Magnify the Waveform Vertically";
|
|
5012
|
+
readonly selectAudioRange: "Select a Stretch of Audio";
|
|
5013
|
+
readonly clearMarker: "Clear a Marker";
|
|
5014
|
+
readonly videoZoom: "Zoom the Picture";
|
|
5015
|
+
readonly videoActualSize: "Switch Between Fit and Actual Pixels";
|
|
5016
|
+
};
|
|
5017
|
+
};
|
|
4808
5018
|
};
|
|
4809
5019
|
readonly search: {
|
|
4810
5020
|
readonly placeholder: "Search project\u2026";
|
|
4811
5021
|
readonly titleBarPlaceholder: "Search in {name}";
|
|
4812
5022
|
readonly building: "Building search index\u2026";
|
|
4813
|
-
readonly idle: "Search scenes, characters, story text, assets and blueprints.";
|
|
5023
|
+
readonly idle: "Search scenes, characters, story text, interface text, assets and blueprints.";
|
|
4814
5024
|
readonly empty: "No results";
|
|
4815
5025
|
readonly more: "{count} more";
|
|
4816
5026
|
readonly caseSensitive: "Match case";
|
|
@@ -4830,8 +5040,9 @@ declare const en: {
|
|
|
4830
5040
|
readonly blueprint: "Blueprints";
|
|
4831
5041
|
readonly asset: "Assets";
|
|
4832
5042
|
readonly storyText: "Story Text";
|
|
5043
|
+
readonly uiText: "Interface Text";
|
|
4833
5044
|
readonly variable: "Variables";
|
|
4834
|
-
readonly uiTextKey: "
|
|
5045
|
+
readonly uiTextKey: "Translation Keys";
|
|
4835
5046
|
readonly blueprintNode: "Blueprint Nodes";
|
|
4836
5047
|
};
|
|
4837
5048
|
readonly occurrences: "\u00D7{count}";
|
|
@@ -4908,7 +5119,7 @@ declare const en: {
|
|
|
4908
5119
|
readonly other: "Its {count} scenes are deleted with it.";
|
|
4909
5120
|
};
|
|
4910
5121
|
readonly deleteSceneConfirm: "Delete scene \"{name}\"?";
|
|
4911
|
-
readonly deleteSceneDetail: "This removes the scene and its
|
|
5122
|
+
readonly deleteSceneDetail: "This removes the scene and all its rows. Jumps to it will stop resolving.";
|
|
4912
5123
|
};
|
|
4913
5124
|
readonly readFailed: {
|
|
4914
5125
|
readonly missing: "This story is no longer in this project.";
|
|
@@ -5003,9 +5214,9 @@ declare const en: {
|
|
|
5003
5214
|
readonly undoSceneRestored: "That scene is in the story again.";
|
|
5004
5215
|
readonly undoChapterGone: "That chapter is gone.";
|
|
5005
5216
|
readonly undoChapterRestored: "That chapter is in the story again.";
|
|
5006
|
-
readonly undoContainerGone: "The
|
|
5217
|
+
readonly undoContainerGone: "The row that line was inside is gone.";
|
|
5007
5218
|
readonly undoAnchorGone: "Where that line moved from is gone.";
|
|
5008
|
-
readonly undoContainerFilled: "That
|
|
5219
|
+
readonly undoContainerFilled: "That row has other lines inside it now.";
|
|
5009
5220
|
readonly undoSubtreeLost: "The lines that were inside it cannot be put back.";
|
|
5010
5221
|
readonly undoChaptersChanged: "The chapters are not the ones that step recorded.";
|
|
5011
5222
|
readonly undoCharacterGone: "That character is gone.";
|
|
@@ -5450,6 +5661,7 @@ declare const en: {
|
|
|
5450
5661
|
readonly mirrorState: "On / Off";
|
|
5451
5662
|
readonly waitFor: "Seconds or click";
|
|
5452
5663
|
readonly waitForEnd: "Wait for the clip";
|
|
5664
|
+
readonly hideOnEnd: "Hide when finished";
|
|
5453
5665
|
readonly fade: "Fade Seconds";
|
|
5454
5666
|
readonly loop: "Loop";
|
|
5455
5667
|
readonly returnable: "Return";
|
|
@@ -5734,6 +5946,7 @@ declare const en: {
|
|
|
5734
5946
|
readonly cutPointTitle: "The {name} build ends at this line. No other build contains this line.";
|
|
5735
5947
|
readonly cutPointInactive: "variant deleted";
|
|
5736
5948
|
readonly cutPointInactiveTitle: "The variant this line ended has been deleted, so it ends nothing.";
|
|
5949
|
+
readonly problem: "{message} ({rule})";
|
|
5737
5950
|
readonly tempSpeaker: "name only";
|
|
5738
5951
|
readonly createCharacter: "Create character \u201C{name}\u201D";
|
|
5739
5952
|
readonly createCharacterUnavailable: "Unavailable in a live session. Choose an existing character.";
|
|
@@ -5894,7 +6107,7 @@ declare const en: {
|
|
|
5894
6107
|
readonly image: "Image \u201C{name}\u201D is not on stage; an earlier row has to create it.";
|
|
5895
6108
|
readonly text: "Text \u201C{name}\u201D is not on stage; an earlier row has to create it.";
|
|
5896
6109
|
readonly layer: "Layer \u201C{name}\u201D is not on stage; an earlier row has to create it.";
|
|
5897
|
-
readonly video: "Video \u201C{name}\u201D is not on stage; an earlier row has to
|
|
6110
|
+
readonly video: "Video \u201C{name}\u201D is not on stage; an earlier row has to play it.";
|
|
5898
6111
|
readonly ambience: "Ambience effect \u201C{name}\u201D is not on stage; an earlier row has to create it.";
|
|
5899
6112
|
readonly character: "Character \u201C{name}\u201D is not on stage; an earlier row has to bring it on stage.";
|
|
5900
6113
|
readonly characterGone: "The character this row acts on is no longer in this project, so it is not on stage.";
|
|
@@ -6034,7 +6247,7 @@ declare const en: {
|
|
|
6034
6247
|
};
|
|
6035
6248
|
readonly show: {
|
|
6036
6249
|
readonly label: "Show";
|
|
6037
|
-
readonly detail: "Show a character, a stage object, or an image
|
|
6250
|
+
readonly detail: "Show a character, a stage object, or an image from the asset library";
|
|
6038
6251
|
};
|
|
6039
6252
|
readonly hide: {
|
|
6040
6253
|
readonly label: "Hide";
|
|
@@ -6072,10 +6285,6 @@ declare const en: {
|
|
|
6072
6285
|
readonly label: "Text";
|
|
6073
6286
|
readonly detail: "Declare text on stage; /show reveals it";
|
|
6074
6287
|
};
|
|
6075
|
-
readonly video: {
|
|
6076
|
-
readonly label: "Video";
|
|
6077
|
-
readonly detail: "Declare a video on stage; /show reveals it";
|
|
6078
|
-
};
|
|
6079
6288
|
readonly vfx: {
|
|
6080
6289
|
readonly label: "Ambience";
|
|
6081
6290
|
readonly detail: "Declare a looping full-screen overlay: petals, rain, dust, light";
|
|
@@ -6090,7 +6299,7 @@ declare const en: {
|
|
|
6090
6299
|
};
|
|
6091
6300
|
readonly play: {
|
|
6092
6301
|
readonly label: "Play";
|
|
6093
|
-
readonly detail: "Play a video
|
|
6302
|
+
readonly detail: "Play a video from the asset library, or play a video again";
|
|
6094
6303
|
};
|
|
6095
6304
|
readonly front: {
|
|
6096
6305
|
readonly label: "Bring to Front";
|
|
@@ -6233,10 +6442,10 @@ declare const en: {
|
|
|
6233
6442
|
readonly condition: "Condition";
|
|
6234
6443
|
readonly if: "If";
|
|
6235
6444
|
readonly elseIf: "Else if";
|
|
6236
|
-
readonly else: "
|
|
6445
|
+
readonly else: "Else";
|
|
6237
6446
|
readonly repeat: "Repeat";
|
|
6238
6447
|
readonly repeatUntil: "Repeat until";
|
|
6239
|
-
readonly parallel: "
|
|
6448
|
+
readonly parallel: "Parallel";
|
|
6240
6449
|
readonly race: "Race, first to finish";
|
|
6241
6450
|
readonly sequence: "In order";
|
|
6242
6451
|
readonly nvl: "NVL";
|
|
@@ -6247,7 +6456,7 @@ declare const en: {
|
|
|
6247
6456
|
readonly declare: {
|
|
6248
6457
|
readonly scene: "Local";
|
|
6249
6458
|
readonly saved: "Var";
|
|
6250
|
-
readonly persistent: "
|
|
6459
|
+
readonly persistent: "Persistent";
|
|
6251
6460
|
};
|
|
6252
6461
|
readonly narration: "Narration";
|
|
6253
6462
|
readonly dialogue: "Dialogue";
|
|
@@ -6518,7 +6727,7 @@ declare const en: {
|
|
|
6518
6727
|
};
|
|
6519
6728
|
};
|
|
6520
6729
|
readonly storyInspector: {
|
|
6521
|
-
readonly textId: "
|
|
6730
|
+
readonly textId: "Unit ID";
|
|
6522
6731
|
readonly advanced: "Advanced";
|
|
6523
6732
|
readonly advancedParams: "Advanced params";
|
|
6524
6733
|
readonly noVariablesDeclared: "No variables declared";
|
|
@@ -6877,7 +7086,7 @@ declare const en: {
|
|
|
6877
7086
|
readonly setZIndex: "Set z-index";
|
|
6878
7087
|
};
|
|
6879
7088
|
readonly videoOperation: {
|
|
6880
|
-
readonly play: "Play
|
|
7089
|
+
readonly play: "Play";
|
|
6881
7090
|
readonly pause: "Pause";
|
|
6882
7091
|
readonly resume: "Resume";
|
|
6883
7092
|
readonly stop: "Stop";
|
|
@@ -6957,6 +7166,10 @@ declare const en: {
|
|
|
6957
7166
|
readonly videoName: "Video name";
|
|
6958
7167
|
readonly videoAsset: "Video asset";
|
|
6959
7168
|
readonly seekTime: "Seek to";
|
|
7169
|
+
readonly hideOnEnd: "Hide when finished";
|
|
7170
|
+
readonly leave: "Exit";
|
|
7171
|
+
readonly waitForEnd: "Wait for the video";
|
|
7172
|
+
readonly skipHint: "The player can end the video early by clicking or pressing the skip key.";
|
|
6960
7173
|
};
|
|
6961
7174
|
readonly nvl: {
|
|
6962
7175
|
readonly hint: "Child rows run in NVL mode. The transform below animates the NVL layer as it enters.";
|
|
@@ -7022,8 +7235,8 @@ declare const en: {
|
|
|
7022
7235
|
readonly conditionContainer: "Condition container. Add condition branches as children.";
|
|
7023
7236
|
readonly control: "Control";
|
|
7024
7237
|
readonly sequence: "Sequence";
|
|
7025
|
-
readonly parallel: "Parallel
|
|
7026
|
-
readonly race: "Race
|
|
7238
|
+
readonly parallel: "Parallel";
|
|
7239
|
+
readonly race: "Race";
|
|
7027
7240
|
readonly repeat: "Repeat";
|
|
7028
7241
|
readonly mode: {
|
|
7029
7242
|
readonly do: "Do";
|
|
@@ -7187,6 +7400,7 @@ declare const en: {
|
|
|
7187
7400
|
readonly list: "List view";
|
|
7188
7401
|
readonly icons: "Icon view";
|
|
7189
7402
|
readonly overview: "Overview";
|
|
7403
|
+
readonly details: "Details view";
|
|
7190
7404
|
};
|
|
7191
7405
|
readonly filter: {
|
|
7192
7406
|
readonly label: "Filters";
|
|
@@ -7205,6 +7419,17 @@ declare const en: {
|
|
|
7205
7419
|
readonly list: {
|
|
7206
7420
|
readonly emptyFiltered: "No assets matched the current filters.";
|
|
7207
7421
|
};
|
|
7422
|
+
readonly browser: {
|
|
7423
|
+
readonly results: {
|
|
7424
|
+
readonly one: "{count} result";
|
|
7425
|
+
readonly other: "{count} results";
|
|
7426
|
+
};
|
|
7427
|
+
readonly selected: {
|
|
7428
|
+
readonly one: "{count} selected";
|
|
7429
|
+
readonly other: "{count} selected";
|
|
7430
|
+
};
|
|
7431
|
+
readonly location: "Location";
|
|
7432
|
+
};
|
|
7208
7433
|
readonly iconView: {
|
|
7209
7434
|
readonly updating: "Updating\u2026";
|
|
7210
7435
|
readonly assetCount: {
|
|
@@ -7354,13 +7579,13 @@ declare const en: {
|
|
|
7354
7579
|
readonly locale: "Language";
|
|
7355
7580
|
readonly release: "Variant";
|
|
7356
7581
|
};
|
|
7357
|
-
readonly deletedVariant: "Deleted
|
|
7582
|
+
readonly deletedVariant: "Deleted value";
|
|
7358
7583
|
readonly variantCount: {
|
|
7359
|
-
readonly one: "{count}
|
|
7360
|
-
readonly other: "{count}
|
|
7584
|
+
readonly one: "{count} value";
|
|
7585
|
+
readonly other: "{count} values";
|
|
7361
7586
|
};
|
|
7362
|
-
readonly variantsResolved: "{resolved} of {total}
|
|
7363
|
-
readonly unfinished: "No
|
|
7587
|
+
readonly variantsResolved: "{resolved} of {total} values";
|
|
7588
|
+
readonly unfinished: "No values declared";
|
|
7364
7589
|
readonly inUseTitle: "{name} is still in use";
|
|
7365
7590
|
readonly inUseMessage: "The following places name it and will stop resolving:";
|
|
7366
7591
|
readonly deleteConfirmMessage: "The files inside this set are deleted too.";
|
|
@@ -7375,7 +7600,7 @@ declare const en: {
|
|
|
7375
7600
|
};
|
|
7376
7601
|
readonly create: {
|
|
7377
7602
|
readonly title: "New asset set";
|
|
7378
|
-
readonly subTitle: "New set under this
|
|
7603
|
+
readonly subTitle: "New set under this value";
|
|
7379
7604
|
readonly no: {
|
|
7380
7605
|
readonly locale: "This project declares one language.";
|
|
7381
7606
|
readonly release: "This project has no variants.";
|
|
@@ -7388,8 +7613,8 @@ declare const en: {
|
|
|
7388
7613
|
readonly filter: "Members carry";
|
|
7389
7614
|
readonly residencyBlocked: "A set that varies by variant cannot sit under one that varies by language.";
|
|
7390
7615
|
readonly fallback: "Falls back to";
|
|
7391
|
-
readonly fallbackMissing: "This
|
|
7392
|
-
readonly variants: "
|
|
7616
|
+
readonly fallbackMissing: "This value has no file, so nothing in this set resolves.";
|
|
7617
|
+
readonly variants: "Values";
|
|
7393
7618
|
readonly variantInherited: "fallback";
|
|
7394
7619
|
readonly variantMissing: "No file";
|
|
7395
7620
|
readonly variantAmbiguous: "{count} files";
|
|
@@ -7679,7 +7904,7 @@ declare const en: {
|
|
|
7679
7904
|
readonly tab: {
|
|
7680
7905
|
readonly title: "Blueprint";
|
|
7681
7906
|
readonly invalid: "Blueprint tab is invalid.";
|
|
7682
|
-
readonly notFound: "Blueprint not found
|
|
7907
|
+
readonly notFound: "Blueprint not found in this project";
|
|
7683
7908
|
};
|
|
7684
7909
|
readonly breakpoint: {
|
|
7685
7910
|
readonly add: "Add breakpoint";
|
|
@@ -7713,6 +7938,15 @@ declare const en: {
|
|
|
7713
7938
|
readonly other: "Deleted the unknown node and its {count} hidden connections. Undo to restore.";
|
|
7714
7939
|
};
|
|
7715
7940
|
};
|
|
7941
|
+
readonly wire: {
|
|
7942
|
+
readonly nodeDetail: "{node} ({detail})";
|
|
7943
|
+
readonly end: "{node} \u00B7 {pin}";
|
|
7944
|
+
readonly connectedTo: "Connected to {target}";
|
|
7945
|
+
readonly goTo: "Go to {target}";
|
|
7946
|
+
readonly goToNth: "Go to {target} ({n})";
|
|
7947
|
+
readonly goToConnected: "Go to connected node";
|
|
7948
|
+
readonly name: "Wire from {from} to {to}";
|
|
7949
|
+
};
|
|
7716
7950
|
readonly crossProject: {
|
|
7717
7951
|
readonly pasted: {
|
|
7718
7952
|
readonly one: "{count} node pasted";
|
|
@@ -7813,7 +8047,7 @@ declare const en: {
|
|
|
7813
8047
|
readonly noRuntime: "Node \"{node}\": no runtime for type \"{type}\".";
|
|
7814
8048
|
readonly inputMissing: "\"{node}\" has nothing connected to \"{pin}\".";
|
|
7815
8049
|
readonly stepLimit: "\"{head}\" stopped at \"{node}\" after {steps} steps without a wait.";
|
|
7816
|
-
readonly stepLimitGlobal: "\"{head}\" in
|
|
8050
|
+
readonly stepLimitGlobal: "\"{head}\" in App logic stopped at \"{node}\" after {steps} steps without a wait.";
|
|
7817
8051
|
readonly unknownType: "Node \"{node}\": unknown type \"{type}\". Its plugin may be uninstalled or disabled.";
|
|
7818
8052
|
readonly variableIdInvalid: "Node \"{node}\": pick a variable.";
|
|
7819
8053
|
readonly persistentVariableIdInvalid: "Node \"{node}\": pick a persistent variable.";
|
|
@@ -7975,6 +8209,7 @@ declare const en: {
|
|
|
7975
8209
|
readonly keys: "Keys";
|
|
7976
8210
|
readonly window: "Window";
|
|
7977
8211
|
readonly display: "Display";
|
|
8212
|
+
readonly conditions: "Conditions";
|
|
7978
8213
|
};
|
|
7979
8214
|
};
|
|
7980
8215
|
readonly owner: {
|
|
@@ -8894,6 +9129,7 @@ declare const en: {
|
|
|
8894
9129
|
readonly getVisible: "Get Visible";
|
|
8895
9130
|
readonly getWrapMode: "Get Wrap Mode";
|
|
8896
9131
|
readonly goPage: "Go Page";
|
|
9132
|
+
readonly replacePage: "Replace Page";
|
|
8897
9133
|
readonly goBack: "Go back";
|
|
8898
9134
|
readonly showLayer: "Show Layer";
|
|
8899
9135
|
readonly hideLayer: "Hide Layer";
|
|
@@ -9109,6 +9345,7 @@ declare const en: {
|
|
|
9109
9345
|
readonly toggle: "Toggle";
|
|
9110
9346
|
readonly toggleDialogDisplay: "Toggle Dialog Display";
|
|
9111
9347
|
readonly toggleSwitch: "Toggle Switch";
|
|
9348
|
+
readonly translationKeyText: "Translation Key Text";
|
|
9112
9349
|
readonly trim: "Trim";
|
|
9113
9350
|
readonly trimEnd: "Trim End";
|
|
9114
9351
|
readonly trimStart: "Trim Start";
|
|
@@ -9148,6 +9385,7 @@ declare const en: {
|
|
|
9148
9385
|
readonly getTotalPlaytime: "Get Total Playtime";
|
|
9149
9386
|
};
|
|
9150
9387
|
readonly nodeDescription: {
|
|
9388
|
+
readonly getComponentParam: "The value this placement sets for the chosen parameter, or the parameter's default when it sets none. A Text parameter that reads from a translation key gives the key's name; Translation Key Text gives its words.";
|
|
9151
9389
|
readonly compareEqual: "True when A and B are the same value of the same type. The number 1 and the text \"1\" are not equal.";
|
|
9152
9390
|
readonly compareNotEqual: "True when A and B differ in value or in type. The number 1 and the text \"1\" count as different.";
|
|
9153
9391
|
readonly compareGreaterThan: "True when A is greater than B. Both sides are compared as numbers; a side that cannot be read as a number gives false.";
|
|
@@ -9161,6 +9399,12 @@ declare const en: {
|
|
|
9161
9399
|
readonly appBoot: "Runs once each time the game starts, after the first screen is showing, and does not hold that screen back. On Game Ready has already run by then. In Dev Mode it runs again after every reload.";
|
|
9162
9400
|
readonly gameReady: "Runs when the game is ready, before any story starts and before the first screen shows; the screen waits for it to finish. Runs before App Boot, and can run again when a game is started or loaded.";
|
|
9163
9401
|
readonly goBack: "Closes the current page and returns to the page beneath it. On the bottom page it does nothing.";
|
|
9402
|
+
readonly replacePage: "Opens a page in place of the current page, and closes the current page. Go back and Go Page set to None do not return to it.";
|
|
9403
|
+
readonly isGameOverlay: "True when this page, layer or Game UI is shown over a running game. In App logic, true while a page or a modal layer covers the story.";
|
|
9404
|
+
readonly localizationGetText: "Gets a translation key's text in the player's current language, or its source text when that language has no translation. A key that does not exist gives its name. Translation Key Text gives the same text and can also be used in Blueprint Value and functions.";
|
|
9405
|
+
readonly translationKeyText: "A translation key's text in the player's current language, or its source text when that language has no translation. A key that does not exist gives its name. The same text as Get Text, and also usable in Blueprint Value and functions. A Blueprint Value that shows it updates when the player changes language.";
|
|
9406
|
+
readonly format: "Replaces the placeholders in Template with values: {0}, {1} and so on with the items of an array, {name} with the field of that name in an object. A placeholder with no value becomes empty. A translated template comes from Translation Key Text.";
|
|
9407
|
+
readonly formatText: "Replaces {0}, {1} and so on in Text with the items of Values. Format does the same, also fills {name} from an object, and can be used in Blueprint Value and functions.";
|
|
9164
9408
|
};
|
|
9165
9409
|
readonly live: {
|
|
9166
9410
|
readonly nodeClaimed: "{name} is editing this node";
|
|
@@ -9265,7 +9509,7 @@ declare const en: {
|
|
|
9265
9509
|
readonly describeOk: "Filled from the model";
|
|
9266
9510
|
readonly describeNoModel: "No model to read";
|
|
9267
9511
|
readonly describeNoBackend: "No runtime chosen";
|
|
9268
|
-
readonly describeBackendMissing: "Runtime not installed
|
|
9512
|
+
readonly describeBackendMissing: "Runtime not installed in this project";
|
|
9269
9513
|
readonly describeDistrusted: "Project not trusted";
|
|
9270
9514
|
readonly describeNotSupported: "This runtime lists nothing";
|
|
9271
9515
|
readonly describeFailed: "The model could not be read";
|
|
@@ -9423,10 +9667,10 @@ declare const en: {
|
|
|
9423
9667
|
readonly editorTitle: "Character Properties";
|
|
9424
9668
|
readonly thumbnail: "Thumbnail";
|
|
9425
9669
|
readonly preview: "Preview";
|
|
9426
|
-
readonly defaultAvatar: "
|
|
9427
|
-
readonly voiceTrack: "Voice
|
|
9428
|
-
readonly voiceTrackMissing: "Missing
|
|
9429
|
-
readonly voiceTrackEmpty: "Add a
|
|
9670
|
+
readonly defaultAvatar: "Default dialog avatar";
|
|
9671
|
+
readonly voiceTrack: "Voice track";
|
|
9672
|
+
readonly voiceTrackMissing: "Missing track";
|
|
9673
|
+
readonly voiceTrackEmpty: "Add a track under Voice in Project \u25B8 Game to give this character its own volume control.";
|
|
9430
9674
|
readonly entrance: "Entrance defaults";
|
|
9431
9675
|
readonly entranceEmpty: "Entrance rows use the stage's own values until this is set.";
|
|
9432
9676
|
readonly entranceDrag: "Drag to place";
|
|
@@ -9565,6 +9809,12 @@ declare const en: {
|
|
|
9565
9809
|
readonly remove: "Remove param";
|
|
9566
9810
|
readonly namePlaceholder: "Name";
|
|
9567
9811
|
readonly defaultPlaceholder: "Default";
|
|
9812
|
+
readonly type: "Type";
|
|
9813
|
+
readonly typeString: "String";
|
|
9814
|
+
readonly typeText: "Text";
|
|
9815
|
+
readonly bindLabel: "Parameter";
|
|
9816
|
+
readonly bindNone: "No parameter";
|
|
9817
|
+
readonly bindMissing: "Missing parameter";
|
|
9568
9818
|
};
|
|
9569
9819
|
readonly binding: {
|
|
9570
9820
|
readonly notReady: "Blueprint not ready for this control.";
|
|
@@ -10028,7 +10278,7 @@ declare const en: {
|
|
|
10028
10278
|
readonly hint: "Defined in the project; the value lives in the save file.";
|
|
10029
10279
|
};
|
|
10030
10280
|
readonly persistent: {
|
|
10031
|
-
readonly title: "
|
|
10281
|
+
readonly title: "Persistent variables";
|
|
10032
10282
|
readonly hint: "Defined in the project; app-level, shared with blueprints.";
|
|
10033
10283
|
};
|
|
10034
10284
|
};
|
|
@@ -10057,8 +10307,8 @@ declare const en: {
|
|
|
10057
10307
|
readonly ownerLabel: {
|
|
10058
10308
|
readonly globalMain: "App logic";
|
|
10059
10309
|
readonly surfaceMain: "Page logic";
|
|
10060
|
-
readonly widgetMain: "
|
|
10061
|
-
readonly widgetValue: "
|
|
10310
|
+
readonly widgetMain: "Widget logic";
|
|
10311
|
+
readonly widgetValue: "Widget value";
|
|
10062
10312
|
readonly storyAction: "Story action";
|
|
10063
10313
|
};
|
|
10064
10314
|
readonly stageSlot: {
|
|
@@ -10081,8 +10331,8 @@ declare const en: {
|
|
|
10081
10331
|
readonly createGameUi: "Create Game UI";
|
|
10082
10332
|
readonly globalSubtitle: "Global";
|
|
10083
10333
|
readonly blueprintType: "Blueprint";
|
|
10084
|
-
readonly openGlobalBlueprint: "Open
|
|
10085
|
-
readonly globalBlueprintUnavailable: "
|
|
10334
|
+
readonly openGlobalBlueprint: "Open App logic";
|
|
10335
|
+
readonly globalBlueprintUnavailable: "App logic unavailable";
|
|
10086
10336
|
readonly openSurface: "Open {label}";
|
|
10087
10337
|
readonly renameSurface: "Rename {label}";
|
|
10088
10338
|
readonly duplicateSurface: "Duplicate {label}";
|
|
@@ -10097,6 +10347,10 @@ declare const en: {
|
|
|
10097
10347
|
readonly pageValidationHint: "Check the page name and size before creating it.";
|
|
10098
10348
|
readonly gameUiSlotHint: "Select an available Game UI slot before creating it.";
|
|
10099
10349
|
readonly allSlotsUsed: "All Game UI slots already have a surface. Open an existing Game UI from the list.";
|
|
10350
|
+
readonly starterTitlePage: {
|
|
10351
|
+
readonly title: "Create Title Page";
|
|
10352
|
+
readonly description: "Includes Start and Continue buttons with their blueprints. Replaces the empty entry page.";
|
|
10353
|
+
};
|
|
10100
10354
|
};
|
|
10101
10355
|
readonly naming: {
|
|
10102
10356
|
readonly page: "Page {index}";
|
|
@@ -10206,6 +10460,9 @@ declare const en: {
|
|
|
10206
10460
|
readonly canvas: {
|
|
10207
10461
|
readonly unknownWidget: "Unknown widget";
|
|
10208
10462
|
readonly widgetRenderFailed: "Widget failed to draw";
|
|
10463
|
+
readonly wordsFromRowField: "These words come from the list row field \u201C{field}\u201D.";
|
|
10464
|
+
readonly wordsFromBlueprintValue: "These words come from the blueprint value \u201C{name}\u201D.";
|
|
10465
|
+
readonly wordsFromComponentParam: "These words come from the component parameter \u201C{param}\u201D, set on each placement.";
|
|
10209
10466
|
};
|
|
10210
10467
|
readonly editor: {
|
|
10211
10468
|
readonly componentNotFound: "Component not found";
|
|
@@ -10256,7 +10513,7 @@ declare const en: {
|
|
|
10256
10513
|
readonly showSelected: "Show selected";
|
|
10257
10514
|
readonly hideSelected: "Hide selected";
|
|
10258
10515
|
readonly addToComponentLibrary: "Add to Component Library";
|
|
10259
|
-
readonly
|
|
10516
|
+
readonly group: "Group";
|
|
10260
10517
|
readonly ungroup: "Ungroup";
|
|
10261
10518
|
readonly addState: "Add state";
|
|
10262
10519
|
readonly arrange: {
|
|
@@ -10373,7 +10630,7 @@ declare const en: {
|
|
|
10373
10630
|
readonly interaction: "Interaction";
|
|
10374
10631
|
};
|
|
10375
10632
|
readonly blueprint: {
|
|
10376
|
-
readonly controlLabel: "
|
|
10633
|
+
readonly controlLabel: "Widget logic";
|
|
10377
10634
|
};
|
|
10378
10635
|
readonly appearance: {
|
|
10379
10636
|
readonly title: "Appearance";
|
|
@@ -10431,12 +10688,27 @@ declare const en: {
|
|
|
10431
10688
|
readonly enableItalic: "Enable italic";
|
|
10432
10689
|
readonly disableItalic: "Disable italic";
|
|
10433
10690
|
};
|
|
10691
|
+
readonly sampleText: {
|
|
10692
|
+
readonly label: "Sample text";
|
|
10693
|
+
readonly hint: "Shown in the editor only. The game shows the story's current line.";
|
|
10694
|
+
readonly bindingNoEffect: "This binding has no effect in the {slot} slot.";
|
|
10695
|
+
readonly removeBinding: "Remove";
|
|
10696
|
+
readonly hintBlueprintValue: "Shown in the editor only. The game shows the Blueprint Value's result.";
|
|
10697
|
+
readonly hintComponentParam: "Shown while editing the component only. Each placement shows the value it sets for the parameter.";
|
|
10698
|
+
};
|
|
10699
|
+
readonly textWriters: {
|
|
10700
|
+
readonly title: "Written in the game by";
|
|
10701
|
+
readonly entry: "{blueprint} \u203A {node}";
|
|
10702
|
+
readonly count: "\u00D7{count}";
|
|
10703
|
+
readonly defaultValue: "Default value";
|
|
10704
|
+
readonly defaultValueHint: "The game shows this text until one of the blueprints below writes to it.";
|
|
10705
|
+
};
|
|
10434
10706
|
readonly localization: {
|
|
10707
|
+
readonly direct: "Direct";
|
|
10435
10708
|
readonly translationKey: "Translation key";
|
|
10436
|
-
readonly noSourceLanguage: "The project has no source language";
|
|
10437
10709
|
readonly none: "None";
|
|
10438
10710
|
readonly createKey: "Create new key\u2026";
|
|
10439
|
-
readonly createKeyTitle: "New
|
|
10711
|
+
readonly createKeyTitle: "New translation key";
|
|
10440
10712
|
readonly keyName: "Key name";
|
|
10441
10713
|
readonly keyNamePlaceholder: "menu.start\u2026";
|
|
10442
10714
|
readonly keyNameHint: "Letters, digits, and dots/underscores/hyphens between them.";
|
|
@@ -10450,7 +10722,7 @@ declare const en: {
|
|
|
10450
10722
|
readonly title: "List";
|
|
10451
10723
|
readonly sectionContent: "Content";
|
|
10452
10724
|
readonly runtimeItems: "Runtime items";
|
|
10453
|
-
readonly
|
|
10725
|
+
readonly runtimeListContent: "List content";
|
|
10454
10726
|
readonly runtimePageState: "Page state array";
|
|
10455
10727
|
readonly runtimeAppState: "App state array";
|
|
10456
10728
|
readonly runtimePageProps: "Page props array";
|
|
@@ -10528,8 +10800,6 @@ declare const en: {
|
|
|
10528
10800
|
readonly value: "Value";
|
|
10529
10801
|
readonly valueHint: "Starting text. What the player types is held by the running game, not by this document.";
|
|
10530
10802
|
readonly placeholder: "Placeholder";
|
|
10531
|
-
readonly placeholderKey: "Placeholder key";
|
|
10532
|
-
readonly placeholderKeyHint: "The placeholder is shown to the player: attach a key to translate it.";
|
|
10533
10803
|
readonly sectionBehavior: "Behavior";
|
|
10534
10804
|
readonly inputMode: "Input mode";
|
|
10535
10805
|
readonly inputModeText: "Text";
|
|
@@ -10547,11 +10817,9 @@ declare const en: {
|
|
|
10547
10817
|
readonly sectionColor: "Color";
|
|
10548
10818
|
readonly sectionBehavior: "Behavior";
|
|
10549
10819
|
readonly interactionDisabled: "Interaction disabled";
|
|
10550
|
-
readonly localizeLabel: "Localize label";
|
|
10551
10820
|
};
|
|
10552
10821
|
readonly text: {
|
|
10553
10822
|
readonly title: "Text";
|
|
10554
|
-
readonly localizeText: "Localize text";
|
|
10555
10823
|
};
|
|
10556
10824
|
readonly textMarks: {
|
|
10557
10825
|
readonly title: "Marks";
|
|
@@ -10588,7 +10856,6 @@ declare const en: {
|
|
|
10588
10856
|
readonly start: "Start";
|
|
10589
10857
|
readonly center: "Center";
|
|
10590
10858
|
readonly end: "End";
|
|
10591
|
-
readonly stretch: "Stretch";
|
|
10592
10859
|
readonly spaceBetween: "Space between";
|
|
10593
10860
|
readonly spaceAround: "Space around";
|
|
10594
10861
|
readonly gapHint: "Gap between children";
|
|
@@ -10737,6 +11004,9 @@ declare const en: {
|
|
|
10737
11004
|
readonly container: {
|
|
10738
11005
|
readonly name: "Container";
|
|
10739
11006
|
};
|
|
11007
|
+
readonly group: {
|
|
11008
|
+
readonly name: "Group";
|
|
11009
|
+
};
|
|
10740
11010
|
readonly dialog: {
|
|
10741
11011
|
readonly name: "Sentence";
|
|
10742
11012
|
readonly text: "The current line will appear here.";
|
|
@@ -11493,15 +11763,15 @@ declare const en: {
|
|
|
11493
11763
|
};
|
|
11494
11764
|
readonly bgmVolume: {
|
|
11495
11765
|
readonly title: "Music volume";
|
|
11496
|
-
readonly description: "The Music
|
|
11766
|
+
readonly description: "The Music track.";
|
|
11497
11767
|
};
|
|
11498
11768
|
readonly soundVolume: {
|
|
11499
11769
|
readonly title: "SFX volume";
|
|
11500
|
-
readonly description: "The SFX
|
|
11770
|
+
readonly description: "The SFX track.";
|
|
11501
11771
|
};
|
|
11502
11772
|
readonly voiceVolume: {
|
|
11503
11773
|
readonly title: "Voice volume";
|
|
11504
|
-
readonly description: "The Voice
|
|
11774
|
+
readonly description: "The Voice track.";
|
|
11505
11775
|
};
|
|
11506
11776
|
readonly voiceEndMode: {
|
|
11507
11777
|
readonly title: "When a voiced line ends";
|
|
@@ -11544,18 +11814,18 @@ declare const en: {
|
|
|
11544
11814
|
};
|
|
11545
11815
|
readonly deleteConfirm: "Delete \"{name}\"?";
|
|
11546
11816
|
readonly deleteDetail: {
|
|
11547
|
-
readonly one: "{count} reference falls back to its default
|
|
11548
|
-
readonly other: "{count} references fall back to their default
|
|
11817
|
+
readonly one: "{count} reference falls back to its default track.";
|
|
11818
|
+
readonly other: "{count} references fall back to their default track.";
|
|
11549
11819
|
};
|
|
11550
11820
|
readonly deleteChildren: {
|
|
11551
11821
|
readonly one: "{count} track under it moves to {parent}.";
|
|
11552
11822
|
readonly other: "{count} tracks under it move to {parent}.";
|
|
11553
11823
|
};
|
|
11554
11824
|
readonly slider: {
|
|
11555
|
-
readonly bgm: "
|
|
11556
|
-
readonly sound: "
|
|
11557
|
-
readonly voice: "Voice
|
|
11558
|
-
readonly global: "
|
|
11825
|
+
readonly bgm: "Music volume";
|
|
11826
|
+
readonly sound: "SFX volume";
|
|
11827
|
+
readonly voice: "Voice volume";
|
|
11828
|
+
readonly global: "Master volume";
|
|
11559
11829
|
};
|
|
11560
11830
|
};
|
|
11561
11831
|
readonly settings: {
|
|
@@ -11760,6 +12030,10 @@ declare const en: {
|
|
|
11760
12030
|
readonly label: "Help";
|
|
11761
12031
|
readonly description: "How the parts of Studio behave.";
|
|
11762
12032
|
};
|
|
12033
|
+
readonly titlePage: {
|
|
12034
|
+
readonly label: "New Title Page";
|
|
12035
|
+
readonly description: "Start and Continue buttons included.";
|
|
12036
|
+
};
|
|
11763
12037
|
};
|
|
11764
12038
|
readonly reopenHint: {
|
|
11765
12039
|
readonly menu: "Reopen this page from Help \u2192 Open Welcome.";
|
|
@@ -11984,6 +12258,7 @@ declare const en: {
|
|
|
11984
12258
|
readonly voice: "Voice";
|
|
11985
12259
|
readonly assets: "Assets";
|
|
11986
12260
|
readonly console: "Console";
|
|
12261
|
+
readonly problems: "Problems";
|
|
11987
12262
|
readonly storyMotion: "Story Motion";
|
|
11988
12263
|
readonly dashboard: "Dashboard";
|
|
11989
12264
|
readonly audioPreview: "Audio Preview";
|
|
@@ -12287,6 +12562,7 @@ declare const en: {
|
|
|
12287
12562
|
readonly page: "Page";
|
|
12288
12563
|
readonly layer: "Layer";
|
|
12289
12564
|
readonly faded: "Faded out";
|
|
12565
|
+
readonly dialogHidden: "Hidden";
|
|
12290
12566
|
readonly hiddenForGame: "Hidden while the game runs";
|
|
12291
12567
|
readonly returnsOnBack: "Shown again on Go back";
|
|
12292
12568
|
readonly onScreenCount: "{onScreen} of {total} on screen";
|
|
@@ -12631,6 +12907,7 @@ declare const en: {
|
|
|
12631
12907
|
readonly createGroup: {
|
|
12632
12908
|
readonly title: "Create Group";
|
|
12633
12909
|
readonly prompt: "Please enter a name for the {type} group";
|
|
12910
|
+
readonly promptIn: "Please enter a name for the group in {parent}";
|
|
12634
12911
|
readonly placeholder: "Enter group name\u2026";
|
|
12635
12912
|
readonly empty: "Group name cannot be empty";
|
|
12636
12913
|
};
|
|
@@ -12790,12 +13067,20 @@ declare const en: {
|
|
|
12790
13067
|
};
|
|
12791
13068
|
readonly unavailable: {
|
|
12792
13069
|
readonly windows: "Cannot build Windows apps on this machine.";
|
|
12793
|
-
readonly macos: "macOS apps
|
|
13070
|
+
readonly macos: "Cannot build macOS apps on this machine.";
|
|
12794
13071
|
readonly linux: "Cannot build Linux apps on this machine.";
|
|
12795
13072
|
readonly web: "Web builds are available on every machine.";
|
|
12796
13073
|
readonly android: "Android builds are available on every machine.";
|
|
12797
13074
|
readonly ios: "iOS builds are available on every machine.";
|
|
12798
13075
|
};
|
|
13076
|
+
readonly formatUnavailable: {
|
|
13077
|
+
readonly windows: "Not available on this machine.";
|
|
13078
|
+
readonly macos: "Requires a Mac.";
|
|
13079
|
+
readonly linux: "Not available on Windows.";
|
|
13080
|
+
readonly web: "Not available on this machine.";
|
|
13081
|
+
readonly android: "Not available on this machine.";
|
|
13082
|
+
readonly ios: "Not available on this machine.";
|
|
13083
|
+
};
|
|
12799
13084
|
readonly format: {
|
|
12800
13085
|
readonly zip: "Portable ZIP";
|
|
12801
13086
|
readonly nsis: "Installer";
|
|
@@ -12847,15 +13132,15 @@ declare const en: {
|
|
|
12847
13132
|
readonly appId: "App ID";
|
|
12848
13133
|
readonly copyright: "Copyright";
|
|
12849
13134
|
readonly icons: "Icons";
|
|
12850
|
-
readonly iconsHint: "Click an icon to change it in
|
|
13135
|
+
readonly iconsHint: "Click an icon to change it in Project \u25B8 App";
|
|
12851
13136
|
readonly iconUnset: "Not set";
|
|
12852
13137
|
readonly notSet: "Not set";
|
|
12853
13138
|
readonly editInProject: "Edit in Project \u25B8 App";
|
|
12854
13139
|
};
|
|
12855
13140
|
readonly content: {
|
|
12856
13141
|
readonly protection: "Asset protection";
|
|
12857
|
-
readonly protectionOn: "Assets
|
|
12858
|
-
readonly protectionOff: "Assets
|
|
13142
|
+
readonly protectionOn: "Assets are encrypted in the packaged game.";
|
|
13143
|
+
readonly protectionOff: "Assets ship unencrypted.";
|
|
12859
13144
|
readonly plugins: "Bundled plugins";
|
|
12860
13145
|
readonly pluginsNone: "No plugins are bundled with this game.";
|
|
12861
13146
|
readonly pluginsRescanUnavailable: "The plugin list cannot be rescanned in this window.";
|
|
@@ -12903,6 +13188,7 @@ declare const en: {
|
|
|
12903
13188
|
readonly artifactReadVersioned: "{product} {version}, built {date}";
|
|
12904
13189
|
readonly artifactVariantStated: "Read from the build folder.";
|
|
12905
13190
|
readonly artifactVariantUnknown: "This build does not state its variant. Select it below.";
|
|
13191
|
+
readonly artifactNoKey: "This build was made without a distribution key. The game ignores any patch exported for it.";
|
|
12906
13192
|
readonly artifactVariantMismatch: "This build is {build}. The DLC attaches to {variant}.";
|
|
12907
13193
|
readonly artifactWholeGame: "The patch includes the whole game.";
|
|
12908
13194
|
readonly contentLabel: "Variant the content comes from";
|
|
@@ -13010,10 +13296,13 @@ declare const en: {
|
|
|
13010
13296
|
readonly mirror: {
|
|
13011
13297
|
readonly official: "official source";
|
|
13012
13298
|
readonly change: "Change";
|
|
13299
|
+
readonly downloadFailed: "A file the build needed could not be downloaded. If this network reaches github.com slowly or not at all, choose a mirror for the build's downloads in Settings \u203A {section} and build again.";
|
|
13300
|
+
readonly certificateFailed: "The download's certificate could not be verified. That usually means a proxy, network accelerator or antivirus program on this computer is intercepting HTTPS; turning it off may fix this without a mirror.";
|
|
13013
13301
|
};
|
|
13014
13302
|
readonly preflight: {
|
|
13015
13303
|
readonly "no-targets": "Select at least one platform and format.";
|
|
13016
13304
|
readonly "unbuildable-platform": "This machine cannot build for {platform}.";
|
|
13305
|
+
readonly "unbuildable-format": "This machine cannot build the {format} format for {platform}.";
|
|
13017
13306
|
readonly "version-invalid": "Version {version} is not a valid semantic version; the build will fail.";
|
|
13018
13307
|
readonly "version-missing": "No version set; the game builds as 0.0.0.";
|
|
13019
13308
|
readonly "identifier-missing": "No project identifier; using the app id {appId}.";
|
|
@@ -13033,6 +13322,7 @@ declare const en: {
|
|
|
13033
13322
|
readonly "sidecar-crossbuild-exec-bit": string;
|
|
13034
13323
|
readonly "web-unprotected": "Asset protection does not apply to the web export; its files ship unprotected.";
|
|
13035
13324
|
readonly "mobile-unprotected": "Asset protection does not apply to Android or iOS packages.";
|
|
13325
|
+
readonly "distribution-key-missing": "No distribution key. The game this build produces will not accept patches.";
|
|
13036
13326
|
readonly "progress-carry-unsupported": string;
|
|
13037
13327
|
readonly "lossy-images": "Images are re-encoded at quality {setting} and lose detail permanently.";
|
|
13038
13328
|
readonly "lossy-audio": "Audio is re-encoded at {setting} kbit/s and loses detail permanently.";
|
|
@@ -13320,180 +13610,209 @@ declare const en: {
|
|
|
13320
13610
|
readonly description: "Nothing in the project references this asset";
|
|
13321
13611
|
readonly message: "{asset} is not used anywhere";
|
|
13322
13612
|
readonly messageIndexUnresolved: "Unused assets not listed: {location} points at an asset that cannot be identified";
|
|
13323
|
-
readonly messageIndexUnreadable: "Unused assets not listed: {location} could not be
|
|
13613
|
+
readonly messageIndexUnreadable: "Unused assets not listed: which assets {location} uses could not be determined";
|
|
13324
13614
|
readonly messageIndexNotBuilt: "Unused assets not listed: the project could not be scanned";
|
|
13615
|
+
readonly help: string;
|
|
13325
13616
|
};
|
|
13326
13617
|
readonly assetsMissing: {
|
|
13327
13618
|
readonly title: "Missing asset";
|
|
13328
13619
|
readonly description: "A reference names an asset the library no longer has";
|
|
13329
13620
|
readonly message: "{location} references a missing asset";
|
|
13621
|
+
readonly help: string;
|
|
13330
13622
|
};
|
|
13331
13623
|
readonly assetsUnreadable: {
|
|
13332
13624
|
readonly title: "Unreadable asset";
|
|
13333
13625
|
readonly description: "The file cannot be read or decoded";
|
|
13334
|
-
readonly message: "{asset}
|
|
13626
|
+
readonly message: "{asset} is damaged or is not in a format Studio can open";
|
|
13335
13627
|
readonly messageMissingBytes: "{asset} cannot be read from disk";
|
|
13628
|
+
readonly help: string;
|
|
13336
13629
|
};
|
|
13337
13630
|
readonly assetsOversized: {
|
|
13338
13631
|
readonly title: "Large file";
|
|
13339
13632
|
readonly description: "A file a build carries that is over the size this project allows";
|
|
13340
13633
|
readonly message: "{asset} is {size}, over the {limit} a build should carry";
|
|
13634
|
+
readonly help: string;
|
|
13341
13635
|
};
|
|
13342
13636
|
readonly assetsGroupIncomplete: {
|
|
13343
13637
|
readonly title: "Unfinished asset set";
|
|
13344
13638
|
readonly description: "A set that does not resolve to exactly one file for every variant it declares";
|
|
13345
13639
|
readonly message: "{set} has no file for {variant}";
|
|
13346
13640
|
readonly messageAmbiguous: "{set} has {count} files for {variant}";
|
|
13347
|
-
readonly messageResidency: "{set}
|
|
13348
|
-
readonly messageDeclaration: "{set} declares no
|
|
13349
|
-
readonly messageFallback: "{set} does not say which
|
|
13350
|
-
|
|
13351
|
-
readonly portabilityAssetName: {
|
|
13352
|
-
readonly title: "Unsafe file name";
|
|
13353
|
-
readonly description: "Characters or names some filesystems reject";
|
|
13354
|
-
readonly message: "{asset} cannot be written on every platform";
|
|
13355
|
-
};
|
|
13356
|
-
readonly portabilityCaseCollision: {
|
|
13357
|
-
readonly title: "Case collision";
|
|
13358
|
-
readonly description: "Names that differ only by letter case";
|
|
13359
|
-
readonly message: "{asset} collides with {other} on case-insensitive filesystems";
|
|
13641
|
+
readonly messageResidency: "{set} varies by variant and sits under a set that varies by language, which no build can resolve";
|
|
13642
|
+
readonly messageDeclaration: "{set} declares no values to resolve";
|
|
13643
|
+
readonly messageFallback: "{set} does not say which value the others fall back to";
|
|
13644
|
+
readonly help: string;
|
|
13360
13645
|
};
|
|
13361
13646
|
readonly portabilityMediaFormat: {
|
|
13362
13647
|
readonly title: "Unplayable format";
|
|
13363
13648
|
readonly description: "A codec some selected build targets cannot play";
|
|
13364
13649
|
readonly message: "{asset} does not play on {platform}";
|
|
13650
|
+
readonly help: string;
|
|
13365
13651
|
};
|
|
13366
13652
|
readonly portabilityVfxAlpha: {
|
|
13367
13653
|
readonly title: "Transparent overlay clip";
|
|
13368
13654
|
readonly description: "An overlay clip whose transparency some selected build targets ignore";
|
|
13369
13655
|
readonly message: "{asset} covers the stage on {platform}";
|
|
13656
|
+
readonly help: string;
|
|
13370
13657
|
};
|
|
13371
13658
|
readonly networkFetchNotAllowlisted: {
|
|
13372
13659
|
readonly title: "Address not on the allowlist";
|
|
13373
13660
|
readonly description: "A Fetch node aimed at an address this project does not allow";
|
|
13374
13661
|
readonly message: "{url} is not on this project's network request allowlist";
|
|
13662
|
+
readonly help: string;
|
|
13375
13663
|
};
|
|
13376
13664
|
readonly networkFetchDisallowed: {
|
|
13377
13665
|
readonly title: "Network node without network access";
|
|
13378
13666
|
readonly description: "A network node in a project whose network policy is off";
|
|
13379
13667
|
readonly message: "{blueprint} makes a network request, which this project does not allow";
|
|
13668
|
+
readonly help: string;
|
|
13380
13669
|
};
|
|
13381
13670
|
readonly storyUnreadable: {
|
|
13382
13671
|
readonly title: "Unreadable story";
|
|
13383
13672
|
readonly description: "A story document this Studio cannot open";
|
|
13673
|
+
readonly help: string;
|
|
13384
13674
|
};
|
|
13385
13675
|
readonly storyInvalidCommand: {
|
|
13386
13676
|
readonly title: "Invalid command";
|
|
13387
13677
|
readonly description: "A row the compiler refuses";
|
|
13388
13678
|
readonly message: "This row does not compile";
|
|
13679
|
+
readonly help: string;
|
|
13389
13680
|
};
|
|
13390
13681
|
readonly storyGotoMissing: {
|
|
13391
13682
|
readonly title: "Missing label";
|
|
13392
13683
|
readonly description: "A goto naming a label the scene does not declare";
|
|
13393
13684
|
readonly message: "Jumps to {label}, which this scene never declares";
|
|
13685
|
+
readonly messageEmpty: "Names no label to go to";
|
|
13686
|
+
readonly help: string;
|
|
13394
13687
|
};
|
|
13395
13688
|
readonly storyLabelDuplicate: {
|
|
13396
13689
|
readonly title: "Duplicate label";
|
|
13397
13690
|
readonly description: "Two declarations of one label; only the first is reached";
|
|
13398
|
-
readonly message: "{label} is already declared above, so
|
|
13691
|
+
readonly message: "{label} is already declared above, so every /goto to it lands there and not here";
|
|
13692
|
+
readonly help: string;
|
|
13399
13693
|
};
|
|
13400
13694
|
readonly storyLabelUnused: {
|
|
13401
13695
|
readonly title: "Unused label";
|
|
13402
13696
|
readonly description: "A label nothing jumps to";
|
|
13403
13697
|
readonly message: "Nothing jumps to {label}";
|
|
13698
|
+
readonly help: string;
|
|
13404
13699
|
};
|
|
13405
13700
|
readonly storyJumpMissing: {
|
|
13406
13701
|
readonly title: "Missing scene";
|
|
13407
13702
|
readonly description: "A jump naming a scene the project does not have";
|
|
13408
|
-
readonly message: "
|
|
13703
|
+
readonly message: "The target scene is not set, or is not in this story";
|
|
13704
|
+
readonly help: string;
|
|
13409
13705
|
};
|
|
13410
13706
|
readonly storyEmptyChoice: {
|
|
13411
13707
|
readonly title: "Empty choice";
|
|
13412
13708
|
readonly description: "A choice with nothing the player can pick";
|
|
13413
13709
|
readonly message: "This choice has no options";
|
|
13414
13710
|
readonly messageEmptyOption: "This option has no text";
|
|
13711
|
+
readonly help: string;
|
|
13415
13712
|
};
|
|
13416
13713
|
readonly storyDeadEnd: {
|
|
13417
13714
|
readonly title: "Dead end";
|
|
13418
13715
|
readonly description: "A scene that leaves on some paths and reaches its end on another";
|
|
13419
13716
|
readonly message: "Play runs off the end of the scene here";
|
|
13717
|
+
readonly help: string;
|
|
13420
13718
|
};
|
|
13421
13719
|
readonly storyCallCycle: {
|
|
13422
13720
|
readonly title: "Circular call";
|
|
13423
13721
|
readonly description: "A returnable jump reaching a scene that can call its own back";
|
|
13424
13722
|
readonly message: "Calls a scene that can call this one back";
|
|
13723
|
+
readonly help: string;
|
|
13425
13724
|
};
|
|
13426
13725
|
readonly storyUnreachableScene: {
|
|
13427
13726
|
readonly title: "Unreachable scene";
|
|
13428
13727
|
readonly description: "A scene nothing can reach from the start";
|
|
13429
13728
|
readonly message: "Nothing reaches this scene";
|
|
13729
|
+
readonly help: string;
|
|
13430
13730
|
};
|
|
13431
13731
|
readonly storyEmptyScene: {
|
|
13432
13732
|
readonly title: "Empty scene";
|
|
13433
13733
|
readonly description: "A scene with no content";
|
|
13434
|
-
readonly message: "This scene has no rows";
|
|
13734
|
+
readonly message: "This scene has no enabled rows";
|
|
13735
|
+
readonly help: string;
|
|
13435
13736
|
};
|
|
13436
13737
|
readonly storyAppTagUnknown: {
|
|
13437
13738
|
readonly title: "Unknown build variant";
|
|
13438
13739
|
readonly description: "A row compared with a variant the project does not have";
|
|
13439
|
-
readonly message: "No build variant is named \"{name}\", so this
|
|
13740
|
+
readonly message: "No build variant is named \"{name}\", so this comparison has the same result in every build";
|
|
13741
|
+
readonly help: string;
|
|
13440
13742
|
};
|
|
13441
13743
|
readonly storyRowsAfterEnding: {
|
|
13442
13744
|
readonly title: "Rows after an ending";
|
|
13443
13745
|
readonly description: "Rows written after an /ending row in the same list, which never play";
|
|
13444
13746
|
readonly message: "This row comes after an ending and is never played. Move it before the ending, or delete it";
|
|
13747
|
+
readonly help: string;
|
|
13445
13748
|
};
|
|
13446
13749
|
readonly storyQuitPageMissing: {
|
|
13447
13750
|
readonly title: "Quit with no page";
|
|
13448
13751
|
readonly description: "A /quit row that names no page, or one the project no longer has";
|
|
13449
|
-
readonly message: "This row names no page, so the
|
|
13450
|
-
readonly deleted: "
|
|
13752
|
+
readonly message: "This row names no page, so no page opens and the rows after it in this list never play";
|
|
13753
|
+
readonly deleted: "The page this row names is no longer in the project, so the playthrough ends with nothing on screen";
|
|
13754
|
+
readonly help: string;
|
|
13451
13755
|
};
|
|
13452
13756
|
readonly storyEndingNameDuplicate: {
|
|
13453
13757
|
readonly title: "Two endings with one name";
|
|
13454
13758
|
readonly description: "More than one ending sharing a display name";
|
|
13455
13759
|
readonly message: "Another ending is also called \"{name}\". A screen listing endings shows the name twice";
|
|
13760
|
+
readonly help: string;
|
|
13456
13761
|
};
|
|
13457
13762
|
readonly storyCutPointOrphan: {
|
|
13458
13763
|
readonly title: "Cut point with no variant";
|
|
13459
13764
|
readonly description: "A cut point written while the project has no build variant";
|
|
13460
13765
|
readonly message: "This project has no build variant, so this cut point ends nothing. Add a variant, or delete the row";
|
|
13766
|
+
readonly help: string;
|
|
13461
13767
|
};
|
|
13462
13768
|
readonly storyCutPointUnreachable: {
|
|
13463
13769
|
readonly title: "Cut point out of reach";
|
|
13464
13770
|
readonly description: "A cut point in a scene nothing can get to";
|
|
13465
13771
|
readonly message: "Nothing can reach this scene, so this cut point never ends a build";
|
|
13772
|
+
readonly help: string;
|
|
13466
13773
|
};
|
|
13467
13774
|
readonly storyStageObjectMissing: {
|
|
13468
13775
|
readonly title: "Missing stage object";
|
|
13469
13776
|
readonly description: "A row acting on an object no row in the scene creates";
|
|
13470
|
-
readonly message: "
|
|
13471
|
-
readonly messageCharacter: "
|
|
13777
|
+
readonly message: "No row in this scene creates {object}, so this row has nothing to act on";
|
|
13778
|
+
readonly messageCharacter: "No row in this scene brings {object} on stage, so this row has nothing to act on";
|
|
13779
|
+
readonly help: string;
|
|
13472
13780
|
};
|
|
13473
13781
|
readonly storyDeclaredNeverShown: {
|
|
13474
13782
|
readonly title: "Unshown stage object";
|
|
13475
13783
|
readonly description: "A create row declares an object no row shows";
|
|
13476
13784
|
readonly message: "{object} is declared here and no row shows it";
|
|
13785
|
+
readonly help: string;
|
|
13477
13786
|
};
|
|
13478
13787
|
readonly storyStageObjectDuplicate: {
|
|
13479
13788
|
readonly title: "Duplicate stage object";
|
|
13480
13789
|
readonly description: "Two rows creating one stage name; the second reuses the first";
|
|
13481
13790
|
readonly message: "{object} is already created above, so this row acts on that one";
|
|
13791
|
+
readonly help: string;
|
|
13792
|
+
};
|
|
13793
|
+
readonly storyVideoControlAfterEnd: {
|
|
13794
|
+
readonly title: "Video already finished";
|
|
13795
|
+
readonly description: "A row pausing, resuming, seeking or stopping a video after a play that waits for its end";
|
|
13796
|
+
readonly message: "{object} has already finished playing at this line; to continue while it plays, turn off \u201CWait for the video\u201D on its play row";
|
|
13797
|
+
readonly help: string;
|
|
13482
13798
|
};
|
|
13483
13799
|
readonly storyCharacterMissing: {
|
|
13484
13800
|
readonly title: "Missing character";
|
|
13485
13801
|
readonly description: "A row naming a character the project does not have";
|
|
13486
13802
|
readonly message: "This row names a character the project does not have";
|
|
13803
|
+
readonly help: string;
|
|
13487
13804
|
};
|
|
13488
13805
|
readonly storyTransitionUnavailable: {
|
|
13489
13806
|
readonly title: "Unavailable transition";
|
|
13490
13807
|
readonly description: "A row naming a transition this version cannot play";
|
|
13491
13808
|
readonly message: "The transition {transition} is not available, so this change plays as a cut";
|
|
13809
|
+
readonly help: string;
|
|
13492
13810
|
};
|
|
13493
13811
|
readonly storyBackgroundUnchanged: {
|
|
13494
13812
|
readonly title: "Unchanged background";
|
|
13495
13813
|
readonly description: "A row transitioning to the background already on screen";
|
|
13496
13814
|
readonly message: "This background is already on screen, so the transition changes nothing";
|
|
13815
|
+
readonly help: string;
|
|
13497
13816
|
};
|
|
13498
13817
|
readonly blueprintReferenceMissing: {
|
|
13499
13818
|
readonly title: "Missing target";
|
|
@@ -13505,40 +13824,47 @@ declare const en: {
|
|
|
13505
13824
|
readonly messageChoice: "Names a choice that no longer exists";
|
|
13506
13825
|
readonly messageEnding: "Names an ending that no longer exists";
|
|
13507
13826
|
readonly messageCharacter: "Names a character that no longer exists";
|
|
13508
|
-
readonly messageTextKey: "Names a
|
|
13827
|
+
readonly messageTextKey: "Names a translation key the project does not declare";
|
|
13509
13828
|
readonly messageDlc: "Names a DLC the project does not have";
|
|
13510
13829
|
readonly messageInputAction: "Names an input action the project does not declare";
|
|
13830
|
+
readonly help: string;
|
|
13511
13831
|
};
|
|
13512
13832
|
readonly blueprintElementRefMissing: {
|
|
13513
13833
|
readonly title: "Missing widget";
|
|
13514
13834
|
readonly description: "A node bound to a widget the project no longer has";
|
|
13515
13835
|
readonly message: "Bound to a widget that no longer exists";
|
|
13836
|
+
readonly help: string;
|
|
13516
13837
|
};
|
|
13517
13838
|
readonly blueprintFnTargetMissing: {
|
|
13518
13839
|
readonly title: "Missing function";
|
|
13519
13840
|
readonly description: "A Call Fn node whose function does not exist in its scope";
|
|
13520
13841
|
readonly message: "Calls a function that does not exist in this scope";
|
|
13521
13842
|
readonly messageNamed: "Calls {name}, which does not exist in this scope";
|
|
13843
|
+
readonly help: string;
|
|
13522
13844
|
};
|
|
13523
13845
|
readonly blueprintUnreachableNode: {
|
|
13524
13846
|
readonly title: "Unreachable node";
|
|
13525
13847
|
readonly description: "A node no entry point in its graph can reach";
|
|
13526
13848
|
readonly message: "Nothing reaches this node, so it never runs";
|
|
13849
|
+
readonly help: string;
|
|
13527
13850
|
};
|
|
13528
13851
|
readonly blueprintDlcEntranceUnguarded: {
|
|
13529
13852
|
readonly title: "Unguarded DLC entrance";
|
|
13530
|
-
readonly description: "A Start
|
|
13531
|
-
readonly message: "
|
|
13853
|
+
readonly description: "A Start Game node starting a DLC's story, with nothing asking whether the DLC is installed";
|
|
13854
|
+
readonly message: "No Is DLC Installed in this layer asks about this story's DLC";
|
|
13855
|
+
readonly help: string;
|
|
13532
13856
|
};
|
|
13533
13857
|
readonly blueprintEmptyEvent: {
|
|
13534
13858
|
readonly title: "Empty event";
|
|
13535
13859
|
readonly description: "An event layer with nothing wired to run";
|
|
13536
13860
|
readonly message: "This event runs nothing";
|
|
13861
|
+
readonly help: string;
|
|
13537
13862
|
};
|
|
13538
13863
|
readonly blueprintUnknownNode: {
|
|
13539
13864
|
readonly title: "Unknown node type";
|
|
13540
13865
|
readonly description: "A node whose type the project cannot load";
|
|
13541
13866
|
readonly message: "{type} is not loaded, so this node will not run in the game";
|
|
13867
|
+
readonly help: string;
|
|
13542
13868
|
};
|
|
13543
13869
|
readonly blueprintAssembledAssetName: {
|
|
13544
13870
|
readonly title: "Asset name assembled at run time";
|
|
@@ -13547,95 +13873,130 @@ declare const en: {
|
|
|
13547
13873
|
readonly messageBinding: "\"{prop}\" on \"{element}\" is bound to an asset name assembled at run time (from \"{origin}\"). A game package carries only the assets whose names are written in the project, so nothing will be there in the released game. Choose the asset in the asset picker, or read one already chosen from a list row or a variable";
|
|
13548
13874
|
readonly messageUnloadedNode: "\"{pin}\" on \"{node}\" receives an asset name from {origin}, which is not loaded, so the asset it names will not be in the released game. Install or switch on the plugin that provides this node type, then build again";
|
|
13549
13875
|
readonly messageUnloadedNodeBinding: "\"{prop}\" on \"{element}\" is bound to an asset name from {origin}, which is not loaded, so the asset it names will not be in the released game. Install or switch on the plugin that provides this node type, then build again";
|
|
13550
|
-
|
|
13551
|
-
readonly uiUnlocalizedText: {
|
|
13552
|
-
readonly title: "Unlocalized text";
|
|
13553
|
-
readonly description: "Text written straight onto a widget in a project that has a second language";
|
|
13554
|
-
readonly message: "{text} is not bound to a localization key";
|
|
13876
|
+
readonly help: string;
|
|
13555
13877
|
};
|
|
13556
13878
|
readonly uiPageUnreachable: {
|
|
13557
13879
|
readonly title: "Unreachable page";
|
|
13558
13880
|
readonly description: "A page nothing opens, embeds, or starts on";
|
|
13559
13881
|
readonly message: "Nothing opens this page";
|
|
13882
|
+
readonly help: string;
|
|
13560
13883
|
};
|
|
13561
13884
|
readonly uiEmptyBehavior: {
|
|
13562
13885
|
readonly title: "Button with no handler";
|
|
13563
13886
|
readonly description: "A clickable widget nothing listens to";
|
|
13564
13887
|
readonly message: "Nothing runs when this is clicked";
|
|
13888
|
+
readonly help: string;
|
|
13565
13889
|
};
|
|
13566
13890
|
readonly uiUnknownWidget: {
|
|
13567
13891
|
readonly title: "Unknown widget type";
|
|
13568
13892
|
readonly description: "A widget whose type the project cannot load";
|
|
13569
13893
|
readonly message: "{type} is not loaded, so this widget will not be drawn in the game";
|
|
13894
|
+
readonly help: string;
|
|
13570
13895
|
};
|
|
13571
13896
|
readonly uiComponentMissing: {
|
|
13572
13897
|
readonly title: "Missing component";
|
|
13573
13898
|
readonly description: "An instance of a component the project does not have";
|
|
13574
13899
|
readonly message: "This instance points at a component the project does not have";
|
|
13900
|
+
readonly help: string;
|
|
13575
13901
|
};
|
|
13576
13902
|
readonly uiFrameTargetMissing: {
|
|
13577
13903
|
readonly title: "Missing embedded page";
|
|
13578
13904
|
readonly description: "A Page widget embedding a page the project does not have";
|
|
13579
13905
|
readonly message: "This Page widget embeds a page the project does not have";
|
|
13906
|
+
readonly help: string;
|
|
13580
13907
|
};
|
|
13581
13908
|
readonly uiFrameLoop: {
|
|
13582
13909
|
readonly title: "Circular embedded page";
|
|
13583
13910
|
readonly description: "A Page widget embedding a page that leads back to it";
|
|
13584
13911
|
readonly message: "This Page widget embeds a page that leads back to it";
|
|
13912
|
+
readonly help: string;
|
|
13585
13913
|
};
|
|
13586
13914
|
readonly uiListItemFieldMissing: {
|
|
13587
13915
|
readonly title: "Missing item field";
|
|
13588
13916
|
readonly description: "A widget bound to an item field the list drawing it does not declare";
|
|
13589
13917
|
readonly message: "This is bound to an item field the list does not declare, so every row shows the same value";
|
|
13918
|
+
readonly help: string;
|
|
13919
|
+
};
|
|
13920
|
+
readonly uiComponentParamMissing: {
|
|
13921
|
+
readonly title: "Missing text parameter";
|
|
13922
|
+
readonly description: "A widget in a component showing a parameter the component does not declare as text";
|
|
13923
|
+
readonly message: "This shows a parameter the component does not declare as text, so every placement shows no words here";
|
|
13924
|
+
readonly messageOutside: "This shows a component parameter but is not inside a component, so the game shows no words here";
|
|
13925
|
+
readonly help: string;
|
|
13926
|
+
};
|
|
13927
|
+
readonly uiListTextUntranslated: {
|
|
13928
|
+
readonly title: "Untranslated list content";
|
|
13929
|
+
readonly description: "Words written into a list's content in a project that has a second language";
|
|
13930
|
+
readonly message: "{text} and the rest of this list's content show as written in every language";
|
|
13931
|
+
readonly help: string;
|
|
13932
|
+
};
|
|
13933
|
+
readonly uiLocalizationKeyMissing: {
|
|
13934
|
+
readonly title: "Missing translation key";
|
|
13935
|
+
readonly description: "A widget reading its words from a key the project does not have";
|
|
13936
|
+
readonly message: "Reads its words from {key}, which the project does not have";
|
|
13937
|
+
readonly help: string;
|
|
13590
13938
|
};
|
|
13591
13939
|
readonly uiGestureAnsweredTwice: {
|
|
13592
13940
|
readonly title: "Gesture answered twice";
|
|
13593
13941
|
readonly description: "A widget with a pointer handler of its own, on a page whose action answers the same gesture";
|
|
13594
13942
|
readonly message: "{action} on this page answers the same gesture this widget does, so both run";
|
|
13943
|
+
readonly help: string;
|
|
13595
13944
|
};
|
|
13596
13945
|
readonly blueprintSaveFieldEmpty: {
|
|
13597
13946
|
readonly title: "Empty save field";
|
|
13598
13947
|
readonly description: "A Save Game node that will run with a declared save field left empty";
|
|
13599
13948
|
readonly message: "{field} is empty, so this save is written with its default instead";
|
|
13949
|
+
readonly help: string;
|
|
13600
13950
|
};
|
|
13601
13951
|
readonly blueprintRequiredInputUnwired: {
|
|
13602
13952
|
readonly title: "Empty input";
|
|
13603
13953
|
readonly description: "A node that will run with a required input left unconnected";
|
|
13604
13954
|
readonly message: "{node} has nothing connected to {pin}";
|
|
13955
|
+
readonly help: string;
|
|
13605
13956
|
};
|
|
13606
13957
|
readonly blueprintStartSceneForeign: {
|
|
13607
13958
|
readonly title: "Scene from another story";
|
|
13608
13959
|
readonly description: "A Start Game node whose scene is not in the story it names";
|
|
13609
|
-
readonly message: "This scene is in {owner}, not in {story}, so
|
|
13960
|
+
readonly message: "This scene is in {owner}, not in {story}, so the game cannot start from it";
|
|
13961
|
+
readonly help: string;
|
|
13610
13962
|
};
|
|
13611
13963
|
readonly variablesUndeclared: {
|
|
13612
13964
|
readonly title: "Undeclared variable";
|
|
13613
13965
|
readonly description: "A variable used without a declaration";
|
|
13614
13966
|
readonly message: "{variable} is used but never declared";
|
|
13967
|
+
readonly messageUnnamed: "This row uses a variable that is not declared anywhere";
|
|
13968
|
+
readonly help: string;
|
|
13615
13969
|
};
|
|
13616
13970
|
readonly variablesUnused: {
|
|
13617
13971
|
readonly title: "Unused variable";
|
|
13618
13972
|
readonly description: "A variable declared but never read or written";
|
|
13619
13973
|
readonly message: "{variable} is declared but never used";
|
|
13974
|
+
readonly help: string;
|
|
13620
13975
|
};
|
|
13621
13976
|
readonly variablesNameCollision: {
|
|
13622
13977
|
readonly title: "Variable name collision";
|
|
13623
13978
|
readonly description: "One name declared in two places";
|
|
13624
13979
|
readonly message: "{variable} is declared twice as a persistent variable";
|
|
13980
|
+
readonly messageSaved: "{variable} is declared twice as a saved variable";
|
|
13981
|
+
readonly help: string;
|
|
13625
13982
|
};
|
|
13626
13983
|
readonly variablesConditionNeverHolds: {
|
|
13627
13984
|
readonly title: "Condition no path can satisfy";
|
|
13628
13985
|
readonly description: "A condition whose variable can never reach the value it tests for";
|
|
13629
|
-
readonly message: "{variable} is
|
|
13986
|
+
readonly message: "{variable} is always within {bound} here, so this condition cannot hold";
|
|
13987
|
+
readonly messageUnnamed: "A variable with no declaration is always within {bound} here, so this condition cannot hold";
|
|
13988
|
+
readonly help: string;
|
|
13630
13989
|
};
|
|
13631
13990
|
readonly variablesReadNeverWritten: {
|
|
13632
13991
|
readonly title: "Condition nothing can change";
|
|
13633
13992
|
readonly description: "A variable a condition tests, that nothing in the project ever assigns";
|
|
13634
13993
|
readonly message: "{variable} is tested by {conditions} but nothing ever sets it";
|
|
13994
|
+
readonly messageUnnamed: "A variable with no declaration is tested by {conditions} and nothing ever sets it";
|
|
13635
13995
|
readonly conditionCount: {
|
|
13636
13996
|
readonly one: "{count} condition";
|
|
13637
13997
|
readonly other: "{count} conditions";
|
|
13638
13998
|
};
|
|
13999
|
+
readonly help: string;
|
|
13639
14000
|
};
|
|
13640
14001
|
readonly variablesRandomOutsideAssignment: {
|
|
13641
14002
|
readonly title: "Random outside an assignment";
|
|
@@ -13643,33 +14004,39 @@ declare const en: {
|
|
|
13643
14004
|
readonly message: "{fn}() is re-rolled every time this condition is tested, so the branch can change between checks. Roll it once with /set, then test that variable";
|
|
13644
14005
|
readonly messageChoiceOption: "{fn}() is re-rolled every time the menu draws, so this option flickers. Roll it once with /set, then test that variable";
|
|
13645
14006
|
readonly messageInterpolation: "{fn}() is re-rolled every time this line draws, so the value changes on every redraw. Roll it once with /set, then show that variable";
|
|
14007
|
+
readonly help: string;
|
|
13646
14008
|
};
|
|
13647
14009
|
readonly textOverlong: {
|
|
13648
14010
|
readonly title: "Overlong line";
|
|
13649
14011
|
readonly description: "A line wider than the dialogue box holds";
|
|
13650
|
-
readonly message: "{width}
|
|
14012
|
+
readonly message: "{width} columns wide, over {max}";
|
|
14013
|
+
readonly help: string;
|
|
13651
14014
|
};
|
|
13652
14015
|
readonly textEmpty: {
|
|
13653
14016
|
readonly title: "Empty line";
|
|
13654
|
-
readonly description: "A dialogue row with no text";
|
|
14017
|
+
readonly description: "A narration, dialogue or choice option row with no text";
|
|
13655
14018
|
readonly message: "This line has no text";
|
|
14019
|
+
readonly help: string;
|
|
13656
14020
|
};
|
|
13657
14021
|
readonly localizationMissing: {
|
|
13658
14022
|
readonly title: "Missing translation";
|
|
13659
14023
|
readonly description: "A line or interface text with no translation in a target language";
|
|
13660
14024
|
readonly message: "No {locale} translation";
|
|
13661
14025
|
readonly messageInterface: "No {locale} translation of {text}";
|
|
14026
|
+
readonly help: string;
|
|
13662
14027
|
};
|
|
13663
14028
|
readonly localizationStale: {
|
|
13664
14029
|
readonly title: "Stale translation";
|
|
13665
14030
|
readonly description: "The source line changed after it was translated";
|
|
13666
14031
|
readonly message: "{locale} translation is older than the line";
|
|
13667
14032
|
readonly messageInterface: "{locale} translation of {text} is older than the text";
|
|
14033
|
+
readonly help: string;
|
|
13668
14034
|
};
|
|
13669
14035
|
readonly localizationMarkup: {
|
|
13670
14036
|
readonly title: "Translation drops styling";
|
|
13671
|
-
readonly description: "The line
|
|
13672
|
-
readonly message: "{locale} translation does not carry this line's styling";
|
|
14037
|
+
readonly description: "The line has styling, pauses or inline events the translation does not carry";
|
|
14038
|
+
readonly message: "{locale} translation does not carry all of this line's styling, pauses and inline events";
|
|
14039
|
+
readonly help: string;
|
|
13673
14040
|
};
|
|
13674
14041
|
readonly localizationOrphan: {
|
|
13675
14042
|
readonly title: "Orphan translation";
|
|
@@ -13679,16 +14046,19 @@ declare const en: {
|
|
|
13679
14046
|
readonly one: "{count} {locale} translation";
|
|
13680
14047
|
readonly other: "{count} {locale} translations";
|
|
13681
14048
|
};
|
|
14049
|
+
readonly help: string;
|
|
13682
14050
|
};
|
|
13683
14051
|
readonly voiceMissing: {
|
|
13684
14052
|
readonly title: "Missing voice";
|
|
13685
14053
|
readonly description: "A line with no recording in a voiced language";
|
|
13686
14054
|
readonly message: "No {locale} recording";
|
|
14055
|
+
readonly help: string;
|
|
13687
14056
|
};
|
|
13688
14057
|
readonly voiceStale: {
|
|
13689
14058
|
readonly title: "Stale voice";
|
|
13690
14059
|
readonly description: "The line changed after it was recorded";
|
|
13691
14060
|
readonly message: "{locale} recording is older than the line";
|
|
14061
|
+
readonly help: string;
|
|
13692
14062
|
};
|
|
13693
14063
|
readonly voiceOrphan: {
|
|
13694
14064
|
readonly title: "Orphan voice";
|
|
@@ -13698,13 +14068,15 @@ declare const en: {
|
|
|
13698
14068
|
readonly one: "{count} {locale} recording";
|
|
13699
14069
|
readonly other: "{count} {locale} recordings";
|
|
13700
14070
|
};
|
|
14071
|
+
readonly help: string;
|
|
13701
14072
|
};
|
|
13702
14073
|
readonly brandBrokenLink: {
|
|
13703
14074
|
readonly title: "Broken color link";
|
|
13704
14075
|
readonly description: "A color pointing at a palette entry that resolves to nothing";
|
|
13705
|
-
readonly message: "{where} uses
|
|
13706
|
-
readonly messageChain: "{where} uses {color}, which
|
|
14076
|
+
readonly message: "{where} uses a color the palette does not have";
|
|
14077
|
+
readonly messageChain: "{where} uses {color}, which follows a color the palette does not have";
|
|
13707
14078
|
readonly messageCycle: "{where} uses {color}, whose links lead back to themselves";
|
|
14079
|
+
readonly help: string;
|
|
13708
14080
|
};
|
|
13709
14081
|
readonly typographyGlyphCoverage: {
|
|
13710
14082
|
readonly title: "Missing glyphs";
|
|
@@ -13715,19 +14087,23 @@ declare const en: {
|
|
|
13715
14087
|
readonly other: "{count} times";
|
|
13716
14088
|
};
|
|
13717
14089
|
readonly messageInLanguage: "No project font can draw \u201C{character}\u201D in {language} ({occurrences})";
|
|
14090
|
+
readonly messageInState: "No project font can draw \u201C{character}\u201D in the \u201C{state}\u201D state ({occurrences})";
|
|
14091
|
+
readonly messageInLanguageInState: "No project font can draw \u201C{character}\u201D in {language} in the \u201C{state}\u201D state ({occurrences})";
|
|
13718
14092
|
readonly messageMore: "{characters} no project font can draw";
|
|
13719
14093
|
readonly moreCharacterCount: {
|
|
13720
14094
|
readonly one: "{count} more character";
|
|
13721
14095
|
readonly other: "{count} more characters";
|
|
13722
14096
|
};
|
|
13723
14097
|
readonly messageMoreInLanguage: "{characters} no project font can draw in {language}";
|
|
13724
|
-
readonly messageUnreadable: "{font} could not be read, so
|
|
14098
|
+
readonly messageUnreadable: "{font} could not be read, so no character was checked";
|
|
13725
14099
|
readonly messageUnloadable: "{font} is a .{format} font, which the game cannot draw with";
|
|
14100
|
+
readonly help: string;
|
|
13726
14101
|
};
|
|
13727
14102
|
readonly typographyLocaleNoFont: {
|
|
13728
14103
|
readonly title: "Language with no font";
|
|
13729
14104
|
readonly description: "A language every font of the project is restricted away from";
|
|
13730
|
-
readonly message: "
|
|
14105
|
+
readonly message: "Every project font is limited to languages other than {language}";
|
|
14106
|
+
readonly help: string;
|
|
13731
14107
|
};
|
|
13732
14108
|
};
|
|
13733
14109
|
readonly message: {
|
|
@@ -13773,6 +14149,22 @@ declare const en: {
|
|
|
13773
14149
|
readonly showAll: "Show all {count}";
|
|
13774
14150
|
readonly lineAria: "Line {line}";
|
|
13775
14151
|
readonly findPlaceholder: "Find in problems";
|
|
14152
|
+
readonly scopeProject: "Whole project";
|
|
14153
|
+
readonly scopeOpenEditors: "Open editors";
|
|
14154
|
+
readonly scopeActiveEditor: "Current editor";
|
|
14155
|
+
readonly scopeAria: "Show problems from";
|
|
14156
|
+
readonly severityAria: "Severity";
|
|
14157
|
+
readonly groupAria: "Group";
|
|
14158
|
+
readonly emptyOpenEditors: "No problems in the open editors";
|
|
14159
|
+
readonly emptyActiveEditor: "No problems in the current editor";
|
|
14160
|
+
readonly emptyFiltered: "No problems at the selected severity";
|
|
14161
|
+
readonly explain: "About this rule";
|
|
14162
|
+
readonly settings: "Check settings";
|
|
14163
|
+
readonly rerunHint: "Check the whole project again, re-reading the asset files on disk";
|
|
14164
|
+
readonly jumpFailed: "This location can no longer be opened";
|
|
14165
|
+
};
|
|
14166
|
+
readonly statusBar: {
|
|
14167
|
+
readonly counts: "Problems: {errors}, {warnings}, {infos}";
|
|
13776
14168
|
};
|
|
13777
14169
|
readonly command: {
|
|
13778
14170
|
readonly runProject: "Check project";
|
|
@@ -13795,6 +14187,7 @@ declare const en: {
|
|
|
13795
14187
|
};
|
|
13796
14188
|
readonly blockedHint: "Change this in Project \u25B8 Project \u25B8 Check before building";
|
|
13797
14189
|
readonly skipped: "Project check skipped";
|
|
14190
|
+
readonly viewProblems: "View problems";
|
|
13798
14191
|
};
|
|
13799
14192
|
readonly settings: {
|
|
13800
14193
|
readonly runOnBuild: "Check before building";
|
|
@@ -13804,6 +14197,8 @@ declare const en: {
|
|
|
13804
14197
|
readonly failBuildOnWarning: "Warnings and errors";
|
|
13805
14198
|
readonly optionMaxChars: "Maximum width";
|
|
13806
14199
|
readonly optionCountMode: "Counting";
|
|
14200
|
+
readonly optionMaxMegabytes: "Largest file (MB)";
|
|
14201
|
+
readonly optionMaxCharacters: "Characters listed";
|
|
13807
14202
|
readonly countModeEastAsianWidth: "Wide = 2 columns";
|
|
13808
14203
|
readonly countModeCodePoints: "All = 1 column";
|
|
13809
14204
|
};
|
|
@@ -13865,7 +14260,7 @@ declare const en: {
|
|
|
13865
14260
|
readonly characters: "Characters";
|
|
13866
14261
|
readonly dictionaryTerms: "Dictionary terms";
|
|
13867
14262
|
readonly transformPresets: "Transform presets";
|
|
13868
|
-
readonly localizationKeys: "
|
|
14263
|
+
readonly localizationKeys: "Translation keys";
|
|
13869
14264
|
readonly projectLanguages: "Languages";
|
|
13870
14265
|
readonly projectPlugins: "Plugins";
|
|
13871
14266
|
readonly saveFields: "Save fields";
|
|
@@ -13964,9 +14359,9 @@ declare const en: {
|
|
|
13964
14359
|
readonly statusReviewed: "Now reviewed";
|
|
13965
14360
|
};
|
|
13966
14361
|
readonly localizationKeys: {
|
|
13967
|
-
readonly added: "
|
|
13968
|
-
readonly removed: "
|
|
13969
|
-
readonly changed: "
|
|
14362
|
+
readonly added: "Translation key added";
|
|
14363
|
+
readonly removed: "Translation key removed";
|
|
14364
|
+
readonly changed: "Translation key changed";
|
|
13970
14365
|
};
|
|
13971
14366
|
readonly uiDocument: {
|
|
13972
14367
|
readonly renamed: "Interface renamed";
|
|
@@ -14062,7 +14457,7 @@ declare const en: {
|
|
|
14062
14457
|
readonly added: "Track added";
|
|
14063
14458
|
readonly removed: "Track removed";
|
|
14064
14459
|
readonly renamed: "Renamed";
|
|
14065
|
-
readonly rerouted: "Routes into a different
|
|
14460
|
+
readonly rerouted: "Routes into a different track";
|
|
14066
14461
|
readonly reroutedToMaster: "Routes into the master output";
|
|
14067
14462
|
readonly volume: "Volume changed";
|
|
14068
14463
|
readonly loopOn: "Loops by default";
|
|
@@ -14077,7 +14472,7 @@ declare const en: {
|
|
|
14077
14472
|
readonly defaultValue: "Default value changed";
|
|
14078
14473
|
readonly valueType: "Type changed";
|
|
14079
14474
|
readonly scopeSaved: "Now a saved variable";
|
|
14080
|
-
readonly scopeGlobal: "Now a
|
|
14475
|
+
readonly scopeGlobal: "Now a persistent variable";
|
|
14081
14476
|
readonly storageKey: "Values already saved are no longer found";
|
|
14082
14477
|
readonly description: "Note changed";
|
|
14083
14478
|
readonly changed: "Variable changed";
|
|
@@ -14639,6 +15034,7 @@ declare const en: {
|
|
|
14639
15034
|
readonly quality: "Checks";
|
|
14640
15035
|
readonly version: "Versions";
|
|
14641
15036
|
readonly ship: "Shipping";
|
|
15037
|
+
readonly checks: "Check rules";
|
|
14642
15038
|
};
|
|
14643
15039
|
readonly ui: {
|
|
14644
15040
|
readonly title: "Help";
|
|
@@ -14675,7 +15071,7 @@ declare const en: {
|
|
|
14675
15071
|
readonly body: string;
|
|
14676
15072
|
};
|
|
14677
15073
|
readonly keyboard: {
|
|
14678
|
-
readonly title: "Keyboard";
|
|
15074
|
+
readonly title: "Keyboard and Mouse";
|
|
14679
15075
|
readonly body: string;
|
|
14680
15076
|
};
|
|
14681
15077
|
readonly search: {
|
|
@@ -14718,6 +15114,10 @@ declare const en: {
|
|
|
14718
15114
|
readonly title: "Editing outside Studio";
|
|
14719
15115
|
readonly body: string;
|
|
14720
15116
|
};
|
|
15117
|
+
readonly storyPaste: {
|
|
15118
|
+
readonly title: "Paste as Rows";
|
|
15119
|
+
readonly body: string;
|
|
15120
|
+
};
|
|
14721
15121
|
readonly sceneSnapshot: {
|
|
14722
15122
|
readonly title: "Playing from a row";
|
|
14723
15123
|
readonly body: string;
|
|
@@ -14731,7 +15131,7 @@ declare const en: {
|
|
|
14731
15131
|
readonly body: string;
|
|
14732
15132
|
};
|
|
14733
15133
|
readonly storyMotion: {
|
|
14734
|
-
readonly title: "Motion";
|
|
15134
|
+
readonly title: "Story Motion";
|
|
14735
15135
|
readonly body: string;
|
|
14736
15136
|
};
|
|
14737
15137
|
readonly assets: {
|
|
@@ -15086,6 +15486,8 @@ declare const en: {
|
|
|
15086
15486
|
readonly storyStarted: "Load Save: \"{id}\" was written in another of the project's stories, which was started to receive it.";
|
|
15087
15487
|
readonly relaunchedRow: "Load Save: \"{id}\" was written by another build. The story was started again on the line the save records.";
|
|
15088
15488
|
readonly relaunchedScene: "Load Save: \"{id}\" was written by another build and the line it records is no longer present. The story was started again at the start of that scene.";
|
|
15489
|
+
readonly rowLaunchRelaunchedRow: "Load Save: \"{id}\" was written in a run started with Play from this row. The story was started again on the line the save records.";
|
|
15490
|
+
readonly rowLaunchRelaunchedScene: "Load Save: \"{id}\" was written in a run started with Play from this row, and the line it records is no longer present. The story was started again at the start of that scene.";
|
|
15089
15491
|
readonly detail: {
|
|
15090
15492
|
readonly unreadable: "The save could not be read. {error}";
|
|
15091
15493
|
readonly missing: "No save is stored under that id.";
|
|
@@ -15436,14 +15838,25 @@ export type SearchJumpTarget = {
|
|
|
15436
15838
|
} | {
|
|
15437
15839
|
kind: "character";
|
|
15438
15840
|
characterId: string;
|
|
15439
|
-
}
|
|
15841
|
+
}
|
|
15842
|
+
/**
|
|
15843
|
+
* A page or a stage layer. With `elementId`, the widget on it to select once its editor opens - an
|
|
15844
|
+
* optional field rather than a variant of its own, so every consumer that opens the page keeps
|
|
15845
|
+
* opening it and only the ones that can say which widget say so.
|
|
15846
|
+
*/
|
|
15847
|
+
| {
|
|
15440
15848
|
kind: "uiSurface";
|
|
15441
15849
|
surfaceId: string;
|
|
15850
|
+
elementId?: string;
|
|
15442
15851
|
}
|
|
15443
|
-
/**
|
|
15852
|
+
/**
|
|
15853
|
+
* A component definition: its own editor tab, the one the component library opens. With
|
|
15854
|
+
* `elementId`, the widget inside the definition to select, as for a page.
|
|
15855
|
+
*/
|
|
15444
15856
|
| {
|
|
15445
15857
|
kind: "uiComponent";
|
|
15446
15858
|
componentId: string;
|
|
15859
|
+
elementId?: string;
|
|
15447
15860
|
} | {
|
|
15448
15861
|
kind: "asset";
|
|
15449
15862
|
assetId: string;
|
|
@@ -15469,21 +15882,72 @@ export type SearchJumpTarget = {
|
|
|
15469
15882
|
focusEventId?: string;
|
|
15470
15883
|
focusFunctionId?: string;
|
|
15471
15884
|
focusNodeId?: string;
|
|
15472
|
-
}
|
|
15885
|
+
}
|
|
15886
|
+
/**
|
|
15887
|
+
* A named string: its row in a translation table, which is the one place its words are edited.
|
|
15888
|
+
* Opens the table of the project's first translated language; a project with none has no table,
|
|
15889
|
+
* and the jump shows the Localization panel instead, where a language is added.
|
|
15890
|
+
*/
|
|
15891
|
+
| {
|
|
15473
15892
|
kind: "localizationKey";
|
|
15474
15893
|
keyName: string;
|
|
15475
15894
|
}
|
|
15476
15895
|
/**
|
|
15477
|
-
* A project-level story variable
|
|
15478
|
-
*
|
|
15479
|
-
* Carries the identity even though the jump can only reveal the panel today, for the reason
|
|
15480
|
-
* `localizationKey` carries its key: the target says what it points at, and the day the panel can
|
|
15481
|
-
* be told which row to reveal, nothing that produces one of these has to change.
|
|
15896
|
+
* A project-level story variable: its row in the Variables panel, selected and scrolled into view.
|
|
15897
|
+
* `variableId` is the registry entry's id, or the declaration row's for one a story declares.
|
|
15482
15898
|
*/
|
|
15483
15899
|
| {
|
|
15484
15900
|
kind: "storyVariable";
|
|
15485
15901
|
scope: "saved" | "persistent";
|
|
15486
15902
|
variableId: string;
|
|
15903
|
+
}
|
|
15904
|
+
/**
|
|
15905
|
+
* A translation table - one language's - and, with `unitId`, the row of one translation unit in
|
|
15906
|
+
* it, scrolled into view and marked.
|
|
15907
|
+
*
|
|
15908
|
+
* The table lists one source at a time, so a row is found under the source it belongs to:
|
|
15909
|
+
* `storyId` for a story's lines and scene names, absent for the interface's words, the named keys
|
|
15910
|
+
* and the plugins' words. A character's name heads every story's rows and needs neither.
|
|
15911
|
+
*/
|
|
15912
|
+
| {
|
|
15913
|
+
kind: "translation";
|
|
15914
|
+
locale: string;
|
|
15915
|
+
unitId?: string;
|
|
15916
|
+
storyId?: string;
|
|
15917
|
+
}
|
|
15918
|
+
/**
|
|
15919
|
+
* A voice table - one voiced language's - and, with `unitId` (a line's text id), that line's row,
|
|
15920
|
+
* where its take is linked. `storyId` names the story the line is in; without it the table looks
|
|
15921
|
+
* the line up itself.
|
|
15922
|
+
*/
|
|
15923
|
+
| {
|
|
15924
|
+
kind: "voiceLine";
|
|
15925
|
+
locale: string;
|
|
15926
|
+
unitId?: string;
|
|
15927
|
+
storyId?: string;
|
|
15928
|
+
}
|
|
15929
|
+
/** A story motion, open in its own editor. */
|
|
15930
|
+
| {
|
|
15931
|
+
kind: "storyMotion";
|
|
15932
|
+
animationId: string;
|
|
15933
|
+
}
|
|
15934
|
+
/**
|
|
15935
|
+
* A page of Project settings - the panel's sub-pages - and, with `part`, the part of it to scroll
|
|
15936
|
+
* into view: `fonts` is the project's font stack on the Design page.
|
|
15937
|
+
*/
|
|
15938
|
+
| {
|
|
15939
|
+
kind: "projectPage";
|
|
15940
|
+
page: "app" | "game" | "design" | "project" | "runtimes" | "settings";
|
|
15941
|
+
part?: "fonts";
|
|
15942
|
+
}
|
|
15943
|
+
/**
|
|
15944
|
+
* A story's own row in the Story panel's list, selected and scrolled into view - the place a story
|
|
15945
|
+
* is renamed or deleted, and the one way into a story whose document cannot be opened.
|
|
15946
|
+
*/
|
|
15947
|
+
| {
|
|
15948
|
+
kind: "storyEntry";
|
|
15949
|
+
storyId: string;
|
|
15950
|
+
storyName: string;
|
|
15487
15951
|
};
|
|
15488
15952
|
type ModelBundleFormat = "live2d-cubism4" | "live2d-cubism2" | "spine-binary" | "spine-json" | "unknown";
|
|
15489
15953
|
export declare enum AssetType {
|
|
@@ -16519,6 +16983,23 @@ type SelectionState = {
|
|
|
16519
16983
|
type: "storyBlock";
|
|
16520
16984
|
data: StoryBlockSelection;
|
|
16521
16985
|
};
|
|
16986
|
+
type UITextMigrationChangeKind = "marksKept" | "bindingDropped" | "missingKey" | "keyDiffered";
|
|
16987
|
+
type UITextMigrationChange = {
|
|
16988
|
+
kind: UITextMigrationChangeKind;
|
|
16989
|
+
elementId: string;
|
|
16990
|
+
/** The prop the words are in (`text`, `label`, `placeholder`). */
|
|
16991
|
+
prop: string;
|
|
16992
|
+
/** The key the element named. */
|
|
16993
|
+
keyName: string;
|
|
16994
|
+
/** Where the element is: a page, or a component definition. Absent for an element on neither. */
|
|
16995
|
+
surfaceId?: string;
|
|
16996
|
+
componentId?: string;
|
|
16997
|
+
};
|
|
16998
|
+
type UITextCarriedKeys = Record<string, {
|
|
16999
|
+
words: string;
|
|
17000
|
+
translations?: Record<string, LocalizationUnit>;
|
|
17001
|
+
}>;
|
|
17002
|
+
type CarriedTranslations = Record<LocaleCode, Record<string, LocalizationUnit>>;
|
|
16522
17003
|
type LiveUIComponentShell = Omit<UIComponentDefinition, "elements">;
|
|
16523
17004
|
type LiveUIParts = {
|
|
16524
17005
|
/** Records of the shared element map. */
|
|
@@ -16604,6 +17085,20 @@ type UIEditorClipboardPayload = {
|
|
|
16604
17085
|
source?: UIEditorClipboardSource;
|
|
16605
17086
|
/** Absent when the copied selection references no importable file. */
|
|
16606
17087
|
assets?: UIEditorClipboardAssets;
|
|
17088
|
+
/**
|
|
17089
|
+
* The words and translations of the translation keys the copied widgets name, filled when the copy
|
|
17090
|
+
* is published for other windows. A project that lacks one of the keys receives its words on the
|
|
17091
|
+
* widgets instead (`settleIncomingUITextSources`); absent on an in-window copy, whose project
|
|
17092
|
+
* has every key it names.
|
|
17093
|
+
*/
|
|
17094
|
+
textKeys?: UITextCarriedKeys;
|
|
17095
|
+
/**
|
|
17096
|
+
* What every language of the copying project says about the words the copied widgets write
|
|
17097
|
+
* directly, by unit id under the originals' ids (`listUITextOwnUnits`). Filled when the copy is
|
|
17098
|
+
* published; the paste writes them under the copies' ids. A paste without them - an in-window copy
|
|
17099
|
+
* not yet published, a duplicate - reads the originals' translations from the project itself.
|
|
17100
|
+
*/
|
|
17101
|
+
translations?: CarriedTranslations;
|
|
16607
17102
|
sourceSurfaceId: string;
|
|
16608
17103
|
/** Top-level roots in the copied selection (original ids). */
|
|
16609
17104
|
topLevelElementIds: UIElementId[];
|
|
@@ -16644,6 +17139,18 @@ type ImportTemplateBundleInput = {
|
|
|
16644
17139
|
graphs: unknown;
|
|
16645
17140
|
placement: ImportTemplatePlacement;
|
|
16646
17141
|
assetIdMap?: Record<string, string>;
|
|
17142
|
+
/**
|
|
17143
|
+
* The words, and translations, of the keys the document's widgets name - for the ones this
|
|
17144
|
+
* project lacks, which arrive holding those words themselves (`settleIncomingUITextSources`).
|
|
17145
|
+
*/
|
|
17146
|
+
textKeys?: UITextCarriedKeys;
|
|
17147
|
+
/**
|
|
17148
|
+
* What every language says about the words the document's widgets write directly, by unit id
|
|
17149
|
+
* under the ids the widgets have in `document` - a page copied in another window brings them.
|
|
17150
|
+
* Without it, widgets whose ids this project already translates (a page copied in this window)
|
|
17151
|
+
* take those translations.
|
|
17152
|
+
*/
|
|
17153
|
+
translations?: CarriedTranslations;
|
|
16647
17154
|
};
|
|
16648
17155
|
declare class UIDocumentService extends Service<UIDocumentService> implements IUIDocumentService {
|
|
16649
17156
|
private document;
|
|
@@ -16657,6 +17164,8 @@ declare class UIDocumentService extends Service<UIDocumentService> implements IU
|
|
|
16657
17164
|
private opSink;
|
|
16658
17165
|
private historySuppressionDepth;
|
|
16659
17166
|
private readonly contentRevisions;
|
|
17167
|
+
/** What the v13 step changed that an author can see, until the workspace has said so. */
|
|
17168
|
+
private textSourceMigrationChanges;
|
|
16660
17169
|
protected init(ctx: WorkspaceContext, depend: (services: Service[]) => Promise<void>): Promise<void>;
|
|
16661
17170
|
getDocument(): UIDocument;
|
|
16662
17171
|
/**
|
|
@@ -16739,6 +17248,60 @@ declare class UIDocumentService extends Service<UIDocumentService> implements IU
|
|
|
16739
17248
|
}): void;
|
|
16740
17249
|
updateElementLayouts(layoutPatches: Record<string, Partial<UILayout>>): void;
|
|
16741
17250
|
updateElementProps(elementId: string, propsPatch: Record<string, unknown>): void;
|
|
17251
|
+
/**
|
|
17252
|
+
* Every widget that reads its words from `keyName`, turned into one that holds `words` itself.
|
|
17253
|
+
*
|
|
17254
|
+
* What removing a key does to the widgets that use it: each keeps showing what it showed, and none
|
|
17255
|
+
* is left naming a key the project no longer has. Component definitions' widgets are included; an
|
|
17256
|
+
* instance holds none of its definition's words, but a text parameter's value it reads from the key
|
|
17257
|
+
* becomes the key's words, given directly (prop `param.<paramId>`). One change to the document,
|
|
17258
|
+
* outside any page's undo history, like the removal of the key it goes with. Returns each site it
|
|
17259
|
+
* converted, for the translations that go with the words (`ui:<elementId>.<prop>`).
|
|
17260
|
+
*/
|
|
17261
|
+
giveKeyedWidgetsTheirWords(keyName: string, words: string): {
|
|
17262
|
+
elementId: string;
|
|
17263
|
+
prop: string;
|
|
17264
|
+
}[];
|
|
17265
|
+
/**
|
|
17266
|
+
* Whether this project has a named key, for settling elements that arrive from elsewhere. A key
|
|
17267
|
+
* registry that has not been read answers yes for every key, so nothing is converted on a guess.
|
|
17268
|
+
*/
|
|
17269
|
+
private readonly hasTextKey;
|
|
17270
|
+
/**
|
|
17271
|
+
* The translations of the keys arriving widgets were turned away from, filed under the widgets'
|
|
17272
|
+
* own units in this project's languages. `converted` carries the widgets' ids in this document.
|
|
17273
|
+
*
|
|
17274
|
+
* In the background: a language's library may still have to be read, and the elements have
|
|
17275
|
+
* arrived already. A language the keys came with no translation for gets none.
|
|
17276
|
+
*/
|
|
17277
|
+
private adoptArrivingTranslations;
|
|
17278
|
+
/**
|
|
17279
|
+
* Give copied widgets the translations their originals' own words have, under the copies' ids.
|
|
17280
|
+
*
|
|
17281
|
+
* A widget's own words are translated through a unit named after the widget, so a copy - pasted,
|
|
17282
|
+
* duplicated, inside a duplicated page or component - would otherwise arrive translated in no
|
|
17283
|
+
* language. `table` is the arriving elements under their old ids, `idMap` what each became; `skip`
|
|
17284
|
+
* are the sites whose words came from a key this project lacks, which bring the key's translations
|
|
17285
|
+
* instead (`adoptArrivingTranslations`). `extra` are units owned by something other than an element
|
|
17286
|
+
* - a copied component's parameter defaults - already re-keyed, old id to new.
|
|
17287
|
+
*
|
|
17288
|
+
* `carried` is what a clipboard brought with it, which is what a paste from another project has
|
|
17289
|
+
* to go on, and a copy as it was when it was made. Without it the originals are this project's own
|
|
17290
|
+
* and their translations are read from its documents. Either way only languages this project
|
|
17291
|
+
* declares are written, a review is not inherited, and the write is not part of the paste's undo
|
|
17292
|
+
* step (`carriedTranslations.ts`).
|
|
17293
|
+
*/
|
|
17294
|
+
private carryCopiedTranslations;
|
|
17295
|
+
/**
|
|
17296
|
+
* The changes the v13 step made on opening this document that an author can see, handed over
|
|
17297
|
+
* once: the workspace tells the author about them in one notice, and a second ask is empty.
|
|
17298
|
+
*/
|
|
17299
|
+
takeTextSourceMigrationChanges(): UITextMigrationChange[];
|
|
17300
|
+
/**
|
|
17301
|
+
* The words a widget inserted into this project is given: in the project's source language, the
|
|
17302
|
+
* language its game is written in (`widgetDefaultWordsFor`).
|
|
17303
|
+
*/
|
|
17304
|
+
private widgetDefaultWords;
|
|
16742
17305
|
/** A fresh id for something this document will own. */
|
|
16743
17306
|
generateId(): string;
|
|
16744
17307
|
/**
|
|
@@ -16812,6 +17375,17 @@ declare class UIDocumentService extends Service<UIDocumentService> implements IU
|
|
|
16812
17375
|
blueprintId: string;
|
|
16813
17376
|
};
|
|
16814
17377
|
clearElementBlueprintValueBinding(elementId: string, propPath: string): void;
|
|
17378
|
+
/**
|
|
17379
|
+
* Close the editor tabs showing a value blueprint that clearing its binding has just removed.
|
|
17380
|
+
*
|
|
17381
|
+
* The blueprint is the binding's own - minted for this element's prop and named for it - but the
|
|
17382
|
+
* author writes their logic into it, so its removal is one step on the page's undo history above,
|
|
17383
|
+
* blueprint included. A tab left open on it said only that the blueprint could not be found, and
|
|
17384
|
+
* while it stayed the active editor the inspector's Ctrl+Z went to its stack instead of the page's,
|
|
17385
|
+
* so the step that would bring the logic back was out of reach from where the author was. Closed,
|
|
17386
|
+
* the page the binding belongs to is the editor the inspector edits again.
|
|
17387
|
+
*/
|
|
17388
|
+
private closeTabsShowingBlueprint;
|
|
16815
17389
|
/**
|
|
16816
17390
|
* How this element arrives and leaves. `null` clears it.
|
|
16817
17391
|
*
|
|
@@ -16834,6 +17408,22 @@ declare class UIDocumentService extends Service<UIDocumentService> implements IU
|
|
|
16834
17408
|
* reparents an inner one that may be in the same batch.
|
|
16835
17409
|
*/
|
|
16836
17410
|
ungroupContainers(surfaceId: string, containerIds: string[]): string[];
|
|
17411
|
+
/**
|
|
17412
|
+
* Wrap elements in a new group - an invisible container that takes their place - and return the
|
|
17413
|
+
* group's id, or null when they cannot be wrapped (see `planGroupElements` for which can, and
|
|
17414
|
+
* for why nothing on screen moves).
|
|
17415
|
+
*
|
|
17416
|
+
* One mutation, so Undo puts the tree back as it was in one step.
|
|
17417
|
+
*/
|
|
17418
|
+
groupElements(surfaceId: string, elementIds: readonly string[]): string | null;
|
|
17419
|
+
/**
|
|
17420
|
+
* Rename one layer.
|
|
17421
|
+
*
|
|
17422
|
+
* A linked component instance renames like any other layer: its name is copied from the
|
|
17423
|
+
* definition once, when the instance is placed, and is the instance's own from then on - it is
|
|
17424
|
+
* how the outline tells "save slot 1" from "save slot 2". Props and shape are what the definition
|
|
17425
|
+
* owns, and their own setters still refuse them on an instance.
|
|
17426
|
+
*/
|
|
16837
17427
|
renameElement(elementId: string, name: string): void;
|
|
16838
17428
|
deleteElements(elementIds: string[]): void;
|
|
16839
17429
|
/**
|
|
@@ -16870,6 +17460,22 @@ declare class UIDocumentService extends Service<UIDocumentService> implements IU
|
|
|
16870
17460
|
private getCommonSurfaceIdForElements;
|
|
16871
17461
|
private filterLinkedComponentLayoutPatch;
|
|
16872
17462
|
private migrateIfNeeded;
|
|
17463
|
+
/**
|
|
17464
|
+
* The v13 step, for the project's own document as it is opened (`textSourceMigration.ts`).
|
|
17465
|
+
*
|
|
17466
|
+
* Not part of {@link migrateIfNeeded}, which is also how a template or a page copied from another
|
|
17467
|
+
* project comes in: this step reads the project's key registry and translation files, and the
|
|
17468
|
+
* translation edits it makes are written here, through the localization service, before the
|
|
17469
|
+
* document itself is saved by `load`. Written first so that a document still at v12 on disk -
|
|
17470
|
+
* its own save failed - is migrated again on the next open, and the edits are such that applying
|
|
17471
|
+
* them twice changes nothing.
|
|
17472
|
+
*
|
|
17473
|
+
* A key registry or a language file that cannot be read stops the open rather than being read
|
|
17474
|
+
* as empty: an element whose key could not be found is turned into one that holds its own words,
|
|
17475
|
+
* and a registry that is merely unreadable today would turn every keyed element in the project
|
|
17476
|
+
* into one, for good.
|
|
17477
|
+
*/
|
|
17478
|
+
private migrateTextSources;
|
|
16873
17479
|
/**
|
|
16874
17480
|
* Every `nl.image` written in the shape that came before `imageFill`, rewritten into it.
|
|
16875
17481
|
*
|
|
@@ -17058,11 +17664,38 @@ declare class UIDocumentService extends Service<UIDocumentService> implements IU
|
|
|
17058
17664
|
* deletion, and sweeping would make that a data loss with no warning.
|
|
17059
17665
|
*/
|
|
17060
17666
|
setComponentParams(componentId: string, params: UIComponentParam[]): void;
|
|
17061
|
-
/**
|
|
17667
|
+
/**
|
|
17668
|
+
* Set one param value on one instance. An empty string is a value, not a reset.
|
|
17669
|
+
*
|
|
17670
|
+
* Words written for a text parameter replace a key the instance named for it: a value holds one
|
|
17671
|
+
* or the other (`UIComponentLink.paramKeys`).
|
|
17672
|
+
*/
|
|
17062
17673
|
setComponentInstanceParam(elementId: string, paramId: string, value: string): void;
|
|
17674
|
+
/**
|
|
17675
|
+
* Name the translation key one instance's text parameter is read from, or (`null`) name none.
|
|
17676
|
+
*
|
|
17677
|
+
* Naming a key removes the words the instance held for the parameter - a value holds one source -
|
|
17678
|
+
* and naming none leaves the parameter with neither, which falls back to the definition's default.
|
|
17679
|
+
*/
|
|
17680
|
+
setComponentInstanceParamKey(elementId: string, paramId: string, keyName: string | null): void;
|
|
17063
17681
|
deleteComponents(componentIds: string[]): void;
|
|
17064
17682
|
duplicateComponent(componentId: string): UIComponentDefinition | null;
|
|
17065
17683
|
updateComponentElementLayout(componentId: string, elementId: string, layoutPatch: Partial<UILayout>): void;
|
|
17684
|
+
/**
|
|
17685
|
+
* Bind one prop of one element of a component definition to a field of its list row or to a text
|
|
17686
|
+
* parameter of the component - the two value bindings that need no blueprint - or (`null`) unbind
|
|
17687
|
+
* it. A definition's elements take no Blueprint Value (`ComponentDocumentServiceAdapter`), so there
|
|
17688
|
+
* is no blueprint to clear on the way.
|
|
17689
|
+
*/
|
|
17690
|
+
setComponentElementValueBinding(componentId: string, elementId: string, propPath: string, binding: Extract<UIElementValueBinding, {
|
|
17691
|
+
kind: "listItemField" | "componentParam";
|
|
17692
|
+
}> | null): void;
|
|
17693
|
+
/**
|
|
17694
|
+
* Show one of a component's text parameters in the words of an element of its definition, or
|
|
17695
|
+
* (`null`) stop showing one. The component is the one whose definition holds the element; an
|
|
17696
|
+
* element on a page has no parameters to show and is left alone.
|
|
17697
|
+
*/
|
|
17698
|
+
setElementComponentParamBinding(elementId: string, propPath: string, paramId: string | null): void;
|
|
17066
17699
|
updateComponentElementProps(componentId: string, elementId: string, propsPatch: Record<string, unknown>): void;
|
|
17067
17700
|
updateComponentElementAnimation(componentId: string, elementId: string, animation: UIPageAnimationSettings | null): void;
|
|
17068
17701
|
updateComponentElementExtra(componentId: string, elementId: string, extraPatch: Record<string, unknown>): void;
|
|
@@ -17070,8 +17703,18 @@ declare class UIDocumentService extends Service<UIDocumentService> implements IU
|
|
|
17070
17703
|
reorderComponentChildren(componentId: string, parentId: string, orderedChildIds: string[]): void;
|
|
17071
17704
|
deleteComponentElements(componentId: string, elementIds: string[]): void;
|
|
17072
17705
|
moveComponentElements(componentId: string, elementIds: string[], targetParentId: string, beforeChildId: string | null): MoveUiElementsResult;
|
|
17706
|
+
/**
|
|
17707
|
+
* `ungroupContainers` for a component definition's elements, over a document made of the
|
|
17708
|
+
* component alone. Returns the ids that were lifted out.
|
|
17709
|
+
*/
|
|
17710
|
+
ungroupComponentContainers(componentId: string, containerIds: readonly string[]): string[];
|
|
17711
|
+
/**
|
|
17712
|
+
* `groupElements` for a component definition's elements: the same plan, read and applied over a
|
|
17713
|
+
* document made of the component alone, as `moveComponentElements` does.
|
|
17714
|
+
*/
|
|
17715
|
+
groupComponentElements(componentId: string, elementIds: readonly string[]): string | null;
|
|
17073
17716
|
createComponentElement(componentId: string, parentId: string, type: string, layoutPatch?: Partial<UILayout>): UIElement | null;
|
|
17074
|
-
pasteComponentClipboardPayload(componentId: string, targetParentId: string, beforeChildId: string | null,
|
|
17717
|
+
pasteComponentClipboardPayload(componentId: string, targetParentId: string, beforeChildId: string | null, incoming: UIEditorClipboardPayload): {
|
|
17075
17718
|
ok: true;
|
|
17076
17719
|
newRootIds: string[];
|
|
17077
17720
|
} | {
|
|
@@ -17081,7 +17724,7 @@ declare class UIDocumentService extends Service<UIDocumentService> implements IU
|
|
|
17081
17724
|
createComponentInstance(parentId: string, componentId: string, layoutPatch?: Partial<UILayout>): UIElement;
|
|
17082
17725
|
unlinkComponentInstance(elementId: string): string[];
|
|
17083
17726
|
createElement(parentId: string, type: string, layoutPatch?: Partial<UILayout>): UIElement;
|
|
17084
|
-
pasteClipboardPayload(surfaceId: string, targetParentId: string, beforeChildId: string | null,
|
|
17727
|
+
pasteClipboardPayload(surfaceId: string, targetParentId: string, beforeChildId: string | null, incoming: UIEditorClipboardPayload): {
|
|
17085
17728
|
ok: true;
|
|
17086
17729
|
newRootIds: string[];
|
|
17087
17730
|
} | {
|
|
@@ -17182,18 +17825,29 @@ type WidgetLogicWritablePropDef = {
|
|
|
17182
17825
|
export type WidgetLogicApi = {
|
|
17183
17826
|
supportsPrivateBlueprint: boolean;
|
|
17184
17827
|
blueprintLabel?: string;
|
|
17828
|
+
/**
|
|
17829
|
+
* The events a private blueprint on this widget can be started by. Every entry is load-bearing:
|
|
17830
|
+
* the node palette, graph validation, the dispatcher and `ui.js widget` all read this list, so an
|
|
17831
|
+
* event belongs here only once the runtime raises it and a head node for it is registered.
|
|
17832
|
+
*/
|
|
17185
17833
|
events: readonly WidgetLogicEventDef[];
|
|
17834
|
+
/**
|
|
17835
|
+
* `commands`, `readableState` and `writableProps` describe the widget to a reader - `ui.js
|
|
17836
|
+
* widget` prints them - and nothing executes them: no blueprint node looks a widget up in these
|
|
17837
|
+
* lists. What a graph can actually do to a widget is in the node catalogue.
|
|
17838
|
+
*/
|
|
17186
17839
|
commands: readonly WidgetLogicCommandDef[];
|
|
17187
17840
|
readableState: readonly WidgetLogicReadableStateDef[];
|
|
17188
17841
|
writableProps: readonly WidgetLogicWritablePropDef[];
|
|
17189
17842
|
/**
|
|
17190
17843
|
* Whether the player operates this widget directly - a Button, a Switch, a Slider, a Text Input,
|
|
17191
17844
|
* a list they pick a row from. Scenery (Container, Text, Image, Video, Model, the page host)
|
|
17192
|
-
* leaves it unset.
|
|
17845
|
+
* leaves it unset. A Video with its native controls showing is operable too, but that is a prop
|
|
17846
|
+
* on the instance, so `isOperableHitElement` in `surfaceInputActions.ts` answers it there.
|
|
17193
17847
|
*
|
|
17194
|
-
* Declared rather than derived, and the retreat is deliberate. A panel-wide gesture
|
|
17195
|
-
*
|
|
17196
|
-
* "is this a control", and the tempting derivation - "declares an interaction event beyond the
|
|
17848
|
+
* Declared rather than derived, and the retreat is deliberate. A panel-wide gesture stands down
|
|
17849
|
+
* over a control (`pointerInputClaimedByControl` in `surfaceInputActions.ts`), so something has
|
|
17850
|
+
* to answer "is this a control", and the tempting derivation - "declares an interaction event beyond the
|
|
17197
17851
|
* shared displayable set" - is wrong at both ends: `nl.button` declares exactly the displayable
|
|
17198
17852
|
* set, and `nl.frame` declares `pageEvent`. Nothing else in an entry separates a Button from a
|
|
17199
17853
|
* Container, because what makes a Button a control is how the runtime draws and handles it, not
|
|
@@ -17216,6 +17870,12 @@ export interface ContextMenuItemDef {
|
|
|
17216
17870
|
* than in the label keeps a disabled menu a menu instead of a paragraph.
|
|
17217
17871
|
*/
|
|
17218
17872
|
tooltip?: string;
|
|
17873
|
+
/**
|
|
17874
|
+
* The chord that runs the same command, already formatted for this platform (callers resolve it
|
|
17875
|
+
* through `useShortcutLabels`, so a rebound key shows rebound). Printed at the right of the row:
|
|
17876
|
+
* a menu that names a command without its key is the reason the key stays undiscovered.
|
|
17877
|
+
*/
|
|
17878
|
+
shortcut?: string;
|
|
17219
17879
|
onClick?: () => void;
|
|
17220
17880
|
submenu?: ContextMenuItemDef[];
|
|
17221
17881
|
/**
|
|
@@ -18474,6 +19134,12 @@ export type StoryPluginActionRegistration = {
|
|
|
18474
19134
|
detail?: string;
|
|
18475
19135
|
group?: string;
|
|
18476
19136
|
createBlock: (input: StoryPluginActionCreateInput) => StoryBlock;
|
|
19137
|
+
/**
|
|
19138
|
+
* The text a committed row of this action reads as, from the params the row carries; `label`
|
|
19139
|
+
* when absent, or when it returns nothing. A row's params are otherwise invisible in the scene
|
|
19140
|
+
* editor, so an action whose params change what the row does says what they are here.
|
|
19141
|
+
*/
|
|
19142
|
+
describe?: (params: Record<string, unknown>) => string | null | undefined;
|
|
18477
19143
|
};
|
|
18478
19144
|
declare const HELP_TOPIC_IDS: readonly [
|
|
18479
19145
|
"gettingHelp",
|
|
@@ -18490,6 +19156,7 @@ declare const HELP_TOPIC_IDS: readonly [
|
|
|
18490
19156
|
"storyExpressions",
|
|
18491
19157
|
"storyFlow",
|
|
18492
19158
|
"storyScript",
|
|
19159
|
+
"storyPaste",
|
|
18493
19160
|
"sceneSnapshot",
|
|
18494
19161
|
"storyMotion",
|
|
18495
19162
|
"dictionary",
|
|
@@ -18547,7 +19214,9 @@ declare const HELP_TOPIC_IDS: readonly [
|
|
|
18547
19214
|
"screenEffects",
|
|
18548
19215
|
"plugins"
|
|
18549
19216
|
];
|
|
18550
|
-
type
|
|
19217
|
+
type StaticHelpTopicId = (typeof HELP_TOPIC_IDS)[number];
|
|
19218
|
+
type LintRuleHelpTopicId = `lintRule.${string}`;
|
|
19219
|
+
type HelpTopicId = StaticHelpTopicId | LintRuleHelpTopicId;
|
|
18551
19220
|
interface PanelComponentProps<TPayload = any> {
|
|
18552
19221
|
panelId: string;
|
|
18553
19222
|
payload?: TPayload;
|
|
@@ -18927,6 +19596,31 @@ export interface StoryCompilePass {
|
|
|
18927
19596
|
/** Called once per scene, before that scene's rows are compiled. */
|
|
18928
19597
|
scene(ctx: SceneCompileContext): void;
|
|
18929
19598
|
}
|
|
19599
|
+
/** What a plugin story action's `run` receives. */
|
|
19600
|
+
export type RuntimeStoryActionContext = {
|
|
19601
|
+
/** The params the row carries: whatever the studio entry's `createBlock` wrote. */
|
|
19602
|
+
params: Record<string, unknown>;
|
|
19603
|
+
/**
|
|
19604
|
+
* Aborted when the row is cancelled: the player rolls back past it, or loads a save, while it is
|
|
19605
|
+
* still running. Tear down whatever `run` put on screen and stop; nothing it does after this
|
|
19606
|
+
* reaches the story.
|
|
19607
|
+
*/
|
|
19608
|
+
signal: AbortSignal;
|
|
19609
|
+
/** The very same object `setup(app)` received as `app.game`. */
|
|
19610
|
+
game: RuntimePluginGame;
|
|
19611
|
+
};
|
|
19612
|
+
/**
|
|
19613
|
+
* The game-side half of a plugin story action.
|
|
19614
|
+
*
|
|
19615
|
+
* `run` may be async, and the story waits for it: the next row starts once the promise settles. A
|
|
19616
|
+
* save taken while it runs replays the row on load, so `run` must be able to start again from
|
|
19617
|
+
* nothing. A throw is logged and the story carries on.
|
|
19618
|
+
*/
|
|
19619
|
+
export type RuntimeStoryActionDef = {
|
|
19620
|
+
/** The same id the studio entry registered the action under, prefixed with the plugin id. */
|
|
19621
|
+
id: string;
|
|
19622
|
+
run(ctx: RuntimeStoryActionContext): void | Promise<void>;
|
|
19623
|
+
};
|
|
18930
19624
|
/**
|
|
18931
19625
|
* The detail on `nl.launch`: where this page sits on the launch's own timeline.
|
|
18932
19626
|
*
|
|
@@ -19385,6 +20079,13 @@ export type RuntimePluginLocale = {
|
|
|
19385
20079
|
* added after the plugin was installed. `null` when the project declares no such key.
|
|
19386
20080
|
*/
|
|
19387
20081
|
text(key: string): string | null;
|
|
20082
|
+
/**
|
|
20083
|
+
* Words this plugin wrote directly and offered for translation from its studio entry
|
|
20084
|
+
* (`app.services.localization.registerWords`), in the language the game is running in: the
|
|
20085
|
+
* translation of the unit `id` names along the language's fallback chain, else `text` - the words
|
|
20086
|
+
* as written, which the plugin passes because the game carries translations and not source words.
|
|
20087
|
+
*/
|
|
20088
|
+
words(id: string, text: string): string;
|
|
19388
20089
|
};
|
|
19389
20090
|
/**
|
|
19390
20091
|
* `menu` - the whole menu bar above the game, declared at once.
|
|
@@ -19521,7 +20222,7 @@ export type RuntimePluginStory = {
|
|
|
19521
20222
|
/**
|
|
19522
20223
|
* The game-side plugin surface.
|
|
19523
20224
|
*
|
|
19524
|
-
* Everything below the always-present
|
|
20225
|
+
* Everything below the always-present six is **capability-gated**: a domain the
|
|
19525
20226
|
* manifest did not declare is *absent from this object*, not a method that
|
|
19526
20227
|
* throws. That is the whole contract — the install prompt lists exactly the
|
|
19527
20228
|
* domains present here, so what the user approved and what the plugin can do are
|
|
@@ -19536,6 +20237,18 @@ export type RuntimePluginGame = {
|
|
|
19536
20237
|
register(def: RuntimeWidgetRendererDef): void;
|
|
19537
20238
|
registerMany(defs: RuntimeWidgetRendererDef[]): void;
|
|
19538
20239
|
};
|
|
20240
|
+
/**
|
|
20241
|
+
* What runs when the story reaches a row one of this plugin's story actions inserted. The id is
|
|
20242
|
+
* the one the studio entry registered the action under; the story waits on the row until `run`
|
|
20243
|
+
* settles. See {@link RuntimeStoryActionDef}.
|
|
20244
|
+
*
|
|
20245
|
+
* Always present, like `blueprintNodes`: a runner only ever runs on a row the author placed, and
|
|
20246
|
+
* only on this plugin's own rows, so it grants nothing an install prompt would have to name.
|
|
20247
|
+
*/
|
|
20248
|
+
storyActions: {
|
|
20249
|
+
register(def: RuntimeStoryActionDef): void;
|
|
20250
|
+
registerMany(defs: RuntimeStoryActionDef[]): void;
|
|
20251
|
+
};
|
|
19539
20252
|
/**
|
|
19540
20253
|
* Read-only access to plugin storage published with the game, for the
|
|
19541
20254
|
* namespaces declared in `contributes.runtimeData`. Synchronous: the
|
|
@@ -20267,6 +20980,22 @@ export type FreezeGuard = {
|
|
|
20267
20980
|
run<A extends unknown[], R>(handler: (...args: A) => R): (...args: A) => R | undefined;
|
|
20268
20981
|
};
|
|
20269
20982
|
declare function useFreezeGuard(scope?: string | readonly string[]): FreezeGuard;
|
|
20983
|
+
type WordsSourceValue = {
|
|
20984
|
+
/** The words written directly; with a key, what shows if the key is not in the running game. */
|
|
20985
|
+
text: string;
|
|
20986
|
+
/** The translation key the words are read from, or null for words written directly. */
|
|
20987
|
+
key: string | null;
|
|
20988
|
+
};
|
|
20989
|
+
type WordsSourceFieldProps = {
|
|
20990
|
+
value: WordsSourceValue;
|
|
20991
|
+
onChange: (next: WordsSourceValue) => void;
|
|
20992
|
+
/** Words over several lines; one line when absent. */
|
|
20993
|
+
multiline?: boolean;
|
|
20994
|
+
disabled?: boolean;
|
|
20995
|
+
/** Resets the box's draft when it changes - the id of whatever the words belong to. */
|
|
20996
|
+
draftResetKey?: string;
|
|
20997
|
+
};
|
|
20998
|
+
declare function WordsSourceField({ value, onChange, multiline, disabled, draftResetKey }: WordsSourceFieldProps): React$1.ReactElement;
|
|
20270
20999
|
type DivProps = React$1.HTMLAttributes<HTMLDivElement>;
|
|
20271
21000
|
declare function PluginAssetSelector(props: AssetSelectorProps): React$1.JSX.Element | null;
|
|
20272
21001
|
export type PluginPanelRootProps = DivProps & {
|
|
@@ -20355,6 +21084,14 @@ declare const pluginUi: Readonly<{
|
|
|
20355
21084
|
CardFooter: typeof CardFooter;
|
|
20356
21085
|
InteractiveCard: typeof InteractiveCard;
|
|
20357
21086
|
AssetSelector: typeof PluginAssetSelector;
|
|
21087
|
+
/**
|
|
21088
|
+
* Words a player reads, written directly or read from one of the project's translation keys - the
|
|
21089
|
+
* same choice, key list and in-place key editing as Studio's own text and button labels. Controlled:
|
|
21090
|
+
* `value` is `{ text, key }` with `key` null for words written directly, and `onChange` is
|
|
21091
|
+
* handed the next one. Words written directly are translated when the plugin offers them with
|
|
21092
|
+
* `app.services.localization.registerWords`; words read from a key are translated as the key.
|
|
21093
|
+
*/
|
|
21094
|
+
WordsField: typeof WordsSourceField;
|
|
20358
21095
|
Panel: Readonly<{
|
|
20359
21096
|
Root: typeof PluginPanelRoot;
|
|
20360
21097
|
Header: typeof PluginPanelHeader;
|
|
@@ -20453,6 +21190,7 @@ export declare const ui: Readonly<{
|
|
|
20453
21190
|
CardFooter: typeof CardFooter;
|
|
20454
21191
|
InteractiveCard: typeof InteractiveCard;
|
|
20455
21192
|
AssetSelector: typeof PluginAssetSelector;
|
|
21193
|
+
WordsField: typeof WordsSourceField;
|
|
20456
21194
|
Panel: Readonly<{
|
|
20457
21195
|
Root: typeof PluginPanelRoot;
|
|
20458
21196
|
Header: typeof PluginPanelHeader;
|
|
@@ -20634,7 +21372,7 @@ export type PluginAssetsService = {
|
|
|
20634
21372
|
revokeObjectUrl(url: string): void;
|
|
20635
21373
|
};
|
|
20636
21374
|
/** An active editor locale code (built-in like "en"/"zh", or a plugin-provided locale). */
|
|
20637
|
-
|
|
21375
|
+
type LocaleCode$1 = string;
|
|
20638
21376
|
/**
|
|
20639
21377
|
* A plugin's own message tables: `locale code -> (message key -> string)`. This
|
|
20640
21378
|
* is the plugin's private catalog, unrelated to Studio's own translations.
|
|
@@ -20654,7 +21392,7 @@ export type PluginMessageBundle = {
|
|
|
20654
21392
|
* {@link PluginI18n.onLocaleChange} to re-render on a language switch.
|
|
20655
21393
|
*/
|
|
20656
21394
|
export type PluginTranslator = {
|
|
20657
|
-
readonly locale: LocaleCode;
|
|
21395
|
+
readonly locale: LocaleCode$1;
|
|
20658
21396
|
t(key: string, params?: Record<string, string | number>): string;
|
|
20659
21397
|
};
|
|
20660
21398
|
/**
|
|
@@ -20664,14 +21402,14 @@ export type PluginTranslator = {
|
|
|
20664
21402
|
*/
|
|
20665
21403
|
export type PluginI18n = {
|
|
20666
21404
|
/** The editor's active locale code. */
|
|
20667
|
-
readonly locale: LocaleCode;
|
|
21405
|
+
readonly locale: LocaleCode$1;
|
|
20668
21406
|
/**
|
|
20669
21407
|
* Subscribe to editor-language changes. The listener fires with the new
|
|
20670
21408
|
* locale code whenever the active editor language changes. Returns a
|
|
20671
21409
|
* {@link PluginCleanup} (also tracked by the host, so it is reclaimed on
|
|
20672
21410
|
* unload even if you forget to call it).
|
|
20673
21411
|
*/
|
|
20674
|
-
onLocaleChange(listener: (locale: LocaleCode) => void): PluginCleanup;
|
|
21412
|
+
onLocaleChange(listener: (locale: LocaleCode$1) => void): PluginCleanup;
|
|
20675
21413
|
/** Locale-aware number formatting bound to the editor's active locale. */
|
|
20676
21414
|
formatNumber(value: number, options?: Intl.NumberFormatOptions): string;
|
|
20677
21415
|
/** Locale-aware date formatting bound to the editor's active locale. */
|
|
@@ -20751,15 +21489,45 @@ export type PluginInterfaceService = {
|
|
|
20751
21489
|
listGlobalFns(): PluginBlueprintFnEntry[];
|
|
20752
21490
|
};
|
|
20753
21491
|
/**
|
|
20754
|
-
*
|
|
21492
|
+
* One of the words a plugin puts in front of a player, offered for translation.
|
|
20755
21493
|
*
|
|
20756
|
-
*
|
|
20757
|
-
*
|
|
20758
|
-
*
|
|
20759
|
-
* `
|
|
21494
|
+
* `id` is the plugin's own (letters, digits, and `.` `_` `-` between them) and has to stay the same
|
|
21495
|
+
* while the words are the same thing - a translation is kept against it, so an id made from the words
|
|
21496
|
+
* themselves would lose every translation the moment the author corrected a letter. The translation
|
|
21497
|
+
* unit is `plugin:<pluginId>/<id>`, scoped to the plugin by the host.
|
|
21498
|
+
*/
|
|
21499
|
+
export type PluginWordsEntry = {
|
|
21500
|
+
id: string;
|
|
21501
|
+
/** The words, in the project's source language. */
|
|
21502
|
+
text: string;
|
|
21503
|
+
/** Where a player meets them, for a translator: "File › Save". The plugin's name when absent. */
|
|
21504
|
+
context?: string;
|
|
21505
|
+
};
|
|
21506
|
+
/** A plugin's words as they are now, and a way for the host to hear that they changed. */
|
|
21507
|
+
export type PluginWordsSource = {
|
|
21508
|
+
list(): readonly PluginWordsEntry[];
|
|
21509
|
+
subscribe?(listener: () => void): () => void;
|
|
21510
|
+
};
|
|
21511
|
+
/**
|
|
21512
|
+
* The project's own localization keys, read-only, and a place to offer the plugin's own words.
|
|
21513
|
+
*
|
|
21514
|
+
* A plugin that puts words in front of a player either names a key from this list - one of the
|
|
21515
|
+
* project's shared words - or writes them directly and offers them with `registerWords`, so they
|
|
21516
|
+
* travel with everything else the project translates. Empty before the keys document has loaded,
|
|
21517
|
+
* which is a moment rather than a state - subscribe through `services.workspace.registerReloader` if
|
|
21518
|
+
* a panel has to re-read it.
|
|
20760
21519
|
*/
|
|
20761
21520
|
export type PluginLocalizationService = {
|
|
20762
21521
|
listKeys(): PluginLocalizationKeyEntry[];
|
|
21522
|
+
/**
|
|
21523
|
+
* Offer the plugin's own words to the project's translation table and exports.
|
|
21524
|
+
*
|
|
21525
|
+
* Each listed entry with a letter in it gets a row under the plugin's name; the runtime entry
|
|
21526
|
+
* reads a word back in the player's language with `app.game.locale.words(id, text)`. List what
|
|
21527
|
+
* the author wrote directly; words read from a key are translated as the key and need no entry.
|
|
21528
|
+
* Call `subscribe`'s listener whenever the list would answer differently.
|
|
21529
|
+
*/
|
|
21530
|
+
registerWords(source: PluginWordsSource): PluginCleanup;
|
|
20763
21531
|
};
|
|
20764
21532
|
export type PluginServices = {
|
|
20765
21533
|
storage: PluginStorageService;
|
|
@@ -20877,6 +21645,7 @@ export {
|
|
|
20877
21645
|
GameSurfaceMountDetail as RuntimePluginSurfaceMountTimelineDetail,
|
|
20878
21646
|
GameTimelineSpanDetails as RuntimePluginTimelineSpanDetails,
|
|
20879
21647
|
GameTimelineSpanName as RuntimePluginTimelineSpanName,
|
|
21648
|
+
LocaleCode$1 as LocaleCode,
|
|
20880
21649
|
SelectOption$1 as SelectOption,
|
|
20881
21650
|
};
|
|
20882
21651
|
|