@almadar/std 16.204.0 → 16.205.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/game/organisms/std-platformer-puzzle.lolo +302 -0
- package/behaviors/registry/ui/game/organisms/std-platformer-puzzle.orb +2063 -0
- package/dist/behaviors/exports-reader.js +3743 -2552
- package/dist/behaviors/functions/index.d.ts +102 -75
- package/dist/behaviors/functions/index.js +4158 -2968
- package/dist/behaviors/index.d.ts +1 -1
- package/dist/behaviors/index.js +3744 -2553
- package/dist/behaviors/query.js +3743 -2552
- package/dist/behaviors-embeddings.hash.json +3 -3
- package/dist/behaviors-embeddings.json +5 -5
- package/dist/behaviors-registry.json +1791 -427
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3744 -2553
- 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
- package/behaviors/lolo/ui/game/atoms/std-game-design-sheet.lolo +0 -69
- package/behaviors/registry/ui/game/atoms/std-game-design-sheet.orb +0 -527
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
app std-platformer-puzzle "1.0.0"
|
|
2
|
+
"Platformer + puzzle genre substrate organism. Composes the standard authorities — platformer-body, pickup, objective-flow, choice-gate, fx-particles, fx-narrative, tutorial-overlay — and enforces five trait-typed pillar slots: agency, challenge, goal, reward, feedback. Levels consume this organism, fill every slot with a local rebinding trait, and add their own geometry, render, and math rules. Math targets and grade levels stay downstream in the domain package; this substrate is domain-agnostic."
|
|
3
|
+
|
|
4
|
+
orbital PlatformerPuzzleOrbital {
|
|
5
|
+
uses Body from "std/behaviors/std-platformer-body"
|
|
6
|
+
uses Pickup from "std/behaviors/std-pickup"
|
|
7
|
+
uses Gate from "std/behaviors/std-objective-flow"
|
|
8
|
+
uses Choice from "std/behaviors/std-choice-gate"
|
|
9
|
+
uses Particles from "std/behaviors/std-fx-particles"
|
|
10
|
+
uses Narrative from "std/behaviors/std-fx-narrative"
|
|
11
|
+
uses Tutorial from "std/behaviors/std-tutorial-overlay"
|
|
12
|
+
|
|
13
|
+
type PlatformerBody = {
|
|
14
|
+
x : number!
|
|
15
|
+
y : number!
|
|
16
|
+
width : number!
|
|
17
|
+
height : number!
|
|
18
|
+
vx : number
|
|
19
|
+
vy : number
|
|
20
|
+
grounded : boolean
|
|
21
|
+
facingRight : boolean
|
|
22
|
+
}
|
|
23
|
+
type PlatformerPlatform = {
|
|
24
|
+
id : string
|
|
25
|
+
x : number!
|
|
26
|
+
y : number!
|
|
27
|
+
width : number!
|
|
28
|
+
height : number!
|
|
29
|
+
type : "ground" | "platform" | "hazard" | "goal"
|
|
30
|
+
}
|
|
31
|
+
type PlatformerCurveSample = {
|
|
32
|
+
x : number!
|
|
33
|
+
y : number!
|
|
34
|
+
}
|
|
35
|
+
type BodyDriftRegion = {
|
|
36
|
+
id : string!
|
|
37
|
+
x0 : number!
|
|
38
|
+
x1 : number!
|
|
39
|
+
y0 : number!
|
|
40
|
+
y1 : number!
|
|
41
|
+
ax : number!
|
|
42
|
+
ay : number!
|
|
43
|
+
}
|
|
44
|
+
type CurveMod = {
|
|
45
|
+
x0 : number!
|
|
46
|
+
x1 : number!
|
|
47
|
+
a : number!
|
|
48
|
+
b : number
|
|
49
|
+
h : number!
|
|
50
|
+
k : number!
|
|
51
|
+
}
|
|
52
|
+
type PlatformerTuning = {
|
|
53
|
+
jumpStrength : number
|
|
54
|
+
moveSpeed : number
|
|
55
|
+
gravity : number
|
|
56
|
+
}
|
|
57
|
+
type PickupFeature = {
|
|
58
|
+
id : string!
|
|
59
|
+
x : number!
|
|
60
|
+
y : number!
|
|
61
|
+
kind : string!
|
|
62
|
+
glyph : string
|
|
63
|
+
message : string
|
|
64
|
+
collected : boolean
|
|
65
|
+
}
|
|
66
|
+
type ChoiceOption = {
|
|
67
|
+
id : string!
|
|
68
|
+
dx : number!
|
|
69
|
+
label : string!
|
|
70
|
+
correct : boolean!
|
|
71
|
+
}
|
|
72
|
+
type ChoiceGate = {
|
|
73
|
+
id : string!
|
|
74
|
+
x : number!
|
|
75
|
+
y : number!
|
|
76
|
+
hint : string
|
|
77
|
+
options : [ChoiceOption]!
|
|
78
|
+
solved : boolean
|
|
79
|
+
chosen : string
|
|
80
|
+
}
|
|
81
|
+
type Fx = {
|
|
82
|
+
id : string!
|
|
83
|
+
type : string!
|
|
84
|
+
x : number!
|
|
85
|
+
z : number
|
|
86
|
+
y : number
|
|
87
|
+
message : string
|
|
88
|
+
ttl : number!
|
|
89
|
+
maxTtl : number
|
|
90
|
+
bornAt : number
|
|
91
|
+
space : string
|
|
92
|
+
effect : string
|
|
93
|
+
color : string
|
|
94
|
+
size : number
|
|
95
|
+
vx : number
|
|
96
|
+
vy : number
|
|
97
|
+
vz : number
|
|
98
|
+
particleCount : number
|
|
99
|
+
animation : string
|
|
100
|
+
}
|
|
101
|
+
type FxPreset = {
|
|
102
|
+
type : string!
|
|
103
|
+
color : string
|
|
104
|
+
color2 : string
|
|
105
|
+
size : number
|
|
106
|
+
shape : string
|
|
107
|
+
count : number
|
|
108
|
+
glow : number
|
|
109
|
+
gravity : number
|
|
110
|
+
vx : number
|
|
111
|
+
vy : number
|
|
112
|
+
vz : number
|
|
113
|
+
space : string
|
|
114
|
+
effect : string
|
|
115
|
+
particleCount : number
|
|
116
|
+
animation : string
|
|
117
|
+
}
|
|
118
|
+
type NarrativeCue = {
|
|
119
|
+
text : string!
|
|
120
|
+
style : "hint" | "fact" | "warn" | "celebrate"
|
|
121
|
+
x : number
|
|
122
|
+
y : number
|
|
123
|
+
ttl : number
|
|
124
|
+
space : "screen" | "world"
|
|
125
|
+
}
|
|
126
|
+
type StyleDef = {
|
|
127
|
+
color : string!
|
|
128
|
+
size : number!
|
|
129
|
+
ttl : number!
|
|
130
|
+
effect : string!
|
|
131
|
+
}
|
|
132
|
+
type TutorialStep = {
|
|
133
|
+
id : string!
|
|
134
|
+
title : string!
|
|
135
|
+
body : string
|
|
136
|
+
demoId : string
|
|
137
|
+
}
|
|
138
|
+
type Asset = {
|
|
139
|
+
url : asset
|
|
140
|
+
atlas : asset
|
|
141
|
+
sprite : string
|
|
142
|
+
role : string
|
|
143
|
+
category : string
|
|
144
|
+
animations : [string]
|
|
145
|
+
style : string
|
|
146
|
+
variant : string
|
|
147
|
+
dimension : string
|
|
148
|
+
aspect : string
|
|
149
|
+
name : string
|
|
150
|
+
thumbnailUrl : string
|
|
151
|
+
}
|
|
152
|
+
type DirectionAssets = {
|
|
153
|
+
up : Asset
|
|
154
|
+
down : Asset
|
|
155
|
+
left : Asset
|
|
156
|
+
right : Asset
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
entity PlatformerPuzzleData [runtime, shared] {
|
|
160
|
+
id : string!
|
|
161
|
+
body : PlatformerBody = { x: 0, y: 0, width: 1, height: 1, vx: 0, vy: 0, grounded: false, facingRight: true }
|
|
162
|
+
fell : boolean = false
|
|
163
|
+
hazardId : string = ""
|
|
164
|
+
goalId : string = ""
|
|
165
|
+
skating : boolean = false
|
|
166
|
+
curveMods : [CurveMod] = []
|
|
167
|
+
tuning : PlatformerTuning = {}
|
|
168
|
+
pickups : [PickupFeature] = []
|
|
169
|
+
pickupCompleted : boolean = false
|
|
170
|
+
total : number = 0
|
|
171
|
+
choices : [ChoiceGate] = []
|
|
172
|
+
result : string = "none"
|
|
173
|
+
fx : [Fx] = []
|
|
174
|
+
narrativeSeq : number = 0
|
|
175
|
+
lastNarrative : string = ""
|
|
176
|
+
step : number = 0
|
|
177
|
+
done : boolean = false
|
|
178
|
+
score : number = 0
|
|
179
|
+
lives : number = 3
|
|
180
|
+
objectivesLeft : number = 1
|
|
181
|
+
celebrated : boolean = false
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
trait PlatformerPuzzleBody = Body.traits.PlatformerBody -> PlatformerPuzzleData {
|
|
185
|
+
events {
|
|
186
|
+
STEER: STEER
|
|
187
|
+
JUMP: JUMP
|
|
188
|
+
PLACE: PLACE
|
|
189
|
+
BODY_MOVED: BODY_MOVED
|
|
190
|
+
BODY_JUMPED: BODY_JUMPED
|
|
191
|
+
BODY_LANDED: BODY_LANDED
|
|
192
|
+
BODY_HAZARD: BODY_HAZARD
|
|
193
|
+
BODY_GOAL: BODY_GOAL
|
|
194
|
+
BODY_FELL: BODY_FELL
|
|
195
|
+
BODY_SKATE_START: BODY_SKATE_START
|
|
196
|
+
BODY_SKATE_END: BODY_SKATE_END
|
|
197
|
+
CURVE_MOD_ADD: CURVE_MOD_ADD
|
|
198
|
+
CURVE_MOD_CLEAR: CURVE_MOD_CLEAR
|
|
199
|
+
SET_TUNING: SET_TUNING
|
|
200
|
+
}
|
|
201
|
+
config { running: true }
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
trait PlatformerPuzzlePickup = Pickup.traits.Pickup -> PlatformerPuzzleData {
|
|
205
|
+
events {
|
|
206
|
+
BODY_MOVED: BODY_MOVED
|
|
207
|
+
}
|
|
208
|
+
config { running: true }
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
trait PlatformerPuzzleObjective = Gate.traits.ObjectiveFlow -> PlatformerPuzzleData {
|
|
212
|
+
events {
|
|
213
|
+
PROGRESS: PROGRESS
|
|
214
|
+
GAME_END: GAME_END
|
|
215
|
+
}
|
|
216
|
+
config { running: true }
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
trait PlatformerPuzzleChoice = Choice.traits.ChoiceGate -> PlatformerPuzzleData {
|
|
220
|
+
events {
|
|
221
|
+
BODY_MOVED: BODY_MOVED
|
|
222
|
+
}
|
|
223
|
+
config { running: true }
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
trait PlatformerPuzzleFx = Particles.traits.FxParticles -> PlatformerPuzzleData {
|
|
227
|
+
events {
|
|
228
|
+
BURST: BURST
|
|
229
|
+
}
|
|
230
|
+
config { running: true }
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
trait PlatformerPuzzleNarrative = Narrative.traits.FxNarrative -> PlatformerPuzzleData {
|
|
234
|
+
events {
|
|
235
|
+
NARRATE: NARRATE
|
|
236
|
+
BURST: BURST
|
|
237
|
+
}
|
|
238
|
+
config { running: true }
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
trait PlatformerPuzzleTutorial = Tutorial.traits.TutorialOverlay -> PlatformerPuzzleData {
|
|
242
|
+
events {
|
|
243
|
+
SHOW: SHOW
|
|
244
|
+
TUTORIAL_DONE: TUTORIAL_DONE
|
|
245
|
+
}
|
|
246
|
+
config { autoShow: false, previewTrait: @trait.PlatformerPuzzleNoopPreview }
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
trait PlatformerPuzzleNoopPreview -> PlatformerPuzzleData [interaction, instance] {
|
|
250
|
+
initial: idle
|
|
251
|
+
state idle {
|
|
252
|
+
INIT -> idle
|
|
253
|
+
(render-ui overlay null)
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
trait PlatformerPuzzle -> @rebindable PlatformerPuzzleData [interaction, instance] {
|
|
258
|
+
initial: active
|
|
259
|
+
|
|
260
|
+
state active {
|
|
261
|
+
INIT -> active
|
|
262
|
+
(render-ui main null)
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
config {
|
|
266
|
+
agencyTrait : trait
|
|
267
|
+
@label "Agency trait"
|
|
268
|
+
@description "Trait that provides player verbs and immediate response. Usually a rebinding of std-platformer-body, std-motion-body, or std-hero-nav."
|
|
269
|
+
@tier "domain"
|
|
270
|
+
challengeTrait : trait
|
|
271
|
+
@label "Challenge trait"
|
|
272
|
+
@description "Trait that provides the obstacle, decision, or opposition. Usually a rebinding of std-choice-gate, std-gate-lock, std-patrol-hazard, std-velocity-gate, std-loop-lock, or std-pad-lock."
|
|
273
|
+
@tier "domain"
|
|
274
|
+
goalTrait : trait
|
|
275
|
+
@label "Goal trait"
|
|
276
|
+
@description "Trait that resolves the win condition. Usually a rebinding of std-objective-flow or std-objective-reach."
|
|
277
|
+
@tier "domain"
|
|
278
|
+
rewardTrait : trait
|
|
279
|
+
@label "Reward trait"
|
|
280
|
+
@description "Trait that provides collectibles or scoring. Usually a rebinding of std-pickup, std-score, std-xp, or std-gold."
|
|
281
|
+
@tier "domain"
|
|
282
|
+
feedbackTrait : trait
|
|
283
|
+
@label "Feedback trait"
|
|
284
|
+
@description "Trait that provides visual, audio, or narrative feedback. Usually a rebinding of std-fx-particles, std-fx-narrative, std-tutorial-overlay, std-audio-cue, or std-zone-card."
|
|
285
|
+
@tier "domain"
|
|
286
|
+
backgroundAsset : Asset = {}
|
|
287
|
+
@label "Background Asset"
|
|
288
|
+
@description "Game-shell background panel sprite (theme chrome)."
|
|
289
|
+
@tier "presentation"
|
|
290
|
+
hudBackgroundAsset : Asset = {}
|
|
291
|
+
@label "HUD Background Asset"
|
|
292
|
+
@description "HUD panel background sprite (theme chrome)."
|
|
293
|
+
@tier "presentation"
|
|
294
|
+
directionAssets : DirectionAssets = {}
|
|
295
|
+
@label "Direction Assets"
|
|
296
|
+
@description "D-pad direction icon sprites."
|
|
297
|
+
@tier "presentation"
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
page "/platformer-puzzle" as PlatformerPuzzlePage -> PlatformerPuzzleBody, PlatformerPuzzlePickup, PlatformerPuzzleObjective, PlatformerPuzzleChoice, PlatformerPuzzleFx, PlatformerPuzzleNarrative, PlatformerPuzzleTutorial, PlatformerPuzzle
|
|
302
|
+
}
|