@almadar/std 16.198.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.
Files changed (218) hide show
  1. package/behaviors/lolo/ui/avl/atoms/ui-behavior-view.lolo +2 -2
  2. package/behaviors/lolo/ui/avl/atoms/ui-module-card.lolo +2 -2
  3. package/behaviors/lolo/ui/core/atoms/std-app-layout.lolo +1 -1
  4. package/behaviors/lolo/ui/core/atoms/std-file-store.lolo +1 -1
  5. package/behaviors/lolo/ui/core/atoms/ui-conditional-wrapper.lolo +11 -4
  6. package/behaviors/lolo/ui/core/atoms/ui-icon.lolo +1 -1
  7. package/behaviors/lolo/ui/core/atoms/ui-input.lolo +10 -4
  8. package/behaviors/lolo/ui/core/atoms/ui-select.lolo +6 -4
  9. package/behaviors/lolo/ui/core/molecules/ui-branching-logic-builder.lolo +5 -5
  10. package/behaviors/lolo/ui/core/molecules/ui-doc-sidebar.lolo +1 -1
  11. package/behaviors/lolo/ui/core/molecules/ui-document-details.lolo +8 -1
  12. package/behaviors/lolo/ui/core/molecules/ui-drawer.lolo +1 -1
  13. package/behaviors/lolo/ui/core/molecules/ui-edge-decoration.lolo +1 -1
  14. package/behaviors/lolo/ui/core/molecules/ui-file-tree.lolo +1 -1
  15. package/behaviors/lolo/ui/core/molecules/ui-floating-action-button.lolo +1 -1
  16. package/behaviors/lolo/ui/core/molecules/ui-gradient-divider.lolo +1 -1
  17. package/behaviors/lolo/ui/core/molecules/ui-import-preview-tree.lolo +8 -1
  18. package/behaviors/lolo/ui/core/molecules/ui-input-group.lolo +10 -4
  19. package/behaviors/lolo/ui/core/molecules/ui-menu.lolo +1 -1
  20. package/behaviors/lolo/ui/core/molecules/ui-navigation.lolo +1 -1
  21. package/behaviors/lolo/ui/core/molecules/ui-orbital-visualization.lolo +3 -3
  22. package/behaviors/lolo/ui/core/molecules/ui-reply-tree.lolo +1 -1
  23. package/behaviors/lolo/ui/core/molecules/ui-sidebar.lolo +1 -1
  24. package/behaviors/lolo/ui/core/molecules/ui-swipeable-row.lolo +3 -3
  25. package/behaviors/lolo/ui/core/molecules/ui-wizard-container.lolo +24 -17
  26. package/behaviors/lolo/ui/core/organisms/ui-entity-cards.lolo +2 -2
  27. package/behaviors/lolo/ui/core/organisms/ui-entity-list.lolo +1 -1
  28. package/behaviors/lolo/ui/core/organisms/ui-entity-table.lolo +2 -2
  29. package/behaviors/lolo/ui/core/organisms/ui-form-section.lolo +15 -8
  30. package/behaviors/lolo/ui/core/organisms/ui-form.lolo +15 -8
  31. package/behaviors/lolo/ui/core/organisms/ui-stat-card.lolo +1 -1
  32. package/behaviors/lolo/ui/core/organisms/ui-subagent-trace-panel.lolo +3 -3
  33. package/behaviors/lolo/ui/core/templates/ui-dashboard-layout.lolo +1 -1
  34. package/behaviors/lolo/ui/game/atoms/std-fx-narrative.lolo +126 -0
  35. package/behaviors/lolo/ui/game/atoms/std-pickup.lolo +104 -0
  36. package/behaviors/lolo/ui/game/atoms/std-platformer-body.lolo +39 -19
  37. package/behaviors/lolo/ui/game/atoms/ui-control-button.lolo +3 -3
  38. package/behaviors/lolo/ui/game/atoms/ui-control-grid.lolo +1 -1
  39. package/behaviors/lolo/ui/game/atoms/ui-game-hud.lolo +1 -1
  40. package/behaviors/lolo/ui/game/atoms/ui-game-menu.lolo +3 -3
  41. package/behaviors/lolo/ui/game/atoms/ui-stat-badge.lolo +3 -3
  42. package/behaviors/registry/ui/avl/atoms/ui-behavior-view.orb +389 -3
  43. package/behaviors/registry/ui/avl/atoms/ui-module-card.orb +389 -3
  44. package/behaviors/registry/ui/core/atoms/std-app-layout.orb +93 -2
  45. package/behaviors/registry/ui/core/atoms/std-file-store.orb +101 -2
  46. package/behaviors/registry/ui/core/atoms/ui-atlas-image.orb +13 -1
  47. package/behaviors/registry/ui/core/atoms/ui-atlas-panel.orb +13 -1
  48. package/behaviors/registry/ui/core/atoms/ui-badge.orb +56 -1
  49. package/behaviors/registry/ui/core/atoms/ui-button.orb +56 -1
  50. package/behaviors/registry/ui/core/atoms/ui-conditional-wrapper.orb +277 -5
  51. package/behaviors/registry/ui/core/atoms/ui-game-icon.orb +56 -1
  52. package/behaviors/registry/ui/core/atoms/ui-icon.orb +1 -10
  53. package/behaviors/registry/ui/core/atoms/ui-input.orb +42 -7
  54. package/behaviors/registry/ui/core/atoms/ui-law-reference-tooltip.orb +27 -1
  55. package/behaviors/registry/ui/core/atoms/ui-select.orb +69 -9
  56. package/behaviors/registry/ui/core/molecules/ui-accordion.orb +30 -1
  57. package/behaviors/registry/ui/core/molecules/ui-branching-logic-builder.orb +76 -13
  58. package/behaviors/registry/ui/core/molecules/ui-breadcrumb.orb +30 -1
  59. package/behaviors/registry/ui/core/molecules/ui-chart-legend.orb +15 -1
  60. package/behaviors/registry/ui/core/molecules/ui-chart.orb +133 -1
  61. package/behaviors/registry/ui/core/molecules/ui-code-block.orb +77 -1
  62. package/behaviors/registry/ui/core/molecules/ui-confirm-dialog.orb +22 -1
  63. package/behaviors/registry/ui/core/molecules/ui-content-renderer.orb +34 -1
  64. package/behaviors/registry/ui/core/molecules/ui-data-grid.orb +99 -1
  65. package/behaviors/registry/ui/core/molecules/ui-data-list.orb +118 -1
  66. package/behaviors/registry/ui/core/molecules/ui-date-range-picker.orb +27 -1
  67. package/behaviors/registry/ui/core/molecules/ui-date-range-selector.orb +15 -1
  68. package/behaviors/registry/ui/core/molecules/ui-doc-breadcrumb.orb +14 -1
  69. package/behaviors/registry/ui/core/molecules/ui-doc-pagination.orb +35 -1
  70. package/behaviors/registry/ui/core/molecules/ui-doc-sidebar.orb +46 -2
  71. package/behaviors/registry/ui/core/molecules/ui-doc-toc.orb +20 -1
  72. package/behaviors/registry/ui/core/molecules/ui-document-details.orb +65 -3
  73. package/behaviors/registry/ui/core/molecules/ui-document-panel.orb +22 -1
  74. package/behaviors/registry/ui/core/molecules/ui-document-viewer.orb +60 -1
  75. package/behaviors/registry/ui/core/molecules/ui-drawer.orb +1 -8
  76. package/behaviors/registry/ui/core/molecules/ui-edge-decoration.orb +1 -9
  77. package/behaviors/registry/ui/core/molecules/ui-feature-grid.orb +39 -1
  78. package/behaviors/registry/ui/core/molecules/ui-file-tree.orb +86 -2
  79. package/behaviors/registry/ui/core/molecules/ui-filter-group.orb +39 -1
  80. package/behaviors/registry/ui/core/molecules/ui-floating-action-button.orb +29 -10
  81. package/behaviors/registry/ui/core/molecules/ui-form-actions.orb +85 -1
  82. package/behaviors/registry/ui/core/molecules/ui-form-layout.orb +22 -1
  83. package/behaviors/registry/ui/core/molecules/ui-fx-overlay.orb +76 -1
  84. package/behaviors/registry/ui/core/molecules/ui-gradient-divider.orb +1 -10
  85. package/behaviors/registry/ui/core/molecules/ui-graph-canvas.orb +421 -1
  86. package/behaviors/registry/ui/core/molecules/ui-graph-view.orb +92 -1
  87. package/behaviors/registry/ui/core/molecules/ui-header.orb +59 -1
  88. package/behaviors/registry/ui/core/molecules/ui-import-preview-tree.orb +125 -2
  89. package/behaviors/registry/ui/core/molecules/ui-import-progress.orb +17 -1
  90. package/behaviors/registry/ui/core/molecules/ui-import-source-picker.orb +39 -1
  91. package/behaviors/registry/ui/core/molecules/ui-input-group.orb +42 -7
  92. package/behaviors/registry/ui/core/molecules/ui-jazari-state-machine.orb +22 -1
  93. package/behaviors/registry/ui/core/molecules/ui-lightbox.orb +17 -1
  94. package/behaviors/registry/ui/core/molecules/ui-likert-scale.orb +15 -1
  95. package/behaviors/registry/ui/core/molecules/ui-line-chart.orb +18 -1
  96. package/behaviors/registry/ui/core/molecules/ui-map-view.orb +109 -1
  97. package/behaviors/registry/ui/core/molecules/ui-matrix-question.orb +27 -1
  98. package/behaviors/registry/ui/core/molecules/ui-menu.orb +86 -2
  99. package/behaviors/registry/ui/core/molecules/ui-meter.orb +57 -1
  100. package/behaviors/registry/ui/core/molecules/ui-navigation.orb +99 -2
  101. package/behaviors/registry/ui/core/molecules/ui-option-constraint-group.orb +27 -1
  102. package/behaviors/registry/ui/core/molecules/ui-orbital-visualization.orb +78 -4
  103. package/behaviors/registry/ui/core/molecules/ui-page-header.orb +91 -1
  104. package/behaviors/registry/ui/core/molecules/ui-qr-scanner.orb +20 -1
  105. package/behaviors/registry/ui/core/molecules/ui-relation-select.orb +23 -1
  106. package/behaviors/registry/ui/core/molecules/ui-repeatable-form-section.orb +18 -1
  107. package/behaviors/registry/ui/core/molecules/ui-reply-tree.orb +5 -2
  108. package/behaviors/registry/ui/core/molecules/ui-section.orb +22 -1
  109. package/behaviors/registry/ui/core/molecules/ui-sidebar.orb +99 -2
  110. package/behaviors/registry/ui/core/molecules/ui-signature-pad.orb +22 -1
  111. package/behaviors/registry/ui/core/molecules/ui-social-proof.orb +18 -1
  112. package/behaviors/registry/ui/core/molecules/ui-split.orb +22 -1
  113. package/behaviors/registry/ui/core/molecules/ui-stat-display.orb +22 -1
  114. package/behaviors/registry/ui/core/molecules/ui-swipeable-row.orb +64 -4
  115. package/behaviors/registry/ui/core/molecules/ui-table-view.orb +136 -1
  116. package/behaviors/registry/ui/core/molecules/ui-tabs.orb +301 -1
  117. package/behaviors/registry/ui/core/molecules/ui-upload-drop-zone.orb +25 -1
  118. package/behaviors/registry/ui/core/molecules/ui-version-diff.orb +28 -1
  119. package/behaviors/registry/ui/core/molecules/ui-violation-alert.orb +46 -1
  120. package/behaviors/registry/ui/core/molecules/ui-wizard-container.orb +1607 -50
  121. package/behaviors/registry/ui/core/molecules/ui-wizard-progress.orb +19 -1
  122. package/behaviors/registry/ui/core/organisms/ui-chat-bar.orb +22 -1
  123. package/behaviors/registry/ui/core/organisms/ui-dashboard-grid.orb +40 -1
  124. package/behaviors/registry/ui/core/organisms/ui-detail-panel.orb +196 -1
  125. package/behaviors/registry/ui/core/organisms/ui-drawer-slot.orb +22 -1
  126. package/behaviors/registry/ui/core/organisms/ui-entity-cards.orb +83 -14
  127. package/behaviors/registry/ui/core/organisms/ui-entity-list.orb +64 -8
  128. package/behaviors/registry/ui/core/organisms/ui-entity-table.orb +152 -14
  129. package/behaviors/registry/ui/core/organisms/ui-form-section.orb +1140 -15
  130. package/behaviors/registry/ui/core/organisms/ui-form.orb +1140 -15
  131. package/behaviors/registry/ui/core/organisms/ui-master-detail.orb +22 -1
  132. package/behaviors/registry/ui/core/organisms/ui-media-gallery.orb +71 -1
  133. package/behaviors/registry/ui/core/organisms/ui-modal-slot.orb +22 -1
  134. package/behaviors/registry/ui/core/organisms/ui-segment-renderer.orb +29 -1
  135. package/behaviors/registry/ui/core/organisms/ui-stat-card.orb +61 -7
  136. package/behaviors/registry/ui/core/organisms/ui-state-machine-view.orb +22 -1
  137. package/behaviors/registry/ui/core/organisms/ui-subagent-trace-panel.orb +37 -7
  138. package/behaviors/registry/ui/core/organisms/ui-tabbed-container.orb +31 -1
  139. package/behaviors/registry/ui/core/organisms/ui-timeline.orb +73 -1
  140. package/behaviors/registry/ui/core/organisms/ui-toast-slot.orb +22 -1
  141. package/behaviors/registry/ui/core/templates/ui-dashboard-layout.orb +122 -2
  142. package/behaviors/registry/ui/game/atoms/std-fx-narrative.orb +695 -0
  143. package/behaviors/registry/ui/game/atoms/std-pickup.orb +835 -0
  144. package/behaviors/registry/ui/game/atoms/std-platformer-body.orb +1515 -1041
  145. package/behaviors/registry/ui/game/atoms/ui-action-palette.orb +269 -1
  146. package/behaviors/registry/ui/game/atoms/ui-action-tile.orb +288 -1
  147. package/behaviors/registry/ui/game/atoms/ui-canvas-2d.orb +54 -1
  148. package/behaviors/registry/ui/game/atoms/ui-canvas.orb +311 -1
  149. package/behaviors/registry/ui/game/atoms/ui-choice-button.orb +56 -1
  150. package/behaviors/registry/ui/game/atoms/ui-control-button.orb +59 -20
  151. package/behaviors/registry/ui/game/atoms/ui-control-grid.orb +186 -7
  152. package/behaviors/registry/ui/game/atoms/ui-dialogue-bubble.orb +56 -1
  153. package/behaviors/registry/ui/game/atoms/ui-draw-fx-layer.orb +233 -1
  154. package/behaviors/registry/ui/game/atoms/ui-draw-group.orb +137 -1
  155. package/behaviors/registry/ui/game/atoms/ui-draw-mesh.orb +219 -1
  156. package/behaviors/registry/ui/game/atoms/ui-draw-shape-layer.orb +951 -1
  157. package/behaviors/registry/ui/game/atoms/ui-draw-shape.orb +512 -1
  158. package/behaviors/registry/ui/game/atoms/ui-draw-sprite-layer.orb +270 -1
  159. package/behaviors/registry/ui/game/atoms/ui-draw-sprite.orb +106 -1
  160. package/behaviors/registry/ui/game/atoms/ui-draw-text-layer.orb +85 -1
  161. package/behaviors/registry/ui/game/atoms/ui-draw-text.orb +19 -1
  162. package/behaviors/registry/ui/game/atoms/ui-game-audio-toggle.orb +128 -1
  163. package/behaviors/registry/ui/game/atoms/ui-game-hud.orb +168 -8
  164. package/behaviors/registry/ui/game/atoms/ui-game-menu.orb +151 -13
  165. package/behaviors/registry/ui/game/atoms/ui-health-bar.orb +109 -1
  166. package/behaviors/registry/ui/game/atoms/ui-score-display.orb +56 -1
  167. package/behaviors/registry/ui/game/atoms/ui-sequence-bar.orb +523 -1
  168. package/behaviors/registry/ui/game/atoms/ui-stat-badge.orb +112 -22
  169. package/behaviors/registry/ui/game/atoms/ui-state-graph.orb +24 -1
  170. package/behaviors/registry/ui/game/atoms/ui-state-json-view.orb +20 -1
  171. package/behaviors/registry/ui/game/atoms/ui-trait-slot.orb +849 -1
  172. package/behaviors/registry/ui/learning/atoms/ui-algo-graph-canvas.orb +289 -1
  173. package/behaviors/registry/ui/learning/atoms/ui-algorithm-canvas.orb +424 -1
  174. package/behaviors/registry/ui/learning/atoms/ui-biology-canvas.orb +925 -1
  175. package/behaviors/registry/ui/learning/atoms/ui-chemistry-canvas.orb +970 -1
  176. package/behaviors/registry/ui/learning/atoms/ui-learning-canvas.orb +351 -1
  177. package/behaviors/registry/ui/learning/atoms/ui-math-canvas.orb +592 -1
  178. package/behaviors/registry/ui/learning/atoms/ui-physics-canvas.orb +1049 -1
  179. package/behaviors/registry/ui/marketing/atoms/ui-community-links.orb +36 -1
  180. package/behaviors/registry/ui/marketing/atoms/ui-cta-banner.orb +27 -1
  181. package/behaviors/registry/ui/marketing/atoms/ui-hero-section.orb +39 -1
  182. package/behaviors/registry/ui/marketing/atoms/ui-marketing-footer.orb +55 -1
  183. package/behaviors/registry/ui/marketing/atoms/ui-pricing-card.orb +15 -1
  184. package/behaviors/registry/ui/marketing/atoms/ui-pricing-grid.orb +65 -1
  185. package/behaviors/registry/ui/marketing/atoms/ui-service-catalog.orb +19 -1
  186. package/behaviors/registry/ui/marketing/atoms/ui-showcase-card.orb +15 -1
  187. package/behaviors/registry/ui/marketing/atoms/ui-split-section.orb +15 -1
  188. package/behaviors/registry/ui/marketing/atoms/ui-stats-grid.orb +15 -1
  189. package/behaviors/registry/ui/marketing/atoms/ui-step-flow.orb +23 -1
  190. package/behaviors/registry/ui/marketing/atoms/ui-tag-cloud.orb +18 -1
  191. package/behaviors/registry/ui/marketing/organisms/ui-book-viewer.orb +84 -1
  192. package/behaviors/registry/ui/marketing/organisms/ui-case-study-organism.orb +22 -1
  193. package/behaviors/registry/ui/marketing/organisms/ui-feature-grid-organism.orb +22 -1
  194. package/behaviors/registry/ui/marketing/organisms/ui-hero-organism.orb +52 -1
  195. package/behaviors/registry/ui/marketing/organisms/ui-pricing-organism.orb +22 -1
  196. package/behaviors/registry/ui/marketing/organisms/ui-showcase-organism.orb +32 -1
  197. package/behaviors/registry/ui/marketing/organisms/ui-stats-organism.orb +22 -1
  198. package/behaviors/registry/ui/marketing/organisms/ui-step-flow-organism.orb +22 -1
  199. package/behaviors/registry/ui/marketing/organisms/ui-team-organism.orb +22 -1
  200. package/behaviors/registry/ui/marketing/templates/ui-about-page-template.orb +176 -1
  201. package/behaviors/registry/ui/marketing/templates/ui-feature-detail-page-template.orb +147 -1
  202. package/behaviors/registry/ui/marketing/templates/ui-landing-page-template.orb +260 -1
  203. package/behaviors/registry/ui/marketing/templates/ui-pricing-page-template.orb +98 -1
  204. package/dist/behaviors/exports-reader.js +3302 -2594
  205. package/dist/behaviors/functions/index.d.ts +203 -29
  206. package/dist/behaviors/functions/index.js +3297 -2595
  207. package/dist/behaviors/index.d.ts +1 -1
  208. package/dist/behaviors/index.js +3303 -2595
  209. package/dist/behaviors/query.js +3302 -2594
  210. package/dist/behaviors-embeddings.hash.json +3 -3
  211. package/dist/behaviors-embeddings.json +9 -1
  212. package/dist/behaviors-registry.json +531 -8
  213. package/dist/index.d.ts +1 -1
  214. package/dist/index.js +3303 -2595
  215. package/dist/knob-embeddings.hash.json +3 -3
  216. package/dist/knob-embeddings.json +1 -1
  217. package/dist/registry/factory-signatures.json +1 -1
  218. package/package.json +2 -2
@@ -136,6 +136,15 @@
136
136
  "parent": "trt_01M0H2SJBBCZW9WSQ3YBCVRKM2",
137
137
  "renames": []
138
138
  },
139
+ "evt_01M1GJ1RVFG67Q9AE87QG7RWTJ": {
140
+ "bakedName": "SET_TUNING",
141
+ "curName": "SET_TUNING",
142
+ "id": "evt_01M1GJ1RVFG67Q9AE87QG7RWTJ",
143
+ "kind": "event",
144
+ "owner": "workspace",
145
+ "parent": "trt_01M0H2SJBBCZW9WSQ3YBCVRKM2",
146
+ "renames": []
147
+ },
139
148
  "orb_01M0H2SJBB6B28C7NXBC5BWW23": {
140
149
  "bakedName": "PlatformerBodyOrbital",
141
150
  "curName": "PlatformerBodyOrbital",
@@ -283,6 +292,28 @@
283
292
  "default": false,
284
293
  "name": "skating",
285
294
  "type": "boolean"
295
+ },
296
+ {
297
+ "default": {},
298
+ "name": "tuning",
299
+ "properties": {
300
+ "gravity": {
301
+ "name": "gravity",
302
+ "required": false,
303
+ "type": "number"
304
+ },
305
+ "jumpStrength": {
306
+ "name": "jumpStrength",
307
+ "required": false,
308
+ "type": "number"
309
+ },
310
+ "moveSpeed": {
311
+ "name": "moveSpeed",
312
+ "required": false,
313
+ "type": "number"
314
+ }
315
+ },
316
+ "type": "object"
286
317
  }
287
318
  ],
288
319
  "id": "ent_01M0H2SJBB5TG61D238AWJW3KC",
@@ -311,7 +342,7 @@
311
342
  "config": {
312
343
  "curveModsEnabled": {
313
344
  "default": false,
314
- "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.",
345
+ "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.",
315
346
  "label": "Curve Mods Enabled",
316
347
  "tier": "domain",
317
348
  "type": "boolean"
@@ -455,7 +486,7 @@
455
486
  },
456
487
  "skate": {
457
488
  "default": false,
458
- "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",
489
+ "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.",
459
490
  "label": "Curve Skating",
460
491
  "tier": "domain",
461
492
  "type": "boolean"
@@ -615,7 +646,7 @@
615
646
  "tier": "domain"
616
647
  },
617
648
  {
618
- "description": "Body engaged curve skating this tick (grounded within skateSnap of the skateCurve surface); slope is the local dy/dx — boards layer fx and equation readouts",
649
+ "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",
619
650
  "event": "BODY_SKATE_START",
620
651
  "eventId": "evt_01M0H2SJBB3Y7Z6D7EX8VQ750V",
621
652
  "payloadSchema": [
@@ -775,7 +806,8 @@
775
806
  "fell",
776
807
  "goalId",
777
808
  "hazardId",
778
- "skating"
809
+ "skating",
810
+ "tuning"
779
811
  ],
780
812
  "requires": []
781
813
  },
@@ -867,6 +899,25 @@
867
899
  }
868
900
  ]
869
901
  },
902
+ {
903
+ "id": "evt_01M1GJ1RVFG67Q9AE87QG7RWTJ",
904
+ "key": "SET_TUNING",
905
+ "name": "Set Tuning",
906
+ "payloadSchema": [
907
+ {
908
+ "name": "jumpStrength",
909
+ "type": "number"
910
+ },
911
+ {
912
+ "name": "moveSpeed",
913
+ "type": "number"
914
+ },
915
+ {
916
+ "name": "gravity",
917
+ "type": "number"
918
+ }
919
+ ]
920
+ },
870
921
  {
871
922
  "id": "evt_01M0H2SJBBSCEAJH5FZN8AAX45",
872
923
  "key": "RESTART",
@@ -923,7 +974,7 @@
923
974
  "tier": "domain"
924
975
  },
925
976
  {
926
- "description": "Body engaged curve skating this tick (grounded within skateSnap of the skateCurve surface); slope is the local dy/dx — boards layer fx and equation readouts",
977
+ "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",
927
978
  "id": "evt_01M0H2SJBB3Y7Z6D7EX8VQ750V",
928
979
  "key": "BODY_SKATE_START",
929
980
  "name": "Body Skate Start",
@@ -1142,7 +1193,26 @@
1142
1193
  "vx": [
1143
1194
  "*",
1144
1195
  "@payload.dir",
1145
- "@config.moveSpeed"
1196
+ [
1197
+ "if",
1198
+ [
1199
+ "==",
1200
+ [
1201
+ "object/get",
1202
+ "@entity.tuning",
1203
+ "moveSpeed",
1204
+ null
1205
+ ],
1206
+ null
1207
+ ],
1208
+ "@config.moveSpeed",
1209
+ [
1210
+ "object/get",
1211
+ "@entity.tuning",
1212
+ "moveSpeed",
1213
+ null
1214
+ ]
1215
+ ]
1146
1216
  ]
1147
1217
  }
1148
1218
  ]
@@ -1168,15 +1238,72 @@
1168
1238
  "if",
1169
1239
  [
1170
1240
  ">",
1171
- "@config.gravity",
1241
+ [
1242
+ "if",
1243
+ [
1244
+ "==",
1245
+ [
1246
+ "object/get",
1247
+ "@entity.tuning",
1248
+ "gravity",
1249
+ null
1250
+ ],
1251
+ null
1252
+ ],
1253
+ "@config.gravity",
1254
+ [
1255
+ "object/get",
1256
+ "@entity.tuning",
1257
+ "gravity",
1258
+ null
1259
+ ]
1260
+ ],
1172
1261
  0.0
1173
1262
  ],
1174
1263
  [
1175
1264
  "-",
1176
1265
  0.0,
1177
- "@config.jumpStrength"
1266
+ [
1267
+ "if",
1268
+ [
1269
+ "==",
1270
+ [
1271
+ "object/get",
1272
+ "@entity.tuning",
1273
+ "jumpStrength",
1274
+ null
1275
+ ],
1276
+ null
1277
+ ],
1278
+ "@config.jumpStrength",
1279
+ [
1280
+ "object/get",
1281
+ "@entity.tuning",
1282
+ "jumpStrength",
1283
+ null
1284
+ ]
1285
+ ]
1178
1286
  ],
1179
- "@config.jumpStrength"
1287
+ [
1288
+ "if",
1289
+ [
1290
+ "==",
1291
+ [
1292
+ "object/get",
1293
+ "@entity.tuning",
1294
+ "jumpStrength",
1295
+ null
1296
+ ],
1297
+ null
1298
+ ],
1299
+ "@config.jumpStrength",
1300
+ [
1301
+ "object/get",
1302
+ "@entity.tuning",
1303
+ "jumpStrength",
1304
+ null
1305
+ ]
1306
+ ]
1180
1307
  ]
1181
1308
  }
1182
1309
  ]
@@ -1266,6 +1393,74 @@
1266
1393
  "guard": "@config.curveModsEnabled",
1267
1394
  "to": "active"
1268
1395
  },
1396
+ {
1397
+ "effects": [
1398
+ [
1399
+ "set",
1400
+ "@entity.tuning",
1401
+ [
1402
+ "object/merge",
1403
+ "@entity.tuning",
1404
+ [
1405
+ "if",
1406
+ [
1407
+ "==",
1408
+ "@payload.jumpStrength",
1409
+ null
1410
+ ],
1411
+ {},
1412
+ {
1413
+ "jumpStrength": "@payload.jumpStrength"
1414
+ }
1415
+ ]
1416
+ ]
1417
+ ],
1418
+ [
1419
+ "set",
1420
+ "@entity.tuning",
1421
+ [
1422
+ "object/merge",
1423
+ "@entity.tuning",
1424
+ [
1425
+ "if",
1426
+ [
1427
+ "==",
1428
+ "@payload.moveSpeed",
1429
+ null
1430
+ ],
1431
+ {},
1432
+ {
1433
+ "moveSpeed": "@payload.moveSpeed"
1434
+ }
1435
+ ]
1436
+ ]
1437
+ ],
1438
+ [
1439
+ "set",
1440
+ "@entity.tuning",
1441
+ [
1442
+ "object/merge",
1443
+ "@entity.tuning",
1444
+ [
1445
+ "if",
1446
+ [
1447
+ "==",
1448
+ "@payload.gravity",
1449
+ null
1450
+ ],
1451
+ {},
1452
+ {
1453
+ "gravity": "@payload.gravity"
1454
+ }
1455
+ ]
1456
+ ]
1457
+ ]
1458
+ ],
1459
+ "event": "SET_TUNING",
1460
+ "eventId": "evt_01M1GJ1RVFG67Q9AE87QG7RWTJ",
1461
+ "from": "active",
1462
+ "to": "active"
1463
+ },
1269
1464
  {
1270
1465
  "effects": [
1271
1466
  [
@@ -1297,6 +1492,11 @@
1297
1492
  "set",
1298
1493
  "@entity.skating",
1299
1494
  false
1495
+ ],
1496
+ [
1497
+ "set",
1498
+ "@entity.tuning",
1499
+ {}
1300
1500
  ]
1301
1501
  ],
1302
1502
  "event": "RESTART",
@@ -1313,16 +1513,26 @@
1313
1513
  "let",
1314
1514
  [
1315
1515
  [
1316
- "gdir",
1516
+ "eg",
1317
1517
  [
1318
1518
  "if",
1319
1519
  [
1320
- ">",
1321
- "@config.gravity",
1322
- 0.0
1520
+ "==",
1521
+ [
1522
+ "object/get",
1523
+ "@entity.tuning",
1524
+ "gravity",
1525
+ null
1526
+ ],
1527
+ null
1323
1528
  ],
1324
- 1.0,
1325
- -1.0
1529
+ "@config.gravity",
1530
+ [
1531
+ "object/get",
1532
+ "@entity.tuning",
1533
+ "gravity",
1534
+ null
1535
+ ]
1326
1536
  ]
1327
1537
  ]
1328
1538
  ],
@@ -1330,97 +1540,115 @@
1330
1540
  "let",
1331
1541
  [
1332
1542
  [
1333
- "bcx",
1543
+ "gdir",
1334
1544
  [
1335
- "+",
1545
+ "if",
1336
1546
  [
1337
- "object/get",
1338
- "@entity.body",
1339
- "x"
1547
+ ">",
1548
+ "@eg",
1549
+ 0.0
1340
1550
  ],
1551
+ 1.0,
1552
+ -1.0
1553
+ ]
1554
+ ]
1555
+ ],
1556
+ [
1557
+ "let",
1558
+ [
1559
+ [
1560
+ "bcx",
1341
1561
  [
1342
- "/",
1562
+ "+",
1343
1563
  [
1344
1564
  "object/get",
1345
1565
  "@entity.body",
1346
- "width"
1566
+ "x"
1347
1567
  ],
1348
- 2.0
1568
+ [
1569
+ "/",
1570
+ [
1571
+ "object/get",
1572
+ "@entity.body",
1573
+ "width"
1574
+ ],
1575
+ 2.0
1576
+ ]
1349
1577
  ]
1350
- ]
1351
- ],
1352
- [
1353
- "bcy",
1578
+ ],
1354
1579
  [
1355
- "+",
1356
- [
1357
- "object/get",
1358
- "@entity.body",
1359
- "y"
1360
- ],
1580
+ "bcy",
1361
1581
  [
1362
- "/",
1582
+ "+",
1363
1583
  [
1364
1584
  "object/get",
1365
1585
  "@entity.body",
1366
- "height"
1586
+ "y"
1367
1587
  ],
1368
- 2.0
1588
+ [
1589
+ "/",
1590
+ [
1591
+ "object/get",
1592
+ "@entity.body",
1593
+ "height"
1594
+ ],
1595
+ 2.0
1596
+ ]
1369
1597
  ]
1370
1598
  ]
1371
- ]
1372
- ],
1373
- [
1374
- "let",
1599
+ ],
1375
1600
  [
1601
+ "let",
1376
1602
  [
1377
- "drift",
1378
1603
  [
1379
- "array/find",
1380
- "@config.driftRegions",
1604
+ "drift",
1381
1605
  [
1382
- "fn",
1383
- "r",
1606
+ "array/find",
1607
+ "@config.driftRegions",
1384
1608
  [
1385
- "and",
1386
- [
1387
- ">=",
1388
- "@bcx",
1389
- [
1390
- "object/get",
1391
- "@r",
1392
- "x0"
1393
- ]
1394
- ],
1609
+ "fn",
1610
+ "r",
1395
1611
  [
1396
1612
  "and",
1397
1613
  [
1398
- "<=",
1614
+ ">=",
1399
1615
  "@bcx",
1400
1616
  [
1401
1617
  "object/get",
1402
1618
  "@r",
1403
- "x1"
1619
+ "x0"
1404
1620
  ]
1405
1621
  ],
1406
1622
  [
1407
1623
  "and",
1408
1624
  [
1409
- ">=",
1410
- "@bcy",
1625
+ "<=",
1626
+ "@bcx",
1411
1627
  [
1412
1628
  "object/get",
1413
1629
  "@r",
1414
- "y0"
1630
+ "x1"
1415
1631
  ]
1416
1632
  ],
1417
1633
  [
1418
- "<=",
1419
- "@bcy",
1634
+ "and",
1420
1635
  [
1421
- "object/get",
1422
- "@r",
1423
- "y1"
1636
+ ">=",
1637
+ "@bcy",
1638
+ [
1639
+ "object/get",
1640
+ "@r",
1641
+ "y0"
1642
+ ]
1643
+ ],
1644
+ [
1645
+ "<=",
1646
+ "@bcy",
1647
+ [
1648
+ "object/get",
1649
+ "@r",
1650
+ "y1"
1651
+ ]
1424
1652
  ]
1425
1653
  ]
1426
1654
  ]
@@ -1428,72 +1656,42 @@
1428
1656
  ]
1429
1657
  ]
1430
1658
  ]
1431
- ]
1432
- ],
1433
- [
1434
- "let",
1435
- [
1436
- [
1437
- "dax",
1438
- [
1439
- "if",
1440
- [
1441
- "==",
1442
- "@drift",
1443
- null
1444
- ],
1445
- 0.0,
1446
- [
1447
- "object/get",
1448
- "@drift",
1449
- "ax"
1450
- ]
1451
- ]
1452
- ],
1453
- [
1454
- "day",
1455
- [
1456
- "if",
1457
- [
1458
- "==",
1459
- "@drift",
1460
- null
1461
- ],
1462
- 0.0,
1463
- [
1464
- "object/get",
1465
- "@drift",
1466
- "ay"
1467
- ]
1468
- ]
1469
- ]
1470
1659
  ],
1471
1660
  [
1472
1661
  "let",
1473
1662
  [
1474
1663
  [
1475
- "vy1",
1664
+ "dax",
1476
1665
  [
1477
- "math/clamp",
1666
+ "if",
1478
1667
  [
1479
- "+",
1480
- "@entity.body.vy",
1481
- [
1482
- "*",
1483
- [
1484
- "+",
1485
- "@config.gravity",
1486
- "@day"
1487
- ],
1488
- 0.033
1489
- ]
1668
+ "==",
1669
+ "@drift",
1670
+ null
1490
1671
  ],
1672
+ 0.0,
1491
1673
  [
1492
- "-",
1493
- 0.0,
1494
- "@config.maxFallSpeed"
1674
+ "object/get",
1675
+ "@drift",
1676
+ "ax"
1677
+ ]
1678
+ ]
1679
+ ],
1680
+ [
1681
+ "day",
1682
+ [
1683
+ "if",
1684
+ [
1685
+ "==",
1686
+ "@drift",
1687
+ null
1495
1688
  ],
1496
- "@config.maxFallSpeed"
1689
+ 0.0,
1690
+ [
1691
+ "object/get",
1692
+ "@drift",
1693
+ "ay"
1694
+ ]
1497
1695
  ]
1498
1696
  ]
1499
1697
  ],
@@ -1501,19 +1699,28 @@
1501
1699
  "let",
1502
1700
  [
1503
1701
  [
1504
- "bw",
1505
- [
1506
- "object/get",
1507
- "@entity.body",
1508
- "width"
1509
- ]
1510
- ],
1511
- [
1512
- "bh",
1702
+ "vy1",
1513
1703
  [
1514
- "object/get",
1515
- "@entity.body",
1516
- "height"
1704
+ "math/clamp",
1705
+ [
1706
+ "+",
1707
+ "@entity.body.vy",
1708
+ [
1709
+ "*",
1710
+ [
1711
+ "+",
1712
+ "@eg",
1713
+ "@day"
1714
+ ],
1715
+ 0.033
1716
+ ]
1717
+ ],
1718
+ [
1719
+ "-",
1720
+ 0.0,
1721
+ "@config.maxFallSpeed"
1722
+ ],
1723
+ "@config.maxFallSpeed"
1517
1724
  ]
1518
1725
  ]
1519
1726
  ],
@@ -1521,20 +1728,19 @@
1521
1728
  "let",
1522
1729
  [
1523
1730
  [
1524
- "nx",
1731
+ "bw",
1525
1732
  [
1526
- "math/clamp",
1527
- [
1528
- "+",
1529
- "@entity.body.x",
1530
- [
1531
- "*",
1532
- "@entity.body.vx",
1533
- 0.033
1534
- ]
1535
- ],
1536
- "@config.xMin",
1537
- "@config.xMax"
1733
+ "object/get",
1734
+ "@entity.body",
1735
+ "width"
1736
+ ]
1737
+ ],
1738
+ [
1739
+ "bh",
1740
+ [
1741
+ "object/get",
1742
+ "@entity.body",
1743
+ "height"
1538
1744
  ]
1539
1745
  ]
1540
1746
  ],
@@ -1542,15 +1748,20 @@
1542
1748
  "let",
1543
1749
  [
1544
1750
  [
1545
- "ny",
1751
+ "nx",
1546
1752
  [
1547
- "+",
1548
- "@entity.body.y",
1753
+ "math/clamp",
1549
1754
  [
1550
- "*",
1551
- "@vy1",
1552
- 0.033
1553
- ]
1755
+ "+",
1756
+ "@entity.body.x",
1757
+ [
1758
+ "*",
1759
+ "@entity.body.vx",
1760
+ 0.033
1761
+ ]
1762
+ ],
1763
+ "@config.xMin",
1764
+ "@config.xMax"
1554
1765
  ]
1555
1766
  ]
1556
1767
  ],
@@ -1558,152 +1769,152 @@
1558
1769
  "let",
1559
1770
  [
1560
1771
  [
1561
- "rect",
1562
- {
1563
- "h": "@bh",
1564
- "w": "@bw",
1565
- "x": "@nx",
1566
- "y": "@ny"
1567
- }
1772
+ "ny",
1773
+ [
1774
+ "+",
1775
+ "@entity.body.y",
1776
+ [
1777
+ "*",
1778
+ "@vy1",
1779
+ 0.033
1780
+ ]
1781
+ ]
1568
1782
  ]
1569
1783
  ],
1570
1784
  [
1571
1785
  "let",
1572
1786
  [
1573
1787
  [
1574
- "hit",
1575
- [
1576
- "array/find",
1577
- "@config.platforms",
1788
+ "rect",
1789
+ {
1790
+ "h": "@bh",
1791
+ "w": "@bw",
1792
+ "x": "@nx",
1793
+ "y": "@ny"
1794
+ }
1795
+ ]
1796
+ ],
1797
+ [
1798
+ "let",
1799
+ [
1800
+ [
1801
+ "hit",
1578
1802
  [
1579
- "fn",
1580
- "p",
1803
+ "array/find",
1804
+ "@config.platforms",
1581
1805
  [
1582
- "and",
1806
+ "fn",
1807
+ "p",
1583
1808
  [
1584
- "or",
1809
+ "and",
1585
1810
  [
1586
- "==",
1811
+ "or",
1587
1812
  [
1588
- "object/get",
1589
- "@p",
1590
- "type"
1813
+ "==",
1814
+ [
1815
+ "object/get",
1816
+ "@p",
1817
+ "type"
1818
+ ],
1819
+ "ground"
1591
1820
  ],
1592
- "ground"
1821
+ [
1822
+ "==",
1823
+ [
1824
+ "object/get",
1825
+ "@p",
1826
+ "type"
1827
+ ],
1828
+ "platform"
1829
+ ]
1593
1830
  ],
1594
1831
  [
1595
- "==",
1596
- [
1597
- "object/get",
1598
- "@p",
1599
- "type"
1600
- ],
1601
- "platform"
1832
+ "geo/aabb-overlap",
1833
+ "@rect",
1834
+ {
1835
+ "h": "@p.height",
1836
+ "w": "@p.width",
1837
+ "x": "@p.x",
1838
+ "y": "@p.y"
1839
+ }
1602
1840
  ]
1603
- ],
1604
- [
1605
- "geo/aabb-overlap",
1606
- "@rect",
1607
- {
1608
- "h": "@p.height",
1609
- "w": "@p.width",
1610
- "x": "@p.x",
1611
- "y": "@p.y"
1612
- }
1613
1841
  ]
1614
1842
  ]
1615
1843
  ]
1616
1844
  ]
1617
- ]
1618
- ],
1619
- [
1620
- "let",
1845
+ ],
1621
1846
  [
1847
+ "let",
1622
1848
  [
1623
- "landed",
1624
1849
  [
1625
- "and",
1626
- [
1627
- "!=",
1628
- "@hit",
1629
- null
1630
- ],
1850
+ "landed",
1631
1851
  [
1632
- ">",
1852
+ "and",
1633
1853
  [
1634
- "*",
1635
- "@vy1",
1636
- "@gdir"
1854
+ "!=",
1855
+ "@hit",
1856
+ null
1637
1857
  ],
1638
- 0.0
1858
+ [
1859
+ ">",
1860
+ [
1861
+ "*",
1862
+ "@vy1",
1863
+ "@gdir"
1864
+ ],
1865
+ 0.0
1866
+ ]
1639
1867
  ]
1640
1868
  ]
1641
- ]
1642
- ],
1643
- [
1644
- "let",
1869
+ ],
1645
1870
  [
1871
+ "let",
1646
1872
  [
1647
- "ny2",
1648
1873
  [
1649
- "if",
1650
- "@landed",
1874
+ "ny2",
1651
1875
  [
1652
1876
  "if",
1877
+ "@landed",
1653
1878
  [
1654
- ">",
1655
- "@gdir",
1656
- 0.0
1657
- ],
1658
- [
1659
- "-",
1879
+ "if",
1660
1880
  [
1661
- "object/get",
1662
- "@hit",
1663
- "y"
1881
+ ">",
1882
+ "@gdir",
1883
+ 0.0
1664
1884
  ],
1665
- "@bh"
1666
- ],
1667
- [
1668
- "+",
1669
1885
  [
1670
- "object/get",
1671
- "@hit",
1672
- "y"
1886
+ "-",
1887
+ [
1888
+ "object/get",
1889
+ "@hit",
1890
+ "y"
1891
+ ],
1892
+ "@bh"
1673
1893
  ],
1674
1894
  [
1675
- "object/get",
1676
- "@hit",
1677
- "height"
1895
+ "+",
1896
+ [
1897
+ "object/get",
1898
+ "@hit",
1899
+ "y"
1900
+ ],
1901
+ [
1902
+ "object/get",
1903
+ "@hit",
1904
+ "height"
1905
+ ]
1678
1906
  ]
1679
- ]
1680
- ],
1681
- "@ny"
1682
- ]
1683
- ],
1684
- [
1685
- "vy2",
1686
- [
1687
- "if",
1688
- "@landed",
1689
- 0.0,
1690
- "@vy1"
1691
- ]
1692
- ]
1693
- ],
1694
- [
1695
- "let",
1696
- [
1907
+ ],
1908
+ "@ny"
1909
+ ]
1910
+ ],
1697
1911
  [
1698
- "cx",
1912
+ "vy2",
1699
1913
  [
1700
- "+",
1701
- "@nx",
1702
- [
1703
- "/",
1704
- "@bw",
1705
- 2.0
1706
- ]
1914
+ "if",
1915
+ "@landed",
1916
+ 0.0,
1917
+ "@vy1"
1707
1918
  ]
1708
1919
  ]
1709
1920
  ],
@@ -1711,47 +1922,14 @@
1711
1922
  "let",
1712
1923
  [
1713
1924
  [
1714
- "inRange",
1925
+ "cx",
1715
1926
  [
1716
- "and",
1717
- "@config.skate",
1927
+ "+",
1928
+ "@nx",
1718
1929
  [
1719
- "and",
1720
- [
1721
- ">",
1722
- [
1723
- "array/len",
1724
- "@config.skateCurve"
1725
- ],
1726
- 1.0
1727
- ],
1728
- [
1729
- "and",
1730
- [
1731
- ">=",
1732
- "@cx",
1733
- [
1734
- "object/get",
1735
- [
1736
- "array/first",
1737
- "@config.skateCurve"
1738
- ],
1739
- "x"
1740
- ]
1741
- ],
1742
- [
1743
- "<",
1744
- "@cx",
1745
- [
1746
- "object/get",
1747
- [
1748
- "array/last",
1749
- "@config.skateCurve"
1750
- ],
1751
- "x"
1752
- ]
1753
- ]
1754
- ]
1930
+ "/",
1931
+ "@bw",
1932
+ 2.0
1755
1933
  ]
1756
1934
  ]
1757
1935
  ]
@@ -1760,34 +1938,48 @@
1760
1938
  "let",
1761
1939
  [
1762
1940
  [
1763
- "leftSamp",
1941
+ "inRange",
1764
1942
  [
1765
- "if",
1766
- "@inRange",
1943
+ "and",
1944
+ "@config.skate",
1767
1945
  [
1768
- "array/last",
1946
+ "and",
1769
1947
  [
1770
- "array/filter",
1771
- "@config.skateCurve",
1948
+ ">",
1949
+ [
1950
+ "array/len",
1951
+ "@config.skateCurve"
1952
+ ],
1953
+ 1.0
1954
+ ],
1955
+ [
1956
+ "and",
1957
+ [
1958
+ ">=",
1959
+ "@cx",
1960
+ [
1961
+ "object/get",
1962
+ [
1963
+ "array/first",
1964
+ "@config.skateCurve"
1965
+ ],
1966
+ "x"
1967
+ ]
1968
+ ],
1772
1969
  [
1773
- "fn",
1774
- "s",
1970
+ "<",
1971
+ "@cx",
1775
1972
  [
1776
- "<=",
1973
+ "object/get",
1777
1974
  [
1778
- "object/get",
1779
- "@s",
1780
- "x"
1975
+ "array/last",
1976
+ "@config.skateCurve"
1781
1977
  ],
1782
- "@cx"
1978
+ "x"
1783
1979
  ]
1784
1980
  ]
1785
1981
  ]
1786
- ],
1787
- {
1788
- "x": 0.0,
1789
- "y": 0.0
1790
- }
1982
+ ]
1791
1983
  ]
1792
1984
  ]
1793
1985
  ],
@@ -1795,12 +1987,12 @@
1795
1987
  "let",
1796
1988
  [
1797
1989
  [
1798
- "rightSamp",
1990
+ "leftSamp",
1799
1991
  [
1800
1992
  "if",
1801
1993
  "@inRange",
1802
1994
  [
1803
- "array/first",
1995
+ "array/last",
1804
1996
  [
1805
1997
  "array/filter",
1806
1998
  "@config.skateCurve",
@@ -1808,7 +2000,7 @@
1808
2000
  "fn",
1809
2001
  "s",
1810
2002
  [
1811
- ">",
2003
+ "<=",
1812
2004
  [
1813
2005
  "object/get",
1814
2006
  "@s",
@@ -1820,7 +2012,7 @@
1820
2012
  ]
1821
2013
  ],
1822
2014
  {
1823
- "x": 1.0,
2015
+ "x": 0.0,
1824
2016
  "y": 0.0
1825
2017
  }
1826
2018
  ]
@@ -1830,40 +2022,34 @@
1830
2022
  "let",
1831
2023
  [
1832
2024
  [
1833
- "slope",
2025
+ "rightSamp",
1834
2026
  [
1835
2027
  "if",
1836
2028
  "@inRange",
1837
2029
  [
1838
- "/",
1839
- [
1840
- "-",
1841
- [
1842
- "object/get",
1843
- "@rightSamp",
1844
- "y"
1845
- ],
1846
- [
1847
- "object/get",
1848
- "@leftSamp",
1849
- "y"
1850
- ]
1851
- ],
2030
+ "array/first",
1852
2031
  [
1853
- "-",
1854
- [
1855
- "object/get",
1856
- "@rightSamp",
1857
- "x"
1858
- ],
2032
+ "array/filter",
2033
+ "@config.skateCurve",
1859
2034
  [
1860
- "object/get",
1861
- "@leftSamp",
1862
- "x"
2035
+ "fn",
2036
+ "s",
2037
+ [
2038
+ ">",
2039
+ [
2040
+ "object/get",
2041
+ "@s",
2042
+ "x"
2043
+ ],
2044
+ "@cx"
2045
+ ]
1863
2046
  ]
1864
2047
  ]
1865
2048
  ],
1866
- 0.0
2049
+ {
2050
+ "x": 1.0,
2051
+ "y": 0.0
2052
+ }
1867
2053
  ]
1868
2054
  ]
1869
2055
  ],
@@ -1871,28 +2057,36 @@
1871
2057
  "let",
1872
2058
  [
1873
2059
  [
1874
- "curveY",
2060
+ "slope",
1875
2061
  [
1876
2062
  "if",
1877
2063
  "@inRange",
1878
2064
  [
1879
- "+",
2065
+ "/",
1880
2066
  [
1881
- "object/get",
1882
- "@leftSamp",
1883
- "y"
2067
+ "-",
2068
+ [
2069
+ "object/get",
2070
+ "@rightSamp",
2071
+ "y"
2072
+ ],
2073
+ [
2074
+ "object/get",
2075
+ "@leftSamp",
2076
+ "y"
2077
+ ]
1884
2078
  ],
1885
2079
  [
1886
- "*",
1887
- "@slope",
2080
+ "-",
1888
2081
  [
1889
- "-",
1890
- "@cx",
1891
- [
1892
- "object/get",
1893
- "@leftSamp",
1894
- "x"
1895
- ]
2082
+ "object/get",
2083
+ "@rightSamp",
2084
+ "x"
2085
+ ],
2086
+ [
2087
+ "object/get",
2088
+ "@leftSamp",
2089
+ "x"
1896
2090
  ]
1897
2091
  ]
1898
2092
  ],
@@ -1904,31 +2098,32 @@
1904
2098
  "let",
1905
2099
  [
1906
2100
  [
1907
- "gapBreak",
2101
+ "curveY",
1908
2102
  [
1909
- "and",
1910
- [
1911
- ">",
1912
- "@config.skateMaxGap",
1913
- 0.0
1914
- ],
2103
+ "if",
2104
+ "@inRange",
1915
2105
  [
1916
- ">",
2106
+ "+",
1917
2107
  [
1918
- "-",
1919
- [
1920
- "object/get",
1921
- "@rightSamp",
1922
- "x"
1923
- ],
2108
+ "object/get",
2109
+ "@leftSamp",
2110
+ "y"
2111
+ ],
2112
+ [
2113
+ "*",
2114
+ "@slope",
1924
2115
  [
1925
- "object/get",
1926
- "@leftSamp",
1927
- "x"
2116
+ "-",
2117
+ "@cx",
2118
+ [
2119
+ "object/get",
2120
+ "@leftSamp",
2121
+ "x"
2122
+ ]
1928
2123
  ]
1929
- ],
1930
- "@config.skateMaxGap"
1931
- ]
2124
+ ]
2125
+ ],
2126
+ 0.0
1932
2127
  ]
1933
2128
  ]
1934
2129
  ],
@@ -1936,44 +2131,31 @@
1936
2131
  "let",
1937
2132
  [
1938
2133
  [
1939
- "curveMod",
2134
+ "gapBreak",
1940
2135
  [
1941
- "if",
2136
+ "and",
1942
2137
  [
1943
- "and",
1944
- "@config.curveModsEnabled",
1945
- "@inRange"
2138
+ ">",
2139
+ "@config.skateMaxGap",
2140
+ 0.0
1946
2141
  ],
1947
2142
  [
1948
- "array/find",
1949
- "@entity.curveMods",
2143
+ ">",
1950
2144
  [
1951
- "fn",
1952
- "m",
2145
+ "-",
1953
2146
  [
1954
- "and",
1955
- [
1956
- ">=",
1957
- "@cx",
1958
- [
1959
- "object/get",
1960
- "@m",
1961
- "x0"
1962
- ]
1963
- ],
1964
- [
1965
- "<=",
1966
- "@cx",
1967
- [
1968
- "object/get",
1969
- "@m",
1970
- "x1"
1971
- ]
1972
- ]
2147
+ "object/get",
2148
+ "@rightSamp",
2149
+ "x"
2150
+ ],
2151
+ [
2152
+ "object/get",
2153
+ "@leftSamp",
2154
+ "x"
1973
2155
  ]
1974
- ]
1975
- ],
1976
- null
2156
+ ],
2157
+ "@config.skateMaxGap"
2158
+ ]
1977
2159
  ]
1978
2160
  ]
1979
2161
  ],
@@ -1981,171 +2163,386 @@
1981
2163
  "let",
1982
2164
  [
1983
2165
  [
1984
- "modX",
2166
+ "mods",
1985
2167
  [
1986
2168
  "if",
1987
2169
  [
1988
- "==",
1989
- "@curveMod",
1990
- null
2170
+ "and",
2171
+ "@config.curveModsEnabled",
2172
+ "@inRange"
1991
2173
  ],
1992
- "@cx",
1993
- [
1994
- "-",
1995
- "@cx",
1996
- [
1997
- "object/get",
1998
- "@curveMod",
1999
- "h"
2000
- ]
2001
- ]
2002
- ]
2003
- ]
2004
- ],
2005
- [
2006
- "let",
2007
- [
2008
- [
2009
- "modInRange",
2010
2174
  [
2011
- "and",
2012
- [
2013
- "!=",
2014
- "@curveMod",
2015
- null
2016
- ],
2175
+ "array/filter",
2176
+ "@entity.curveMods",
2017
2177
  [
2018
- "and",
2178
+ "fn",
2179
+ "m",
2019
2180
  [
2020
- ">=",
2021
- "@modX",
2181
+ "and",
2022
2182
  [
2023
- "object/get",
2183
+ ">=",
2184
+ "@cx",
2024
2185
  [
2025
- "array/first",
2026
- "@config.skateCurve"
2027
- ],
2028
- "x"
2029
- ]
2030
- ],
2031
- [
2032
- "<",
2033
- "@modX",
2186
+ "object/get",
2187
+ "@m",
2188
+ "x0"
2189
+ ]
2190
+ ],
2034
2191
  [
2035
- "object/get",
2192
+ "<=",
2193
+ "@cx",
2036
2194
  [
2037
- "array/last",
2038
- "@config.skateCurve"
2039
- ],
2040
- "x"
2195
+ "object/get",
2196
+ "@m",
2197
+ "x1"
2198
+ ]
2041
2199
  ]
2042
2200
  ]
2043
2201
  ]
2044
- ]
2202
+ ],
2203
+ []
2045
2204
  ]
2046
- ],
2205
+ ]
2206
+ ],
2207
+ [
2208
+ "let",
2047
2209
  [
2048
- "let",
2049
2210
  [
2211
+ "modded",
2050
2212
  [
2051
- "modLeft",
2213
+ "array/reduce",
2214
+ "@mods",
2215
+ {
2216
+ "s": "@slope",
2217
+ "y": "@curveY"
2218
+ },
2052
2219
  [
2053
- "if",
2054
- "@modInRange",
2220
+ "fn",
2221
+ [
2222
+ "acc",
2223
+ "m"
2224
+ ],
2055
2225
  [
2056
- "array/last",
2226
+ "let",
2057
2227
  [
2058
- "array/filter",
2059
- "@config.skateCurve",
2060
2228
  [
2061
- "fn",
2062
- "s",
2229
+ "modX",
2063
2230
  [
2064
- "<=",
2231
+ "-",
2232
+ "@cx",
2065
2233
  [
2066
2234
  "object/get",
2067
- "@s",
2068
- "x"
2069
- ],
2070
- "@modX"
2235
+ "@m",
2236
+ "h"
2237
+ ]
2071
2238
  ]
2072
2239
  ]
2073
- ]
2074
- ],
2075
- "@leftSamp"
2076
- ]
2077
- ]
2078
- ],
2079
- [
2080
- "let",
2081
- [
2082
- [
2083
- "modRight",
2084
- [
2085
- "if",
2086
- "@modInRange",
2240
+ ],
2087
2241
  [
2088
- "array/first",
2242
+ "let",
2089
2243
  [
2090
- "array/filter",
2091
- "@config.skateCurve",
2092
2244
  [
2093
- "fn",
2094
- "s",
2245
+ "modInRange",
2095
2246
  [
2096
- ">",
2247
+ "and",
2097
2248
  [
2098
- "object/get",
2099
- "@s",
2100
- "x"
2249
+ ">=",
2250
+ "@modX",
2251
+ [
2252
+ "object/get",
2253
+ [
2254
+ "array/first",
2255
+ "@config.skateCurve"
2256
+ ],
2257
+ "x"
2258
+ ]
2101
2259
  ],
2102
- "@modX"
2260
+ [
2261
+ "<",
2262
+ "@modX",
2263
+ [
2264
+ "object/get",
2265
+ [
2266
+ "array/last",
2267
+ "@config.skateCurve"
2268
+ ],
2269
+ "x"
2270
+ ]
2271
+ ]
2103
2272
  ]
2104
2273
  ]
2105
- ]
2106
- ],
2107
- "@rightSamp"
2108
- ]
2109
- ]
2110
- ],
2111
- [
2112
- "let",
2113
- [
2114
- [
2115
- "modSlope",
2116
- [
2117
- "if",
2118
- "@modInRange",
2274
+ ],
2119
2275
  [
2120
- "/",
2276
+ "let",
2121
2277
  [
2122
- "-",
2123
- [
2124
- "object/get",
2125
- "@modRight",
2126
- "y"
2127
- ],
2128
2278
  [
2129
- "object/get",
2130
- "@modLeft",
2131
- "y"
2132
- ]
2133
- ],
2134
- [
2135
- "-",
2279
+ "modLeft",
2280
+ [
2281
+ "if",
2282
+ "@modInRange",
2283
+ [
2284
+ "array/last",
2285
+ [
2286
+ "array/filter",
2287
+ "@config.skateCurve",
2288
+ [
2289
+ "fn",
2290
+ "s",
2291
+ [
2292
+ "<=",
2293
+ [
2294
+ "object/get",
2295
+ "@s",
2296
+ "x"
2297
+ ],
2298
+ "@modX"
2299
+ ]
2300
+ ]
2301
+ ]
2302
+ ],
2303
+ null
2304
+ ]
2305
+ ]
2306
+ ],
2307
+ [
2308
+ "let",
2136
2309
  [
2137
- "object/get",
2138
- "@modRight",
2139
- "x"
2310
+ [
2311
+ "modRight",
2312
+ [
2313
+ "if",
2314
+ "@modInRange",
2315
+ [
2316
+ "array/first",
2317
+ [
2318
+ "array/filter",
2319
+ "@config.skateCurve",
2320
+ [
2321
+ "fn",
2322
+ "s",
2323
+ [
2324
+ ">",
2325
+ [
2326
+ "object/get",
2327
+ "@s",
2328
+ "x"
2329
+ ],
2330
+ "@modX"
2331
+ ]
2332
+ ]
2333
+ ]
2334
+ ],
2335
+ null
2336
+ ]
2337
+ ]
2140
2338
  ],
2141
2339
  [
2142
- "object/get",
2143
- "@modLeft",
2144
- "x"
2340
+ "let",
2341
+ [
2342
+ [
2343
+ "modOK",
2344
+ [
2345
+ "and",
2346
+ "@modInRange",
2347
+ [
2348
+ "and",
2349
+ [
2350
+ "!=",
2351
+ "@modLeft",
2352
+ null
2353
+ ],
2354
+ [
2355
+ "!=",
2356
+ "@modRight",
2357
+ null
2358
+ ]
2359
+ ]
2360
+ ]
2361
+ ]
2362
+ ],
2363
+ [
2364
+ "let",
2365
+ [
2366
+ [
2367
+ "modSlope",
2368
+ [
2369
+ "if",
2370
+ "@modOK",
2371
+ [
2372
+ "/",
2373
+ [
2374
+ "-",
2375
+ [
2376
+ "object/get",
2377
+ "@modRight",
2378
+ "y"
2379
+ ],
2380
+ [
2381
+ "object/get",
2382
+ "@modLeft",
2383
+ "y"
2384
+ ]
2385
+ ],
2386
+ [
2387
+ "-",
2388
+ [
2389
+ "object/get",
2390
+ "@modRight",
2391
+ "x"
2392
+ ],
2393
+ [
2394
+ "object/get",
2395
+ "@modLeft",
2396
+ "x"
2397
+ ]
2398
+ ]
2399
+ ],
2400
+ 0.0
2401
+ ]
2402
+ ]
2403
+ ],
2404
+ [
2405
+ "let",
2406
+ [
2407
+ [
2408
+ "modCurveY",
2409
+ [
2410
+ "if",
2411
+ "@modOK",
2412
+ [
2413
+ "+",
2414
+ [
2415
+ "object/get",
2416
+ "@modLeft",
2417
+ "y"
2418
+ ],
2419
+ [
2420
+ "*",
2421
+ "@modSlope",
2422
+ [
2423
+ "-",
2424
+ "@modX",
2425
+ [
2426
+ "object/get",
2427
+ "@modLeft",
2428
+ "x"
2429
+ ]
2430
+ ]
2431
+ ]
2432
+ ],
2433
+ 0.0
2434
+ ]
2435
+ ]
2436
+ ],
2437
+ [
2438
+ "if",
2439
+ "@modOK",
2440
+ {
2441
+ "s": [
2442
+ "+",
2443
+ [
2444
+ "object/get",
2445
+ "@acc",
2446
+ "s"
2447
+ ],
2448
+ [
2449
+ "-",
2450
+ [
2451
+ "*",
2452
+ [
2453
+ "object/get",
2454
+ "@m",
2455
+ "a"
2456
+ ],
2457
+ "@modSlope"
2458
+ ],
2459
+ "@slope"
2460
+ ]
2461
+ ],
2462
+ "y": [
2463
+ "+",
2464
+ [
2465
+ "object/get",
2466
+ "@acc",
2467
+ "y"
2468
+ ],
2469
+ [
2470
+ "-",
2471
+ [
2472
+ "+",
2473
+ [
2474
+ "*",
2475
+ [
2476
+ "object/get",
2477
+ "@m",
2478
+ "a"
2479
+ ],
2480
+ "@modCurveY"
2481
+ ],
2482
+ [
2483
+ "object/get",
2484
+ "@m",
2485
+ "k"
2486
+ ]
2487
+ ],
2488
+ "@curveY"
2489
+ ]
2490
+ ]
2491
+ },
2492
+ "@acc"
2493
+ ]
2494
+ ]
2495
+ ]
2145
2496
  ]
2146
2497
  ]
2498
+ ]
2499
+ ]
2500
+ ]
2501
+ ]
2502
+ ]
2503
+ ]
2504
+ ],
2505
+ [
2506
+ "let",
2507
+ [
2508
+ [
2509
+ "slope",
2510
+ [
2511
+ "object/get",
2512
+ "@modded",
2513
+ "s"
2514
+ ]
2515
+ ]
2516
+ ],
2517
+ [
2518
+ "let",
2519
+ [
2520
+ [
2521
+ "curveY",
2522
+ [
2523
+ "object/get",
2524
+ "@modded",
2525
+ "y"
2526
+ ]
2527
+ ]
2528
+ ],
2529
+ [
2530
+ "let",
2531
+ [
2532
+ [
2533
+ "aboveCurve",
2534
+ [
2535
+ "<",
2536
+ [
2537
+ "*",
2538
+ [
2539
+ "-",
2540
+ "@ny2",
2541
+ "@curveY"
2542
+ ],
2543
+ "@gdir"
2147
2544
  ],
2148
- "@slope"
2545
+ 0.0
2149
2546
  ]
2150
2547
  ]
2151
2548
  ],
@@ -2153,32 +2550,15 @@
2153
2550
  "let",
2154
2551
  [
2155
2552
  [
2156
- "modCurveY",
2553
+ "movingUp",
2157
2554
  [
2158
- "if",
2159
- "@modInRange",
2555
+ "<",
2160
2556
  [
2161
- "+",
2162
- [
2163
- "object/get",
2164
- "@modLeft",
2165
- "y"
2166
- ],
2167
- [
2168
- "*",
2169
- "@modSlope",
2170
- [
2171
- "-",
2172
- "@modX",
2173
- [
2174
- "object/get",
2175
- "@modLeft",
2176
- "x"
2177
- ]
2178
- ]
2179
- ]
2557
+ "*",
2558
+ "@vy1",
2559
+ "@gdir"
2180
2560
  ],
2181
- "@curveY"
2561
+ -0.01
2182
2562
  ]
2183
2563
  ]
2184
2564
  ],
@@ -2186,23 +2566,58 @@
2186
2566
  "let",
2187
2567
  [
2188
2568
  [
2189
- "slope",
2569
+ "skateNow",
2190
2570
  [
2191
- "if",
2192
- [
2193
- "==",
2194
- "@curveMod",
2195
- null
2196
- ],
2197
- "@slope",
2571
+ "and",
2572
+ "@inRange",
2198
2573
  [
2199
- "*",
2574
+ "and",
2200
2575
  [
2201
- "object/get",
2202
- "@curveMod",
2203
- "a"
2576
+ "not",
2577
+ "@gapBreak"
2204
2578
  ],
2205
- "@modSlope"
2579
+ [
2580
+ "and",
2581
+ [
2582
+ "<=",
2583
+ [
2584
+ "math/abs",
2585
+ [
2586
+ "-",
2587
+ "@ny2",
2588
+ "@curveY"
2589
+ ]
2590
+ ],
2591
+ "@config.skateSnap"
2592
+ ],
2593
+ [
2594
+ "and",
2595
+ [
2596
+ "or",
2597
+ "@landed",
2598
+ [
2599
+ "or",
2600
+ "@entity.skating",
2601
+ [
2602
+ "and",
2603
+ [
2604
+ "not",
2605
+ "@movingUp"
2606
+ ],
2607
+ "@aboveCurve"
2608
+ ]
2609
+ ]
2610
+ ],
2611
+ [
2612
+ "or",
2613
+ "@entity.body.grounded",
2614
+ [
2615
+ "not",
2616
+ "@movingUp"
2617
+ ]
2618
+ ]
2619
+ ]
2620
+ ]
2206
2621
  ]
2207
2622
  ]
2208
2623
  ]
@@ -2211,32 +2626,45 @@
2211
2626
  "let",
2212
2627
  [
2213
2628
  [
2214
- "curveY",
2629
+ "vx2",
2215
2630
  [
2216
2631
  "if",
2632
+ "@skateNow",
2217
2633
  [
2218
- "==",
2219
- "@curveMod",
2220
- null
2221
- ],
2222
- "@curveY",
2223
- [
2224
- "+",
2634
+ "math/clamp",
2225
2635
  [
2226
- "*",
2636
+ "+",
2637
+ "@entity.body.vx",
2227
2638
  [
2228
- "object/get",
2229
- "@curveMod",
2230
- "a"
2231
- ],
2232
- "@modCurveY"
2639
+ "*",
2640
+ [
2641
+ "/",
2642
+ [
2643
+ "*",
2644
+ "@eg",
2645
+ "@slope"
2646
+ ],
2647
+ [
2648
+ "+",
2649
+ 1.0,
2650
+ [
2651
+ "*",
2652
+ "@slope",
2653
+ "@slope"
2654
+ ]
2655
+ ]
2656
+ ],
2657
+ 0.033
2658
+ ]
2233
2659
  ],
2234
2660
  [
2235
- "object/get",
2236
- "@curveMod",
2237
- "k"
2238
- ]
2239
- ]
2661
+ "-",
2662
+ 0.0,
2663
+ "@config.maxFallSpeed"
2664
+ ],
2665
+ "@config.maxFallSpeed"
2666
+ ],
2667
+ "@entity.body.vx"
2240
2668
  ]
2241
2669
  ]
2242
2670
  ],
@@ -2244,15 +2672,33 @@
2244
2672
  "let",
2245
2673
  [
2246
2674
  [
2247
- "movingUp",
2675
+ "vx3",
2248
2676
  [
2249
- "<",
2677
+ "if",
2250
2678
  [
2251
- "*",
2252
- "@vy1",
2253
- "@gdir"
2679
+ "==",
2680
+ "@drift",
2681
+ null
2254
2682
  ],
2255
- -0.01
2683
+ "@vx2",
2684
+ [
2685
+ "math/clamp",
2686
+ [
2687
+ "+",
2688
+ "@vx2",
2689
+ [
2690
+ "*",
2691
+ "@dax",
2692
+ 0.033
2693
+ ]
2694
+ ],
2695
+ [
2696
+ "-",
2697
+ 0.0,
2698
+ "@config.maxFallSpeed"
2699
+ ],
2700
+ "@config.maxFallSpeed"
2701
+ ]
2256
2702
  ]
2257
2703
  ]
2258
2704
  ],
@@ -2260,48 +2706,49 @@
2260
2706
  "let",
2261
2707
  [
2262
2708
  [
2263
- "skateNow",
2709
+ "fy",
2264
2710
  [
2265
- "and",
2266
- "@inRange",
2711
+ "if",
2712
+ "@skateNow",
2713
+ "@curveY",
2714
+ "@ny2"
2715
+ ]
2716
+ ],
2717
+ [
2718
+ "fvy",
2719
+ [
2720
+ "if",
2721
+ "@skateNow",
2267
2722
  [
2268
- "and",
2269
- [
2270
- "not",
2271
- "@gapBreak"
2272
- ],
2723
+ "*",
2273
2724
  [
2274
- "and",
2275
- [
2276
- "<=",
2277
- [
2278
- "math/abs",
2279
- [
2280
- "-",
2281
- "@ny2",
2282
- "@curveY"
2283
- ]
2284
- ],
2285
- "@config.skateSnap"
2286
- ],
2725
+ "*",
2726
+ "@vx2",
2287
2727
  [
2288
- "and",
2728
+ "math/cos",
2289
2729
  [
2290
- "or",
2291
- "@landed",
2292
- "@entity.skating"
2293
- ],
2294
- [
2295
- "or",
2296
- "@entity.body.grounded",
2297
- [
2298
- "not",
2299
- "@movingUp"
2300
- ]
2730
+ "math/atan",
2731
+ "@slope"
2301
2732
  ]
2302
2733
  ]
2734
+ ],
2735
+ [
2736
+ "math/sin",
2737
+ [
2738
+ "math/atan",
2739
+ "@slope"
2740
+ ]
2303
2741
  ]
2304
- ]
2742
+ ],
2743
+ "@vy2"
2744
+ ]
2745
+ ],
2746
+ [
2747
+ "fgrounded",
2748
+ [
2749
+ "or",
2750
+ "@landed",
2751
+ "@skateNow"
2305
2752
  ]
2306
2753
  ]
2307
2754
  ],
@@ -2309,45 +2756,36 @@
2309
2756
  "let",
2310
2757
  [
2311
2758
  [
2312
- "vx2",
2759
+ "hazardHit",
2313
2760
  [
2314
- "if",
2315
- "@skateNow",
2761
+ "array/find",
2762
+ "@config.platforms",
2316
2763
  [
2317
- "math/clamp",
2764
+ "fn",
2765
+ "p",
2318
2766
  [
2319
- "+",
2320
- "@entity.body.vx",
2767
+ "and",
2321
2768
  [
2322
- "*",
2769
+ "==",
2323
2770
  [
2324
- "/",
2325
- [
2326
- "*",
2327
- "@config.gravity",
2328
- "@slope"
2329
- ],
2330
- [
2331
- "+",
2332
- 1.0,
2333
- [
2334
- "*",
2335
- "@slope",
2336
- "@slope"
2337
- ]
2338
- ]
2771
+ "object/get",
2772
+ "@p",
2773
+ "type"
2339
2774
  ],
2340
- 0.033
2775
+ "hazard"
2776
+ ],
2777
+ [
2778
+ "geo/aabb-overlap",
2779
+ "@rect",
2780
+ {
2781
+ "h": "@p.height",
2782
+ "w": "@p.width",
2783
+ "x": "@p.x",
2784
+ "y": "@p.y"
2785
+ }
2341
2786
  ]
2342
- ],
2343
- [
2344
- "-",
2345
- 0.0,
2346
- "@config.maxFallSpeed"
2347
- ],
2348
- "@config.maxFallSpeed"
2349
- ],
2350
- "@entity.body.vx"
2787
+ ]
2788
+ ]
2351
2789
  ]
2352
2790
  ]
2353
2791
  ],
@@ -2355,32 +2793,35 @@
2355
2793
  "let",
2356
2794
  [
2357
2795
  [
2358
- "vx3",
2796
+ "goalHit",
2359
2797
  [
2360
- "if",
2798
+ "array/find",
2799
+ "@config.platforms",
2361
2800
  [
2362
- "==",
2363
- "@drift",
2364
- null
2365
- ],
2366
- "@vx2",
2367
- [
2368
- "math/clamp",
2801
+ "fn",
2802
+ "p",
2369
2803
  [
2370
- "+",
2371
- "@vx2",
2804
+ "and",
2372
2805
  [
2373
- "*",
2374
- "@dax",
2375
- 0.033
2806
+ "==",
2807
+ [
2808
+ "object/get",
2809
+ "@p",
2810
+ "type"
2811
+ ],
2812
+ "goal"
2813
+ ],
2814
+ [
2815
+ "geo/aabb-overlap",
2816
+ "@rect",
2817
+ {
2818
+ "h": "@p.height",
2819
+ "w": "@p.width",
2820
+ "x": "@p.x",
2821
+ "y": "@p.y"
2822
+ }
2376
2823
  ]
2377
- ],
2378
- [
2379
- "-",
2380
- 0.0,
2381
- "@config.maxFallSpeed"
2382
- ],
2383
- "@config.maxFallSpeed"
2824
+ ]
2384
2825
  ]
2385
2826
  ]
2386
2827
  ]
@@ -2389,419 +2830,292 @@
2389
2830
  "let",
2390
2831
  [
2391
2832
  [
2392
- "fy",
2833
+ "fellNow",
2393
2834
  [
2394
2835
  "if",
2395
- "@skateNow",
2396
- "@curveY",
2397
- "@ny2"
2836
+ [
2837
+ ">",
2838
+ "@gdir",
2839
+ 0.0
2840
+ ],
2841
+ [
2842
+ ">",
2843
+ "@fy",
2844
+ "@config.killY"
2845
+ ],
2846
+ [
2847
+ "<",
2848
+ "@fy",
2849
+ "@config.killY"
2850
+ ]
2398
2851
  ]
2399
- ],
2852
+ ]
2853
+ ],
2854
+ [
2855
+ "do",
2400
2856
  [
2401
- "fvy",
2857
+ "set",
2858
+ "@entity.body",
2402
2859
  [
2403
- "if",
2404
- "@skateNow",
2405
- [
2406
- "*",
2407
- [
2408
- "*",
2409
- "@vx2",
2860
+ "object/merge",
2861
+ "@entity.body",
2862
+ {
2863
+ "grounded": "@fgrounded",
2864
+ "vx": [
2865
+ "if",
2410
2866
  [
2411
- "math/cos",
2867
+ "or",
2412
2868
  [
2413
- "math/atan",
2414
- "@slope"
2869
+ "==",
2870
+ "@nx",
2871
+ "@config.xMin"
2872
+ ],
2873
+ [
2874
+ "==",
2875
+ "@nx",
2876
+ "@config.xMax"
2415
2877
  ]
2416
- ]
2878
+ ],
2879
+ 0.0,
2880
+ "@vx3"
2417
2881
  ],
2418
- [
2419
- "math/sin",
2420
- [
2421
- "math/atan",
2422
- "@slope"
2423
- ]
2424
- ]
2425
- ],
2426
- "@vy2"
2882
+ "vy": "@fvy",
2883
+ "x": "@nx",
2884
+ "y": "@fy"
2885
+ }
2427
2886
  ]
2428
2887
  ],
2429
2888
  [
2430
- "fgrounded",
2889
+ "set",
2890
+ "@entity.skating",
2891
+ "@skateNow"
2892
+ ],
2893
+ [
2894
+ "if",
2431
2895
  [
2432
- "or",
2433
- "@landed",
2434
- "@skateNow"
2435
- ]
2436
- ]
2437
- ],
2438
- [
2439
- "let",
2896
+ "and",
2897
+ "@skateNow",
2898
+ [
2899
+ "==",
2900
+ "@entity.skating",
2901
+ false
2902
+ ]
2903
+ ],
2904
+ [
2905
+ "emit",
2906
+ "BODY_SKATE_START",
2907
+ {
2908
+ "slope": "@slope",
2909
+ "x": "@nx",
2910
+ "y": "@fy"
2911
+ }
2912
+ ],
2913
+ null
2914
+ ],
2915
+ [
2916
+ "if",
2917
+ [
2918
+ "and",
2919
+ [
2920
+ "==",
2921
+ "@skateNow",
2922
+ false
2923
+ ],
2924
+ [
2925
+ "==",
2926
+ "@entity.skating",
2927
+ true
2928
+ ]
2929
+ ],
2930
+ [
2931
+ "emit",
2932
+ "BODY_SKATE_END",
2933
+ {
2934
+ "x": "@nx",
2935
+ "y": "@fy"
2936
+ }
2937
+ ],
2938
+ null
2939
+ ],
2440
2940
  [
2941
+ "if",
2441
2942
  [
2442
- "hazardHit",
2943
+ "and",
2944
+ "@landed",
2443
2945
  [
2444
- "array/find",
2445
- "@config.platforms",
2446
- [
2447
- "fn",
2448
- "p",
2449
- [
2450
- "and",
2451
- [
2452
- "==",
2453
- [
2454
- "object/get",
2455
- "@p",
2456
- "type"
2457
- ],
2458
- "hazard"
2459
- ],
2460
- [
2461
- "geo/aabb-overlap",
2462
- "@rect",
2463
- {
2464
- "h": "@p.height",
2465
- "w": "@p.width",
2466
- "x": "@p.x",
2467
- "y": "@p.y"
2468
- }
2469
- ]
2470
- ]
2471
- ]
2946
+ "==",
2947
+ "@entity.body.grounded",
2948
+ false
2472
2949
  ]
2473
- ]
2950
+ ],
2951
+ [
2952
+ "emit",
2953
+ "BODY_LANDED",
2954
+ {
2955
+ "impact": [
2956
+ "*",
2957
+ "@vy1",
2958
+ "@gdir"
2959
+ ],
2960
+ "x": "@nx",
2961
+ "y": "@fy"
2962
+ }
2963
+ ],
2964
+ null
2474
2965
  ],
2475
2966
  [
2476
- "let",
2967
+ "if",
2477
2968
  [
2478
- [
2479
- "goalHit",
2480
- [
2481
- "array/find",
2482
- "@config.platforms",
2483
- [
2484
- "fn",
2485
- "p",
2486
- [
2487
- "and",
2488
- [
2489
- "==",
2490
- [
2491
- "object/get",
2492
- "@p",
2493
- "type"
2494
- ],
2495
- "goal"
2496
- ],
2497
- [
2498
- "geo/aabb-overlap",
2499
- "@rect",
2500
- {
2501
- "h": "@p.height",
2502
- "w": "@p.width",
2503
- "x": "@p.x",
2504
- "y": "@p.y"
2505
- }
2506
- ]
2507
- ]
2508
- ]
2509
- ]
2510
- ]
2969
+ "!=",
2970
+ "@hazardHit",
2971
+ null
2511
2972
  ],
2512
2973
  [
2513
- "let",
2974
+ "if",
2514
2975
  [
2976
+ "!=",
2977
+ "@entity.hazardId",
2515
2978
  [
2516
- "fellNow",
2517
- [
2518
- "if",
2519
- [
2520
- ">",
2521
- "@gdir",
2522
- 0.0
2523
- ],
2524
- [
2525
- ">",
2526
- "@fy",
2527
- "@config.killY"
2528
- ],
2529
- [
2530
- "<",
2531
- "@fy",
2532
- "@config.killY"
2533
- ]
2534
- ]
2979
+ "object/get",
2980
+ "@hazardHit",
2981
+ "id",
2982
+ ""
2535
2983
  ]
2536
2984
  ],
2537
2985
  [
2538
2986
  "do",
2539
2987
  [
2540
2988
  "set",
2541
- "@entity.body",
2989
+ "@entity.hazardId",
2542
2990
  [
2543
- "object/merge",
2544
- "@entity.body",
2545
- {
2546
- "grounded": "@fgrounded",
2547
- "vx": [
2548
- "if",
2549
- [
2550
- "or",
2551
- [
2552
- "==",
2553
- "@nx",
2554
- "@config.xMin"
2555
- ],
2556
- [
2557
- "==",
2558
- "@nx",
2559
- "@config.xMax"
2560
- ]
2561
- ],
2562
- 0.0,
2563
- "@vx3"
2564
- ],
2565
- "vy": "@fvy",
2566
- "x": "@nx",
2567
- "y": "@fy"
2568
- }
2991
+ "object/get",
2992
+ "@hazardHit",
2993
+ "id",
2994
+ ""
2569
2995
  ]
2570
2996
  ],
2571
2997
  [
2572
- "set",
2573
- "@entity.skating",
2574
- "@skateNow"
2575
- ],
2576
- [
2577
- "if",
2578
- [
2579
- "and",
2580
- "@skateNow",
2581
- [
2582
- "==",
2583
- "@entity.skating",
2584
- false
2585
- ]
2586
- ],
2587
- [
2588
- "emit",
2589
- "BODY_SKATE_START",
2590
- {
2591
- "slope": "@slope",
2592
- "x": "@nx",
2593
- "y": "@fy"
2594
- }
2595
- ],
2596
- null
2597
- ],
2598
- [
2599
- "if",
2600
- [
2601
- "and",
2602
- [
2603
- "==",
2604
- "@skateNow",
2605
- false
2998
+ "emit",
2999
+ "BODY_HAZARD",
3000
+ {
3001
+ "id": [
3002
+ "object/get",
3003
+ "@hazardHit",
3004
+ "id",
3005
+ ""
2606
3006
  ],
2607
- [
2608
- "==",
2609
- "@entity.skating",
2610
- true
2611
- ]
2612
- ],
2613
- [
2614
- "emit",
2615
- "BODY_SKATE_END",
2616
- {
2617
- "x": "@nx",
2618
- "y": "@fy"
2619
- }
2620
- ],
2621
- null
2622
- ],
2623
- [
2624
- "if",
2625
- [
2626
- "and",
2627
- "@landed",
2628
- [
2629
- "==",
2630
- "@entity.body.grounded",
2631
- false
2632
- ]
2633
- ],
2634
- [
2635
- "emit",
2636
- "BODY_LANDED",
2637
- {
2638
- "impact": [
2639
- "*",
2640
- "@vy1",
2641
- "@gdir"
2642
- ],
2643
- "x": "@nx",
2644
- "y": "@fy"
2645
- }
2646
- ],
2647
- null
2648
- ],
3007
+ "x": "@nx",
3008
+ "y": "@fy"
3009
+ }
3010
+ ]
3011
+ ],
3012
+ null
3013
+ ],
3014
+ [
3015
+ "set",
3016
+ "@entity.hazardId",
3017
+ ""
3018
+ ]
3019
+ ],
3020
+ [
3021
+ "if",
3022
+ [
3023
+ "!=",
3024
+ "@goalHit",
3025
+ null
3026
+ ],
3027
+ [
3028
+ "if",
3029
+ [
3030
+ "!=",
3031
+ "@entity.goalId",
2649
3032
  [
2650
- "if",
2651
- [
2652
- "!=",
2653
- "@hazardHit",
2654
- null
2655
- ],
2656
- [
2657
- "if",
2658
- [
2659
- "!=",
2660
- "@entity.hazardId",
2661
- [
2662
- "object/get",
2663
- "@hazardHit",
2664
- "id",
2665
- ""
2666
- ]
2667
- ],
2668
- [
2669
- "do",
2670
- [
2671
- "set",
2672
- "@entity.hazardId",
2673
- [
2674
- "object/get",
2675
- "@hazardHit",
2676
- "id",
2677
- ""
2678
- ]
2679
- ],
2680
- [
2681
- "emit",
2682
- "BODY_HAZARD",
2683
- {
2684
- "id": [
2685
- "object/get",
2686
- "@hazardHit",
2687
- "id",
2688
- ""
2689
- ],
2690
- "x": "@nx",
2691
- "y": "@fy"
2692
- }
2693
- ]
2694
- ],
2695
- null
2696
- ],
2697
- [
2698
- "set",
2699
- "@entity.hazardId",
2700
- ""
2701
- ]
2702
- ],
3033
+ "object/get",
3034
+ "@goalHit",
3035
+ "id",
3036
+ ""
3037
+ ]
3038
+ ],
3039
+ [
3040
+ "do",
2703
3041
  [
2704
- "if",
3042
+ "set",
3043
+ "@entity.goalId",
2705
3044
  [
2706
- "!=",
3045
+ "object/get",
2707
3046
  "@goalHit",
2708
- null
2709
- ],
2710
- [
2711
- "if",
2712
- [
2713
- "!=",
2714
- "@entity.goalId",
2715
- [
2716
- "object/get",
2717
- "@goalHit",
2718
- "id",
2719
- ""
2720
- ]
2721
- ],
2722
- [
2723
- "do",
2724
- [
2725
- "set",
2726
- "@entity.goalId",
2727
- [
2728
- "object/get",
2729
- "@goalHit",
2730
- "id",
2731
- ""
2732
- ]
2733
- ],
2734
- [
2735
- "emit",
2736
- "BODY_GOAL",
2737
- {
2738
- "id": [
2739
- "object/get",
2740
- "@goalHit",
2741
- "id",
2742
- ""
2743
- ],
2744
- "x": "@nx",
2745
- "y": "@fy"
2746
- }
2747
- ]
2748
- ],
2749
- null
2750
- ],
2751
- [
2752
- "set",
2753
- "@entity.goalId",
3047
+ "id",
2754
3048
  ""
2755
3049
  ]
2756
3050
  ],
2757
- [
2758
- "if",
2759
- [
2760
- "and",
2761
- "@fellNow",
2762
- [
2763
- "==",
2764
- "@entity.fell",
2765
- false
2766
- ]
2767
- ],
2768
- [
2769
- "do",
2770
- [
2771
- "set",
2772
- "@entity.fell",
2773
- true
2774
- ],
2775
- [
2776
- "emit",
2777
- "BODY_FELL",
2778
- {
2779
- "x": "@nx",
2780
- "y": "@fy"
2781
- }
2782
- ]
2783
- ],
2784
- null
2785
- ],
2786
3051
  [
2787
3052
  "emit",
2788
- "BODY_MOVED",
3053
+ "BODY_GOAL",
2789
3054
  {
2790
- "grounded": "@fgrounded",
2791
- "skating": "@skateNow",
2792
- "speed": [
2793
- "math/hypot",
2794
- "@entity.body.vx",
2795
- "@fvy"
3055
+ "id": [
3056
+ "object/get",
3057
+ "@goalHit",
3058
+ "id",
3059
+ ""
2796
3060
  ],
2797
- "vx": "@entity.body.vx",
2798
- "vy": "@fvy",
2799
3061
  "x": "@nx",
2800
3062
  "y": "@fy"
2801
3063
  }
2802
3064
  ]
2803
- ]
3065
+ ],
3066
+ null
3067
+ ],
3068
+ [
3069
+ "set",
3070
+ "@entity.goalId",
3071
+ ""
2804
3072
  ]
3073
+ ],
3074
+ [
3075
+ "if",
3076
+ [
3077
+ "and",
3078
+ "@fellNow",
3079
+ [
3080
+ "==",
3081
+ "@entity.fell",
3082
+ false
3083
+ ]
3084
+ ],
3085
+ [
3086
+ "do",
3087
+ [
3088
+ "set",
3089
+ "@entity.fell",
3090
+ true
3091
+ ],
3092
+ [
3093
+ "emit",
3094
+ "BODY_FELL",
3095
+ {
3096
+ "x": "@nx",
3097
+ "y": "@fy"
3098
+ }
3099
+ ]
3100
+ ],
3101
+ null
3102
+ ],
3103
+ [
3104
+ "emit",
3105
+ "BODY_MOVED",
3106
+ {
3107
+ "grounded": "@fgrounded",
3108
+ "skating": "@skateNow",
3109
+ "speed": [
3110
+ "math/hypot",
3111
+ "@entity.body.vx",
3112
+ "@fvy"
3113
+ ],
3114
+ "vx": "@entity.body.vx",
3115
+ "vy": "@fvy",
3116
+ "x": "@nx",
3117
+ "y": "@fy"
3118
+ }
2805
3119
  ]
2806
3120
  ]
2807
3121
  ]
@@ -2852,7 +3166,167 @@
2852
3166
  }
2853
3167
  ]
2854
3168
  }
2855
- ]
3169
+ ],
3170
+ "types": {
3171
+ "BodyDriftRegion": [
3172
+ {
3173
+ "name": "id",
3174
+ "required": true,
3175
+ "type": "string"
3176
+ },
3177
+ {
3178
+ "name": "x0",
3179
+ "required": true,
3180
+ "type": "number"
3181
+ },
3182
+ {
3183
+ "name": "x1",
3184
+ "required": true,
3185
+ "type": "number"
3186
+ },
3187
+ {
3188
+ "name": "y0",
3189
+ "required": true,
3190
+ "type": "number"
3191
+ },
3192
+ {
3193
+ "name": "y1",
3194
+ "required": true,
3195
+ "type": "number"
3196
+ },
3197
+ {
3198
+ "name": "ax",
3199
+ "required": true,
3200
+ "type": "number"
3201
+ },
3202
+ {
3203
+ "name": "ay",
3204
+ "required": true,
3205
+ "type": "number"
3206
+ }
3207
+ ],
3208
+ "CurveMod": [
3209
+ {
3210
+ "name": "x0",
3211
+ "required": true,
3212
+ "type": "number"
3213
+ },
3214
+ {
3215
+ "name": "x1",
3216
+ "required": true,
3217
+ "type": "number"
3218
+ },
3219
+ {
3220
+ "name": "a",
3221
+ "required": true,
3222
+ "type": "number"
3223
+ },
3224
+ {
3225
+ "name": "h",
3226
+ "required": true,
3227
+ "type": "number"
3228
+ },
3229
+ {
3230
+ "name": "k",
3231
+ "required": true,
3232
+ "type": "number"
3233
+ }
3234
+ ],
3235
+ "PlatformerBody": [
3236
+ {
3237
+ "name": "x",
3238
+ "required": true,
3239
+ "type": "number"
3240
+ },
3241
+ {
3242
+ "name": "y",
3243
+ "required": true,
3244
+ "type": "number"
3245
+ },
3246
+ {
3247
+ "name": "width",
3248
+ "required": true,
3249
+ "type": "number"
3250
+ },
3251
+ {
3252
+ "name": "height",
3253
+ "required": true,
3254
+ "type": "number"
3255
+ },
3256
+ {
3257
+ "name": "vx",
3258
+ "type": "number"
3259
+ },
3260
+ {
3261
+ "name": "vy",
3262
+ "type": "number"
3263
+ },
3264
+ {
3265
+ "name": "grounded",
3266
+ "type": "boolean"
3267
+ },
3268
+ {
3269
+ "name": "facingRight",
3270
+ "type": "boolean"
3271
+ }
3272
+ ],
3273
+ "PlatformerCurveSample": [
3274
+ {
3275
+ "name": "x",
3276
+ "required": true,
3277
+ "type": "number"
3278
+ },
3279
+ {
3280
+ "name": "y",
3281
+ "required": true,
3282
+ "type": "number"
3283
+ }
3284
+ ],
3285
+ "PlatformerPlatform": [
3286
+ {
3287
+ "name": "id",
3288
+ "type": "string"
3289
+ },
3290
+ {
3291
+ "name": "x",
3292
+ "required": true,
3293
+ "type": "number"
3294
+ },
3295
+ {
3296
+ "name": "y",
3297
+ "required": true,
3298
+ "type": "number"
3299
+ },
3300
+ {
3301
+ "name": "width",
3302
+ "required": true,
3303
+ "type": "number"
3304
+ },
3305
+ {
3306
+ "name": "height",
3307
+ "required": true,
3308
+ "type": "number"
3309
+ },
3310
+ {
3311
+ "name": "type",
3312
+ "type": "string"
3313
+ }
3314
+ ],
3315
+ "PlatformerTuning": [
3316
+ {
3317
+ "name": "jumpStrength",
3318
+ "type": "number"
3319
+ },
3320
+ {
3321
+ "name": "moveSpeed",
3322
+ "type": "number"
3323
+ },
3324
+ {
3325
+ "name": "gravity",
3326
+ "type": "number"
3327
+ }
3328
+ ]
3329
+ }
2856
3330
  }
2857
3331
  ],
2858
3332
  "schemaVersion": 1,