@almadar/std 16.203.0 → 16.204.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/atoms/std-choice-gate.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/std-fx-narrative.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/std-fx-particles.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/std-game-design-sheet.lolo +69 -0
- package/behaviors/lolo/ui/game/atoms/std-gate-lock.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/std-lives.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/std-loop-lock.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/std-objective-flow.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/std-pad-lock.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/std-patrol-hazard.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/std-pickup.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/std-platformer-body.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/std-tutorial-overlay.lolo +1 -1
- package/behaviors/lolo/ui/game/atoms/std-velocity-gate.lolo +1 -1
- package/behaviors/registry/ui/game/atoms/std-choice-gate.orb +82 -2
- package/behaviors/registry/ui/game/atoms/std-fx-narrative.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-fx-particles.orb +82 -2
- package/behaviors/registry/ui/game/atoms/std-game-design-sheet.orb +527 -0
- package/behaviors/registry/ui/game/atoms/std-gate-lock.orb +48 -2
- package/behaviors/registry/ui/game/atoms/std-lives.orb +26 -2
- package/behaviors/registry/ui/game/atoms/std-loop-lock.orb +56 -2
- package/behaviors/registry/ui/game/atoms/std-objective-flow.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-pad-lock.orb +30 -2
- package/behaviors/registry/ui/game/atoms/std-patrol-hazard.orb +63 -2
- package/behaviors/registry/ui/game/atoms/std-pickup.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-platformer-body.orb +1 -1
- package/behaviors/registry/ui/game/atoms/std-tutorial-overlay.orb +24 -2
- package/behaviors/registry/ui/game/atoms/std-velocity-gate.orb +75 -2
- package/dist/behaviors/exports-reader.js +2552 -2508
- package/dist/behaviors/functions/index.d.ts +88 -14
- package/dist/behaviors/functions/index.js +2550 -2509
- package/dist/behaviors/index.d.ts +1 -1
- package/dist/behaviors/index.js +2553 -2509
- package/dist/behaviors/query.js +2552 -2508
- package/dist/behaviors-embeddings.hash.json +3 -3
- package/dist/behaviors-embeddings.json +29 -25
- package/dist/behaviors-registry.json +441 -17
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2553 -2509
- 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
|
@@ -0,0 +1,527 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Headless game-design metadata authority: every game or level in the std library MUST compose this atom and fill its design sheet before declaring mechanics. The sheet forces the author to state the core loop, challenge, goals, feedback, agency, mechanics, dynamics, engagement drivers, and rewards. The atom owns no rendering and no rules; it is the single source of truth for intent metadata. Domain-specific extensions (e.g., math target or grade level for an educational game) live in the consuming package, not here. Future game atoms (platformer-body, objective-flow, fx-narrative, pickup, gate-lock, etc.) correspond to fields here, and level organisms bind those atoms together while declaring how each field is realized.",
|
|
3
|
+
"ledger": {
|
|
4
|
+
"entries": {
|
|
5
|
+
"ent_01M1NKGE11AR2J7GEQPKDJRWMX": {
|
|
6
|
+
"bakedName": "GameDesignState",
|
|
7
|
+
"curName": "GameDesignState",
|
|
8
|
+
"id": "ent_01M1NKGE11AR2J7GEQPKDJRWMX",
|
|
9
|
+
"kind": "entity",
|
|
10
|
+
"owner": "workspace",
|
|
11
|
+
"renames": []
|
|
12
|
+
},
|
|
13
|
+
"evt_01M1NKGE119C8NKXKGJH8X4TMR": {
|
|
14
|
+
"bakedName": "DESIGN_DECLARED",
|
|
15
|
+
"curName": "DESIGN_DECLARED",
|
|
16
|
+
"id": "evt_01M1NKGE119C8NKXKGJH8X4TMR",
|
|
17
|
+
"kind": "event",
|
|
18
|
+
"owner": "workspace",
|
|
19
|
+
"parent": "trt_01M1NKGE111XC08V7VSSVYSJB4",
|
|
20
|
+
"renames": []
|
|
21
|
+
},
|
|
22
|
+
"evt_01M1NKGE11CDYSFMFB4V6P8Y7P": {
|
|
23
|
+
"bakedName": "RESTART",
|
|
24
|
+
"curName": "RESTART",
|
|
25
|
+
"id": "evt_01M1NKGE11CDYSFMFB4V6P8Y7P",
|
|
26
|
+
"kind": "event",
|
|
27
|
+
"owner": "workspace",
|
|
28
|
+
"parent": "trt_01M1NKGE111XC08V7VSSVYSJB4",
|
|
29
|
+
"renames": []
|
|
30
|
+
},
|
|
31
|
+
"evt_01M1NKGE11QM4V8HX481NCVKQ0": {
|
|
32
|
+
"bakedName": "INIT",
|
|
33
|
+
"curName": "INIT",
|
|
34
|
+
"id": "evt_01M1NKGE11QM4V8HX481NCVKQ0",
|
|
35
|
+
"kind": "event",
|
|
36
|
+
"owner": "workspace",
|
|
37
|
+
"parent": "trt_01M1NKGE111XC08V7VSSVYSJB4",
|
|
38
|
+
"renames": []
|
|
39
|
+
},
|
|
40
|
+
"orb_01M1NKGE11H9R1X869A8C6MF1G": {
|
|
41
|
+
"bakedName": "GameDesignSheetOrbital",
|
|
42
|
+
"curName": "GameDesignSheetOrbital",
|
|
43
|
+
"id": "orb_01M1NKGE11H9R1X869A8C6MF1G",
|
|
44
|
+
"kind": "orbital",
|
|
45
|
+
"owner": "workspace",
|
|
46
|
+
"renames": []
|
|
47
|
+
},
|
|
48
|
+
"pag_01M1NKGE11QN9ZKQENH9WCNHWT": {
|
|
49
|
+
"bakedName": "GameDesignSheetPage",
|
|
50
|
+
"curName": "GameDesignSheetPage",
|
|
51
|
+
"id": "pag_01M1NKGE11QN9ZKQENH9WCNHWT",
|
|
52
|
+
"kind": "page",
|
|
53
|
+
"owner": "workspace",
|
|
54
|
+
"renames": []
|
|
55
|
+
},
|
|
56
|
+
"trt_01M1NKGE111XC08V7VSSVYSJB4": {
|
|
57
|
+
"bakedName": "GameDesignSheet",
|
|
58
|
+
"curName": "GameDesignSheet",
|
|
59
|
+
"id": "trt_01M1NKGE111XC08V7VSSVYSJB4",
|
|
60
|
+
"kind": "trait",
|
|
61
|
+
"owner": "workspace",
|
|
62
|
+
"renames": []
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"schemaVersion": 1
|
|
66
|
+
},
|
|
67
|
+
"name": "std-game-design-sheet",
|
|
68
|
+
"orbitals": [
|
|
69
|
+
{
|
|
70
|
+
"entity": {
|
|
71
|
+
"fields": [
|
|
72
|
+
{
|
|
73
|
+
"name": "id",
|
|
74
|
+
"required": true,
|
|
75
|
+
"type": "string"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"default": {},
|
|
79
|
+
"name": "design",
|
|
80
|
+
"properties": {
|
|
81
|
+
"agency": {
|
|
82
|
+
"name": "agency",
|
|
83
|
+
"required": true,
|
|
84
|
+
"type": "string"
|
|
85
|
+
},
|
|
86
|
+
"challenge": {
|
|
87
|
+
"name": "challenge",
|
|
88
|
+
"required": true,
|
|
89
|
+
"type": "string"
|
|
90
|
+
},
|
|
91
|
+
"coreLoop": {
|
|
92
|
+
"name": "coreLoop",
|
|
93
|
+
"required": true,
|
|
94
|
+
"type": "string"
|
|
95
|
+
},
|
|
96
|
+
"dynamics": {
|
|
97
|
+
"items": {
|
|
98
|
+
"type": "string"
|
|
99
|
+
},
|
|
100
|
+
"name": "dynamics",
|
|
101
|
+
"required": true,
|
|
102
|
+
"type": "array"
|
|
103
|
+
},
|
|
104
|
+
"engagement": {
|
|
105
|
+
"items": {
|
|
106
|
+
"type": "string"
|
|
107
|
+
},
|
|
108
|
+
"name": "engagement",
|
|
109
|
+
"required": true,
|
|
110
|
+
"type": "array"
|
|
111
|
+
},
|
|
112
|
+
"feedback": {
|
|
113
|
+
"name": "feedback",
|
|
114
|
+
"required": true,
|
|
115
|
+
"type": "string"
|
|
116
|
+
},
|
|
117
|
+
"goals": {
|
|
118
|
+
"items": {
|
|
119
|
+
"type": "string"
|
|
120
|
+
},
|
|
121
|
+
"name": "goals",
|
|
122
|
+
"required": true,
|
|
123
|
+
"type": "array"
|
|
124
|
+
},
|
|
125
|
+
"mechanics": {
|
|
126
|
+
"items": {
|
|
127
|
+
"type": "string"
|
|
128
|
+
},
|
|
129
|
+
"name": "mechanics",
|
|
130
|
+
"required": true,
|
|
131
|
+
"type": "array"
|
|
132
|
+
},
|
|
133
|
+
"rewards": {
|
|
134
|
+
"items": {
|
|
135
|
+
"type": "string"
|
|
136
|
+
},
|
|
137
|
+
"name": "rewards",
|
|
138
|
+
"required": true,
|
|
139
|
+
"type": "array"
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
"type": "object"
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"default": false,
|
|
146
|
+
"name": "declared",
|
|
147
|
+
"type": "boolean"
|
|
148
|
+
}
|
|
149
|
+
],
|
|
150
|
+
"id": "ent_01M1NKGE11AR2J7GEQPKDJRWMX",
|
|
151
|
+
"name": "GameDesignState",
|
|
152
|
+
"persistence": "runtime",
|
|
153
|
+
"shared": true
|
|
154
|
+
},
|
|
155
|
+
"id": "orb_01M1NKGE11H9R1X869A8C6MF1G",
|
|
156
|
+
"name": "GameDesignSheetOrbital",
|
|
157
|
+
"pages": [
|
|
158
|
+
{
|
|
159
|
+
"id": "pag_01M1NKGE11QN9ZKQENH9WCNHWT",
|
|
160
|
+
"name": "GameDesignSheetPage",
|
|
161
|
+
"path": "/game-design-sheet",
|
|
162
|
+
"traits": [
|
|
163
|
+
{
|
|
164
|
+
"ref": "GameDesignSheet",
|
|
165
|
+
"refId": "trt_01M1NKGE111XC08V7VSSVYSJB4"
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
}
|
|
169
|
+
],
|
|
170
|
+
"traits": [
|
|
171
|
+
{
|
|
172
|
+
"category": "lifecycle",
|
|
173
|
+
"config": {
|
|
174
|
+
"design": {
|
|
175
|
+
"default": {
|
|
176
|
+
"agency": "",
|
|
177
|
+
"challenge": "",
|
|
178
|
+
"coreLoop": "",
|
|
179
|
+
"dynamics": [],
|
|
180
|
+
"engagement": [],
|
|
181
|
+
"feedback": "",
|
|
182
|
+
"goals": [],
|
|
183
|
+
"mechanics": [],
|
|
184
|
+
"rewards": []
|
|
185
|
+
},
|
|
186
|
+
"description": "Required game-design metadata. All string/array fields must be non-empty for a finished level; empty defaults fail validation until the author fills them in.",
|
|
187
|
+
"label": "Design Sheet",
|
|
188
|
+
"properties": {
|
|
189
|
+
"agency": {
|
|
190
|
+
"name": "agency",
|
|
191
|
+
"required": true,
|
|
192
|
+
"type": "string"
|
|
193
|
+
},
|
|
194
|
+
"challenge": {
|
|
195
|
+
"name": "challenge",
|
|
196
|
+
"required": true,
|
|
197
|
+
"type": "string"
|
|
198
|
+
},
|
|
199
|
+
"coreLoop": {
|
|
200
|
+
"name": "coreLoop",
|
|
201
|
+
"required": true,
|
|
202
|
+
"type": "string"
|
|
203
|
+
},
|
|
204
|
+
"dynamics": {
|
|
205
|
+
"items": {
|
|
206
|
+
"type": "string"
|
|
207
|
+
},
|
|
208
|
+
"name": "dynamics",
|
|
209
|
+
"required": true,
|
|
210
|
+
"type": "array"
|
|
211
|
+
},
|
|
212
|
+
"engagement": {
|
|
213
|
+
"items": {
|
|
214
|
+
"type": "string"
|
|
215
|
+
},
|
|
216
|
+
"name": "engagement",
|
|
217
|
+
"required": true,
|
|
218
|
+
"type": "array"
|
|
219
|
+
},
|
|
220
|
+
"feedback": {
|
|
221
|
+
"name": "feedback",
|
|
222
|
+
"required": true,
|
|
223
|
+
"type": "string"
|
|
224
|
+
},
|
|
225
|
+
"goals": {
|
|
226
|
+
"items": {
|
|
227
|
+
"type": "string"
|
|
228
|
+
},
|
|
229
|
+
"name": "goals",
|
|
230
|
+
"required": true,
|
|
231
|
+
"type": "array"
|
|
232
|
+
},
|
|
233
|
+
"mechanics": {
|
|
234
|
+
"items": {
|
|
235
|
+
"type": "string"
|
|
236
|
+
},
|
|
237
|
+
"name": "mechanics",
|
|
238
|
+
"required": true,
|
|
239
|
+
"type": "array"
|
|
240
|
+
},
|
|
241
|
+
"rewards": {
|
|
242
|
+
"items": {
|
|
243
|
+
"type": "string"
|
|
244
|
+
},
|
|
245
|
+
"name": "rewards",
|
|
246
|
+
"required": true,
|
|
247
|
+
"type": "array"
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
"tier": "domain",
|
|
251
|
+
"type": "GameDesign"
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
"emits": [
|
|
255
|
+
{
|
|
256
|
+
"description": "The compiled game-design sheet is emitted once on INIT and again on RESTART so organism-level authorities, analytics, or tutorial overlays can react to it.",
|
|
257
|
+
"event": "DESIGN_DECLARED",
|
|
258
|
+
"eventId": "evt_01M1NKGE119C8NKXKGJH8X4TMR",
|
|
259
|
+
"payloadSchema": [
|
|
260
|
+
{
|
|
261
|
+
"name": "design",
|
|
262
|
+
"properties": [
|
|
263
|
+
{
|
|
264
|
+
"name": "coreLoop",
|
|
265
|
+
"required": true,
|
|
266
|
+
"type": "string"
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"name": "challenge",
|
|
270
|
+
"required": true,
|
|
271
|
+
"type": "string"
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
"name": "goals",
|
|
275
|
+
"required": true,
|
|
276
|
+
"type": "[string]"
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"name": "feedback",
|
|
280
|
+
"required": true,
|
|
281
|
+
"type": "string"
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"name": "agency",
|
|
285
|
+
"required": true,
|
|
286
|
+
"type": "string"
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"name": "mechanics",
|
|
290
|
+
"required": true,
|
|
291
|
+
"type": "[string]"
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"name": "dynamics",
|
|
295
|
+
"required": true,
|
|
296
|
+
"type": "[string]"
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
"name": "engagement",
|
|
300
|
+
"required": true,
|
|
301
|
+
"type": "[string]"
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
"name": "rewards",
|
|
305
|
+
"required": true,
|
|
306
|
+
"type": "[string]"
|
|
307
|
+
}
|
|
308
|
+
],
|
|
309
|
+
"required": true,
|
|
310
|
+
"type": "object"
|
|
311
|
+
}
|
|
312
|
+
],
|
|
313
|
+
"scope": "external",
|
|
314
|
+
"tier": "domain"
|
|
315
|
+
}
|
|
316
|
+
],
|
|
317
|
+
"entityContract": {
|
|
318
|
+
"provides": [
|
|
319
|
+
"declared",
|
|
320
|
+
"design"
|
|
321
|
+
],
|
|
322
|
+
"requires": []
|
|
323
|
+
},
|
|
324
|
+
"entityRebindable": true,
|
|
325
|
+
"entityRefIds": {
|
|
326
|
+
"GameDesignState": "ent_01M1NKGE11AR2J7GEQPKDJRWMX"
|
|
327
|
+
},
|
|
328
|
+
"id": "trt_01M1NKGE111XC08V7VSSVYSJB4",
|
|
329
|
+
"linkedEntity": "GameDesignState",
|
|
330
|
+
"linkedEntityId": "ent_01M1NKGE11AR2J7GEQPKDJRWMX",
|
|
331
|
+
"name": "GameDesignSheet",
|
|
332
|
+
"scope": "instance",
|
|
333
|
+
"stateMachine": {
|
|
334
|
+
"events": [
|
|
335
|
+
{
|
|
336
|
+
"id": "evt_01M1NKGE11QM4V8HX481NCVKQ0",
|
|
337
|
+
"key": "INIT",
|
|
338
|
+
"name": "Initialize"
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
"id": "evt_01M1NKGE11CDYSFMFB4V6P8Y7P",
|
|
342
|
+
"key": "RESTART",
|
|
343
|
+
"name": "Restart",
|
|
344
|
+
"payloadSchema": [
|
|
345
|
+
{
|
|
346
|
+
"name": "id",
|
|
347
|
+
"type": "string"
|
|
348
|
+
}
|
|
349
|
+
]
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
"description": "The compiled game-design sheet is emitted once on INIT and again on RESTART so organism-level authorities, analytics, or tutorial overlays can react to it.",
|
|
353
|
+
"id": "evt_01M1NKGE119C8NKXKGJH8X4TMR",
|
|
354
|
+
"key": "DESIGN_DECLARED",
|
|
355
|
+
"name": "Design Declared",
|
|
356
|
+
"payloadSchema": [
|
|
357
|
+
{
|
|
358
|
+
"name": "design",
|
|
359
|
+
"properties": [
|
|
360
|
+
{
|
|
361
|
+
"name": "coreLoop",
|
|
362
|
+
"required": true,
|
|
363
|
+
"type": "string"
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"name": "challenge",
|
|
367
|
+
"required": true,
|
|
368
|
+
"type": "string"
|
|
369
|
+
},
|
|
370
|
+
{
|
|
371
|
+
"name": "goals",
|
|
372
|
+
"required": true,
|
|
373
|
+
"type": "[string]"
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
"name": "feedback",
|
|
377
|
+
"required": true,
|
|
378
|
+
"type": "string"
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
"name": "agency",
|
|
382
|
+
"required": true,
|
|
383
|
+
"type": "string"
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
"name": "mechanics",
|
|
387
|
+
"required": true,
|
|
388
|
+
"type": "[string]"
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
"name": "dynamics",
|
|
392
|
+
"required": true,
|
|
393
|
+
"type": "[string]"
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
"name": "engagement",
|
|
397
|
+
"required": true,
|
|
398
|
+
"type": "[string]"
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
"name": "rewards",
|
|
402
|
+
"required": true,
|
|
403
|
+
"type": "[string]"
|
|
404
|
+
}
|
|
405
|
+
],
|
|
406
|
+
"required": true,
|
|
407
|
+
"type": "object"
|
|
408
|
+
}
|
|
409
|
+
],
|
|
410
|
+
"tier": "domain"
|
|
411
|
+
}
|
|
412
|
+
],
|
|
413
|
+
"states": [
|
|
414
|
+
{
|
|
415
|
+
"isInitial": true,
|
|
416
|
+
"name": "active"
|
|
417
|
+
}
|
|
418
|
+
],
|
|
419
|
+
"transitions": [
|
|
420
|
+
{
|
|
421
|
+
"effects": [
|
|
422
|
+
[
|
|
423
|
+
"set",
|
|
424
|
+
"@entity.design",
|
|
425
|
+
"@config.design"
|
|
426
|
+
],
|
|
427
|
+
[
|
|
428
|
+
"set",
|
|
429
|
+
"@entity.declared",
|
|
430
|
+
true
|
|
431
|
+
],
|
|
432
|
+
[
|
|
433
|
+
"emit",
|
|
434
|
+
"DESIGN_DECLARED",
|
|
435
|
+
{
|
|
436
|
+
"design": "@entity.design"
|
|
437
|
+
}
|
|
438
|
+
]
|
|
439
|
+
],
|
|
440
|
+
"event": "INIT",
|
|
441
|
+
"eventId": "evt_01M1NKGE11QM4V8HX481NCVKQ0",
|
|
442
|
+
"from": "active",
|
|
443
|
+
"to": "active"
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
"effects": [
|
|
447
|
+
[
|
|
448
|
+
"set",
|
|
449
|
+
"@entity.design",
|
|
450
|
+
"@config.design"
|
|
451
|
+
],
|
|
452
|
+
[
|
|
453
|
+
"set",
|
|
454
|
+
"@entity.declared",
|
|
455
|
+
true
|
|
456
|
+
],
|
|
457
|
+
[
|
|
458
|
+
"emit",
|
|
459
|
+
"DESIGN_DECLARED",
|
|
460
|
+
{
|
|
461
|
+
"design": "@entity.design"
|
|
462
|
+
}
|
|
463
|
+
]
|
|
464
|
+
],
|
|
465
|
+
"event": "RESTART",
|
|
466
|
+
"eventId": "evt_01M1NKGE11CDYSFMFB4V6P8Y7P",
|
|
467
|
+
"from": "active",
|
|
468
|
+
"to": "active"
|
|
469
|
+
}
|
|
470
|
+
]
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
],
|
|
474
|
+
"types": {
|
|
475
|
+
"GameDesign": [
|
|
476
|
+
{
|
|
477
|
+
"name": "coreLoop",
|
|
478
|
+
"required": true,
|
|
479
|
+
"type": "string"
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
"name": "challenge",
|
|
483
|
+
"required": true,
|
|
484
|
+
"type": "string"
|
|
485
|
+
},
|
|
486
|
+
{
|
|
487
|
+
"name": "goals",
|
|
488
|
+
"required": true,
|
|
489
|
+
"type": "[string]"
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
"name": "feedback",
|
|
493
|
+
"required": true,
|
|
494
|
+
"type": "string"
|
|
495
|
+
},
|
|
496
|
+
{
|
|
497
|
+
"name": "agency",
|
|
498
|
+
"required": true,
|
|
499
|
+
"type": "string"
|
|
500
|
+
},
|
|
501
|
+
{
|
|
502
|
+
"name": "mechanics",
|
|
503
|
+
"required": true,
|
|
504
|
+
"type": "[string]"
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
"name": "dynamics",
|
|
508
|
+
"required": true,
|
|
509
|
+
"type": "[string]"
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
"name": "engagement",
|
|
513
|
+
"required": true,
|
|
514
|
+
"type": "[string]"
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
"name": "rewards",
|
|
518
|
+
"required": true,
|
|
519
|
+
"type": "[string]"
|
|
520
|
+
}
|
|
521
|
+
]
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
],
|
|
525
|
+
"schemaVersion": 1,
|
|
526
|
+
"version": "1.0.0"
|
|
527
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"description": "Headless collectible-gate mechanic: doors that stay shut until the player's collected total reaches their cost. Listens COLLECT (the board's running total — stars, coins, keys) and flips every door whose cost is met, stamping open on the shared door rows and emitting GATE_OPENED for the first newly opened door (the shared entity is the render authority for the rest). While a closed door's rect contains the player it emits GATE_BLOCKED once per approach — re-arming only after the player steps out — so the board can answer with a PLACE back and a locked fx. RESTART re-locks every door and zeroes the total. Renders nothing; boards draw closed doors as bars/walls and open ones as gaps.",
|
|
2
|
+
"description": "Headless collectible-gate mechanic: doors that stay shut until the player's collected total reaches their cost. Listens COLLECT (the board's running total — stars, coins, keys) and flips every door whose cost is met, stamping open on the shared door rows and emitting GATE_OPENED for the first newly opened door (the shared entity is the render authority for the rest). While a closed door's rect contains the player it emits GATE_BLOCKED once per approach — re-arming only after the player steps out — so the board can answer with a PLACE back and a locked fx. RESTART re-locks every door and zeroes the total. Renders nothing; boards draw closed doors as bars/walls and open ones as gaps. Corresponds to the design-sheet field(s): challenge, rewards.",
|
|
3
3
|
"ledger": {
|
|
4
4
|
"entries": {
|
|
5
5
|
"ent_01M0PCAKPNCX4VB9ENH9KE7A6K": {
|
|
@@ -844,7 +844,53 @@
|
|
|
844
844
|
]
|
|
845
845
|
}
|
|
846
846
|
}
|
|
847
|
-
]
|
|
847
|
+
],
|
|
848
|
+
"types": {
|
|
849
|
+
"Door": [
|
|
850
|
+
{
|
|
851
|
+
"name": "id",
|
|
852
|
+
"required": true,
|
|
853
|
+
"type": "string"
|
|
854
|
+
},
|
|
855
|
+
{
|
|
856
|
+
"name": "x",
|
|
857
|
+
"required": true,
|
|
858
|
+
"type": "number"
|
|
859
|
+
},
|
|
860
|
+
{
|
|
861
|
+
"name": "y",
|
|
862
|
+
"required": true,
|
|
863
|
+
"type": "number"
|
|
864
|
+
},
|
|
865
|
+
{
|
|
866
|
+
"name": "width",
|
|
867
|
+
"required": true,
|
|
868
|
+
"type": "number"
|
|
869
|
+
},
|
|
870
|
+
{
|
|
871
|
+
"name": "height",
|
|
872
|
+
"required": true,
|
|
873
|
+
"type": "number"
|
|
874
|
+
},
|
|
875
|
+
{
|
|
876
|
+
"name": "cost",
|
|
877
|
+
"required": true,
|
|
878
|
+
"type": "number"
|
|
879
|
+
},
|
|
880
|
+
{
|
|
881
|
+
"name": "open",
|
|
882
|
+
"type": "boolean"
|
|
883
|
+
},
|
|
884
|
+
{
|
|
885
|
+
"name": "touching",
|
|
886
|
+
"type": "boolean"
|
|
887
|
+
},
|
|
888
|
+
{
|
|
889
|
+
"name": "blocked",
|
|
890
|
+
"type": "boolean"
|
|
891
|
+
}
|
|
892
|
+
]
|
|
893
|
+
}
|
|
848
894
|
}
|
|
849
895
|
],
|
|
850
896
|
"schemaVersion": 1,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"description": "Headless lives + checkpoint authority for boards with stakes: owns lives, the current respawn point, and nothing else. DAMAGE (call sites rename their hazard sources — BODY_HAZARD, BODY_FELL, PATROL_HIT — onto it) costs one life, respecting an invulnerability window so overlapping hazards can't chain-drain; losing a life emits LIFE_LOST plus RESPAWN with the current checkpoint (boards route RESPAWN to the body authority's PLACE), and losing the last emits GAME_OVER instead. Checkpoints advance automatically: BODY_MOVED crossing a configured checkpoint's atX moves the respawn point forward and emits CHECKPOINT_REACHED once per checkpoint (tracked by furthest atX reached, so checkpoints are ordered along the run). RESTART reseeds lives and respawn to the spawn. Renders nothing — HUDs read lives off the shared entity.",
|
|
2
|
+
"description": "Headless lives + checkpoint authority for boards with stakes: owns lives, the current respawn point, and nothing else. DAMAGE (call sites rename their hazard sources — BODY_HAZARD, BODY_FELL, PATROL_HIT — onto it) costs one life, respecting an invulnerability window so overlapping hazards can't chain-drain; losing a life emits LIFE_LOST plus RESPAWN with the current checkpoint (boards route RESPAWN to the body authority's PLACE), and losing the last emits GAME_OVER instead. Checkpoints advance automatically: BODY_MOVED crossing a configured checkpoint's atX moves the respawn point forward and emits CHECKPOINT_REACHED once per checkpoint (tracked by furthest atX reached, so checkpoints are ordered along the run). RESTART reseeds lives and respawn to the spawn. Renders nothing — HUDs read lives off the shared entity. Corresponds to the design-sheet field(s): challenge, feedback.",
|
|
3
3
|
"ledger": {
|
|
4
4
|
"entries": {
|
|
5
5
|
"ent_01M0PCAKN6E2Z14AYWA1MGF3TS": {
|
|
@@ -731,7 +731,31 @@
|
|
|
731
731
|
]
|
|
732
732
|
}
|
|
733
733
|
}
|
|
734
|
-
]
|
|
734
|
+
],
|
|
735
|
+
"types": {
|
|
736
|
+
"Checkpoint": [
|
|
737
|
+
{
|
|
738
|
+
"name": "id",
|
|
739
|
+
"required": true,
|
|
740
|
+
"type": "string"
|
|
741
|
+
},
|
|
742
|
+
{
|
|
743
|
+
"name": "atX",
|
|
744
|
+
"required": true,
|
|
745
|
+
"type": "number"
|
|
746
|
+
},
|
|
747
|
+
{
|
|
748
|
+
"name": "x",
|
|
749
|
+
"required": true,
|
|
750
|
+
"type": "number"
|
|
751
|
+
},
|
|
752
|
+
{
|
|
753
|
+
"name": "y",
|
|
754
|
+
"required": true,
|
|
755
|
+
"type": "number"
|
|
756
|
+
}
|
|
757
|
+
]
|
|
758
|
+
}
|
|
735
759
|
}
|
|
736
760
|
],
|
|
737
761
|
"schemaVersion": 1,
|