@almadar/std 16.199.0 → 16.200.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/behaviors/lolo/ui/avl/atoms/ui-behavior-view.lolo +2 -2
- package/behaviors/lolo/ui/avl/atoms/ui-module-card.lolo +2 -2
- package/behaviors/lolo/ui/core/atoms/std-app-layout.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/std-file-store.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-conditional-wrapper.lolo +11 -4
- package/behaviors/lolo/ui/core/atoms/ui-icon.lolo +1 -1
- package/behaviors/lolo/ui/core/atoms/ui-input.lolo +10 -4
- package/behaviors/lolo/ui/core/atoms/ui-select.lolo +6 -4
- package/behaviors/lolo/ui/core/molecules/ui-branching-logic-builder.lolo +5 -5
- package/behaviors/lolo/ui/core/molecules/ui-document-details.lolo +8 -1
- package/behaviors/lolo/ui/core/molecules/ui-drawer.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-edge-decoration.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-floating-action-button.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-gradient-divider.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-import-preview-tree.lolo +8 -1
- package/behaviors/lolo/ui/core/molecules/ui-input-group.lolo +10 -4
- package/behaviors/lolo/ui/core/molecules/ui-orbital-visualization.lolo +3 -3
- package/behaviors/lolo/ui/core/molecules/ui-reply-tree.lolo +1 -1
- package/behaviors/lolo/ui/core/molecules/ui-swipeable-row.lolo +3 -3
- package/behaviors/lolo/ui/core/molecules/ui-wizard-container.lolo +23 -16
- package/behaviors/lolo/ui/core/organisms/ui-entity-cards.lolo +2 -2
- package/behaviors/lolo/ui/core/organisms/ui-entity-list.lolo +1 -1
- package/behaviors/lolo/ui/core/organisms/ui-entity-table.lolo +2 -2
- package/behaviors/lolo/ui/core/organisms/ui-form-section.lolo +15 -8
- package/behaviors/lolo/ui/core/organisms/ui-form.lolo +15 -8
- package/behaviors/lolo/ui/core/organisms/ui-stat-card.lolo +1 -1
- package/behaviors/lolo/ui/core/organisms/ui-subagent-trace-panel.lolo +3 -3
- package/behaviors/lolo/ui/game/atoms/std-fx-narrative.lolo +126 -0
- package/behaviors/lolo/ui/game/atoms/std-pickup.lolo +104 -0
- package/behaviors/lolo/ui/game/atoms/std-platformer-body.lolo +39 -19
- package/behaviors/lolo/ui/game/atoms/ui-control-button.lolo +3 -3
- package/behaviors/lolo/ui/game/atoms/ui-control-grid.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-game-hud.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/ui-game-menu.lolo +3 -3
- package/behaviors/lolo/ui/game/atoms/ui-stat-badge.lolo +3 -3
- package/behaviors/registry/ui/avl/atoms/ui-behavior-view.orb +389 -3
- package/behaviors/registry/ui/avl/atoms/ui-module-card.orb +389 -3
- package/behaviors/registry/ui/core/atoms/std-app-layout.orb +93 -2
- package/behaviors/registry/ui/core/atoms/std-file-store.orb +101 -2
- package/behaviors/registry/ui/core/atoms/ui-atlas-image.orb +13 -1
- package/behaviors/registry/ui/core/atoms/ui-atlas-panel.orb +13 -1
- package/behaviors/registry/ui/core/atoms/ui-badge.orb +56 -1
- package/behaviors/registry/ui/core/atoms/ui-button.orb +56 -1
- package/behaviors/registry/ui/core/atoms/ui-conditional-wrapper.orb +277 -5
- package/behaviors/registry/ui/core/atoms/ui-game-icon.orb +56 -1
- package/behaviors/registry/ui/core/atoms/ui-icon.orb +1 -10
- package/behaviors/registry/ui/core/atoms/ui-input.orb +42 -7
- package/behaviors/registry/ui/core/atoms/ui-law-reference-tooltip.orb +27 -1
- package/behaviors/registry/ui/core/atoms/ui-select.orb +69 -9
- package/behaviors/registry/ui/core/molecules/ui-accordion.orb +30 -1
- package/behaviors/registry/ui/core/molecules/ui-branching-logic-builder.orb +76 -13
- package/behaviors/registry/ui/core/molecules/ui-breadcrumb.orb +30 -1
- package/behaviors/registry/ui/core/molecules/ui-chart-legend.orb +15 -1
- package/behaviors/registry/ui/core/molecules/ui-chart.orb +133 -1
- package/behaviors/registry/ui/core/molecules/ui-code-block.orb +77 -1
- package/behaviors/registry/ui/core/molecules/ui-confirm-dialog.orb +22 -1
- package/behaviors/registry/ui/core/molecules/ui-content-renderer.orb +34 -1
- package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +99 -1
- package/behaviors/registry/ui/core/molecules/ui-data-list.orb +118 -1
- package/behaviors/registry/ui/core/molecules/ui-date-range-picker.orb +27 -1
- package/behaviors/registry/ui/core/molecules/ui-date-range-selector.orb +15 -1
- package/behaviors/registry/ui/core/molecules/ui-doc-breadcrumb.orb +14 -1
- package/behaviors/registry/ui/core/molecules/ui-doc-pagination.orb +35 -1
- package/behaviors/registry/ui/core/molecules/ui-doc-toc.orb +20 -1
- package/behaviors/registry/ui/core/molecules/ui-document-details.orb +65 -3
- package/behaviors/registry/ui/core/molecules/ui-document-panel.orb +22 -1
- package/behaviors/registry/ui/core/molecules/ui-document-viewer.orb +60 -1
- package/behaviors/registry/ui/core/molecules/ui-drawer.orb +1 -8
- package/behaviors/registry/ui/core/molecules/ui-edge-decoration.orb +1 -9
- package/behaviors/registry/ui/core/molecules/ui-feature-grid.orb +39 -1
- package/behaviors/registry/ui/core/molecules/ui-filter-group.orb +39 -1
- package/behaviors/registry/ui/core/molecules/ui-floating-action-button.orb +29 -10
- package/behaviors/registry/ui/core/molecules/ui-form-actions.orb +85 -1
- package/behaviors/registry/ui/core/molecules/ui-form-layout.orb +22 -1
- package/behaviors/registry/ui/core/molecules/ui-fx-overlay.orb +76 -1
- package/behaviors/registry/ui/core/molecules/ui-gradient-divider.orb +1 -10
- package/behaviors/registry/ui/core/molecules/ui-graph-canvas.orb +421 -1
- package/behaviors/registry/ui/core/molecules/ui-graph-view.orb +92 -1
- package/behaviors/registry/ui/core/molecules/ui-header.orb +59 -1
- package/behaviors/registry/ui/core/molecules/ui-import-preview-tree.orb +125 -2
- package/behaviors/registry/ui/core/molecules/ui-import-progress.orb +17 -1
- package/behaviors/registry/ui/core/molecules/ui-import-source-picker.orb +39 -1
- package/behaviors/registry/ui/core/molecules/ui-input-group.orb +42 -7
- package/behaviors/registry/ui/core/molecules/ui-jazari-state-machine.orb +22 -1
- package/behaviors/registry/ui/core/molecules/ui-lightbox.orb +17 -1
- package/behaviors/registry/ui/core/molecules/ui-likert-scale.orb +15 -1
- package/behaviors/registry/ui/core/molecules/ui-line-chart.orb +18 -1
- package/behaviors/registry/ui/core/molecules/ui-map-view.orb +109 -1
- package/behaviors/registry/ui/core/molecules/ui-matrix-question.orb +27 -1
- package/behaviors/registry/ui/core/molecules/ui-meter.orb +57 -1
- package/behaviors/registry/ui/core/molecules/ui-option-constraint-group.orb +27 -1
- package/behaviors/registry/ui/core/molecules/ui-orbital-visualization.orb +78 -4
- package/behaviors/registry/ui/core/molecules/ui-page-header.orb +91 -1
- package/behaviors/registry/ui/core/molecules/ui-qr-scanner.orb +20 -1
- package/behaviors/registry/ui/core/molecules/ui-relation-select.orb +23 -1
- package/behaviors/registry/ui/core/molecules/ui-repeatable-form-section.orb +18 -1
- package/behaviors/registry/ui/core/molecules/ui-reply-tree.orb +5 -2
- package/behaviors/registry/ui/core/molecules/ui-section.orb +22 -1
- package/behaviors/registry/ui/core/molecules/ui-signature-pad.orb +22 -1
- package/behaviors/registry/ui/core/molecules/ui-social-proof.orb +18 -1
- package/behaviors/registry/ui/core/molecules/ui-split.orb +22 -1
- package/behaviors/registry/ui/core/molecules/ui-stat-display.orb +22 -1
- package/behaviors/registry/ui/core/molecules/ui-swipeable-row.orb +64 -4
- package/behaviors/registry/ui/core/molecules/ui-table-view.orb +136 -1
- package/behaviors/registry/ui/core/molecules/ui-tabs.orb +301 -1
- package/behaviors/registry/ui/core/molecules/ui-upload-drop-zone.orb +25 -1
- package/behaviors/registry/ui/core/molecules/ui-version-diff.orb +28 -1
- package/behaviors/registry/ui/core/molecules/ui-violation-alert.orb +46 -1
- package/behaviors/registry/ui/core/molecules/ui-wizard-container.orb +518 -102
- package/behaviors/registry/ui/core/molecules/ui-wizard-progress.orb +19 -1
- package/behaviors/registry/ui/core/organisms/ui-chat-bar.orb +22 -1
- package/behaviors/registry/ui/core/organisms/ui-dashboard-grid.orb +40 -1
- package/behaviors/registry/ui/core/organisms/ui-detail-panel.orb +196 -1
- package/behaviors/registry/ui/core/organisms/ui-drawer-slot.orb +22 -1
- package/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +83 -14
- package/behaviors/registry/ui/core/organisms/ui-entity-list.orb +64 -8
- package/behaviors/registry/ui/core/organisms/ui-entity-table.orb +152 -14
- package/behaviors/registry/ui/core/organisms/ui-form-section.orb +1140 -15
- package/behaviors/registry/ui/core/organisms/ui-form.orb +1140 -15
- package/behaviors/registry/ui/core/organisms/ui-master-detail.orb +22 -1
- package/behaviors/registry/ui/core/organisms/ui-media-gallery.orb +71 -1
- package/behaviors/registry/ui/core/organisms/ui-modal-slot.orb +22 -1
- package/behaviors/registry/ui/core/organisms/ui-segment-renderer.orb +29 -1
- package/behaviors/registry/ui/core/organisms/ui-stat-card.orb +61 -7
- package/behaviors/registry/ui/core/organisms/ui-state-machine-view.orb +22 -1
- package/behaviors/registry/ui/core/organisms/ui-subagent-trace-panel.orb +37 -7
- package/behaviors/registry/ui/core/organisms/ui-tabbed-container.orb +31 -1
- package/behaviors/registry/ui/core/organisms/ui-timeline.orb +73 -1
- package/behaviors/registry/ui/core/organisms/ui-toast-slot.orb +22 -1
- package/behaviors/registry/ui/game/atoms/std-fx-narrative.orb +695 -0
- package/behaviors/registry/ui/game/atoms/std-pickup.orb +835 -0
- package/behaviors/registry/ui/game/atoms/std-platformer-body.orb +1515 -1041
- package/behaviors/registry/ui/game/atoms/ui-action-palette.orb +269 -1
- package/behaviors/registry/ui/game/atoms/ui-action-tile.orb +288 -1
- package/behaviors/registry/ui/game/atoms/ui-canvas-2d.orb +54 -1
- package/behaviors/registry/ui/game/atoms/ui-canvas.orb +311 -1
- package/behaviors/registry/ui/game/atoms/ui-choice-button.orb +56 -1
- package/behaviors/registry/ui/game/atoms/ui-control-button.orb +59 -20
- package/behaviors/registry/ui/game/atoms/ui-control-grid.orb +186 -7
- package/behaviors/registry/ui/game/atoms/ui-dialogue-bubble.orb +56 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-fx-layer.orb +233 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-group.orb +137 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-mesh.orb +219 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-shape-layer.orb +951 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-shape.orb +512 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-sprite-layer.orb +270 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-sprite.orb +106 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-text-layer.orb +85 -1
- package/behaviors/registry/ui/game/atoms/ui-draw-text.orb +19 -1
- package/behaviors/registry/ui/game/atoms/ui-game-audio-toggle.orb +128 -1
- package/behaviors/registry/ui/game/atoms/ui-game-hud.orb +168 -8
- package/behaviors/registry/ui/game/atoms/ui-game-menu.orb +151 -13
- package/behaviors/registry/ui/game/atoms/ui-health-bar.orb +109 -1
- package/behaviors/registry/ui/game/atoms/ui-score-display.orb +56 -1
- package/behaviors/registry/ui/game/atoms/ui-sequence-bar.orb +523 -1
- package/behaviors/registry/ui/game/atoms/ui-stat-badge.orb +112 -22
- package/behaviors/registry/ui/game/atoms/ui-state-graph.orb +24 -1
- package/behaviors/registry/ui/game/atoms/ui-state-json-view.orb +20 -1
- package/behaviors/registry/ui/game/atoms/ui-trait-slot.orb +849 -1
- package/behaviors/registry/ui/learning/atoms/ui-algo-graph-canvas.orb +289 -1
- package/behaviors/registry/ui/learning/atoms/ui-algorithm-canvas.orb +424 -1
- package/behaviors/registry/ui/learning/atoms/ui-biology-canvas.orb +925 -1
- package/behaviors/registry/ui/learning/atoms/ui-chemistry-canvas.orb +970 -1
- package/behaviors/registry/ui/learning/atoms/ui-learning-canvas.orb +351 -1
- package/behaviors/registry/ui/learning/atoms/ui-math-canvas.orb +592 -1
- package/behaviors/registry/ui/learning/atoms/ui-physics-canvas.orb +1049 -1
- package/behaviors/registry/ui/marketing/atoms/ui-community-links.orb +36 -1
- package/behaviors/registry/ui/marketing/atoms/ui-cta-banner.orb +27 -1
- package/behaviors/registry/ui/marketing/atoms/ui-hero-section.orb +39 -1
- package/behaviors/registry/ui/marketing/atoms/ui-marketing-footer.orb +55 -1
- package/behaviors/registry/ui/marketing/atoms/ui-pricing-card.orb +15 -1
- package/behaviors/registry/ui/marketing/atoms/ui-pricing-grid.orb +65 -1
- package/behaviors/registry/ui/marketing/atoms/ui-service-catalog.orb +19 -1
- package/behaviors/registry/ui/marketing/atoms/ui-showcase-card.orb +15 -1
- package/behaviors/registry/ui/marketing/atoms/ui-split-section.orb +15 -1
- package/behaviors/registry/ui/marketing/atoms/ui-stats-grid.orb +15 -1
- package/behaviors/registry/ui/marketing/atoms/ui-step-flow.orb +23 -1
- package/behaviors/registry/ui/marketing/atoms/ui-tag-cloud.orb +18 -1
- package/behaviors/registry/ui/marketing/organisms/ui-book-viewer.orb +84 -1
- package/behaviors/registry/ui/marketing/organisms/ui-case-study-organism.orb +22 -1
- package/behaviors/registry/ui/marketing/organisms/ui-feature-grid-organism.orb +22 -1
- package/behaviors/registry/ui/marketing/organisms/ui-hero-organism.orb +52 -1
- package/behaviors/registry/ui/marketing/organisms/ui-pricing-organism.orb +22 -1
- package/behaviors/registry/ui/marketing/organisms/ui-showcase-organism.orb +32 -1
- package/behaviors/registry/ui/marketing/organisms/ui-stats-organism.orb +22 -1
- package/behaviors/registry/ui/marketing/organisms/ui-step-flow-organism.orb +22 -1
- package/behaviors/registry/ui/marketing/organisms/ui-team-organism.orb +22 -1
- package/behaviors/registry/ui/marketing/templates/ui-about-page-template.orb +176 -1
- package/behaviors/registry/ui/marketing/templates/ui-feature-detail-page-template.orb +147 -1
- package/behaviors/registry/ui/marketing/templates/ui-landing-page-template.orb +260 -1
- package/behaviors/registry/ui/marketing/templates/ui-pricing-page-template.orb +98 -1
- package/dist/behaviors/exports-reader.js +3302 -2594
- package/dist/behaviors/functions/index.d.ts +203 -29
- package/dist/behaviors/functions/index.js +3297 -2595
- package/dist/behaviors/index.d.ts +1 -1
- package/dist/behaviors/index.js +3303 -2595
- package/dist/behaviors/query.js +3302 -2594
- package/dist/behaviors-embeddings.hash.json +3 -3
- package/dist/behaviors-embeddings.json +9 -1
- package/dist/behaviors-registry.json +530 -8
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3303 -2595
- package/dist/knob-embeddings.hash.json +3 -3
- package/dist/knob-embeddings.json +1 -1
- package/dist/registry/factory-signatures.json +1 -1
- package/package.json +2 -2
|
@@ -10,7 +10,7 @@ orbital FormOrbital {
|
|
|
10
10
|
inputType : string
|
|
11
11
|
placeholder : string
|
|
12
12
|
required : boolean
|
|
13
|
-
defaultValue :
|
|
13
|
+
defaultValue : ControlValue
|
|
14
14
|
options : [FormFieldsItemOptionsItem]
|
|
15
15
|
values : [string]
|
|
16
16
|
relation : FormFieldsItemRelation
|
|
@@ -22,6 +22,13 @@ orbital FormOrbital {
|
|
|
22
22
|
disabled : boolean
|
|
23
23
|
hint : string
|
|
24
24
|
}
|
|
25
|
+
type ControlValue = string | number | boolean | [string] | FileValue
|
|
26
|
+
type FileValue = {
|
|
27
|
+
name : string!
|
|
28
|
+
url : string!
|
|
29
|
+
mimeType : string!
|
|
30
|
+
sizeBytes : number!
|
|
31
|
+
}
|
|
25
32
|
type FormFieldsItemOptionsItem = {
|
|
26
33
|
value : string!
|
|
27
34
|
label : string!
|
|
@@ -69,10 +76,10 @@ orbital FormOrbital {
|
|
|
69
76
|
message : string!
|
|
70
77
|
}
|
|
71
78
|
type FormEvaluationContext = {
|
|
72
|
-
formValues : Map string
|
|
73
|
-
globalVariables : Map string
|
|
74
|
-
localVariables : Map string
|
|
75
|
-
entity : Map string
|
|
79
|
+
formValues : Map string ControlValue!
|
|
80
|
+
globalVariables : Map string ControlValue!
|
|
81
|
+
localVariables : Map string ControlValue
|
|
82
|
+
entity : Map string ControlValue
|
|
76
83
|
}
|
|
77
84
|
type FormSectionsItem = {
|
|
78
85
|
id : string!
|
|
@@ -89,7 +96,7 @@ orbital FormOrbital {
|
|
|
89
96
|
inputType : string
|
|
90
97
|
placeholder : string
|
|
91
98
|
required : boolean
|
|
92
|
-
defaultValue :
|
|
99
|
+
defaultValue : ControlValue
|
|
93
100
|
options : [FormSectionsItemFieldsItemOptionsItem]
|
|
94
101
|
values : [string]
|
|
95
102
|
relation : FormSectionsItemFieldsItemRelation
|
|
@@ -116,7 +123,7 @@ orbital FormOrbital {
|
|
|
116
123
|
type FormFIELDCHANGEChange = {
|
|
117
124
|
fieldId : string!
|
|
118
125
|
value : string | number | boolean | [string] | FormFIELDCHANGEChangeValue!
|
|
119
|
-
formValues : Map string
|
|
126
|
+
formValues : Map string ControlValue!
|
|
120
127
|
}
|
|
121
128
|
type FormFIELDCHANGEChangeValue = {
|
|
122
129
|
name : string!
|
|
@@ -283,7 +290,7 @@ orbital FormOrbital {
|
|
|
283
290
|
@label "Class Name"
|
|
284
291
|
@description "Additional CSS classes"
|
|
285
292
|
@tier "presentation"
|
|
286
|
-
mode :
|
|
293
|
+
mode : string
|
|
287
294
|
@label "Mode"
|
|
288
295
|
@description "Form mode — 'create' for new records, 'edit' for updating existing. Accepts `string` so schema-driven callers (whose `config.mode` is typed as `string` per the trait's declared config block) compile cleanly. The runtime treats anything other than 'edit' as 'create'."
|
|
289
296
|
@tier "presentation"
|
|
@@ -114,7 +114,7 @@ orbital SubagentTracePanelOrbital {
|
|
|
114
114
|
@label "Selected Ids"
|
|
115
115
|
@description "Currently selected item IDs"
|
|
116
116
|
@tier "presentation"
|
|
117
|
-
subagents : [
|
|
117
|
+
subagents : [Map string scalar] = []
|
|
118
118
|
@label "Subagents"
|
|
119
119
|
@description "All known subagents from the runner."
|
|
120
120
|
@tier "presentation"
|
|
@@ -134,11 +134,11 @@ orbital SubagentTracePanelOrbital {
|
|
|
134
134
|
@label "On Close"
|
|
135
135
|
@description "Optional dismiss handler."
|
|
136
136
|
@tier "presentation"
|
|
137
|
-
coordinatorActivities : [
|
|
137
|
+
coordinatorActivities : [Map string scalar] = []
|
|
138
138
|
@label "Coordinator Activities"
|
|
139
139
|
@description "Full coordinator activities (tool calls, results, messages, errors)."
|
|
140
140
|
@tier "presentation"
|
|
141
|
-
coordinatorMessages : [
|
|
141
|
+
coordinatorMessages : [Map string scalar] = []
|
|
142
142
|
@label "Coordinator Messages"
|
|
143
143
|
@description "Canonical Coordinator conversation — same shape live and on reload. When present, takes precedence over `coordinatorActivities` for the Coordinator section."
|
|
144
144
|
@tier "presentation"
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
app std-fx-narrative "1.0.0"
|
|
2
|
+
"Headless pedagogy→fx translator for game boards and learning shells: turns high-level narrative events into big transient screen-space or world-space text effects consumed by std-fx-particles / fx-overlay. Levels emit NARRATE { text, style } and get a correctly styled, centered (or positioned) floating text burst without hand-rolling particle structs. Tutorials emit TUTORIAL_SHOW and the atom forwards SHOW to a composed std-tutorial-overlay trait. Renders nothing; centralizes the FX vocabulary so every level's teaching text looks and behaves the same."
|
|
3
|
+
|
|
4
|
+
orbital FxNarrativeOrbital {
|
|
5
|
+
type NarrativeCue = {
|
|
6
|
+
text : string!
|
|
7
|
+
style : "hint" | "fact" | "warn" | "celebrate"
|
|
8
|
+
x : number
|
|
9
|
+
y : number
|
|
10
|
+
ttl : number
|
|
11
|
+
space : "screen" | "world"
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
type FxParticle = {
|
|
15
|
+
id : string!
|
|
16
|
+
type : string!
|
|
17
|
+
x : number!
|
|
18
|
+
z : number
|
|
19
|
+
y : number
|
|
20
|
+
message : string
|
|
21
|
+
ttl : number!
|
|
22
|
+
maxTtl : number
|
|
23
|
+
bornAt : number
|
|
24
|
+
space : string
|
|
25
|
+
effect : string
|
|
26
|
+
color : string
|
|
27
|
+
size : number
|
|
28
|
+
vx : number
|
|
29
|
+
vy : number
|
|
30
|
+
vz : number
|
|
31
|
+
particleCount : number
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
type StyleDef = {
|
|
35
|
+
color : string!
|
|
36
|
+
size : number!
|
|
37
|
+
ttl : number!
|
|
38
|
+
effect : string!
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
entity FxNarrativeData [runtime, shared] {
|
|
42
|
+
id : string!
|
|
43
|
+
seq : number = 0
|
|
44
|
+
lastText : string = ""
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
trait FxNarrative -> @rebindable FxNarrativeData [lifecycle] {
|
|
48
|
+
initial: active
|
|
49
|
+
|
|
50
|
+
state active {
|
|
51
|
+
INIT -> active
|
|
52
|
+
(set @entity.seq 0)
|
|
53
|
+
(set @entity.lastText "")
|
|
54
|
+
|
|
55
|
+
NARRATE -> active when @config.running
|
|
56
|
+
(let ((styleKey (if (== (object/get @payload style) null) "fact" (object/get @payload style)))
|
|
57
|
+
(styleDef (object/get @config.styles @styleKey))
|
|
58
|
+
(ttl (if (== (object/get @payload ttl) null) (object/get @styleDef ttl) (object/get @payload ttl)))
|
|
59
|
+
(x (if (== (object/get @payload x) null) 0.5 (object/get @payload x)))
|
|
60
|
+
(y (if (== (object/get @payload y) null) 0.25 (object/get @payload y)))
|
|
61
|
+
(space (if (== (object/get @payload space) null) "world" (object/get @payload space)))
|
|
62
|
+
(text (object/get @payload text)))
|
|
63
|
+
(do
|
|
64
|
+
(set @entity.seq (+ @entity.seq 1))
|
|
65
|
+
(set @entity.lastText @text)
|
|
66
|
+
(emit BURST { particles: [ {
|
|
67
|
+
id: (str/concat "narrative-" @entity.seq),
|
|
68
|
+
type: "narrative",
|
|
69
|
+
x: @x,
|
|
70
|
+
z: @y,
|
|
71
|
+
y: 0,
|
|
72
|
+
message: @text,
|
|
73
|
+
ttl: @ttl,
|
|
74
|
+
maxTtl: @ttl,
|
|
75
|
+
bornAt: (time/now),
|
|
76
|
+
space: @space,
|
|
77
|
+
effect: (object/get @styleDef effect),
|
|
78
|
+
color: (object/get @styleDef color),
|
|
79
|
+
size: (object/get @styleDef size),
|
|
80
|
+
vx: 0,
|
|
81
|
+
vy: 0,
|
|
82
|
+
vz: 0,
|
|
83
|
+
particleCount: 1
|
|
84
|
+
} ] })))
|
|
85
|
+
|
|
86
|
+
TUTORIAL_SHOW -> active when @config.running
|
|
87
|
+
(emit SHOW { id: "tutorial" })
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
emits {
|
|
91
|
+
BURST -> external {
|
|
92
|
+
particles : [FxParticle]
|
|
93
|
+
}
|
|
94
|
+
@description "Styled floating-text particle batch for std-fx-particles / fx-overlay."
|
|
95
|
+
@tier "domain"
|
|
96
|
+
SHOW -> external {
|
|
97
|
+
id : string
|
|
98
|
+
}
|
|
99
|
+
@description "Forwarded to a composed std-tutorial-overlay to open the tutorial modal."
|
|
100
|
+
@tier "domain"
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
listens {
|
|
104
|
+
NARRATE { text : string!, style : "hint" | "fact" | "warn" | "celebrate", x : number, y : number, ttl : number, space : "screen" | "world" }
|
|
105
|
+
TUTORIAL_SHOW { text : string, title : string }
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
config {
|
|
109
|
+
running : boolean = true
|
|
110
|
+
@label "Running"
|
|
111
|
+
@description "When false all narrative events are ignored."
|
|
112
|
+
@tier "domain"
|
|
113
|
+
styles : Map string StyleDef = {
|
|
114
|
+
"fact": { color: "#38bdf8", size: 0.7, ttl: 3, effect: "float-text" },
|
|
115
|
+
"hint": { color: "#a78bfa", size: 0.6, ttl: 2, effect: "float-text" },
|
|
116
|
+
"warn": { color: "#f87171", size: 0.6, ttl: 1.5, effect: "shake" },
|
|
117
|
+
"celebrate": { color: "#facc15", size: 0.9, ttl: 3, effect: "sparkle" }
|
|
118
|
+
}
|
|
119
|
+
@label "Styles"
|
|
120
|
+
@description "Map of narrative style to color, size, ttl, and effect. Override per game theme."
|
|
121
|
+
@tier "presentation"
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
page "/fx-narrative" as FxNarrativePage -> FxNarrative
|
|
126
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
app std-pickup "1.0.0"
|
|
2
|
+
"Headless side-view collectible authority — the platformer twin of grid std-gather. Listens BODY_MOVED and, when the player touches an uncollected feature (|dx| <= reachX, |dy| <= reachY of the feature center — the coef-pad touch idiom minus the grounded requirement, so airborne pickups work), stamps it collected on the shared entity and emits PICKED once per item (id, kind, position, glyph, message) plus COLLECT{total} with the running count (the event std-gate-lock already consumes). When every feature is collected it emits PICKUP_SET_COMPLETED once. RESTART re-arms every feature and zeroes the count. kind is board-defined vocabulary (star, boost, …) — this atom reports, boards judge. Renders nothing; boards draw the features and read collected from the shared entity."
|
|
3
|
+
orbital PickupOrbital {
|
|
4
|
+
type PickupFeature = {
|
|
5
|
+
id : string!
|
|
6
|
+
x : number!
|
|
7
|
+
y : number!
|
|
8
|
+
kind : string!
|
|
9
|
+
glyph : string
|
|
10
|
+
message : string
|
|
11
|
+
collected : boolean
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
entity PickupData [runtime, shared] {
|
|
15
|
+
id : string!
|
|
16
|
+
pickups : [PickupFeature] = []
|
|
17
|
+
pickupCompleted : boolean = false
|
|
18
|
+
total : number = 0
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
trait Pickup -> @rebindable PickupData [lifecycle] {
|
|
22
|
+
initial: active
|
|
23
|
+
|
|
24
|
+
state active {
|
|
25
|
+
INIT -> active
|
|
26
|
+
(set @entity.pickups (array/map @config.features (fn f (object/merge @f { collected: false }))))
|
|
27
|
+
(set @entity.pickupCompleted false)
|
|
28
|
+
(set @entity.total 0)
|
|
29
|
+
|
|
30
|
+
BODY_MOVED -> active when @config.running
|
|
31
|
+
(let ((touch (array/filter @entity.pickups (fn f
|
|
32
|
+
(and (== (object/get @f collected) false)
|
|
33
|
+
(and (<= (math/abs (- @payload.x (object/get @f x))) @config.reachX)
|
|
34
|
+
(<= (math/abs (- @payload.y (object/get @f y))) @config.reachY)))))))
|
|
35
|
+
(if (> (array/len @touch) 0)
|
|
36
|
+
(let ((f (array/first @touch)))
|
|
37
|
+
(let ((remaining (array/len (array/filter @entity.pickups (fn c (and (== (object/get @c collected) false) (!= (object/get @c id) (object/get @f id))))))))
|
|
38
|
+
(do
|
|
39
|
+
(set @entity.pickups (array/map @entity.pickups (fn c (if (== (object/get @c id) (object/get @f id)) (object/merge @c { collected: true }) @c))))
|
|
40
|
+
(set @entity.total (+ @entity.total 1))
|
|
41
|
+
(emit PICKED { id: (object/get @f id), kind: (object/get @f kind), x: (object/get @f x), y: (object/get @f y), glyph: (object/get @f glyph), message: (object/get @f message) })
|
|
42
|
+
(emit COLLECT { total: @entity.total })
|
|
43
|
+
(if (and (== @entity.pickupCompleted false) (== @remaining 0))
|
|
44
|
+
(do
|
|
45
|
+
(set @entity.pickupCompleted true)
|
|
46
|
+
(emit PICKUP_SET_COMPLETED {}))
|
|
47
|
+
null))))
|
|
48
|
+
null))
|
|
49
|
+
|
|
50
|
+
RESTART -> active
|
|
51
|
+
(set @entity.pickups (array/map @config.features (fn f (object/merge @f { collected: false }))))
|
|
52
|
+
(set @entity.pickupCompleted false)
|
|
53
|
+
(set @entity.total 0)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
emits {
|
|
57
|
+
PICKED -> external {
|
|
58
|
+
id : string!
|
|
59
|
+
kind : string!
|
|
60
|
+
x : number!
|
|
61
|
+
y : number!
|
|
62
|
+
glyph : string
|
|
63
|
+
message : string
|
|
64
|
+
}
|
|
65
|
+
@description "The player touched an uncollected feature; carries the feature identity, board-defined kind (star, boost, …), position and display glyph/message. Fires once per feature per run."
|
|
66
|
+
@tier "domain"
|
|
67
|
+
COLLECT -> external {
|
|
68
|
+
total : number!
|
|
69
|
+
}
|
|
70
|
+
@description "Running count of collected features after this pickup — the event std-gate-lock consumes to count openings."
|
|
71
|
+
@tier "domain"
|
|
72
|
+
PICKUP_SET_COMPLETED -> external {
|
|
73
|
+
}
|
|
74
|
+
@description "Every feature in the set is collected; fires once per run."
|
|
75
|
+
@tier "domain"
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
listens {
|
|
79
|
+
BODY_MOVED { x : number!, y : number!, vx : number!, vy : number!, grounded : boolean!, skating : boolean!, speed : number! }
|
|
80
|
+
RESTART { id : string }
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
config {
|
|
84
|
+
running : boolean = true
|
|
85
|
+
@label "Running"
|
|
86
|
+
@description "When true, BODY_MOVED collects touched features; toggle to freeze the set as-is."
|
|
87
|
+
@tier "domain"
|
|
88
|
+
features : [PickupFeature] = []
|
|
89
|
+
@label "Features"
|
|
90
|
+
@description "One row per collectible: id, center (x, y in world units), board-defined kind (star, boost, …), display glyph and message floated on pickup. collected is stamped at runtime."
|
|
91
|
+
@tier "domain"
|
|
92
|
+
reachX : number = 0.7
|
|
93
|
+
@label "Reach X"
|
|
94
|
+
@description "Horizontal tolerance (world units) around a feature's center when testing player contact."
|
|
95
|
+
@tier "domain"
|
|
96
|
+
reachY : number = 1.2
|
|
97
|
+
@label "Reach Y"
|
|
98
|
+
@description "Vertical tolerance (world units) around a feature's center when testing player contact; generous values catch fly-through pickups."
|
|
99
|
+
@tier "domain"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
page "/pickup" as PickupPage -> Pickup
|
|
104
|
+
}
|
|
@@ -39,6 +39,11 @@ orbital PlatformerBodyOrbital {
|
|
|
39
39
|
h : number!
|
|
40
40
|
k : number!
|
|
41
41
|
}
|
|
42
|
+
type PlatformerTuning = {
|
|
43
|
+
jumpStrength : number
|
|
44
|
+
moveSpeed : number
|
|
45
|
+
gravity : number
|
|
46
|
+
}
|
|
42
47
|
|
|
43
48
|
entity PlatformerBodyData [runtime, shared] {
|
|
44
49
|
id : string!
|
|
@@ -48,6 +53,7 @@ orbital PlatformerBodyOrbital {
|
|
|
48
53
|
curveMods : [CurveMod] = []
|
|
49
54
|
goalId : string = ""
|
|
50
55
|
skating : boolean = false
|
|
56
|
+
tuning : PlatformerTuning = {}
|
|
51
57
|
}
|
|
52
58
|
|
|
53
59
|
trait PlatformerBody -> @rebindable PlatformerBodyData [lifecycle] {
|
|
@@ -62,10 +68,10 @@ orbital PlatformerBodyOrbital {
|
|
|
62
68
|
(set @entity.skating false)
|
|
63
69
|
|
|
64
70
|
STEER -> active when @config.running
|
|
65
|
-
(set @entity.body (object/merge @entity.body { vx: (* @payload.dir @config.moveSpeed), facingRight: (if (!= @payload.dir 0) (> @payload.dir 0) @entity.body.facingRight) }))
|
|
71
|
+
(set @entity.body (object/merge @entity.body { vx: (* @payload.dir (if (== (object/get @entity.tuning moveSpeed null) null) @config.moveSpeed (object/get @entity.tuning moveSpeed null))), facingRight: (if (!= @payload.dir 0) (> @payload.dir 0) @entity.body.facingRight) }))
|
|
66
72
|
|
|
67
73
|
JUMP -> active when (and @config.running (== @entity.body.grounded true))
|
|
68
|
-
(set @entity.body (object/merge @entity.body { vy: (if (> @config.gravity 0) (- 0 @config.jumpStrength) @config.jumpStrength), grounded: false }))
|
|
74
|
+
(set @entity.body (object/merge @entity.body { vy: (if (> (if (== (object/get @entity.tuning gravity null) null) @config.gravity (object/get @entity.tuning gravity null)) 0) (- 0 (if (== (object/get @entity.tuning jumpStrength null) null) @config.jumpStrength (object/get @entity.tuning jumpStrength null))) (if (== (object/get @entity.tuning jumpStrength null) null) @config.jumpStrength (object/get @entity.tuning jumpStrength null))), grounded: false }))
|
|
69
75
|
(emit BODY_JUMPED { x: @entity.body.x, y: @entity.body.y })
|
|
70
76
|
|
|
71
77
|
PLACE -> active
|
|
@@ -77,6 +83,11 @@ orbital PlatformerBodyOrbital {
|
|
|
77
83
|
CURVE_MOD_ADD -> active when @config.curveModsEnabled
|
|
78
84
|
(set @entity.curveMods (array/append @entity.curveMods { x0: @payload.x0, x1: @payload.x1, a: @payload.a, h: @payload.h, k: @payload.k }))
|
|
79
85
|
|
|
86
|
+
SET_TUNING -> active
|
|
87
|
+
(set @entity.tuning (object/merge @entity.tuning (if (== @payload.jumpStrength null) {} { jumpStrength: @payload.jumpStrength })))
|
|
88
|
+
(set @entity.tuning (object/merge @entity.tuning (if (== @payload.moveSpeed null) {} { moveSpeed: @payload.moveSpeed })))
|
|
89
|
+
(set @entity.tuning (object/merge @entity.tuning (if (== @payload.gravity null) {} { gravity: @payload.gravity })))
|
|
90
|
+
|
|
80
91
|
RESTART -> active
|
|
81
92
|
(set @entity.body @config.spawn)
|
|
82
93
|
(set @entity.curveMods [])
|
|
@@ -84,16 +95,18 @@ orbital PlatformerBodyOrbital {
|
|
|
84
95
|
(set @entity.hazardId "")
|
|
85
96
|
(set @entity.goalId "")
|
|
86
97
|
(set @entity.skating false)
|
|
98
|
+
(set @entity.tuning {})
|
|
87
99
|
}
|
|
88
100
|
|
|
89
101
|
ticks {
|
|
90
102
|
physicsTick every 33ms
|
|
91
103
|
when (and @config.running (> @entity.body.width 0))
|
|
92
|
-
(let ((
|
|
104
|
+
(let ((eg (if (== (object/get @entity.tuning gravity null) null) @config.gravity (object/get @entity.tuning gravity null))))
|
|
105
|
+
(let ((gdir (if (> @eg 0) 1 -1)))
|
|
93
106
|
(let ((bcx (+ (object/get @entity.body x) (/ (object/get @entity.body width) 2))) (bcy (+ (object/get @entity.body y) (/ (object/get @entity.body height) 2))))
|
|
94
107
|
(let ((drift (array/find @config.driftRegions (fn r (and (>= @bcx (object/get @r x0)) (and (<= @bcx (object/get @r x1)) (and (>= @bcy (object/get @r y0)) (<= @bcy (object/get @r y1)))))))))
|
|
95
108
|
(let ((dax (if (== @drift null) 0 (object/get @drift ax))) (day (if (== @drift null) 0 (object/get @drift ay))))
|
|
96
|
-
(let ((vy1 (math/clamp (+ @entity.body.vy (* (+ @
|
|
109
|
+
(let ((vy1 (math/clamp (+ @entity.body.vy (* (+ @eg @day) 0.033)) (- 0 @config.maxFallSpeed) @config.maxFallSpeed)))
|
|
97
110
|
(let ((bw (object/get @entity.body width)) (bh (object/get @entity.body height)))
|
|
98
111
|
(let ((nx (math/clamp (+ @entity.body.x (* @entity.body.vx 0.033)) @config.xMin @config.xMax)))
|
|
99
112
|
(let ((ny (+ @entity.body.y (* @vy1 0.033))))
|
|
@@ -108,18 +121,24 @@ orbital PlatformerBodyOrbital {
|
|
|
108
121
|
(let ((slope (if @inRange (/ (- (object/get @rightSamp y) (object/get @leftSamp y)) (- (object/get @rightSamp x) (object/get @leftSamp x))) 0)))
|
|
109
122
|
(let ((curveY (if @inRange (+ (object/get @leftSamp y) (* @slope (- @cx (object/get @leftSamp x)))) 0)))
|
|
110
123
|
(let ((gapBreak (and (> @config.skateMaxGap 0) (> (- (object/get @rightSamp x) (object/get @leftSamp x)) @config.skateMaxGap))))
|
|
111
|
-
(let ((
|
|
112
|
-
(let ((
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
124
|
+
(let ((mods (if (and @config.curveModsEnabled @inRange) (array/filter @entity.curveMods (fn m (and (>= @cx (object/get @m x0)) (<= @cx (object/get @m x1))))) [])))
|
|
125
|
+
(let ((modded (array/reduce @mods { y: @curveY, s: @slope } (fn (acc m)
|
|
126
|
+
(let ((modX (- @cx (object/get @m h))))
|
|
127
|
+
(let ((modInRange (and (>= @modX (object/get (array/first @config.skateCurve) x)) (< @modX (object/get (array/last @config.skateCurve) x)))))
|
|
128
|
+
(let ((modLeft (if @modInRange (array/last (array/filter @config.skateCurve (fn s (<= (object/get @s x) @modX)))) null)))
|
|
129
|
+
(let ((modRight (if @modInRange (array/first (array/filter @config.skateCurve (fn s (> (object/get @s x) @modX)))) null)))
|
|
130
|
+
(let ((modOK (and @modInRange (and (!= @modLeft null) (!= @modRight null)))))
|
|
131
|
+
(let ((modSlope (if @modOK (/ (- (object/get @modRight y) (object/get @modLeft y)) (- (object/get @modRight x) (object/get @modLeft x))) 0)))
|
|
132
|
+
(let ((modCurveY (if @modOK (+ (object/get @modLeft y) (* @modSlope (- @modX (object/get @modLeft x)))) 0)))
|
|
133
|
+
(if @modOK
|
|
134
|
+
{ y: (+ (object/get @acc y) (- (+ (* (object/get @m a) @modCurveY) (object/get @m k)) @curveY)), s: (+ (object/get @acc s) (- (* (object/get @m a) @modSlope) @slope)) }
|
|
135
|
+
@acc))))))))))))
|
|
136
|
+
(let ((slope (object/get @modded s)))
|
|
137
|
+
(let ((curveY (object/get @modded y)))
|
|
138
|
+
(let ((aboveCurve (< (* (- @ny2 @curveY) @gdir) 0)))
|
|
120
139
|
(let ((movingUp (< (* @vy1 @gdir) -0.01)))
|
|
121
|
-
(let ((skateNow (and @inRange (and (not @gapBreak) (and (<= (math/abs (- @ny2 @curveY)) @config.skateSnap) (and (or @landed @entity.skating) (or @entity.body.grounded (not @movingUp))))))))
|
|
122
|
-
(let ((vx2 (if @skateNow (math/clamp (+ @entity.body.vx (* (/ (* @
|
|
140
|
+
(let ((skateNow (and @inRange (and (not @gapBreak) (and (<= (math/abs (- @ny2 @curveY)) @config.skateSnap) (and (or @landed (or @entity.skating (and (not @movingUp) @aboveCurve))) (or @entity.body.grounded (not @movingUp))))))))
|
|
141
|
+
(let ((vx2 (if @skateNow (math/clamp (+ @entity.body.vx (* (/ (* @eg @slope) (+ 1 (* @slope @slope))) 0.033)) (- 0 @config.maxFallSpeed) @config.maxFallSpeed) @entity.body.vx)))
|
|
123
142
|
(let ((vx3 (if (== @drift null) @vx2 (math/clamp (+ @vx2 (* @dax 0.033)) (- 0 @config.maxFallSpeed) @config.maxFallSpeed))))
|
|
124
143
|
(let ((fy (if @skateNow @curveY @ny2)) (fvy (if @skateNow (* (* @vx2 (math/cos (math/atan @slope))) (math/sin (math/atan @slope))) @vy2)) (fgrounded (or @landed @skateNow)))
|
|
125
144
|
(let ((hazardHit (array/find @config.platforms (fn p (and (== (object/get @p type) "hazard") (geo/aabb-overlap @rect { x: @p.x, y: @p.y, w: @p.width, h: @p.height }))))))
|
|
@@ -156,7 +175,7 @@ orbital PlatformerBodyOrbital {
|
|
|
156
175
|
(set @entity.fell true)
|
|
157
176
|
(emit BODY_FELL { x: @nx, y: @fy }))
|
|
158
177
|
null)
|
|
159
|
-
(emit BODY_MOVED { x: @nx, y: @fy, vx: @entity.body.vx, vy: @fvy, grounded: @fgrounded, skating: @skateNow, speed: (math/hypot @entity.body.vx @fvy) })))))))))))))))))))))))))))))))))))
|
|
178
|
+
(emit BODY_MOVED { x: @nx, y: @fy, vx: @entity.body.vx, vy: @fvy, grounded: @fgrounded, skating: @skateNow, speed: (math/hypot @entity.body.vx @fvy) })))))))))))))))))))))))))))))))))))
|
|
160
179
|
}
|
|
161
180
|
|
|
162
181
|
emits {
|
|
@@ -176,7 +195,7 @@ orbital PlatformerBodyOrbital {
|
|
|
176
195
|
y : number!
|
|
177
196
|
slope : number!
|
|
178
197
|
}
|
|
179
|
-
@description "Body engaged curve skating this tick (grounded within skateSnap
|
|
198
|
+
@description "Body engaged curve skating this tick (grounded, landing, or falling within skateSnap above the skateCurve surface); slope is the local dy/dx — boards layer fx and equation readouts"
|
|
180
199
|
@tier "domain"
|
|
181
200
|
BODY_SKATE_END -> external {
|
|
182
201
|
x : number!
|
|
@@ -224,6 +243,7 @@ orbital PlatformerBodyOrbital {
|
|
|
224
243
|
JUMP { id : string }
|
|
225
244
|
PLACE { x : number!, y : number! }
|
|
226
245
|
CURVE_MOD_ADD { x0 : number!, x1 : number!, a : number!, h : number!, k : number! }
|
|
246
|
+
SET_TUNING { jumpStrength : number, moveSpeed : number, gravity : number }
|
|
227
247
|
RESTART { id : string }
|
|
228
248
|
}
|
|
229
249
|
|
|
@@ -246,7 +266,7 @@ orbital PlatformerBodyOrbital {
|
|
|
246
266
|
@tier "domain"
|
|
247
267
|
curveModsEnabled : boolean = false
|
|
248
268
|
@label "Curve Mods Enabled"
|
|
249
|
-
@description "When true, entity.curveMods reshape the skate surface inside each mod's x-range: the road samples the base curve at (x − h) and applies a·y + k (slope scales by a) — coefficient pads lift/tilt the segment the player is riding. Default off: boards without coef pads pay nothing."
|
|
269
|
+
@description "When true, entity.curveMods reshape the skate surface inside each mod's x-range: the road samples the base curve at (x − h) and applies a·y + k (slope scales by a) — coefficient pads lift/tilt the segment the player is riding. Multiple overlapping mods stack by summing each mod's delta from the base surface; a mod whose shifted sample leaves the curve range is skipped. Default off: boards without coef pads pay nothing."
|
|
250
270
|
@tier "domain"
|
|
251
271
|
jumpStrength : number = 11
|
|
252
272
|
@label "Jump Strength"
|
|
@@ -274,7 +294,7 @@ orbital PlatformerBodyOrbital {
|
|
|
274
294
|
@tier "domain"
|
|
275
295
|
skate : boolean = false
|
|
276
296
|
@label "Curve Skating"
|
|
277
|
-
@description "When true, a grounded body within skateSnap of the skateCurve surface rides the curve: y snaps to the interpolated surface and tangential gravity (g·slope/(1+slope²)) accelerates vx, so the body slides downhill along the graph and launches off its ends; JUMP kicks free"
|
|
297
|
+
@description "When true, a grounded body within skateSnap of the skateCurve surface rides the curve: y snaps to the interpolated surface and tangential gravity (g·slope/(1+slope²)) accelerates vx, so the body slides downhill along the graph and launches off its ends; JUMP kicks free. Engages when grounded, when landing on a tile, or when a falling (not rising) body passes within skateSnap above the surface."
|
|
278
298
|
@tier "domain"
|
|
279
299
|
skateCurve : [PlatformerCurveSample] = []
|
|
280
300
|
@label "Skate Curve"
|
|
@@ -65,15 +65,15 @@ orbital ControlButtonOrbital {
|
|
|
65
65
|
@label "Icon"
|
|
66
66
|
@description "Icon component or emoji"
|
|
67
67
|
@tier "presentation"
|
|
68
|
-
size :
|
|
68
|
+
size : string = md
|
|
69
69
|
@label "Size"
|
|
70
70
|
@description "Size variant"
|
|
71
71
|
@tier "presentation"
|
|
72
|
-
shape :
|
|
72
|
+
shape : string = circle
|
|
73
73
|
@label "Shape"
|
|
74
74
|
@description "Shape variant"
|
|
75
75
|
@tier "presentation"
|
|
76
|
-
variant :
|
|
76
|
+
variant : string = secondary
|
|
77
77
|
@label "Variant"
|
|
78
78
|
@description "Visual variant"
|
|
79
79
|
@tier "presentation"
|
|
@@ -6,7 +6,7 @@ orbital GameMenuOrbital {
|
|
|
6
6
|
label : string!
|
|
7
7
|
event : event
|
|
8
8
|
navigatesTo : string
|
|
9
|
-
variant :
|
|
9
|
+
variant : string
|
|
10
10
|
disabled : boolean
|
|
11
11
|
subLabel : string
|
|
12
12
|
}
|
|
@@ -15,7 +15,7 @@ orbital GameMenuOrbital {
|
|
|
15
15
|
label : string!
|
|
16
16
|
event : event
|
|
17
17
|
navigatesTo : string
|
|
18
|
-
variant :
|
|
18
|
+
variant : string
|
|
19
19
|
disabled : boolean
|
|
20
20
|
subLabel : string
|
|
21
21
|
}
|
|
@@ -38,7 +38,7 @@ orbital GameMenuOrbital {
|
|
|
38
38
|
label : string!
|
|
39
39
|
event : string
|
|
40
40
|
navigatesTo : string
|
|
41
|
-
variant :
|
|
41
|
+
variant : string
|
|
42
42
|
disabled : boolean
|
|
43
43
|
subLabel : string
|
|
44
44
|
}
|
|
@@ -85,7 +85,7 @@ orbital StatBadgeOrbital {
|
|
|
85
85
|
@label "Field"
|
|
86
86
|
@description "Field name in the source (for schema config)"
|
|
87
87
|
@tier "presentation"
|
|
88
|
-
format :
|
|
88
|
+
format : string = number
|
|
89
89
|
@label "Format"
|
|
90
90
|
@description "Display format"
|
|
91
91
|
@tier "presentation"
|
|
@@ -93,11 +93,11 @@ orbital StatBadgeOrbital {
|
|
|
93
93
|
@label "Icon"
|
|
94
94
|
@description "Icon component or emoji"
|
|
95
95
|
@tier "presentation"
|
|
96
|
-
size :
|
|
96
|
+
size : string = md
|
|
97
97
|
@label "Size"
|
|
98
98
|
@description "Size variant"
|
|
99
99
|
@tier "presentation"
|
|
100
|
-
variant :
|
|
100
|
+
variant : string = default
|
|
101
101
|
@label "Variant"
|
|
102
102
|
@description "Visual variant"
|
|
103
103
|
@tier "presentation"
|