@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.
@@ -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
+ }