@origingame/engine 0.4.0 → 0.5.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 (78) hide show
  1. package/dist/web/origin-engine.d.ts +8 -5
  2. package/dist/web/origin-engine.js +39 -19
  3. package/dist/web/origin-engine_bg.wasm +0 -0
  4. package/dist/web/origin-engine_bg.wasm.d.ts +6 -5
  5. package/dist/web-publish/origin-engine-lanes.js +49 -29
  6. package/dist/web-publish/origin-engine-lanes_bg.wasm +0 -0
  7. package/dist/web-publish/origin-engine.d.ts +8 -5
  8. package/dist/web-publish/origin-engine.js +39 -19
  9. package/dist/web-publish/origin-engine_bg.wasm +0 -0
  10. package/dist/web-publish/origin-engine_bg.wasm.d.ts +6 -5
  11. package/dist/web-publish-2d/origin-engine-lanes.js +49 -29
  12. package/dist/web-publish-2d/origin-engine-lanes_bg.wasm +0 -0
  13. package/dist/web-publish-2d/origin-engine.d.ts +8 -5
  14. package/dist/web-publish-2d/origin-engine.js +39 -19
  15. package/dist/web-publish-2d/origin-engine_bg.wasm +0 -0
  16. package/dist/web-publish-2d/origin-engine_bg.wasm.d.ts +6 -5
  17. package/knowledge/looks/catalogue.json +123 -2
  18. package/knowledge/package.json +1 -1
  19. package/knowledge/scaffold/origin-engine.json +2 -2
  20. package/knowledge/scaffold/template/package.json +1 -1
  21. package/knowledge/scaffold/template/project.ogt +1 -1
  22. package/knowledge/scripts/validate.ts +69 -6
  23. package/knowledge/skills/og-audio/SKILL.md +31 -5
  24. package/knowledge/skills/og-build/SKILL.md +44 -4
  25. package/knowledge/skills/og-core/SKILL.md +4 -3
  26. package/knowledge/skills/og-feel/SKILL.md +9 -1
  27. package/knowledge/skills/og-game/SKILL.md +199 -16
  28. package/knowledge/skills/og-platform-sdk/SKILL.md +6 -0
  29. package/knowledge/skills/og-taste/SKILL.md +7 -0
  30. package/knowledge/skills/og-ui/SKILL.md +24 -0
  31. package/knowledge/wiki/ai.md +20 -20
  32. package/knowledge/wiki/anim.md +526 -60
  33. package/knowledge/wiki/atmosphere.md +13 -13
  34. package/knowledge/wiki/audio.md +160 -20
  35. package/knowledge/wiki/camera.md +13 -13
  36. package/knowledge/wiki/commands.md +11 -11
  37. package/knowledge/wiki/debug.md +13 -13
  38. package/knowledge/wiki/game.md +8 -8
  39. package/knowledge/wiki/i18n.md +7 -7
  40. package/knowledge/wiki/index.md +25 -1
  41. package/knowledge/wiki/input.md +47 -47
  42. package/knowledge/wiki/load.md +76 -50
  43. package/knowledge/wiki/math.md +102 -102
  44. package/knowledge/wiki/nav.md +34 -34
  45. package/knowledge/wiki/net.md +10 -10
  46. package/knowledge/wiki/path.md +14 -14
  47. package/knowledge/wiki/physics.md +111 -100
  48. package/knowledge/wiki/platform.md +44 -44
  49. package/knowledge/wiki/probe.md +86 -86
  50. package/knowledge/wiki/reflect.md +17 -17
  51. package/knowledge/wiki/render.md +245 -176
  52. package/knowledge/wiki/rng.md +14 -14
  53. package/knowledge/wiki/shapes.md +26 -26
  54. package/knowledge/wiki/stream.md +15 -15
  55. package/knowledge/wiki/system.md +8 -8
  56. package/knowledge/wiki/systems.md +2 -2
  57. package/knowledge/wiki/terrain.md +19 -19
  58. package/knowledge/wiki/tilemap.md +13 -13
  59. package/knowledge/wiki/time.md +4 -4
  60. package/knowledge/wiki/timeline.md +14 -14
  61. package/knowledge/wiki/transform.md +8 -8
  62. package/knowledge/wiki/tween.md +17 -17
  63. package/knowledge/wiki/ui.md +243 -243
  64. package/knowledge/wiki/video.md +5 -5
  65. package/knowledge/wiki/world.md +36 -36
  66. package/package.json +4 -4
  67. package/schema/api.schema.json +639 -11
  68. package/shell/page.ts +4 -0
  69. package/src/generated/abi.ts +3 -0
  70. package/src/index.ts +11 -0
  71. package/src/node/device.ts +5 -2
  72. package/src/node/polish.ts +34 -15
  73. package/src/node/run.ts +23 -6
  74. package/src/runtime.ts +1 -0
  75. package/src/web/gl-state.ts +907 -0
  76. package/src/web/worker.ts +6 -0
  77. package/types/bindings.json +823 -349
  78. package/types/index.d.ts +650 -15
@@ -18,7 +18,7 @@ module physics {
18
18
  # declarations follow, each quoted below
19
19
  ```
20
20
 
21
- <sub>`api.ogt` line 5763</sub>
21
+ <sub>`api.ogt` line 5808</sub>
22
22
 
23
23
  ## Contents
24
24
 
@@ -46,7 +46,7 @@ module physics {
46
46
  | [`og.Collider`](#record-Collider) | component | The shape an entity collides with, attached to its RigidBody (or, without one, a static collider at its Transform). Sizes are scaled by og.Transform.scale. |
47
47
  | [`og.Velocity`](#record-Velocity) | component | Linear and angular velocity. Written for dynamic bodies every tick (added to them by the step when missing); a kinematic body moves by it each tick (never added, never written). Set it to launch or stop a body; push one with og.physics.applyForce, applyImpulse, applyTorque or applyTorqueImpulse. |
48
48
  | [`og.Physics`](#record-Physics) | resource | The physics settings of the world. The profile is the project's; the same components serve both profiles. |
49
- | [`og.CollisionStarted`](#record-CollisionStarted) | event | Two solid colliders started touching during the tick. |
49
+ | [`og.CollisionStarted`](#record-CollisionStarted) | event | Two solid colliders started touching during the tick. Read in the tick after, when og.Velocity already holds the solver's answer (the bodies parting): how hard they met is `impulse` and `relativeVelocity`, taken in the step itself. |
50
50
  | [`og.CollisionEnded`](#record-CollisionEnded) | event | Two solid colliders stopped touching, or one of them went away. |
51
51
  | [`og.SensorEntered`](#record-SensorEntered) | event | A collider started overlapping a sensor. |
52
52
  | [`og.SensorExited`](#record-SensorExited) | event | A collider stopped overlapping a sensor, or one of them went away. |
@@ -149,7 +149,7 @@ fn raycast {
149
149
  }
150
150
  ```
151
151
 
152
- <sub>`api.ogt` line 7086</sub>
152
+ <sub>`api.ogt` line 7140</sub>
153
153
 
154
154
  <a id="fn-shapeCast"></a>
155
155
 
@@ -179,7 +179,7 @@ fn shapeCast {
179
179
  }
180
180
  ```
181
181
 
182
- <sub>`api.ogt` line 7093</sub>
182
+ <sub>`api.ogt` line 7147</sub>
183
183
 
184
184
  <a id="fn-overlap"></a>
185
185
 
@@ -209,7 +209,7 @@ fn overlap {
209
209
  }
210
210
  ```
211
211
 
212
- <sub>`api.ogt` line 7100</sub>
212
+ <sub>`api.ogt` line 7154</sub>
213
213
 
214
214
  <a id="fn-applyForce"></a>
215
215
 
@@ -245,7 +245,7 @@ fn applyForce {
245
245
  }
246
246
  ```
247
247
 
248
- <sub>`api.ogt` line 7107</sub>
248
+ <sub>`api.ogt` line 7161</sub>
249
249
 
250
250
  <a id="fn-applyImpulse"></a>
251
251
 
@@ -281,7 +281,7 @@ fn applyImpulse {
281
281
  }
282
282
  ```
283
283
 
284
- <sub>`api.ogt` line 7118</sub>
284
+ <sub>`api.ogt` line 7172</sub>
285
285
 
286
286
  <a id="fn-applyTorque"></a>
287
287
 
@@ -313,7 +313,7 @@ fn applyTorque {
313
313
  }
314
314
  ```
315
315
 
316
- <sub>`api.ogt` line 7129</sub>
316
+ <sub>`api.ogt` line 7183</sub>
317
317
 
318
318
  <a id="fn-applyTorqueImpulse"></a>
319
319
 
@@ -345,7 +345,7 @@ fn applyTorqueImpulse {
345
345
  }
346
346
  ```
347
347
 
348
- <sub>`api.ogt` line 7137</sub>
348
+ <sub>`api.ogt` line 7191</sub>
349
349
 
350
350
  <a id="fn-setMesh"></a>
351
351
 
@@ -377,7 +377,7 @@ fn setMesh {
377
377
  }
378
378
  ```
379
379
 
380
- <sub>`api.ogt` line 7145</sub>
380
+ <sub>`api.ogt` line 7199</sub>
381
381
 
382
382
  <a id="fn-ropePoints"></a>
383
383
 
@@ -407,7 +407,7 @@ fn ropePoints {
407
407
  }
408
408
  ```
409
409
 
410
- <sub>`api.ogt` line 7206</sub>
410
+ <sub>`api.ogt` line 7260</sub>
411
411
 
412
412
  <a id="fn-clothPoints"></a>
413
413
 
@@ -437,7 +437,7 @@ fn clothPoints {
437
437
  }
438
438
  ```
439
439
 
440
- <sub>`api.ogt` line 7213</sub>
440
+ <sub>`api.ogt` line 7267</sub>
441
441
 
442
442
  <a id="fn-fluidParticles"></a>
443
443
 
@@ -467,7 +467,7 @@ fn fluidParticles {
467
467
  }
468
468
  ```
469
469
 
470
- <sub>`api.ogt` line 7220</sub>
470
+ <sub>`api.ogt` line 7274</sub>
471
471
 
472
472
  <a id="fn-fluid3dParticles"></a>
473
473
 
@@ -497,7 +497,7 @@ fn fluid3dParticles {
497
497
  }
498
498
  ```
499
499
 
500
- <sub>`api.ogt` line 7227</sub>
500
+ <sub>`api.ogt` line 7281</sub>
501
501
 
502
502
  <a id="fn-waterHeight"></a>
503
503
 
@@ -531,7 +531,7 @@ fn waterHeight {
531
531
  }
532
532
  ```
533
533
 
534
- <sub>`api.ogt` line 7234</sub>
534
+ <sub>`api.ogt` line 7288</sub>
535
535
 
536
536
  <a id="fn-vehicleWheels"></a>
537
537
 
@@ -561,7 +561,7 @@ fn vehicleWheels {
561
561
  }
562
562
  ```
563
563
 
564
- <sub>`api.ogt` line 7243</sub>
564
+ <sub>`api.ogt` line 7297</sub>
565
565
 
566
566
  <a id="fn-ragdollRigFromSkeleton"></a>
567
567
 
@@ -591,7 +591,7 @@ fn ragdollRigFromSkeleton {
591
591
  }
592
592
  ```
593
593
 
594
- <sub>`api.ogt` line 7250</sub>
594
+ <sub>`api.ogt` line 7304</sub>
595
595
 
596
596
  <a id="fn-setRagdollRig"></a>
597
597
 
@@ -623,7 +623,7 @@ fn setRagdollRig {
623
623
  }
624
624
  ```
625
625
 
626
- <sub>`api.ogt` line 7257</sub>
626
+ <sub>`api.ogt` line 7311</sub>
627
627
 
628
628
  <a id="fn-ragdollPose"></a>
629
629
 
@@ -653,7 +653,7 @@ fn ragdollPose {
653
653
  }
654
654
  ```
655
655
 
656
- <sub>`api.ogt` line 7265</sub>
656
+ <sub>`api.ogt` line 7319</sub>
657
657
 
658
658
  <a id="fn-stats"></a>
659
659
 
@@ -681,7 +681,7 @@ fn stats {
681
681
  }
682
682
  ```
683
683
 
684
- <sub>`api.ogt` line 7293</sub>
684
+ <sub>`api.ogt` line 7347</sub>
685
685
 
686
686
  ## Components, resources and events
687
687
 
@@ -753,7 +753,7 @@ component RigidBody {
753
753
  }
754
754
  ```
755
755
 
756
- <sub>`api.ogt` line 5788</sub>
756
+ <sub>`api.ogt` line 5833</sub>
757
757
 
758
758
  <a id="record-Collider"></a>
759
759
 
@@ -840,7 +840,7 @@ component Collider {
840
840
  }
841
841
  ```
842
842
 
843
- <sub>`api.ogt` line 5833</sub>
843
+ <sub>`api.ogt` line 5878</sub>
844
844
 
845
845
  <a id="record-Velocity"></a>
846
846
 
@@ -869,7 +869,7 @@ component Velocity {
869
869
  }
870
870
  ```
871
871
 
872
- <sub>`api.ogt` line 5892</sub>
872
+ <sub>`api.ogt` line 5937</sub>
873
873
 
874
874
  <a id="record-Physics"></a>
875
875
 
@@ -923,13 +923,13 @@ resource Physics {
923
923
  }
924
924
  ```
925
925
 
926
- <sub>`api.ogt` line 5904</sub>
926
+ <sub>`api.ogt` line 5949</sub>
927
927
 
928
928
  <a id="record-CollisionStarted"></a>
929
929
 
930
930
  ### `og.CollisionStarted` (event)
931
931
 
932
- Two solid colliders started touching during the tick.
932
+ Two solid colliders started touching during the tick. Read in the tick after, when og.Velocity already holds the solver's answer (the bodies parting): how hard they met is `impulse` and `relativeVelocity`, taken in the step itself.
933
933
 
934
934
  Token `og.CollisionStarted`, registered under the schema name `og.CollisionStarted`; its value type is `CollisionStarted`.
935
935
 
@@ -937,20 +937,31 @@ Token `og.CollisionStarted`, registered under the schema name `og.CollisionStart
937
937
  |---|---|---|---|---|---|---|
938
938
  | `a` | `Entity` | `0` | — | — | — | The entity with the lower id. |
939
939
  | `b` | `Entity` | `0` | — | — | — | The entity with the higher id. |
940
- | `point` | `Vector3` | `{ x: 0, y: 0, z: 0 }` | — | — | — | The deepest contact point in world space (z is 0 in 2D). |
940
+ | `point` | `Vector3` | `{ x: 0, y: 0, z: 0 }` | — | `m` | — | The deepest contact point in world space (z is 0 in 2D). |
941
941
  | `normal` | `Vector3` | `{ x: 0, y: 0, z: 0 }` | — | — | — | The contact normal, from a towards b. |
942
+ | `impulse` | `number` | `0` | ≥ 0 | `newtonSecond` | — | The normal impulse the solver gave the pair in the step that made the contact (every substep, every contact point), in newton-seconds: b took `impulse` along `normal`, a the same against it. Its momentum answer to the hit, at least 0; heavier and faster hits give more. |
943
+ | `relativeVelocity` | `Vector3` | `{ x: 0, y: 0, z: 0 }` | — | `mps` | — | a's velocity relative to b at `point` as that step began, before the solver answered: each body's linear velocity plus its angular velocity crossed with the point's offset from its centre of mass (a static collider is still; z is 0 in 2D). Along `normal` it is the closing speed, positive while they approach: max(0, relativeVelocity · normal) is how hard they hit, in m/s. |
942
944
 
943
945
  ```ogt
944
946
  event CollisionStarted {
945
- doc "Two solid colliders started touching during the tick."
947
+ doc "Two solid colliders started touching during the tick. Read in the tick after, when og.Velocity already holds the solver's answer (the bodies parting): how hard they met is `impulse` and `relativeVelocity`, taken in the step itself."
946
948
  field a Entity "The entity with the lower id."
947
949
  field b Entity "The entity with the higher id."
948
- field point Vector3 "The deepest contact point in world space (z is 0 in 2D)."
950
+ field point Vector3 "The deepest contact point in world space (z is 0 in 2D)." {
951
+ unit m
952
+ }
949
953
  field normal Vector3 "The contact normal, from a towards b."
954
+ field impulse f32 "The normal impulse the solver gave the pair in the step that made the contact (every substep, every contact point), in newton-seconds: b took `impulse` along `normal`, a the same against it. Its momentum answer to the hit, at least 0; heavier and faster hits give more." {
955
+ min 0
956
+ unit newtonSecond
957
+ }
958
+ field relativeVelocity Vector3 "a's velocity relative to b at `point` as that step began, before the solver answered: each body's linear velocity plus its angular velocity crossed with the point's offset from its centre of mass (a static collider is still; z is 0 in 2D). Along `normal` it is the closing speed, positive while they approach: max(0, relativeVelocity · normal) is how hard they hit, in m/s." {
959
+ unit mps
960
+ }
950
961
  }
951
962
  ```
952
963
 
953
- <sub>`api.ogt` line 5938</sub>
964
+ <sub>`api.ogt` line 5983</sub>
954
965
 
955
966
  <a id="record-CollisionEnded"></a>
956
967
 
@@ -973,7 +984,7 @@ event CollisionEnded {
973
984
  }
974
985
  ```
975
986
 
976
- <sub>`api.ogt` line 5946</sub>
987
+ <sub>`api.ogt` line 6000</sub>
977
988
 
978
989
  <a id="record-SensorEntered"></a>
979
990
 
@@ -996,7 +1007,7 @@ event SensorEntered {
996
1007
  }
997
1008
  ```
998
1009
 
999
- <sub>`api.ogt` line 5952</sub>
1010
+ <sub>`api.ogt` line 6006</sub>
1000
1011
 
1001
1012
  <a id="record-SensorExited"></a>
1002
1013
 
@@ -1019,7 +1030,7 @@ event SensorExited {
1019
1030
  }
1020
1031
  ```
1021
1032
 
1022
- <sub>`api.ogt` line 5958</sub>
1033
+ <sub>`api.ogt` line 6012</sub>
1023
1034
 
1024
1035
  <a id="record-Contact"></a>
1025
1036
 
@@ -1044,7 +1055,7 @@ event Contact {
1044
1055
  }
1045
1056
  ```
1046
1057
 
1047
- <sub>`api.ogt` line 5964</sub>
1058
+ <sub>`api.ogt` line 6018</sub>
1048
1059
 
1049
1060
  <a id="record-Joint"></a>
1050
1061
 
@@ -1149,7 +1160,7 @@ component Joint {
1149
1160
  }
1150
1161
  ```
1151
1162
 
1152
- <sub>`api.ogt` line 5981</sub>
1163
+ <sub>`api.ogt` line 6035</sub>
1153
1164
 
1154
1165
  <a id="record-CharacterController"></a>
1155
1166
 
@@ -1270,7 +1281,7 @@ component CharacterController {
1270
1281
  }
1271
1282
  ```
1272
1283
 
1273
- <sub>`api.ogt` line 6051</sub>
1284
+ <sub>`api.ogt` line 6105</sub>
1274
1285
 
1275
1286
  <a id="record-PlatformerController"></a>
1276
1287
 
@@ -1522,7 +1533,7 @@ component PlatformerController {
1522
1533
  }
1523
1534
  ```
1524
1535
 
1525
- <sub>`api.ogt` line 6138</sub>
1536
+ <sub>`api.ogt` line 6192</sub>
1526
1537
 
1527
1538
  <a id="record-CharacterEvent"></a>
1528
1539
 
@@ -1552,7 +1563,7 @@ event CharacterEvent {
1552
1563
  }
1553
1564
  ```
1554
1565
 
1555
- <sub>`api.ogt` line 6340</sub>
1566
+ <sub>`api.ogt` line 6394</sub>
1556
1567
 
1557
1568
  <a id="record-Vehicle"></a>
1558
1569
 
@@ -1711,7 +1722,7 @@ component Vehicle {
1711
1722
  }
1712
1723
  ```
1713
1724
 
1714
- <sub>`api.ogt` line 6356</sub>
1725
+ <sub>`api.ogt` line 6410</sub>
1715
1726
 
1716
1727
  <a id="record-Rope"></a>
1717
1728
 
@@ -1800,7 +1811,7 @@ component Rope {
1800
1811
  }
1801
1812
  ```
1802
1813
 
1803
- <sub>`api.ogt` line 6474</sub>
1814
+ <sub>`api.ogt` line 6528</sub>
1804
1815
 
1805
1816
  <a id="record-Cloth"></a>
1806
1817
 
@@ -1906,7 +1917,7 @@ component Cloth {
1906
1917
  }
1907
1918
  ```
1908
1919
 
1909
- <sub>`api.ogt` line 6540</sub>
1920
+ <sub>`api.ogt` line 6594</sub>
1910
1921
 
1911
1922
  <a id="record-Fluid2D"></a>
1912
1923
 
@@ -2030,7 +2041,7 @@ component Fluid2D {
2030
2041
  }
2031
2042
  ```
2032
2043
 
2033
- <sub>`api.ogt` line 6616</sub>
2044
+ <sub>`api.ogt` line 6670</sub>
2034
2045
 
2035
2046
  <a id="record-Fluid3D"></a>
2036
2047
 
@@ -2199,7 +2210,7 @@ component Fluid3D {
2199
2210
  }
2200
2211
  ```
2201
2212
 
2202
- <sub>`api.ogt` line 6705</sub>
2213
+ <sub>`api.ogt` line 6759</sub>
2203
2214
 
2204
2215
  <a id="record-WaterSurface"></a>
2205
2216
 
@@ -2264,7 +2275,7 @@ component WaterSurface {
2264
2275
  }
2265
2276
  ```
2266
2277
 
2267
- <sub>`api.ogt` line 6831</sub>
2278
+ <sub>`api.ogt` line 6885</sub>
2268
2279
 
2269
2280
  <a id="record-WaterLine"></a>
2270
2281
 
@@ -2341,7 +2352,7 @@ component WaterLine {
2341
2352
  }
2342
2353
  ```
2343
2354
 
2344
- <sub>`api.ogt` line 6874</sub>
2355
+ <sub>`api.ogt` line 6928</sub>
2345
2356
 
2346
2357
  <a id="record-Splash"></a>
2347
2358
 
@@ -2372,7 +2383,7 @@ event Splash {
2372
2383
  }
2373
2384
  ```
2374
2385
 
2375
- <sub>`api.ogt` line 6927</sub>
2386
+ <sub>`api.ogt` line 6981</sub>
2376
2387
 
2377
2388
  <a id="record-Ragdoll"></a>
2378
2389
 
@@ -2440,7 +2451,7 @@ component Ragdoll {
2440
2451
  }
2441
2452
  ```
2442
2453
 
2443
- <sub>`api.ogt` line 6939</sub>
2454
+ <sub>`api.ogt` line 6993</sub>
2444
2455
 
2445
2456
  ## Types
2446
2457
 
@@ -2468,7 +2479,7 @@ struct QueryFilter {
2468
2479
  }
2469
2480
  ```
2470
2481
 
2471
- <sub>`api.ogt` line 6984</sub>
2482
+ <sub>`api.ogt` line 7038</sub>
2472
2483
 
2473
2484
  <a id="type-RaycastDesc"></a>
2474
2485
 
@@ -2503,7 +2514,7 @@ struct RaycastDesc {
2503
2514
  }
2504
2515
  ```
2505
2516
 
2506
- <sub>`api.ogt` line 6992</sub>
2517
+ <sub>`api.ogt` line 7046</sub>
2507
2518
 
2508
2519
  <a id="type-RaycastHit"></a>
2509
2520
 
@@ -2530,7 +2541,7 @@ struct RaycastHit {
2530
2541
  }
2531
2542
  ```
2532
2543
 
2533
- <sub>`api.ogt` line 7008</sub>
2544
+ <sub>`api.ogt` line 7062</sub>
2534
2545
 
2535
2546
  <a id="type-ShapeDesc"></a>
2536
2547
 
@@ -2572,7 +2583,7 @@ struct ShapeDesc {
2572
2583
  }
2573
2584
  ```
2574
2585
 
2575
- <sub>`api.ogt` line 7018</sub>
2586
+ <sub>`api.ogt` line 7072</sub>
2576
2587
 
2577
2588
  <a id="type-ShapeCastDesc"></a>
2578
2589
 
@@ -2611,7 +2622,7 @@ struct ShapeCastDesc {
2611
2622
  }
2612
2623
  ```
2613
2624
 
2614
- <sub>`api.ogt` line 7040</sub>
2625
+ <sub>`api.ogt` line 7094</sub>
2615
2626
 
2616
2627
  <a id="type-ShapeCastHit"></a>
2617
2628
 
@@ -2638,7 +2649,7 @@ struct ShapeCastHit {
2638
2649
  }
2639
2650
  ```
2640
2651
 
2641
- <sub>`api.ogt` line 7058</sub>
2652
+ <sub>`api.ogt` line 7112</sub>
2642
2653
 
2643
2654
  <a id="type-OverlapDesc"></a>
2644
2655
 
@@ -2668,7 +2679,7 @@ struct OverlapDesc {
2668
2679
  }
2669
2680
  ```
2670
2681
 
2671
- <sub>`api.ogt` line 7068</sub>
2682
+ <sub>`api.ogt` line 7122</sub>
2672
2683
 
2673
2684
  <a id="type-MeshDesc"></a>
2674
2685
 
@@ -2692,7 +2703,7 @@ struct MeshDesc {
2692
2703
  }
2693
2704
  ```
2694
2705
 
2695
- <sub>`api.ogt` line 7079</sub>
2706
+ <sub>`api.ogt` line 7133</sub>
2696
2707
 
2697
2708
  <a id="type-WheelPose"></a>
2698
2709
 
@@ -2726,7 +2737,7 @@ struct WheelPose {
2726
2737
  }
2727
2738
  ```
2728
2739
 
2729
- <sub>`api.ogt` line 7153</sub>
2740
+ <sub>`api.ogt` line 7207</sub>
2730
2741
 
2731
2742
  <a id="type-RagdollBoneDesc"></a>
2732
2743
 
@@ -2769,7 +2780,7 @@ struct RagdollBoneDesc {
2769
2780
  }
2770
2781
  ```
2771
2782
 
2772
- <sub>`api.ogt` line 7169</sub>
2783
+ <sub>`api.ogt` line 7223</sub>
2773
2784
 
2774
2785
  <a id="type-RagdollRigDesc"></a>
2775
2786
 
@@ -2793,7 +2804,7 @@ struct RagdollRigDesc {
2793
2804
  }
2794
2805
  ```
2795
2806
 
2796
- <sub>`api.ogt` line 7191</sub>
2807
+ <sub>`api.ogt` line 7245</sub>
2797
2808
 
2798
2809
  <a id="type-BonePose"></a>
2799
2810
 
@@ -2816,7 +2827,7 @@ struct BonePose {
2816
2827
  }
2817
2828
  ```
2818
2829
 
2819
- <sub>`api.ogt` line 7198</sub>
2830
+ <sub>`api.ogt` line 7252</sub>
2820
2831
 
2821
2832
  <a id="type-PhysicsPhase"></a>
2822
2833
 
@@ -2841,7 +2852,7 @@ struct PhysicsPhase {
2841
2852
  }
2842
2853
  ```
2843
2854
 
2844
- <sub>`api.ogt` line 7272</sub>
2855
+ <sub>`api.ogt` line 7326</sub>
2845
2856
 
2846
2857
  <a id="type-PhysicsStats"></a>
2847
2858
 
@@ -2872,7 +2883,7 @@ struct PhysicsStats {
2872
2883
  }
2873
2884
  ```
2874
2885
 
2875
- <sub>`api.ogt` line 7281</sub>
2886
+ <sub>`api.ogt` line 7335</sub>
2876
2887
 
2877
2888
  ## Constants
2878
2889
 
@@ -2923,238 +2934,238 @@ struct PhysicsStats {
2923
2934
  const BODY_DYNAMIC u32 0 "RigidBody.kind: moved by the solver; its Transform and Velocity are written back every tick."
2924
2935
  ```
2925
2936
 
2926
- <sub>`api.ogt` line 5769</sub>
2937
+ <sub>`api.ogt` line 5814</sub>
2927
2938
 
2928
2939
  ```ogt
2929
2940
  const BODY_STATIC u32 1 "RigidBody.kind: never moves; collides with dynamic bodies."
2930
2941
  ```
2931
2942
 
2932
- <sub>`api.ogt` line 5770</sub>
2943
+ <sub>`api.ogt` line 5815</sub>
2933
2944
 
2934
2945
  ```ogt
2935
2946
  const BODY_KINEMATIC u32 2 "RigidBody.kind: not moved by the solver. With an og.Velocity the step moves it by it each tick and writes its Transform back (a lift, a conveyor, a turning gear); a Transform game code writes moves it there first (a teleport). Without one it stays where its Transform puts it. Either way it pushes dynamic bodies and carries the controllers standing on it."
2936
2947
  ```
2937
2948
 
2938
- <sub>`api.ogt` line 5771</sub>
2949
+ <sub>`api.ogt` line 5816</sub>
2939
2950
 
2940
2951
  ```ogt
2941
2952
  const LOCK_TRANSLATION_X u32 1 "RigidBody.lock bit: no translation along x."
2942
2953
  ```
2943
2954
 
2944
- <sub>`api.ogt` line 5772</sub>
2955
+ <sub>`api.ogt` line 5817</sub>
2945
2956
 
2946
2957
  ```ogt
2947
2958
  const LOCK_TRANSLATION_Y u32 2 "RigidBody.lock bit: no translation along y."
2948
2959
  ```
2949
2960
 
2950
- <sub>`api.ogt` line 5773</sub>
2961
+ <sub>`api.ogt` line 5818</sub>
2951
2962
 
2952
2963
  ```ogt
2953
2964
  const LOCK_TRANSLATION_Z u32 4 "RigidBody.lock bit: no translation along z."
2954
2965
  ```
2955
2966
 
2956
- <sub>`api.ogt` line 5774</sub>
2967
+ <sub>`api.ogt` line 5819</sub>
2957
2968
 
2958
2969
  ```ogt
2959
2970
  const LOCK_ROTATION_X u32 8 "RigidBody.lock bit: no rotation about x."
2960
2971
  ```
2961
2972
 
2962
- <sub>`api.ogt` line 5775</sub>
2973
+ <sub>`api.ogt` line 5820</sub>
2963
2974
 
2964
2975
  ```ogt
2965
2976
  const LOCK_ROTATION_Y u32 16 "RigidBody.lock bit: no rotation about y."
2966
2977
  ```
2967
2978
 
2968
- <sub>`api.ogt` line 5776</sub>
2979
+ <sub>`api.ogt` line 5821</sub>
2969
2980
 
2970
2981
  ```ogt
2971
2982
  const LOCK_ROTATION_Z u32 32 "RigidBody.lock bit: no rotation about z (the 2D profile's only rotation)."
2972
2983
  ```
2973
2984
 
2974
- <sub>`api.ogt` line 5777</sub>
2985
+ <sub>`api.ogt` line 5822</sub>
2975
2986
 
2976
2987
  ```ogt
2977
2988
  const SHAPE_BOX u32 0 "Collider.shape: a box of `size` (both profiles)."
2978
2989
  ```
2979
2990
 
2980
- <sub>`api.ogt` line 5778</sub>
2991
+ <sub>`api.ogt` line 5823</sub>
2981
2992
 
2982
2993
  ```ogt
2983
2994
  const SHAPE_SPHERE u32 1 "Collider.shape: a sphere of `radius` (a circle in 2D)."
2984
2995
  ```
2985
2996
 
2986
- <sub>`api.ogt` line 5779</sub>
2997
+ <sub>`api.ogt` line 5824</sub>
2987
2998
 
2988
2999
  ```ogt
2989
3000
  const SHAPE_CAPSULE u32 2 "Collider.shape: a capsule along y of `radius`, with `height` between the cap centres (both profiles)."
2990
3001
  ```
2991
3002
 
2992
- <sub>`api.ogt` line 5780</sub>
3003
+ <sub>`api.ogt` line 5825</sub>
2993
3004
 
2994
3005
  ```ogt
2995
3006
  const SHAPE_CYLINDER u32 3 "Collider.shape: a cylinder along y of `radius` and `height` (3D only)."
2996
3007
  ```
2997
3008
 
2998
- <sub>`api.ogt` line 5781</sub>
3009
+ <sub>`api.ogt` line 5826</sub>
2999
3010
 
3000
3011
  ```ogt
3001
3012
  const SHAPE_CONVEX u32 4 "Collider.shape: the convex hull of the vertices of `mesh` (3D), or of their xy (a convex polygon, 2D)."
3002
3013
  ```
3003
3014
 
3004
- <sub>`api.ogt` line 5782</sub>
3015
+ <sub>`api.ogt` line 5827</sub>
3005
3016
 
3006
3017
  ```ogt
3007
3018
  const SHAPE_TRIMESH u32 5 "Collider.shape: the triangles of `mesh` (3D only; for static and kinematic bodies)."
3008
3019
  ```
3009
3020
 
3010
- <sub>`api.ogt` line 5783</sub>
3021
+ <sub>`api.ogt` line 5828</sub>
3011
3022
 
3012
3023
  ```ogt
3013
3024
  const SHAPE_HEIGHTFIELD u32 6 "Collider.shape: the height field registered as `mesh`, centred on the entity (3D only; a terrain: og.terrain.load's TerrainInfo.geometry)."
3014
3025
  ```
3015
3026
 
3016
- <sub>`api.ogt` line 5784</sub>
3027
+ <sub>`api.ogt` line 5829</sub>
3017
3028
 
3018
3029
  ```ogt
3019
3030
  const PROFILE_2D u32 2 "Physics.profile: rapier2d, bodies in the xy plane rotating about z."
3020
3031
  ```
3021
3032
 
3022
- <sub>`api.ogt` line 5785</sub>
3033
+ <sub>`api.ogt` line 5830</sub>
3023
3034
 
3024
3035
  ```ogt
3025
3036
  const PROFILE_3D u32 3 "Physics.profile: rapier3d."
3026
3037
  ```
3027
3038
 
3028
- <sub>`api.ogt` line 5786</sub>
3039
+ <sub>`api.ogt` line 5831</sub>
3029
3040
 
3030
3041
  ```ogt
3031
3042
  const JOINT_FIXED u32 0 "`Joint.kind`: the two bodies move as one."
3032
3043
  ```
3033
3044
 
3034
- <sub>`api.ogt` line 5971</sub>
3045
+ <sub>`api.ogt` line 6025</sub>
3035
3046
 
3036
3047
  ```ogt
3037
3048
  const JOINT_REVOLUTE u32 1 "`Joint.kind`: a hinge about `axis` (2D: about z), with optional limits and a motor."
3038
3049
  ```
3039
3050
 
3040
- <sub>`api.ogt` line 5972</sub>
3051
+ <sub>`api.ogt` line 6026</sub>
3041
3052
 
3042
3053
  ```ogt
3043
3054
  const JOINT_PRISMATIC u32 2 "`Joint.kind`: a slider along `axis`, with optional limits and a motor."
3044
3055
  ```
3045
3056
 
3046
- <sub>`api.ogt` line 5973</sub>
3057
+ <sub>`api.ogt` line 6027</sub>
3047
3058
 
3048
3059
  ```ogt
3049
3060
  const JOINT_SPRING u32 3 "`Joint.kind`: a damped spring pulling the anchors to `restLength` apart."
3050
3061
  ```
3051
3062
 
3052
- <sub>`api.ogt` line 5974</sub>
3063
+ <sub>`api.ogt` line 6028</sub>
3053
3064
 
3054
3065
  ```ogt
3055
3066
  const JOINT_ROPE u32 4 "`Joint.kind`: a rope: the anchors stay at most `length` apart, free inside it."
3056
3067
  ```
3057
3068
 
3058
- <sub>`api.ogt` line 5975</sub>
3069
+ <sub>`api.ogt` line 6029</sub>
3059
3070
 
3060
3071
  ```ogt
3061
3072
  const JOINT_BALL u32 5 "`Joint.kind`: a ball and socket (3D; the 2D profile treats it as a hinge)."
3062
3073
  ```
3063
3074
 
3064
- <sub>`api.ogt` line 5976</sub>
3075
+ <sub>`api.ogt` line 6030</sub>
3065
3076
 
3066
3077
  ```ogt
3067
3078
  const MOTOR_NONE u32 0 "`Joint.motor`: no motor."
3068
3079
  ```
3069
3080
 
3070
- <sub>`api.ogt` line 5977</sub>
3081
+ <sub>`api.ogt` line 6031</sub>
3071
3082
 
3072
3083
  ```ogt
3073
3084
  const MOTOR_VELOCITY u32 1 "`Joint.motor`: drive towards `motorTarget` speed (rad/s or m/s)."
3074
3085
  ```
3075
3086
 
3076
- <sub>`api.ogt` line 5978</sub>
3087
+ <sub>`api.ogt` line 6032</sub>
3077
3088
 
3078
3089
  ```ogt
3079
3090
  const MOTOR_POSITION u32 2 "`Joint.motor`: spring towards `motorTarget` angle or position (a servo)."
3080
3091
  ```
3081
3092
 
3082
- <sub>`api.ogt` line 5979</sub>
3093
+ <sub>`api.ogt` line 6033</sub>
3083
3094
 
3084
3095
  ```ogt
3085
3096
  const CHARACTER_JUMPED u32 1 "`CharacterEvent.kind`: a jump from the ground (or in coyote time)."
3086
3097
  ```
3087
3098
 
3088
- <sub>`api.ogt` line 6333</sub>
3099
+ <sub>`api.ogt` line 6387</sub>
3089
3100
 
3090
3101
  ```ogt
3091
3102
  const CHARACTER_LANDED u32 2 "`CharacterEvent.kind`: touched the ground after being in the air."
3092
3103
  ```
3093
3104
 
3094
- <sub>`api.ogt` line 6334</sub>
3105
+ <sub>`api.ogt` line 6388</sub>
3095
3106
 
3096
3107
  ```ogt
3097
3108
  const CHARACTER_WALL_JUMPED u32 3 "`CharacterEvent.kind`: a jump off a wall."
3098
3109
  ```
3099
3110
 
3100
- <sub>`api.ogt` line 6335</sub>
3111
+ <sub>`api.ogt` line 6389</sub>
3101
3112
 
3102
3113
  ```ogt
3103
3114
  const CHARACTER_AIR_JUMPED u32 4 "`CharacterEvent.kind`: a jump in the air (PlatformerController.airJumps)."
3104
3115
  ```
3105
3116
 
3106
- <sub>`api.ogt` line 6336</sub>
3117
+ <sub>`api.ogt` line 6390</sub>
3107
3118
 
3108
3119
  ```ogt
3109
3120
  const CHARACTER_LEFT_GROUND u32 5 "`CharacterEvent.kind`: left the ground without jumping (ran off an edge)."
3110
3121
  ```
3111
3122
 
3112
- <sub>`api.ogt` line 6337</sub>
3123
+ <sub>`api.ogt` line 6391</sub>
3113
3124
 
3114
3125
  ```ogt
3115
3126
  const CHARACTER_BUMPED u32 6 "`CharacterEvent.kind`: hit a ceiling while rising."
3116
3127
  ```
3117
3128
 
3118
- <sub>`api.ogt` line 6338</sub>
3129
+ <sub>`api.ogt` line 6392</sub>
3119
3130
 
3120
3131
  ```ogt
3121
3132
  const DRIVE_REAR u32 0 "`Vehicle.drive`: the rear wheels drive."
3122
3133
  ```
3123
3134
 
3124
- <sub>`api.ogt` line 6352</sub>
3135
+ <sub>`api.ogt` line 6406</sub>
3125
3136
 
3126
3137
  ```ogt
3127
3138
  const DRIVE_FRONT u32 1 "`Vehicle.drive`: the front wheels drive."
3128
3139
  ```
3129
3140
 
3130
- <sub>`api.ogt` line 6353</sub>
3141
+ <sub>`api.ogt` line 6407</sub>
3131
3142
 
3132
3143
  ```ogt
3133
3144
  const DRIVE_ALL u32 2 "`Vehicle.drive`: every wheel drives."
3134
3145
  ```
3135
3146
 
3136
- <sub>`api.ogt` line 6354</sub>
3147
+ <sub>`api.ogt` line 6408</sub>
3137
3148
 
3138
3149
  ```ogt
3139
3150
  const PIN_TOP u32 1 "`Cloth.pins` bit: the whole top row is pinned."
3140
3151
  ```
3141
3152
 
3142
- <sub>`api.ogt` line 6535</sub>
3153
+ <sub>`api.ogt` line 6589</sub>
3143
3154
 
3144
3155
  ```ogt
3145
3156
  const PIN_TOP_CORNERS u32 2 "`Cloth.pins` bit: the top-left and top-right corners are pinned."
3146
3157
  ```
3147
3158
 
3148
- <sub>`api.ogt` line 6536</sub>
3159
+ <sub>`api.ogt` line 6590</sub>
3149
3160
 
3150
3161
  ```ogt
3151
3162
  const PIN_LEFT u32 4 "`Cloth.pins` bit: the whole left column is pinned (a flag on a pole)."
3152
3163
  ```
3153
3164
 
3154
- <sub>`api.ogt` line 6537</sub>
3165
+ <sub>`api.ogt` line 6591</sub>
3155
3166
 
3156
3167
  ```ogt
3157
3168
  const PIN_TOP_RINGS u32 8 "`Cloth.pins` bit: every fourth point of the top row (curtain rings)."
3158
3169
  ```
3159
3170
 
3160
- <sub>`api.ogt` line 6538</sub>
3171
+ <sub>`api.ogt` line 6592</sub>